xref: /openbmc/openpower-occ-control/occ_dbus.hpp (revision 3523cc00c381206c67d44900608c6ba7dafbcc98)
1 #pragma once
2 
3 #include <xyz/openbmc_project/Association/Definitions/server.hpp>
4 #include <xyz/openbmc_project/Sensor/Value/server.hpp>
5 #include <xyz/openbmc_project/State/Decorator/OperationalStatus/server.hpp>
6 
7 namespace open_power
8 {
9 namespace occ
10 {
11 namespace dbus
12 {
13 
14 using ObjectPath = std::string;
15 
16 using SensorIntf = sdbusplus::server::object_t<
17     sdbusplus::xyz::openbmc_project::Sensor::server::Value>;
18 using OperationalStatusIntf =
19     sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::State::
20                                     Decorator::server::OperationalStatus>;
21 
22 // Note: Not using object<> so the PropertiesVariant ctor is available.
23 using AssociationIntf =
24     sdbusplus::xyz::openbmc_project::Association::server::Definitions;
25 
26 /** @class OccDBusSensors
27  *  @brief This is a custom D-Bus object, used to add D-Bus interface and update
28  *         the corresponding properties value.
29  */
30 class OccDBusSensors
31 {
32   private:
OccDBusSensors()33     OccDBusSensors() {}
34 
35   public:
36     OccDBusSensors(const OccDBusSensors&) = delete;
37     OccDBusSensors(OccDBusSensors&&) = delete;
38     OccDBusSensors& operator=(const OccDBusSensors&) = delete;
39     OccDBusSensors& operator=(OccDBusSensors&&) = delete;
40     ~OccDBusSensors() = default;
41 
getOccDBus()42     static OccDBusSensors& getOccDBus()
43     {
44         static OccDBusSensors customDBus;
45         return customDBus;
46     }
47 
48   public:
49     /** @brief Set the max value of the Sensor
50      *
51      *  @param[in] path  - The object path
52      *  @param[in] value - The value of the MaxValue property
53      *
54      *  @return true or false
55      */
56     bool setMaxValue(const std::string& path, double value);
57 
58     /** @brief Get the max value of the Sensor
59      *
60      *  @param[in] path  - The object path
61      *
62      *  @return bool     - The value of the MaxValue property
63      */
64     double getMaxValue(const std::string& path) const;
65 
66     /** @brief Set the min value of the Sensor
67      *
68      *  @param[in] path  - The object path
69      *  @param[in] value - The value of the MinValue property
70      *
71      *  @return true or false
72      */
73     bool setMinValue(const std::string& path, double value);
74 
75     /** @brief Get the min value of the Sensor
76      *
77      *  @param[in] path  - The object path
78      *
79      *  @return bool     - The value of the MinValue property
80      */
81     double getMinValue(const std::string& path) const;
82 
83     /** @brief Set the value of the Sensor
84      *
85      *  @param[in] path  - The object path
86      *  @param[in] value - The value of the Value property
87      *
88      *  @return true or false
89      */
90     bool setValue(const std::string& path, double value);
91 
92     /** @brief Get the value of the Sensor
93      *
94      *  @param[in] path  - The object path
95      *
96      *  @return bool     - The value of the Value property
97      */
98     double getValue(const std::string& path) const;
99 
100     /** @brief Set the unit of the Sensor
101      *
102      *  @param[in] path  - The object path
103      *  @param[in] value - The value of the Unit property
104      *
105      *  @return true or false
106      */
107     bool setUnit(const std::string& path, const std::string& value);
108 
109     /** @brief Get the unit of the Sensor
110      *
111      *  @param[in] path       - The object path
112      *
113      *  @return std::string   - The value of the Unit property
114      */
115     std::string getUnit(const std::string& path) const;
116 
117     /** @brief Set the Functional property
118      *
119      *  @param[in] path   - The object path
120      *  @param[in] value  - PLDM operational fault status
121      *
122      *  @return true or false
123      */
124     bool setOperationalStatus(const std::string& path, bool value);
125 
126     /** @brief Get the Functional property
127      *
128      *  @param[in] path   - The object path
129      *
130      *  @return status    - PLDM operational fault status
131      */
132     bool getOperationalStatus(const std::string& path) const;
133 
134     /** @brief Returns the Chassis inventory path
135      *
136      * @return path       - The chassis D-Bus path
137      */
138     std::string getChassisPath();
139 
140     /** @brief Set the association to the chassis
141      *
142      *  @param[in] path        - The object path
143      *  @param[in] fType       - vector of forward types
144      */
145     void setChassisAssociation(const std::string& path,
146                                const std::vector<std::string>& fTypes);
147 
148     /** @brief Set the value of the DVFS temp sensor
149      *
150      *  @param[in] path  - The object path
151      *  @param[in] value - The value of the Value property
152      */
153     void setDvfsTemp(const std::string& path, double value);
154 
155     /** @brief Says if the DVFS temp sensor is already present
156      *
157      *  @param[in] value - The value of the Value property
158      *  @return bool - If the sensor is already present
159      */
160     bool hasDvfsTemp(const std::string& path) const;
161 
162   private:
163     std::map<ObjectPath, std::unique_ptr<SensorIntf>> sensors;
164 
165     std::map<ObjectPath, std::unique_ptr<OperationalStatusIntf>>
166         operationalStatus;
167 
168     std::map<ObjectPath, std::unique_ptr<AssociationIntf>> chassisAssociations;
169 
170     std::string chassisPath;
171 
172     /** @brief Map of DVFS (Dynamic Voltage and Frequency Slewing) temps
173      *
174      * These do not have associations and do not get set to NaN when the OCC
175      * isn't active.
176      */
177     std::map<std::string, std::unique_ptr<SensorIntf>> dvfsTemps;
178 };
179 
180 } // namespace dbus
181 } // namespace occ
182 } // namespace open_power
183