From d613b8166a3c3dc652badf8d8c52e74492941f28 Mon Sep 17 00:00:00 2001 From: "Josh D. King" Date: Mon, 19 Dec 2016 16:47:45 -0600 Subject: Process system state changes We are currently subscribed to the systemd to get a signal notifying us when the obmc-standby.target is ready. Things may change in the future but this is what we have decided to do for now. Change-Id: I81ecdcb45123feb611cf88916c0f9caadcd82dfe Signed-off-by: Josh D. King --- bmc_state_manager.hpp | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) (limited to 'bmc_state_manager.hpp') 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 @@ -20,10 +20,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 @@ -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 stateSignal; }; } // namespace manager -- cgit v1.2.1