1 #pragma once 2 3 #include "hwmonio.hpp" 4 #include "interface.hpp" 5 #include "sysfs.hpp" 6 7 #include <memory> 8 9 namespace hwmon 10 { 11 12 /** 13 * @class FanSpeed 14 * @brief Target fan speed control implementation 15 * @details Derived FanSpeedObject type that writes the target value to sysfs 16 * which in turn sets the fan speed to that target value 17 */ 18 class FanSpeed : public FanSpeedObject 19 { 20 public: 21 /** 22 * @brief Constructs FanSpeed Object 23 * 24 * @param[in] io - HwmonIO(instance path) (ex /sys/class/hwmon/hwmon1) 25 * @param[in] devPath - The /sys/devices sysfs path 26 * @param[in] id - The hwmon id 27 * @param[in] bus - Dbus bus object 28 * @param[in] objPath - Dbus object path 29 * @param[in] defer - Dbus object registration defer 30 * @param[in] target - initial target speed value 31 */ 32 FanSpeed(std::unique_ptr<hwmonio::HwmonIOInterface> io, 33 const std::string& devPath, const std::string& id, 34 sdbusplus::bus_t& bus, const char* objPath, bool defer, 35 uint64_t target) : 36 FanSpeedObject(bus, objPath, 37 defer ? FanSpeedObject::action::emit_no_signals 38 : FanSpeedObject::action::emit_object_added), 39 _id(id), _ioAccess(std::move(io)), _devPath(devPath) 40 { 41 FanSpeedObject::target(target); 42 } 43 44 /** 45 * @brief Set the value of target 46 * 47 * @return Value of target 48 */ 49 uint64_t target(uint64_t value) override; 50 51 /** 52 * @brief Writes the pwm_enable sysfs entry if the 53 * env var with the value to write is present 54 */ 55 void enable(); 56 57 private: 58 /** @brief hwmon type */ 59 static constexpr auto _type = "fan"; 60 /** @brief hwmon id */ 61 std::string _id; 62 /** @brief Hwmon sysfs access. */ 63 std::unique_ptr<hwmonio::HwmonIOInterface> _ioAccess; 64 /** @brief Physical device path. */ 65 std::string _devPath; 66 }; 67 68 } // namespace hwmon 69