blob: 8d88b80bdb45a886c87e9ebb80062c8b9e007475 [file] [log] [blame]
George Liu6f777cd2021-06-10 09:16:28 +08001#pragma once
2
Matt Spinler5901abd2021-09-23 13:50:03 -05003#include <xyz/openbmc_project/Association/Definitions/server.hpp>
George Liu6f777cd2021-06-10 09:16:28 +08004#include <xyz/openbmc_project/Sensor/Value/server.hpp>
5#include <xyz/openbmc_project/State/Decorator/OperationalStatus/server.hpp>
6
7namespace open_power
8{
9namespace occ
10{
11namespace dbus
12{
13
14using ObjectPath = std::string;
15
Chicago Duanbb895cb2021-06-18 19:37:16 +080016using SensorIntf = sdbusplus::server::object::object<
17 sdbusplus::xyz::openbmc_project::Sensor::server::Value>;
18using OperationalStatusIntf =
19 sdbusplus::server::object::object<sdbusplus::xyz::openbmc_project::State::
20 Decorator::server::OperationalStatus>;
George Liu6f777cd2021-06-10 09:16:28 +080021
Matt Spinler5901abd2021-09-23 13:50:03 -050022// Note: Not using object<> so the PropertiesVariant ctor is available.
23using AssociationIntf =
24 sdbusplus::xyz::openbmc_project::Association::server::Definitions;
25
George Liu6f777cd2021-06-10 09:16:28 +080026/** @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 */
30class OccDBusSensors
31{
32 private:
33 OccDBusSensors()
George Liub5ca1012021-09-10 12:53:11 +080034 {}
George Liu6f777cd2021-06-10 09:16:28 +080035
36 public:
37 OccDBusSensors(const OccDBusSensors&) = delete;
38 OccDBusSensors(OccDBusSensors&&) = delete;
39 OccDBusSensors& operator=(const OccDBusSensors&) = delete;
40 OccDBusSensors& operator=(OccDBusSensors&&) = delete;
41 ~OccDBusSensors() = default;
42
43 static OccDBusSensors& getOccDBus()
44 {
45 static OccDBusSensors customDBus;
46 return customDBus;
47 }
48
49 public:
50 /** @brief Set the max value of the Sensor
51 *
52 * @param[in] path - The object path
George Liu6f777cd2021-06-10 09:16:28 +080053 * @param[in] value - The value of the MaxValue property
George Liu0ad9dd82021-06-22 14:46:14 +080054 *
55 * @return true or false
George Liu6f777cd2021-06-10 09:16:28 +080056 */
George Liu0ad9dd82021-06-22 14:46:14 +080057 bool setMaxValue(const std::string& path, double value);
George Liu6f777cd2021-06-10 09:16:28 +080058
59 /** @brief Get the max value of the Sensor
60 *
61 * @param[in] path - The object path
62 *
63 * @return bool - The value of the MaxValue property
64 */
65 double getMaxValue(const std::string& path) const;
66
67 /** @brief Set the min value of the Sensor
68 *
69 * @param[in] path - The object path
George Liu6f777cd2021-06-10 09:16:28 +080070 * @param[in] value - The value of the MinValue property
George Liu0ad9dd82021-06-22 14:46:14 +080071 *
72 * @return true or false
George Liu6f777cd2021-06-10 09:16:28 +080073 */
George Liu0ad9dd82021-06-22 14:46:14 +080074 bool setMinValue(const std::string& path, double value);
George Liu6f777cd2021-06-10 09:16:28 +080075
76 /** @brief Get the min value of the Sensor
77 *
78 * @param[in] path - The object path
79 *
80 * @return bool - The value of the MinValue property
81 */
82 double getMinValue(const std::string& path) const;
83
84 /** @brief Set the value of the Sensor
85 *
86 * @param[in] path - The object path
George Liu6f777cd2021-06-10 09:16:28 +080087 * @param[in] value - The value of the Value property
George Liu0ad9dd82021-06-22 14:46:14 +080088 *
89 * @return true or false
George Liu6f777cd2021-06-10 09:16:28 +080090 */
George Liu0ad9dd82021-06-22 14:46:14 +080091 bool setValue(const std::string& path, double value);
George Liu6f777cd2021-06-10 09:16:28 +080092
93 /** @brief Get the value of the Sensor
94 *
95 * @param[in] path - The object path
96 *
97 * @return bool - The value of the Value property
98 */
99 double getValue(const std::string& path) const;
100
101 /** @brief Set the unit of the Sensor
102 *
103 * @param[in] path - The object path
George Liu6f777cd2021-06-10 09:16:28 +0800104 * @param[in] value - The value of the Unit property
George Liu0ad9dd82021-06-22 14:46:14 +0800105 *
106 * @return true or false
George Liu6f777cd2021-06-10 09:16:28 +0800107 */
George Liu0ad9dd82021-06-22 14:46:14 +0800108 bool setUnit(const std::string& path, const std::string& value);
George Liu6f777cd2021-06-10 09:16:28 +0800109
110 /** @brief Get the unit of the Sensor
111 *
112 * @param[in] path - The object path
113 *
114 * @return std::string - The value of the Unit property
115 */
116 std::string getUnit(const std::string& path) const;
117
118 /** @brief Set the Functional property
119 *
120 * @param[in] path - The object path
George Liu6f777cd2021-06-10 09:16:28 +0800121 * @param[in] value - PLDM operational fault status
George Liu0ad9dd82021-06-22 14:46:14 +0800122 *
123 * @return true or false
George Liu6f777cd2021-06-10 09:16:28 +0800124 */
George Liu0ad9dd82021-06-22 14:46:14 +0800125 bool setOperationalStatus(const std::string& path, bool value);
George Liu6f777cd2021-06-10 09:16:28 +0800126
127 /** @brief Get the Functional property
128 *
129 * @param[in] path - The object path
130 *
131 * @return status - PLDM operational fault status
132 */
133 bool getOperationalStatus(const std::string& path) const;
134
Matt Spinler5901abd2021-09-23 13:50:03 -0500135 /** @brief Returns the Chassis inventory path
136 *
137 * @return path - The chassis D-Bus path
138 */
139 std::string getChassisPath();
140
141 /** @brief Set the association to the chassis
142 *
143 * @param[in] path - The object path
144 */
145 void setChassisAssociation(const std::string& path);
146
Matt Spinlerace67d82021-10-18 13:41:57 -0500147 /** @brief Set the value of the DVFS temp sensor
148 *
149 * @param[in] path - The object path
150 * @param[in] value - The value of the Value property
151 */
152 void setDvfsTemp(const std::string& path, double value);
153
154 /** @brief Says if the DVFS temp sensor is already present
155 *
156 * @param[in] value - The value of the Value property
157 * @return bool - If the sensor is already present
158 */
159 bool hasDvfsTemp(const std::string& path) const;
160
George Liu6f777cd2021-06-10 09:16:28 +0800161 private:
162 std::map<ObjectPath, std::unique_ptr<SensorIntf>> sensors;
163
164 std::map<ObjectPath, std::unique_ptr<OperationalStatusIntf>>
165 operationalStatus;
Matt Spinler5901abd2021-09-23 13:50:03 -0500166
167 std::map<ObjectPath, std::unique_ptr<AssociationIntf>> chassisAssociations;
168
169 std::string chassisPath;
Matt Spinlerace67d82021-10-18 13:41:57 -0500170
171 /** @brief Map of DVFS (Dynamic Voltage and Frequency Slewing) temps
172 *
173 * These do not have associations and do not get set to NaN when the OCC
174 * isn't active.
175 */
176 std::map<std::string, std::unique_ptr<SensorIntf>> dvfsTemps;
George Liu6f777cd2021-06-10 09:16:28 +0800177};
178
179} // namespace dbus
180} // namespace occ
181} // namespace open_power