| Thu Nguyen | 3c5486d | 2024-08-01 08:03:08 +0000 | [diff] [blame] | 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 |