diff options
Diffstat (limited to 'bmc_state_manager.hpp')
-rw-r--r-- | bmc_state_manager.hpp | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/bmc_state_manager.hpp b/bmc_state_manager.hpp index 1ddef53..bbace38 100644 --- a/bmc_state_manager.hpp +++ b/bmc_state_manager.hpp @@ -21,10 +21,6 @@ class BMC : public sdbusplus::server::object::object< public: /** @brief Constructs BMC State Manager * - * @note This constructor passes 'true' to the base class in order to - * defer dbus object registration until we can run - * subscribeToSystemdSignals() and set our properties - * * @param[in] bus - The Dbus bus object * @param[in] busName - The Dbus name to own * @param[in] objPath - The Dbus object path @@ -34,7 +30,17 @@ class BMC : public sdbusplus::server::object::object< sdbusplus::server::object::object< sdbusplus::xyz::openbmc_project::State::server::BMC>( bus, objPath), - bus(bus) + bus(bus), + stateSignal( + std::make_unique< + decltype(stateSignal)::element_type>( + bus, + "type='signal'," + "member='JobRemoved'," + "path='/org/freedesktop/systemd1'," + "interface='org.freedesktop.systemd1.Manager'", + bmcStateChangeSignal, + this)) { subscribeToSystemdSignals(); }; @@ -42,6 +48,8 @@ class BMC : public sdbusplus::server::object::object< /** @brief Set value of BMCTransition **/ Transition requestedBMCTransition(Transition value) override; + /** @brief Set value of CurrentBMCState **/ + BMCState currentBMCState(BMCState value) override; private: /** @@ -55,9 +63,34 @@ class BMC : public sdbusplus::server::object::object< */ void executeTransition(Transition tranReq); + /** @brief Callback used to direct you into the class + * + * @param[in] msg - Data associated with subscribed signal + * @param[in] userData - Pointer to this object instance + * @param[out] retError - return error data if any + * + */ + static int bmcStateChangeSignal(sd_bus_message* msg, + void* userData, + sd_bus_error* retError); + + /** @brief Callback function on bmc state change + * + * Check if the state is relevant to the BMC and if so, update + * corresponding BMC object's state + * + * @param[in] msg - Data associated with subscribed signal + * @param[out] retError - return error data if any + * + */ + int bmcStateChange(sd_bus_message* msg, + sd_bus_error* retError); + /** @brief Persistent sdbusplus DBus bus connection. **/ sdbusplus::bus::bus& bus; + /** @brief Used to subscribe to dbus system state changes **/ + std::unique_ptr<sdbusplus::server::match::match> stateSignal; }; } // namespace manager |