1 #pragma once
2 #include <sdbusplus/bus.hpp>
3 #include "types.hpp"
4 
5 namespace phosphor
6 {
7 namespace fan
8 {
9 namespace 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  */
22 class 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 
49         /**
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 
59     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;
84 
85         /**
86          * The interface of the fan target
87          */
88         const std::string _interface;
89 
90         /**
91          * Target speed for this fan
92          */
93         uint64_t _targetSpeed;
94 };
95 
96 
97 }
98 }
99 }
100