1 #pragma once 2 3 #include "libpldm/platform.h" 4 #include "libpldm/pldm.h" 5 6 #include "common/types.hpp" 7 8 #include <sdbusplus/server/object.hpp> 9 #include <xyz/openbmc_project/Association/Definitions/server.hpp> 10 #include <xyz/openbmc_project/Sensor/Threshold/Critical/server.hpp> 11 #include <xyz/openbmc_project/Sensor/Threshold/Warning/server.hpp> 12 #include <xyz/openbmc_project/Sensor/Value/server.hpp> 13 #include <xyz/openbmc_project/State/Decorator/Availability/server.hpp> 14 #include <xyz/openbmc_project/State/Decorator/OperationalStatus/server.hpp> 15 16 #include <string> 17 18 namespace pldm 19 { 20 namespace platform_mc 21 { 22 23 using SensorUnit = sdbusplus::xyz::openbmc_project::Sensor::server::Value::Unit; 24 using ValueIntf = sdbusplus::server::object_t< 25 sdbusplus::xyz::openbmc_project::Sensor::server::Value>; 26 using ThresholdWarningIntf = sdbusplus::server::object_t< 27 sdbusplus::xyz::openbmc_project::Sensor::Threshold::server::Warning>; 28 using ThresholdCriticalIntf = sdbusplus::server::object_t< 29 sdbusplus::xyz::openbmc_project::Sensor::Threshold::server::Critical>; 30 using OperationalStatusIntf = 31 sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::State:: 32 Decorator::server::OperationalStatus>; 33 using AvailabilityIntf = sdbusplus::server::object_t< 34 sdbusplus::xyz::openbmc_project::State::Decorator::server::Availability>; 35 using AssociationDefinitionsInft = sdbusplus::server::object_t< 36 sdbusplus::xyz::openbmc_project::Association::server::Definitions>; 37 38 /** 39 * @brief NumericSensor 40 * 41 * This class handles sensor reading updated by sensor manager and export 42 * status to D-Bus interface. 43 */ 44 class NumericSensor 45 { 46 public: 47 NumericSensor(const pldm_tid_t tid, const bool sensorDisabled, 48 std::shared_ptr<pldm_numeric_sensor_value_pdr> pdr, 49 std::string& sensorName, std::string& associationPath); 50 51 NumericSensor(const pldm_tid_t tid, const bool sensorDisabled, 52 std::shared_ptr<pldm_compact_numeric_sensor_pdr> pdr, 53 std::string& sensorName, std::string& associationPath); 54 55 ~NumericSensor(){}; 56 57 /** @brief ConversionFormula is used to convert raw value to the unit 58 * specified in PDR 59 * 60 * @param[in] value - raw value 61 * @return double - converted value 62 */ 63 double conversionFormula(double value); 64 65 /** @brief UnitModifier is used to apply the unit modifier specified in PDR 66 * 67 * @param[in] value - raw value 68 * @return double - converted value 69 */ 70 double unitModifier(double value); 71 72 /** @brief Terminus ID which the sensor belongs to */ 73 pldm_tid_t tid; 74 75 /** @brief Sensor ID */ 76 uint16_t sensorId; 77 78 /** @brief The time of sensor update interval in usec */ 79 uint64_t updateTime; 80 81 /** @brief sensorName */ 82 std::string sensorName; 83 84 /** @brief sensorNameSpace */ 85 std::string sensorNameSpace; 86 87 /** @brief indicate if sensor is polled in priority */ 88 bool isPriority; 89 90 private: 91 std::unique_ptr<ValueIntf> valueIntf = nullptr; 92 std::unique_ptr<ThresholdWarningIntf> thresholdWarningIntf = nullptr; 93 std::unique_ptr<ThresholdCriticalIntf> thresholdCriticalIntf = nullptr; 94 std::unique_ptr<AvailabilityIntf> availabilityIntf = nullptr; 95 std::unique_ptr<OperationalStatusIntf> operationalStatusIntf = nullptr; 96 std::unique_ptr<AssociationDefinitionsInft> associationDefinitionsIntf = 97 nullptr; 98 99 /** @brief Amount of hysteresis associated with the sensor thresholds */ 100 double hysteresis; 101 102 /** @brief The resolution of sensor in Units */ 103 double resolution; 104 105 /** @brief A constant value that is added in as part of conversion process 106 * of converting a raw sensor reading to Units */ 107 double offset; 108 109 /** @brief A power-of-10 multiplier for baseUnit */ 110 int8_t baseUnitModifier; 111 }; 112 } // namespace platform_mc 113 } // namespace pldm 114