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: 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 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 */ 144 void setChassisAssociation(const std::string& path); 145 146 /** @brief Set the value of the DVFS temp sensor 147 * 148 * @param[in] path - The object path 149 * @param[in] value - The value of the Value property 150 */ 151 void setDvfsTemp(const std::string& path, double value); 152 153 /** @brief Says if the DVFS temp sensor is already present 154 * 155 * @param[in] value - The value of the Value property 156 * @return bool - If the sensor is already present 157 */ 158 bool hasDvfsTemp(const std::string& path) const; 159 160 private: 161 std::map<ObjectPath, std::unique_ptr<SensorIntf>> sensors; 162 163 std::map<ObjectPath, std::unique_ptr<OperationalStatusIntf>> 164 operationalStatus; 165 166 std::map<ObjectPath, std::unique_ptr<AssociationIntf>> chassisAssociations; 167 168 std::string chassisPath; 169 170 /** @brief Map of DVFS (Dynamic Voltage and Frequency Slewing) temps 171 * 172 * These do not have associations and do not get set to NaN when the OCC 173 * isn't active. 174 */ 175 std::map<std::string, std::unique_ptr<SensorIntf>> dvfsTemps; 176 }; 177 178 } // namespace dbus 179 } // namespace occ 180 } // namespace open_power 181