#pragma once #include "common/instance_id.hpp" #include "libpldmresponder/pdr_utils.hpp" #include "requester/handler.hpp" #include #include namespace pldm { using SensorId = uint16_t; using DbusObjMaps = std::map>; using sensorEvent = std::function; using stateSensorCacheMaps = std::map; namespace state_sensor { /** @class DbusToPLDMEvent * @brief This class can listen to the state sensor PDRs and send PLDM event * msg when a D-Bus property changes */ class DbusToPLDMEvent { public: DbusToPLDMEvent() = delete; DbusToPLDMEvent(const DbusToPLDMEvent&) = delete; DbusToPLDMEvent(DbusToPLDMEvent&&) = delete; DbusToPLDMEvent& operator=(const DbusToPLDMEvent&) = delete; DbusToPLDMEvent& operator=(DbusToPLDMEvent&&) = delete; ~DbusToPLDMEvent() = default; /** @brief Constructor * @param[in] mctp_fd - fd of MCTP communications socket * @param[in] mctp_eid - MCTP EID of host firmware * @param[in] requester - reference to Requester object * @param[in] handler - PLDM request handler */ explicit DbusToPLDMEvent( int mctp_fd, uint8_t mctp_eid, pldm::InstanceIdDb& instanceIdDb, pldm::requester::Handler* handler); public: /** @brief Listen all of the state sensor PDRs * @param[in] repo - pdr utils repo object * @param[in] dbusMaps - The map of D-Bus mapping and value */ void listenSensorEvent(const pldm::responder::pdr_utils::Repo& repo, const DbusObjMaps& dbusMaps); /** @brief get the sensor state cache */ inline const stateSensorCacheMaps& getSensorCache() { return sensorCacheMap; } /** @brief function to update the sensor cache * @param[in] sensorId - sensor Id of the corresponding sensor * @param[in] sensorRearm - sensor rearm value with in the sensor * @param[in] previousState - previous state of the sensor */ inline void updateSensorCacheMaps(pldm::pdr::SensorID sensorId, size_t sensorRearm, uint8_t previousState) { // update the sensor cache sensorCacheMap[sensorId][sensorRearm] = previousState; } private: /** @brief Send state sensor event msg when a D-Bus property changes * @param[in] sensorId - sensor id */ void sendStateSensorEvent(SensorId sensorId, const DbusObjMaps& dbusMaps); /** @brief Send all of sensor event * @param[in] eventType - PLDM Event types * @param[in] eventDataVec - std::vector, contains send event data */ void sendEventMsg(uint8_t eventType, const std::vector& eventDataVec); /** @brief fd of MCTP communications socket */ int mctp_fd; /** @brief MCTP EID of host firmware */ uint8_t mctp_eid; /** @brief reference to an Instance ID database object, used to obtain PLDM * instance IDs */ pldm::InstanceIdDb& instanceIdDb; /** @brief D-Bus property changed signal match */ std::vector> stateSensorMatchs; /** @brief PLDM request handler */ pldm::requester::Handler* handler; /** @brief sensor cache */ stateSensorCacheMaps sensorCacheMap; }; } // namespace state_sensor } // namespace pldm