blob: e7f30672dbd52260d239d7b53f20fc826b8378ee [file] [log] [blame]
Matt Spinlere2b25cb2017-04-10 14:33:35 -05001#pragma once
2#include <sdbusplus/bus.hpp>
3#include "types.hpp"
4
5namespace phosphor
6{
7namespace fan
8{
9namespace control
10{
11
12
13/**
14 * @class Fan
15 *
16 * Represents a fan. It has sensors used for setting speeds
17 * on all of the contained rotors. There may or may not be
18 * a 1 to 1 correspondence between rotors and sensors, depending
19 * on how the hardware and hwmon is configured.
20 *
21 */
22class Fan
23{
24 public:
25
26 Fan() = delete;
27 Fan(const Fan&) = delete;
28 Fan(Fan&&) = default;
29 Fan& operator=(const Fan&) = delete;
30 Fan& operator=(Fan&&) = default;
31 ~Fan() = default;
32
33 /**
34 * Creates a fan object with sensors specified by
35 * the fan definition data.
36 *
37 * @param[in] bus - the dbus object
38 * @param[in] def - the fan definition data
39 */
40 Fan(sdbusplus::bus::bus& bus, const FanDefinition& def);
41
42 /**
43 * Sets the speed value on all contained sensors
44 *
45 * @param[in] speed - the value to set
46 */
47 void setSpeed(uint64_t speed);
48
Matthew Barth2b3db612017-10-25 10:56:51 -050049 /**
50 * @brief Get the current fan target speed
51 *
52 * @return - The target speed of the fan
53 */
54 inline auto getTargetSpeed() const
55 {
56 return _targetSpeed;
57 }
58
Matt Spinlere2b25cb2017-04-10 14:33:35 -050059 private:
60
61 /**
62 * Returns the service name to use for interacting
63 * with the fan sensor passed in.
64 *
65 * @param[in] sensor - the fan tach sensor name
66 * @return - the service name
67 */
68 std::string getService(const std::string& sensor);
69
70 /**
71 * The dbus object
72 */
73 sdbusplus::bus::bus& _bus;
74
75 /**
76 * The inventory name of the fan
77 */
78 std::string _name;
79
80 /**
81 * Vector of hwmon sensors for the rotors
82 */
83 std::vector<std::string> _sensors;
Matthew Barth2b3db612017-10-25 10:56:51 -050084
85 /**
Lei YU069e4402018-01-31 16:47:37 +080086 * The interface of the fan target
87 */
88 const std::string _interface;
89
90 /**
Matthew Barth2b3db612017-10-25 10:56:51 -050091 * Target speed for this fan
92 */
93 uint64_t _targetSpeed;
Matt Spinlere2b25cb2017-04-10 14:33:35 -050094};
95
96
97}
98}
99}