From d6f0d9650c9ece47552484db1a996d129853a1ba Mon Sep 17 00:00:00 2001 From: Simon Date: Fri, 29 Jul 2022 00:22:23 +0200 Subject: [PATCH] Add feature to set PWM values --- app/include/pwm.h | 3 +++ app/src/main.cxx | 6 +++++- app/src/pwm.cxx | 35 ++++++++++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/app/include/pwm.h b/app/include/pwm.h index 62f57a6..7805ff2 100644 --- a/app/include/pwm.h +++ b/app/include/pwm.h @@ -3,6 +3,7 @@ #include #include +#include typedef struct { std::string control; @@ -18,6 +19,8 @@ public: PWM(); void dumpValues(); + std::vector getControls(); + void setEnable(PWM_CONTROL control, PWM_ENABLE value); void setMode(PWM_CONTROL control, PWM_MODE mode); void setValuePwm(PWM_CONTROL control, int pwm); diff --git a/app/src/main.cxx b/app/src/main.cxx index 6e84eea..d2245ed 100644 --- a/app/src/main.cxx +++ b/app/src/main.cxx @@ -47,8 +47,12 @@ int main() { auto temp = nv.get_gpu_temperature(); std::cout << "\nGPU Temp: " << temp << std::endl; - PWM pwm; + class PWM pwm; pwm.dumpValues(); + auto controls = pwm.getControls(); + + pwm.setEnable(controls[1], AUTOMATIC); + return 0; } diff --git a/app/src/pwm.cxx b/app/src/pwm.cxx index 33e9a24..dca58a9 100644 --- a/app/src/pwm.cxx +++ b/app/src/pwm.cxx @@ -1,8 +1,11 @@ +#include #include #include +#include #include #include +#include namespace fs = std::filesystem; using namespace std; @@ -12,6 +15,8 @@ using namespace std; #define PWM_POSTFIX_ENABLE "_enable" #define PWM_POSTFIX_MODE "_mode" +#define PWM_MAX_VALUE 255 + PWM::PWM() { const regex re_ctrl_enable("pwm[0-9]_enable"); const regex re_ctrl_mode("pwm[0-9]_mode"); @@ -22,7 +27,6 @@ PWM::PWM() { } else { for (const fs::directory_entry &hwmon_device : fs::directory_iterator{HWMON_BASE_PATH}) { - cout << hwmon_device << endl; for (const fs::directory_entry &control : fs::directory_iterator{hwmon_device}) { @@ -54,3 +58,32 @@ void PWM::dumpValues() { << control.second.mode << endl; } } + +std::vector PWM::getControls() { + std::vector vec; + + for (auto elem : mPwmControls) { + vec.push_back(elem.second); + } + + return vec; +} + +void PWM::setEnable(PWM_CONTROL control, PWM_ENABLE value) { + cout << control.control << endl; + std::ofstream ostrm(control.enable, std::ios::trunc); + ostrm << value; + ostrm.close(); +} + +void PWM::setValuePwm(PWM_CONTROL control, int pwm) { + if (pwm < 0 || pwm > 255) + return; + + std::ofstream ostrm(control.control, std::ios::trunc); + ostrm << pwm; + ostrm.close(); +} +void PWM::setValuePercent(PWM_CONTROL control, int percentage) { + setValuePwm(control, PWM_MAX_VALUE * percentage / 100); +}