17452a867SVijay Khemka #include "dbusUtils.hpp" 27452a867SVijay Khemka 37452a867SVijay Khemka #include <sdbusplus/bus.hpp> 4b57d7370SPatrick Williams #include <sdbusplus/bus/match.hpp> 57452a867SVijay Khemka 67452a867SVijay Khemka const char* sensorIntf = "xyz.openbmc_project.Sensor.Value"; 77452a867SVijay Khemka 851f898e2SVijay Khemka int handleDbusSignal(sd_bus_message* msg, void* usrData, sd_bus_error* err); 951f898e2SVijay Khemka 107452a867SVijay Khemka class DbusSensor 117452a867SVijay Khemka { 127452a867SVijay Khemka public: 137452a867SVijay Khemka DbusSensor() = delete; 147452a867SVijay Khemka virtual ~DbusSensor() = default; 157452a867SVijay Khemka 167452a867SVijay Khemka /** @brief Constructs DbusSensor 177452a867SVijay Khemka * 187452a867SVijay Khemka * @param[in] bus - Handle to system dbus 197452a867SVijay Khemka * @param[in] path - The Dbus path of sensor 207452a867SVijay Khemka */ 2151f898e2SVijay Khemka DbusSensor(sdbusplus::bus::bus& bus, const std::string& path, void* ctx) : 2251f898e2SVijay Khemka bus(bus), path(path), 2351f898e2SVijay Khemka signal( 2451f898e2SVijay Khemka bus, 2551f898e2SVijay Khemka sdbusplus::bus::match::rules::propertiesChanged(path, sensorIntf), 2651f898e2SVijay Khemka handleDbusSignal, ctx) 27*1204b433SGeorge Liu {} 287452a867SVijay Khemka 297452a867SVijay Khemka /** @brief Get sensor value property from D-bus interface */ 307452a867SVijay Khemka double getSensorValue() 317452a867SVijay Khemka { 32f8db7225SMatt Spinler if (servName.empty()) 33f8db7225SMatt Spinler { 34f8db7225SMatt Spinler servName = getService(bus, path, sensorIntf); 35f8db7225SMatt Spinler if (servName.empty()) 36f8db7225SMatt Spinler { 37f8db7225SMatt Spinler return std::numeric_limits<double>::quiet_NaN(); 38f8db7225SMatt Spinler } 39f8db7225SMatt Spinler } 40f8db7225SMatt Spinler 41a55a907eSThu Ba Nguyen try 42a55a907eSThu Ba Nguyen { 437452a867SVijay Khemka return getDbusProperty<double>(bus, servName, path, sensorIntf, 447452a867SVijay Khemka "Value"); 457452a867SVijay Khemka } 46a55a907eSThu Ba Nguyen catch (const std::exception& e) 47a55a907eSThu Ba Nguyen { 48a55a907eSThu Ba Nguyen return std::numeric_limits<double>::quiet_NaN(); 49a55a907eSThu Ba Nguyen } 50a55a907eSThu Ba Nguyen } 517452a867SVijay Khemka 527452a867SVijay Khemka private: 537452a867SVijay Khemka /** @brief sdbusplus bus client connection. */ 547452a867SVijay Khemka sdbusplus::bus::bus& bus; 557452a867SVijay Khemka /** @brief complete path for sensor */ 56*1204b433SGeorge Liu std::string path{}; 577452a867SVijay Khemka /** @brief service name for the sensor daemon */ 58*1204b433SGeorge Liu std::string servName{}; 5951f898e2SVijay Khemka /** @brief signal for sensor value change */ 60b57d7370SPatrick Williams sdbusplus::bus::match_t signal; 617452a867SVijay Khemka }; 62