From 20cb22de01d469ad9bf7214a94b1b9dabd3edc89 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 7 Sep 2022 23:11:57 +0200 Subject: [PATCH] Implement HwmonTemperatureSensor, add serialization --- app/CMakeLists.txt | 4 +++- app/include/HwmonTemperatureSensor.h | 7 ++++++ app/include/TemperatureSensor.h | 3 +++ app/src/HwmonTemperatureSensor.cxx | 33 ++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 app/src/HwmonTemperatureSensor.cxx diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index efdd880..3eedf93 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -5,15 +5,17 @@ project(fantasize) set(CMAKE_BUILD_TYPE Debug) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +find_package(Boost 1.79.0 COMPONENTS json) add_executable(app src/main.cxx src/Nvidia.cxx src/Pwm.cxx src/SensorsWrapper.cxx + src/HwmonTemperatureSensor.cxx ) set_property(TARGET app PROPERTY CXX_STANDARD 17) target_include_directories(app PUBLIC include /opt/cuda) -target_link_libraries(app PUBLIC sensors nvidia-ml) +target_link_libraries(app PUBLIC sensors nvidia-ml ${Boost_LIBRARIES}) diff --git a/app/include/HwmonTemperatureSensor.h b/app/include/HwmonTemperatureSensor.h index 782a1f3..ddea75f 100644 --- a/app/include/HwmonTemperatureSensor.h +++ b/app/include/HwmonTemperatureSensor.h @@ -1,11 +1,18 @@ #ifndef HWMONTEMPERATURESENSOR_H_ #define HWMONTEMPERATURESENSOR_H_ +#include + #include class HwmonTemperatureSensor : public TemperatureSensor { public: int getTemperature() override; + std::string toJson() override; + +private: + sensors_chip_name mChipName; + sensors_subfeature mSubFeature; }; #endif // HWMONTEMPERATURESENSOR_H_ diff --git a/app/include/TemperatureSensor.h b/app/include/TemperatureSensor.h index b7d673b..edc81ce 100644 --- a/app/include/TemperatureSensor.h +++ b/app/include/TemperatureSensor.h @@ -1,9 +1,12 @@ #ifndef TEMPERATURESENSOR_H_ #define TEMPERATURESENSOR_H_ +#include + class TemperatureSensor { public: virtual int getTemperature() = 0; + virtual std::string toJson() = 0; }; #endif // TEMPERATURESENSOR_H_ diff --git a/app/src/HwmonTemperatureSensor.cxx b/app/src/HwmonTemperatureSensor.cxx new file mode 100644 index 0000000..01b6657 --- /dev/null +++ b/app/src/HwmonTemperatureSensor.cxx @@ -0,0 +1,33 @@ +#include +#include +#include + +#include + +using namespace boost::json; + +#define SENSOR_TYPE_STRING "HWMON" + +int HwmonTemperatureSensor::getTemperature() { + double *value; + sensors_get_value(&mChipName, mSubFeature.number, value); + + return static_cast(*value); +} + +void tag_invoke(value_from_tag, value &jv, sensors_bus_id &c) { + jv = {{"type", c.type}, {"nr", c.nr}}; +} + +void tag_invoke(value_from_tag, value &jv, sensors_chip_name &c) { + jv = {{"prefix", c.prefix}, + {"sensors_bus_id", value_from(c.bus)}, + {"addr", c.addr}, + {"path", c.path}}; +} + +std::string HwmonTemperatureSensor::toJson() { + value jv = {{SENSOR_TYPE_STRING, {"ChipName", value_from(mChipName)}}}; + + return serialize(jv); +}