blob: 96d408ef6c55e600824409923529c69fdc8f513a [file] [log] [blame]
Matthew Barth048ac872017-03-09 14:36:08 -06001#pragma once
2
Patrick Venture75e56c62018-04-20 18:10:15 -07003#include "hwmonio.hpp"
Matthew Barth048ac872017-03-09 14:36:08 -06004#include "interface.hpp"
Brad Bishop751043e2017-08-29 11:13:46 -04005#include "sysfs.hpp"
Matthew Barth048ac872017-03-09 14:36:08 -06006
Patrick Venture043d3232018-08-31 10:10:53 -07007#include <memory>
8
Matthew Barth048ac872017-03-09 14:36:08 -06009namespace 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 */
18class FanSpeed : public FanSpeedObject
19{
Patrick Venture043d3232018-08-31 10:10:53 -070020 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::bus& bus, const char* objPath, bool defer,
35 uint64_t target) :
36 FanSpeedObject(bus, objPath, defer),
37 id(id), ioAccess(std::move(io)), devPath(devPath)
38 {
39 FanSpeedObject::target(target);
40 }
Matthew Barth048ac872017-03-09 14:36:08 -060041
Patrick Venture043d3232018-08-31 10:10:53 -070042 /**
43 * @brief Set the value of target
44 *
45 * @return Value of target
46 */
47 uint64_t target(uint64_t value) override;
Matthew Barth048ac872017-03-09 14:36:08 -060048
Patrick Venture043d3232018-08-31 10:10:53 -070049 /**
50 * @brief Writes the pwm_enable sysfs entry if the
51 * env var with the value to write is present
52 */
53 void enable();
Matthew Barth048ac872017-03-09 14:36:08 -060054
Patrick Venture043d3232018-08-31 10:10:53 -070055 private:
56 /** @brief hwmon type */
57 static constexpr auto type = "fan";
58 /** @brief hwmon id */
59 std::string id;
60 /** @brief Hwmon sysfs access. */
61 std::unique_ptr<hwmonio::HwmonIOInterface> ioAccess;
62 /** @brief Physical device path. */
63 std::string devPath;
Matthew Barth048ac872017-03-09 14:36:08 -060064};
65
66} // namespace hwmon