diff --git a/.gitignore b/.gitignore index ff6bc42..11a6830 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,6 @@ compile_commands.json .cache/ pkg/ rel_oot/ -src/ +./src *.pkg.tar.zst *.tar.gz diff --git a/PKGBUILD b/PKGBUILD index a824d30..e2513bc 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,5 +1,5 @@ pkgname=fantasize -pkgver=0.1.6 +pkgver=0.1.7 pkgrel=1 pkgdesc='C++ fan control for Linux' url='https://github.com/Tabascl/fantasize.git' diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 27032d4..f3337e6 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.0) -project(fantasize VERSION 0.1.6) +project(fantasize VERSION 0.1.7) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -23,6 +23,7 @@ add_executable(${PROJECT_NAME} src/Serializer.cxx src/sensor/SensorManager.cxx src/Controller.cxx + src/Settings.cxx src/App.cxx ) diff --git a/app/include/App.h b/app/include/App.h index edc526f..4f8d4e8 100644 --- a/app/include/App.h +++ b/app/include/App.h @@ -26,6 +26,8 @@ private: FanLabeler mFanLabeler; FanGenerator mFanGenerator; + std::shared_ptr mSettings; + std::unique_ptr mController; std::vector> mFans; diff --git a/app/include/Controller.h b/app/include/Controller.h index 54896fb..e408439 100644 --- a/app/include/Controller.h +++ b/app/include/Controller.h @@ -5,11 +5,13 @@ #include #include +#include #include class Controller { public: - Controller(std::vector> curves); + Controller(std::shared_ptr settings, + std::vector> curves); ~Controller(); void StartFanControlLoop(); @@ -18,6 +20,8 @@ public: private: void Loop(); + int mTimeout; + std::vector> mFanCurves; std::atomic mRun; diff --git a/app/include/Serializer.h b/app/include/Serializer.h index e274015..aa1865c 100644 --- a/app/include/Serializer.h +++ b/app/include/Serializer.h @@ -1,12 +1,12 @@ #ifndef SERIALIZER_H_ #define SERIALIZER_H_ -#include "fan/HwmonFan.h" #include #include #include +#include #include #include #include @@ -25,6 +25,7 @@ public: std::vector> DeserializeFanCurves(std::vector> availableSensors, std::vector> availableFans); + std::shared_ptr DeserializeSettings(); private: void WriteJson(json o); diff --git a/app/include/Settings.h b/app/include/Settings.h new file mode 100644 index 0000000..1bd2ae9 --- /dev/null +++ b/app/include/Settings.h @@ -0,0 +1,17 @@ +#ifndef SETTINGS_H_ +#define SETTINGS_H_ + +#define FREQUENCY_DEFAULT 1 + +class Settings { +public: + Settings(int frequency); + + int Frequency() const; + +private: + void LogSettings(); + int mFrequency; +}; + +#endif // SETTINGS_H_ diff --git a/app/src/App.cxx b/app/src/App.cxx index 7f1bab2..a49db69 100644 --- a/app/src/App.cxx +++ b/app/src/App.cxx @@ -10,7 +10,9 @@ void App::Init() { auto fanCurves = mSerializer.DeserializeFanCurves( mSensorManager.TemperatureSensors(), mFans); - mController = make_unique(fanCurves); + mSettings = mSerializer.DeserializeSettings(); + + mController = make_unique(mSettings, fanCurves); } void App::InitialSetup() { diff --git a/app/src/Controller.cxx b/app/src/Controller.cxx index e3adbc8..309916d 100644 --- a/app/src/Controller.cxx +++ b/app/src/Controller.cxx @@ -6,10 +6,10 @@ using namespace std; -#define TIMEOUT 500 - -Controller::Controller(vector> curves) - : mFanCurves(curves), mRun(false) {} +Controller::Controller(shared_ptr settings, + vector> curves) + : mTimeout((1 / settings->Frequency()) * 1000), mFanCurves(curves), + mRun(false) {} Controller::~Controller() { StopFanControlLoop(); } @@ -32,6 +32,6 @@ void Controller::Loop() { c->DoFanControl(); } - this_thread::sleep_for(chrono::milliseconds(TIMEOUT)); + this_thread::sleep_for(chrono::milliseconds(mTimeout)); } } diff --git a/app/src/Serializer.cxx b/app/src/Serializer.cxx index e0d0437..8f0cbf9 100644 --- a/app/src/Serializer.cxx +++ b/app/src/Serializer.cxx @@ -1,5 +1,4 @@ -#include "fan/FanCurve.h" -#include "sensor/Sensor.h" +#include "Settings.h" #include #include #include @@ -124,3 +123,18 @@ vector> Serializer::DeserializeFanCurves( return curves; } + +shared_ptr Serializer::DeserializeSettings() { + int frequency = FREQUENCY_DEFAULT; + + auto data = ReadJson(); + + if (data.contains("settings")) { + auto items = data["settings"]; + + if (items.contains("frequency")) + frequency = items["frequency"]; + } + + return make_shared(frequency); +} diff --git a/app/src/Settings.cxx b/app/src/Settings.cxx new file mode 100644 index 0000000..feffe99 --- /dev/null +++ b/app/src/Settings.cxx @@ -0,0 +1,17 @@ +#include + +#include +#include + +#include + +Settings::Settings(int frequency) : mFrequency(frequency) { LogSettings(); } + +int Settings::Frequency() const { return mFrequency; } + +void Settings::LogSettings() { + BOOST_LOG_FUNCTION(); + + BOOST_LOG_TRIVIAL(info) << "### Settings"; + BOOST_LOG_TRIVIAL(info) << "Frequency: " << mFrequency << "Hz"; +}