blob: 4b79b2a5280a77345bfcabdeae3fbd53f321d478 [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),
Patrick Ventureabf29702018-12-19 14:37:18 -080037 _id(id), _ioAccess(std::move(io)), _devPath(devPath)
Patrick Venture043d3232018-08-31 10:10:53 -070038 {
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 */
Patrick Ventureabf29702018-12-19 14:37:18 -080057 static constexpr auto _type = "fan";
Patrick Venture043d3232018-08-31 10:10:53 -070058 /** @brief hwmon id */
Patrick Ventureabf29702018-12-19 14:37:18 -080059 std::string _id;
Patrick Venture043d3232018-08-31 10:10:53 -070060 /** @brief Hwmon sysfs access. */
Patrick Ventureabf29702018-12-19 14:37:18 -080061 std::unique_ptr<hwmonio::HwmonIOInterface> _ioAccess;
Patrick Venture043d3232018-08-31 10:10:53 -070062 /** @brief Physical device path. */
Patrick Ventureabf29702018-12-19 14:37:18 -080063 std::string _devPath;
Matthew Barth048ac872017-03-09 14:36:08 -060064};
65
66} // namespace hwmon