1 #include "types.hpp"
2 #include "host-ipmid/ipmid-api.h"
3 
4 namespace ipmi
5 {
6 namespace sensor
7 {
8 
9 using Assertion = uint16_t;
10 using Deassertion = uint16_t;
11 using AssertionSet = std::pair<Assertion, Deassertion>;
12 
13 using Service = std::string;
14 using Path = std::string;
15 using Interface = std::string;
16 
17 using ServicePath = std::pair<Path, Service>;
18 
19 using Interfaces = std::vector<Interface>;
20 
21 using MapperResponseType = std::map<Path, std::map<Service, Interfaces>>;
22 
23 /** @brief get the D-Bus service and service path
24  *  @param[in] bus - The Dbus bus object
25  *  @param[in] interface - interface to the service
26  *  @param[in] path - interested path in the list of objects
27  *  @return pair of service path and service
28  */
29 ServicePath getServiceAndPath(sdbusplus::bus::bus& bus,
30                               const std::string& interface,
31                               const std::string& path = std::string());
32 
33 /** @brief Make assertion set from input data
34  *  @param[in] cmdData - Input sensor data
35  *  @return pair of assertion and deassertion set
36  */
37 AssertionSet getAssertionSet(const SetSensorReadingReq& cmdData);
38 
39 /** @brief send the message to DBus
40  *  @param[in] msg - message to send
41  *  @return failure status in IPMI error code
42  */
43 ipmi_ret_t updateToDbus(IpmiUpdateData& msg);
44 
45 namespace set
46 {
47 
48 /** @brief Make a DBus message for a Dbus call
49  *  @param[in] updateInterface - Interface name
50  *  @param[in] sensorPath - Path of the sensor
51  *  @param[in] command - command to be executed
52  *  @param[in] sensorInterface - DBus interface of sensor
53  *  @return a dbus message
54  */
55 IpmiUpdateData makeDbusMsg(const std::string& updateInterface,
56                            const std::string& sensorPath,
57                            const std::string& command,
58                            const std::string& sensorInterface);
59 
60 /** @brief Create a message for IPMI assertion
61  *  @param[in] msg - Message to add the values
62  *  @param[in] interface - sensor interface
63  *  @param[in] sensorPath - Path of the sensor
64  *  @param[in] cmdData - input sensor data
65  *  @return a IPMI error code
66  */
67 ipmi_ret_t appendAssertion(IpmiUpdateData& msg,
68                            const DbusInterfaceMap& interfaceMap,
69                            const std::string& sensorPath,
70                            const SetSensorReadingReq& cmdData);
71 
72 /** @brief Create a message for discrete signal
73  *  @param[in] msg - Message to add the values
74  *  @param[in] interface - sensor interface
75  *  @param[in] data - input discrete sensor data
76  *  @return a IPMI error code
77  */
78 ipmi_ret_t appendDiscreteSignalData(IpmiUpdateData& msg,
79                                     const DbusInterfaceMap& interfaceMap,
80                                     uint8_t data);
81 
82 /** @brief Create a message for reading data
83  *  @param[in] msg - Message to add the values
84  *  @param[in] interface - sensor interface
85  *  @param[in] data - input sensor data
86  *  @return a IPMI error code
87  */
88 ipmi_ret_t appendReadingData(IpmiUpdateData& msg,
89                              const DbusInterfaceMap& interfaceMap,
90                              const Value& data);
91 
92 }//namespace set
93 
94 namespace notify
95 {
96 
97 /** @brief Make a DBus message for a Dbus call
98  *  @param[in] updateInterface - Interface name
99  *  @param[in] sensorPath - Path of the sensor
100  *  @param[in] command - command to be executed
101  *  @param[in] sensorInterface - DBus interface of sensor
102  *  @return a dbus message
103  */
104 IpmiUpdateData makeDbusMsg(const std::string& updateInterface,
105                            const std::string& sensorPath,
106                            const std::string& command,
107                            const std::string& sensorInterface);
108 
109 /** @brief Create a message for IPMI discrete signal
110  *  @param[in] msg - Message to add the values
111  *  @param[in] interfaceMap - sensor interface
112  *  @param[in] sensorPath - Path of the sensor
113  *  @param[in] cmdData - input sensor data
114  *  @return a IPMI error code
115  */
116 inline ipmi_ret_t appendDiscreteSignalData(IpmiUpdateData& msg,
117         const DbusInterfaceMap& interfaceMap,
118         uint8_t data)
119 {
120     return IPMI_CC_OK;
121 }
122 
123 /** @brief Create a message for reading data
124  *  @param[in] msg - Message to add the values
125  *  @param[in] interfaceMap - sensor interface
126  *  @param[in] data - input sensor data
127  *  @return a IPMI error code
128  */
129 inline ipmi_ret_t appendReadingData(IpmiUpdateData& msg,
130                                     const DbusInterfaceMap& interfaceMap,
131                                     const Value &data)
132 {
133     return IPMI_CC_OK;
134 }
135 
136 /** @brief Create a message for IPMI asserting
137  *  @param[in] msg - Message to add the values
138  *  @param[in] interfaceMap - sensor interface
139  *  @param[in] sensorPath - Path of the sensor
140  *  @param[in] cmdData - input sensor data
141  *  @return a IPMI error code
142  */
143 ipmi_ret_t appendAssertion(IpmiUpdateData& msg,
144                            const DbusInterfaceMap& interfaceMap,
145                            const std::string& sensorPath,
146                            const SetSensorReadingReq& cmdData);
147 
148 }//namespace notify
149 }//namespace sensor
150 }//namespace ipmi
151