xref: /openbmc/phosphor-hwmon/sensor.hpp (revision ac47309f)
1 #pragma once
2 
3 #include <unordered_set>
4 #include "types.hpp"
5 #include "sensorset.hpp"
6 #include "hwmonio.hpp"
7 
8 namespace sensor
9 {
10 
11 struct valueAdjust
12 {
13     double gain = 1.0;
14     int offset = 0;
15     std::unordered_set<int> rmRCs;
16 };
17 
18 /** @class Sensor
19  *  @brief Sensor object based on a SensorSet container's key type
20  *  @details Sensor object to create and modify an associated device's sensor
21  *  attributes based on the key type of each sensor in the set provided by the
22  *  device.
23  */
24 class Sensor
25 {
26     public:
27         Sensor() = delete;
28         Sensor(const Sensor&) = delete;
29         Sensor(Sensor&&) = default;
30         Sensor& operator=(const Sensor&) = delete;
31         Sensor& operator=(Sensor&&) = default;
32         ~Sensor() = default;
33 
34         /**
35          * @brief Constructs Sensor object
36          *
37          * @param[in] sensor - A pair of sensor indentifiers
38          * @param[in] ioAccess - Hwmon sysfs access
39          * @param[in] devPath - Device sysfs path
40          */
41         explicit Sensor(const SensorSet::key_type& sensor,
42                         const hwmonio::HwmonIO& ioAccess,
43                         const std::string& devPath);
44 
45         /**
46          * @brief Adds any sensor removal return codes for the sensor
47          * @details Add all return codes defined within a device's config file
48          * for the entire device or for the specific sensor.
49          *
50          * @param[in] rcList - List of return codes found for the sensor
51          */
52         void addRemoveRCs(const std::string& rcList);
53 
54         /**
55          * @brief Get the adjustments struct for the sensor
56          *
57          * @return - Sensor adjustment struct
58          */
59         inline const valueAdjust& getAdjusts()
60         {
61             return sensorAdjusts;
62         }
63 
64         /**
65          * @brief Adjusts a sensor value
66          * @details Adjusts the value given by any gain and/or offset defined
67          * for this sensor object and returns that adjusted value.
68          *
69          * @param[in] value - Value to be adjusted
70          *
71          * @return - Adjusted sensor value
72          */
73         int64_t adjustValue(int64_t value);
74 
75         /**
76          * @brief Add value interface and value property for sensor
77          * @details When a sensor has an associated input file, the Sensor.Value
78          * interface is added along with setting the Value property to the
79          * corresponding value found in the input file.
80          *
81          * @param[in] retryIO - Hwmon sysfs file retry constraints
82          *                      (number of and delay between)
83          * @param[in] info - Sensor object information
84          *
85          * @return - Shared pointer to the value object
86          */
87         std::shared_ptr<ValueObject> addValue(
88                 const RetryIO& retryIO,
89                 ObjectInfo& info);
90 
91         /**
92          * @brief Add status interface and functional property for sensor
93          * @details When a sensor has an associated fault file, the
94          * OperationalStatus interface is added along with setting the
95          * Functional property to the corresponding value found in the
96          * fault file.
97          *
98          * @param[in] info - Sensor object information
99          *
100          * @return - Shared pointer to the status object
101          */
102         std::shared_ptr<StatusObject> addStatus(
103                 ObjectInfo& info);
104 
105     private:
106         /** @brief Sensor object's identifiers */
107         SensorSet::key_type sensor;
108 
109         /** @brief Hwmon sysfs access. */
110         const hwmonio::HwmonIO& ioAccess;
111 
112         /** @brief Physical device sysfs path. */
113         const std::string& devPath;
114 
115         /** @brief Structure for storing sensor adjustments */
116         valueAdjust sensorAdjusts;
117 };
118 
119 } // namespace sensor
120