summaryrefslogtreecommitdiffstats
path: root/bmc_state_manager.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'bmc_state_manager.hpp')
-rw-r--r--bmc_state_manager.hpp50
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
OpenPOWER on IntegriCloud