#pragma once #include #include namespace phosphor::virtual_sensor { class VirtualSensor; class DbusSensor { public: DbusSensor() = delete; virtual ~DbusSensor() = default; /** @brief Constructs DbusSensor * * @param[in] bus - Handle to system dbus * @param[in] path - The Dbus path of sensor */ DbusSensor(sdbusplus::bus_t& bus, const std::string& path, VirtualSensor& virtualSensor); /** @brief Get sensor value from local */ double getSensorValue(); private: /** @brief sdbusplus bus client connection. */ sdbusplus::bus_t& bus; /** @brief complete path for sensor */ std::string path{}; /** @brief service name for the sensor daemon */ std::string servName{}; /** @brief point to the VirtualSensor */ VirtualSensor& virtualSensor; /** @brief signal for sensor value change */ sdbusplus::bus::match_t signalPropChange; /** @brief signal for sensor interface remove */ sdbusplus::bus::match_t signalRemove; /** @brief Match for this dbus sensor service destroy */ std::unique_ptr signalNameOwnerChanged; /** @brief dbus sensor value */ double value = std::numeric_limits::quiet_NaN(); /** @brief Get sensor value property from D-bus interface */ void initSensorValue(); /** @brief Handle for this dbus sensor NameOwnerChanged */ void handleDbusSignalNameOwnerChanged(sdbusplus::message_t& msg); /** @brief Handle for this dbus sensor PropertyChanged */ void handleDbusSignalPropChange(sdbusplus::message_t& msg); /** @brief Handle for this dbus sensor InterfaceRemove */ void handleDbusSignalRemove(sdbusplus::message_t& msg); }; } // namespace phosphor::virtual_sensor