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