1 #pragma once
2 
3 #include <sdbusplus/bus.hpp>
4 #include <xyz/openbmc_project/Logging/Entry/server.hpp>
5 
6 namespace phosphor
7 {
8 namespace state
9 {
10 namespace manager
11 {
12 namespace utils
13 {
14 
15 /** @brief Tell systemd to generate d-bus events
16  *
17  * @param[in] bus          - The Dbus bus object
18  *
19  * @return void, will throw exception on failure
20  */
21 void subscribeToSystemdSignals(sdbusplus::bus_t& bus);
22 
23 /** @brief Get service name from object path and interface
24  *
25  * @param[in] bus          - The Dbus bus object
26  * @param[in] path         - The Dbus object path
27  * @param[in] interface    - The Dbus interface
28  *
29  * @return The name of the service
30  */
31 std::string getService(sdbusplus::bus_t& bus, std::string path,
32                        std::string interface);
33 
34 /** @brief Get the value of input property
35  *
36  * @param[in] bus          - The Dbus bus object
37  * @param[in] path         - The Dbus object path
38  * @param[in] interface    - The Dbus interface
39  * @param[in] property     - The property name to get
40  *
41  * @return The value of the property
42  */
43 std::string getProperty(sdbusplus::bus_t& bus, const std::string& path,
44                         const std::string& interface,
45                         const std::string& propertyName);
46 
47 /** @brief Set the value of property
48  *
49  * @param[in] bus          - The Dbus bus object
50  * @param[in] path         - The Dbus object path
51  * @param[in] interface    - The Dbus interface
52  * @param[in] property     - The property name to set
53  * @param[in] value        - The value of property
54  */
55 void setProperty(sdbusplus::bus_t& bus, const std::string& path,
56                  const std::string& interface, const std::string& property,
57                  const std::string& value);
58 
59 /** @brief Return the value of the input GPIO
60  *
61  * @param[in] gpioName          - The name of the GPIO to read
62  *
63  *  * @return The value of the gpio (0 or 1) or -1 on error
64  */
65 int getGpioValue(const std::string& gpioName);
66 
67 /** @brief Create an error log
68  *
69  * @param[in] bus           - The Dbus bus object
70  * @param[in] errorMsg      - The error message
71  * @param[in] errLevel      - The error level
72  * parampin] additionalData - Optional extra data to add to the log
73  */
74 void createError(
75     sdbusplus::bus_t& bus, const std::string& errorMsg,
76     sdbusplus::server::xyz::openbmc_project::logging::Entry::Level errLevel,
77     std::map<std::string, std::string> additionalData = {});
78 
79 /** @brief Call phosphor-dump-manager to create BMC user dump
80  *
81  * @param[in] bus          - The Dbus bus object
82  */
83 void createBmcDump(sdbusplus::bus_t& bus);
84 
85 /** @brief Attempt to locate the obmc-chassis-lost-power@ file
86  *    to indicate that an AC loss occurred.
87  *
88  * @param[in] chassisId  - the chassis instance
89  */
90 bool checkACLoss(size_t& chassisId);
91 
92 /** @brief Determine if the BMC is at its Ready state
93  *
94  * @param[in] bus          - The Dbus bus object
95  */
96 bool isBmcReady(sdbusplus::bus_t& bus);
97 
98 /** @brief Wait BMC to enter ready state or timeout reached.
99  *
100  * @param[in] bus          - The Dbus bus object
101  * @param[in] timeout      - Timeout in second
102  */
103 bool waitBmcReady(sdbusplus::bus_t& bus, std::chrono::seconds timeout);
104 
105 } // namespace utils
106 } // namespace manager
107 } // namespace state
108 } // namespace phosphor
109