xref: /openbmc/phosphor-virtual-sensor/src/dbusSensor.hpp (revision 6272a39308bf6c1945edabf54891157c8079165a)
1*6272a393SAlexander Hansen #pragma once
2*6272a393SAlexander Hansen 
3*6272a393SAlexander Hansen #include <sdbusplus/bus.hpp>
4*6272a393SAlexander Hansen #include <sdbusplus/bus/match.hpp>
5*6272a393SAlexander Hansen 
6*6272a393SAlexander Hansen namespace phosphor::virtual_sensor
7*6272a393SAlexander Hansen {
8*6272a393SAlexander Hansen 
9*6272a393SAlexander Hansen class VirtualSensor;
10*6272a393SAlexander Hansen 
11*6272a393SAlexander Hansen class DbusSensor
12*6272a393SAlexander Hansen {
13*6272a393SAlexander Hansen   public:
14*6272a393SAlexander Hansen     DbusSensor() = delete;
15*6272a393SAlexander Hansen     virtual ~DbusSensor() = default;
16*6272a393SAlexander Hansen 
17*6272a393SAlexander Hansen     /** @brief Constructs DbusSensor
18*6272a393SAlexander Hansen      *
19*6272a393SAlexander Hansen      * @param[in] bus     - Handle to system dbus
20*6272a393SAlexander Hansen      * @param[in] path    - The Dbus path of sensor
21*6272a393SAlexander Hansen      */
22*6272a393SAlexander Hansen     DbusSensor(sdbusplus::bus_t& bus, const std::string& path,
23*6272a393SAlexander Hansen                VirtualSensor& virtualSensor);
24*6272a393SAlexander Hansen 
25*6272a393SAlexander Hansen     /** @brief Get sensor value from local */
26*6272a393SAlexander Hansen     double getSensorValue();
27*6272a393SAlexander Hansen 
28*6272a393SAlexander Hansen   private:
29*6272a393SAlexander Hansen     /** @brief sdbusplus bus client connection. */
30*6272a393SAlexander Hansen     sdbusplus::bus_t& bus;
31*6272a393SAlexander Hansen 
32*6272a393SAlexander Hansen     /** @brief complete path for sensor */
33*6272a393SAlexander Hansen     std::string path{};
34*6272a393SAlexander Hansen 
35*6272a393SAlexander Hansen     /** @brief service name for the sensor daemon */
36*6272a393SAlexander Hansen     std::string servName{};
37*6272a393SAlexander Hansen 
38*6272a393SAlexander Hansen     /** @brief point to the VirtualSensor */
39*6272a393SAlexander Hansen     VirtualSensor& virtualSensor;
40*6272a393SAlexander Hansen 
41*6272a393SAlexander Hansen     /** @brief signal for sensor value change */
42*6272a393SAlexander Hansen     sdbusplus::bus::match_t signalPropChange;
43*6272a393SAlexander Hansen 
44*6272a393SAlexander Hansen     /** @brief signal for sensor interface remove */
45*6272a393SAlexander Hansen     sdbusplus::bus::match_t signalRemove;
46*6272a393SAlexander Hansen 
47*6272a393SAlexander Hansen     /** @brief Match for this dbus sensor service destroy  */
48*6272a393SAlexander Hansen     std::unique_ptr<sdbusplus::bus::match_t> signalNameOwnerChanged;
49*6272a393SAlexander Hansen 
50*6272a393SAlexander Hansen     /** @brief dbus sensor value */
51*6272a393SAlexander Hansen     double value = std::numeric_limits<double>::quiet_NaN();
52*6272a393SAlexander Hansen 
53*6272a393SAlexander Hansen     /** @brief Get sensor value property from D-bus interface */
54*6272a393SAlexander Hansen     void initSensorValue();
55*6272a393SAlexander Hansen 
56*6272a393SAlexander Hansen     /** @brief Handle for this dbus sensor NameOwnerChanged */
57*6272a393SAlexander Hansen     void handleDbusSignalNameOwnerChanged(sdbusplus::message_t& msg);
58*6272a393SAlexander Hansen 
59*6272a393SAlexander Hansen     /** @brief Handle for this dbus sensor PropertyChanged */
60*6272a393SAlexander Hansen     void handleDbusSignalPropChange(sdbusplus::message_t& msg);
61*6272a393SAlexander Hansen 
62*6272a393SAlexander Hansen     /** @brief Handle for this dbus sensor InterfaceRemove */
63*6272a393SAlexander Hansen     void handleDbusSignalRemove(sdbusplus::message_t& msg);
64*6272a393SAlexander Hansen };
65*6272a393SAlexander Hansen 
66*6272a393SAlexander Hansen } // namespace phosphor::virtual_sensor
67