blob: 7fc303abc4a3e0336653c995aa74521bee6d2ca5 [file] [log] [blame]
Matthew Barth048ac872017-03-09 14:36:08 -06001#pragma once
2
3#include "interface.hpp"
Brad Bishop751043e2017-08-29 11:13:46 -04004#include "sysfs.hpp"
Matthew Barth048ac872017-03-09 14:36:08 -06005
6namespace hwmon
7{
8
9/**
10 * @class FanSpeed
11 * @brief Target fan speed control implementation
12 * @details Derived FanSpeedObject type that writes the target value to sysfs
13 * which in turn sets the fan speed to that target value
14 */
15class FanSpeed : public FanSpeedObject
16{
17 public:
18
19 /**
20 * @brief Constructs FanSpeed Object
21 *
Brad Bishop751043e2017-08-29 11:13:46 -040022 * @param[in] instancePath - The hwmon instance path
23 * (ex. /sys/class/hwmon/hwmon1)
24 * @param[in] devPath - The /sys/devices sysfs path
Matthew Barth048ac872017-03-09 14:36:08 -060025 * @param[in] id - The hwmon id
26 * @param[in] bus - Dbus bus object
27 * @param[in] objPath - Dbus object path
28 * @param[in] defer - Dbus object registration defer
Matt Spinlerb4e65572017-10-17 10:09:18 -050029 * @param[in] target - initial target speed value
Matthew Barth048ac872017-03-09 14:36:08 -060030 */
Brad Bishop751043e2017-08-29 11:13:46 -040031 FanSpeed(const std::string& instancePath,
32 const std::string& devPath,
Matthew Barth048ac872017-03-09 14:36:08 -060033 const std::string& id,
34 sdbusplus::bus::bus& bus,
35 const char* objPath,
Matt Spinlerb4e65572017-10-17 10:09:18 -050036 bool defer,
37 uint64_t target) : FanSpeedObject(bus, objPath, defer),
Brad Bishop751043e2017-08-29 11:13:46 -040038 id(id),
39 ioAccess(instancePath),
40 devPath(devPath)
Matthew Barth048ac872017-03-09 14:36:08 -060041 {
Matt Spinlerb4e65572017-10-17 10:09:18 -050042 FanSpeedObject::target(target);
Matthew Barth048ac872017-03-09 14:36:08 -060043 }
44
45 /**
46 * @brief Set the value of target
47 *
48 * @return Value of target
49 */
50 uint64_t target(uint64_t value) override;
51
Matt Spinler0a8de642017-05-11 10:59:39 -050052 /**
Matt Spinlerb778df02017-10-16 13:15:18 -050053 * @brief Writes the pwm_enable sysfs entry if the
54 * env var with the value to write is present
Matt Spinler0a8de642017-05-11 10:59:39 -050055 */
56 void enable();
57
Matthew Barth048ac872017-03-09 14:36:08 -060058 private:
Matthew Barth048ac872017-03-09 14:36:08 -060059 /** @brief hwmon type */
60 static constexpr auto type = "fan";
61 /** @brief hwmon id */
62 std::string id;
Brad Bishop751043e2017-08-29 11:13:46 -040063 /** @brief Hwmon sysfs access. */
64 sysfs::hwmonio::HwmonIO ioAccess;
65 /** @brief Physical device path. */
66 std::string devPath;
67
Matthew Barth048ac872017-03-09 14:36:08 -060068};
69
70} // namespace hwmon