diff options
author | Patrick Williams <patrick@stwcx.xyz> | 2017-05-04 05:42:49 -0500 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2017-05-11 03:28:41 +0000 |
commit | d22706fb42d777cadd1511447d79ac2a26d9d660 (patch) | |
tree | 0d24d47d12fe7a3445577b024929cf50a25e9a5e | |
parent | 0135bd5b3c10efe8d4df0f268602a0e0900d3650 (diff) | |
download | phosphor-state-manager-d22706fb42d777cadd1511447d79ac2a26d9d660.tar.gz phosphor-state-manager-d22706fb42d777cadd1511447d79ac2a26d9d660.zip |
host: use latest sdbusplus match APIs
Change-Id: Iec0ae14c49c07568110bdebeaa0505db40d92540
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
-rw-r--r-- | host_state_manager.cpp | 14 | ||||
-rw-r--r-- | host_state_manager.hpp | 51 |
2 files changed, 22 insertions, 43 deletions
diff --git a/host_state_manager.cpp b/host_state_manager.cpp index 3e06d73..5930d8a 100644 --- a/host_state_manager.cpp +++ b/host_state_manager.cpp @@ -291,23 +291,15 @@ bool Host::isAutoReboot() } } -int Host::sysStateChangeSignal(sd_bus_message *msg, void *userData, - sd_bus_error *retError) -{ - return static_cast<Host*>(userData)->sysStateChange(msg, retError); -} - -int Host::sysStateChange(sd_bus_message* msg, - sd_bus_error* retError) +void Host::sysStateChange(sdbusplus::message::message& msg) { uint32_t newStateID {}; sdbusplus::message::object_path newStateObjPath; std::string newStateUnit{}; std::string newStateResult{}; - auto sdPlusMsg = sdbusplus::message::message(msg); //Read the msg and populate each variable - sdPlusMsg.read(newStateID, newStateObjPath, newStateUnit, newStateResult); + msg.read(newStateID, newStateObjPath, newStateUnit, newStateResult); if((newStateUnit == HOST_STATE_POWEROFF_TGT) && (newStateResult == "done") && @@ -346,8 +338,6 @@ int Host::sysStateChange(sd_bus_message* msg, } } - - return 0; } Host::Transition Host::requestedHostTransition(Transition value) diff --git a/host_state_manager.hpp b/host_state_manager.hpp index e9158a3..de9d5fb 100644 --- a/host_state_manager.hpp +++ b/host_state_manager.hpp @@ -1,6 +1,7 @@ #pragma once #include <string> +#include <functional> #include <sdbusplus/bus.hpp> #include "xyz/openbmc_project/State/Host/server.hpp" @@ -11,13 +12,16 @@ namespace state namespace manager { +using HostInherit = sdbusplus::server::object::object< + sdbusplus::xyz::openbmc_project::State::server::Host>; +namespace sdbusRule = sdbusplus::bus::match::rules; + /** @class Host * @brief OpenBMC host state management implementation. * @details A concrete implementation for xyz.openbmc_project.State.Host * DBus API. */ -class Host : public sdbusplus::server::object::object< - sdbusplus::xyz::openbmc_project::State::server::Host> +class Host : public HostInherit { public: /** @brief Constructs Host State Manager @@ -31,19 +35,19 @@ class Host : public sdbusplus::server::object::object< * @param[in] objPath - The Dbus object path */ Host(sdbusplus::bus::bus& bus, - const char* busName, - const char* objPath) : - sdbusplus::server::object::object< - sdbusplus::xyz::openbmc_project::State::server::Host>( - bus, objPath, true), + const char* busName, + const char* objPath) : + HostInherit(bus, objPath, true), bus(bus), - systemdSignals(bus, - "type='signal'," - "member='JobRemoved'," - "path='/org/freedesktop/systemd1'," - "interface='org.freedesktop.systemd1.Manager'", - sysStateChangeSignal, - this) + systemdSignals( + bus, + sdbusRule::type::signal() + + sdbusRule::member("JobRemoved") + + sdbusRule::path("/org/freedesktop/systemd1") + + sdbusRule::interface( + "org.freedesktop.systemd1.Manager"), + std::bind(std::mem_fn(&Host::sysStateChange), + this, std::placeholders::_1)) { // Enable systemd signals subscribeToSystemdSignals(); @@ -113,36 +117,21 @@ class Host : public sdbusplus::server::object::object< **/ bool isAutoReboot(); - /** @brief Callback function on systemd state changes - * - * Will just do a call into the appropriate object for processing - * - * @param[in] msg - Data associated with subscribed signal - * @param[in] userData - Pointer to this object instance - * @param[out] retError - Not used but required with signal API - * - */ - static int sysStateChangeSignal(sd_bus_message* msg, - void* userData, - sd_bus_error* retError); - /** @brief Check if systemd state change is relevant to this object * * Instance specific interface to handle the detected systemd state * change * * @param[in] msg - Data associated with subscribed signal - * @param[out] retError - Not used but required with signal API * */ - int sysStateChange(sd_bus_message* msg, - sd_bus_error* retError); + void sysStateChange(sdbusplus::message::message& msg); /** @brief Persistent sdbusplus DBus bus connection. */ sdbusplus::bus::bus& bus; /** @brief Used to subscribe to dbus systemd signals **/ - sdbusplus::server::match::match systemdSignals; + sdbusplus::bus::match_t systemdSignals; }; } // namespace manager |