1*f2e94221STao Lin #pragma once
27452a867SVijay Khemka 
37452a867SVijay Khemka #include <sdbusplus/bus.hpp>
4b57d7370SPatrick Williams #include <sdbusplus/bus/match.hpp>
57452a867SVijay Khemka 
6*f2e94221STao Lin namespace phosphor::virtual_sensor
7*f2e94221STao Lin {
87452a867SVijay Khemka 
9*f2e94221STao Lin class VirtualSensor;
1051f898e2SVijay Khemka 
117452a867SVijay Khemka class DbusSensor
127452a867SVijay Khemka {
137452a867SVijay Khemka   public:
147452a867SVijay Khemka     DbusSensor() = delete;
157452a867SVijay Khemka     virtual ~DbusSensor() = default;
167452a867SVijay Khemka 
177452a867SVijay Khemka     /** @brief Constructs DbusSensor
187452a867SVijay Khemka      *
197452a867SVijay Khemka      * @param[in] bus     - Handle to system dbus
207452a867SVijay Khemka      * @param[in] path    - The Dbus path of sensor
217452a867SVijay Khemka      */
22*f2e94221STao Lin     DbusSensor(sdbusplus::bus_t& bus, const std::string& path,
23*f2e94221STao Lin                VirtualSensor& virtualSensor);
247452a867SVijay Khemka 
25*f2e94221STao Lin     /** @brief Get sensor value from local */
26*f2e94221STao Lin     double getSensorValue();
277452a867SVijay Khemka 
287452a867SVijay Khemka   private:
297452a867SVijay Khemka     /** @brief sdbusplus bus client connection. */
308e11cccbSPatrick Williams     sdbusplus::bus_t& bus;
31*f2e94221STao Lin 
327452a867SVijay Khemka     /** @brief complete path for sensor */
331204b433SGeorge Liu     std::string path{};
34*f2e94221STao Lin 
357452a867SVijay Khemka     /** @brief service name for the sensor daemon */
361204b433SGeorge Liu     std::string servName{};
37*f2e94221STao Lin 
38*f2e94221STao Lin     /** @brief point to the VirtualSensor */
39*f2e94221STao Lin     VirtualSensor& virtualSensor;
40*f2e94221STao Lin 
4151f898e2SVijay Khemka     /** @brief signal for sensor value change */
42*f2e94221STao Lin     sdbusplus::bus::match_t signalPropChange;
43*f2e94221STao Lin 
44*f2e94221STao Lin     /** @brief signal for sensor interface remove */
45*f2e94221STao Lin     sdbusplus::bus::match_t signalRemove;
46*f2e94221STao Lin 
47*f2e94221STao Lin     /** @brief Match for this dbus sensor service destroy  */
48*f2e94221STao Lin     std::unique_ptr<sdbusplus::bus::match_t> signalNameOwnerChanged;
49*f2e94221STao Lin 
50*f2e94221STao Lin     /** @brief dbus sensor value */
51*f2e94221STao Lin     double value = std::numeric_limits<double>::quiet_NaN();
52*f2e94221STao Lin 
53*f2e94221STao Lin     /** @brief Get sensor value property from D-bus interface */
54*f2e94221STao Lin     void initSensorValue();
55*f2e94221STao Lin 
56*f2e94221STao Lin     /** @brief Handle for this dbus sensor NameOwnerChanged */
57*f2e94221STao Lin     void handleDbusSignalNameOwnerChanged(sdbusplus::message_t& msg);
58*f2e94221STao Lin 
59*f2e94221STao Lin     /** @brief Handle for this dbus sensor PropertyChanged */
60*f2e94221STao Lin     void handleDbusSignalPropChange(sdbusplus::message_t& msg);
61*f2e94221STao Lin 
62*f2e94221STao Lin     /** @brief Handle for this dbus sensor InterfaceRemove */
63*f2e94221STao Lin     void handleDbusSignalRemove(sdbusplus::message_t& msg);
647452a867SVijay Khemka };
65*f2e94221STao Lin 
66*f2e94221STao Lin } // namespace phosphor::virtual_sensor
67