diff options
Diffstat (limited to 'bmc_state_manager.hpp')
-rw-r--r-- | bmc_state_manager.hpp | 50 |
1 files changed, 20 insertions, 30 deletions
diff --git a/bmc_state_manager.hpp b/bmc_state_manager.hpp index 0e52a25..f6f7540 100644 --- a/bmc_state_manager.hpp +++ b/bmc_state_manager.hpp @@ -1,5 +1,6 @@ #pragma once +#include <functional> #include <sdbusplus/bus.hpp> #include "xyz/openbmc_project/State/BMC/server.hpp" @@ -10,13 +11,17 @@ namespace state namespace manager { +using BMCInherit = sdbusplus::server::object::object< + sdbusplus::xyz::openbmc_project::State::server::BMC>; +namespace sdbusRule = sdbusplus::bus::match::rules; + + /** @class BMC * @brief OpenBMC BMC state management implementation. * @details A concrete implementation for xyz.openbmc_project.State.BMC * DBus API. */ -class BMC : public sdbusplus::server::object::object< - sdbusplus::xyz::openbmc_project::State::server::BMC> +class BMC : public BMCInherit { public: /** @brief Constructs BMC State Manager @@ -27,20 +32,18 @@ class BMC : public sdbusplus::server::object::object< */ BMC(sdbusplus::bus::bus& bus, const char* objPath) : - sdbusplus::server::object::object< - sdbusplus::xyz::openbmc_project::State::server::BMC>( - bus, objPath, true), - bus(bus), - stateSignal( - std::make_unique< - decltype(stateSignal)::element_type>( + BMCInherit(bus, objPath, true), + 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)) + sdbusRule::type::signal() + + sdbusRule::member("JobRemoved") + + sdbusRule::path("/org/freedesktop/systemd1") + + sdbusRule::interface( + "org.freedesktop.systemd1.Manager"), + std::bind(std::mem_fn(&BMC::bmcStateChange), + this, std::placeholders::_1))) { subscribeToSystemdSignals(); discoverInitialState(); @@ -70,34 +73,21 @@ 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); + int bmcStateChange(sdbusplus::message::message& msg); /** @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; + std::unique_ptr<sdbusplus::bus::match_t> stateSignal; }; } // namespace manager |