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