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 * The dbus object 63 */ 64 sdbusplus::bus::bus& _bus; 65 66 /** 67 * The inventory name of the fan 68 */ 69 std::string _name; 70 71 /** 72 * Map of hwmon target sensors to the service providing them 73 */ 74 std::map<std::string, std::string> _sensors; 75 76 /** 77 * The interface of the fan target 78 */ 79 const std::string _interface; 80 81 /** 82 * Target speed for this fan 83 */ 84 uint64_t _targetSpeed; 85 }; 86 87 88 } 89 } 90 } 91