From 34f1bda245818e659f4af44361c81f21dba09b76 Mon Sep 17 00:00:00 2001 From: Matthew Barth Date: Wed, 31 May 2017 13:45:36 -0500 Subject: Use updated match methods for signal callbacks Attach the event handler callback function to the match along with generating the match string using the new match methods Change-Id: I7595d65cbc615f29db60e2a65534ee5b635d6f96 Signed-off-by: Matthew Barth --- control/gen-fan-zone-defs.py | 11 +++++++---- control/types.hpp | 4 ---- control/zone.cpp | 29 +++++++++-------------------- control/zone.hpp | 25 +++++++------------------ 4 files changed, 23 insertions(+), 46 deletions(-) (limited to 'control') diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py index f537716..76f4c6c 100755 --- a/control/gen-fan-zone-defs.py +++ b/control/gen-fan-zone-defs.py @@ -13,12 +13,14 @@ from mako.template import Template #Note: Condition is a TODO (openbmc/openbmc#1500) tmpl = '''/* This is a generated file. */ +#include #include "manager.hpp" #include "functor.hpp" #include "actions.hpp" #include "handlers.hpp" using namespace phosphor::fan::control; +using namespace sdbusplus::bus::match::rules; const unsigned int Manager::_powerOnDelay{${mgr_data['power_on_delay']}}; @@ -68,10 +70,11 @@ const std::vector Manager::_zoneLayouts std::vector{ %for s in event['signal']: PropertyChange{ - "interface='org.freedesktop.DBus.Properties'," - "member='PropertiesChanged'," - "type='signal'," - "path='${s['path']}'", + interface("org.freedesktop.DBus.Properties") + + member("PropertiesChanged") + + type::signal() + + path("${s['path']}") + + arg0namespace("${s['interface']}"), make_handler(propertySignal<${s['type']}>( "${s['interface']}", "${s['property']}", diff --git a/control/types.hpp b/control/types.hpp index c610ed9..a9508eb 100644 --- a/control/types.hpp +++ b/control/types.hpp @@ -41,10 +41,6 @@ constexpr auto eventHandlerPos = 1; constexpr auto eventActionPos = 2; using EventData = std::tuple; -constexpr auto zoneObjPos = 0; -constexpr auto eventDataPos = 1; -using SignalEvent = std::tuple; - constexpr auto zoneNumPos = 0; constexpr auto fullSpeedPos = 1; constexpr auto fanListPos = 2; diff --git a/control/zone.cpp b/control/zone.cpp index 13ee977..849cd91 100644 --- a/control/zone.cpp +++ b/control/zone.cpp @@ -70,8 +70,7 @@ Zone::Zone(Mode mode, for (auto& prop : std::get(event)) { _signalEvents.emplace_back( - std::make_unique( - this, + std::make_unique( EventData { std::get(event), @@ -81,8 +80,10 @@ Zone::Zone(Mode mode, _matches.emplace_back( bus, std::get(prop).c_str(), - signalHandler, - _signalEvents.back().get()); + std::bind(std::mem_fn(&Zone::handleEvent), + this, + std::placeholders::_1, + _signalEvents.back().get())); } // Run action function for initial event state std::get(event)(*this, @@ -142,26 +143,14 @@ void Zone::getProperty(sdbusplus::bus::bus& bus, value = sdbusplus::message::variant_ns::get(property); } -int Zone::signalHandler(sd_bus_message* msg, - void* data, - sd_bus_error* err) -{ - auto sdbpMsg = sdbusplus::message::message(msg); - auto& signalEvent = *static_cast(data); - std::get(signalEvent)->handleEvent( - sdbpMsg, - std::get(signalEvent)); - return 0; -} - void Zone::handleEvent(sdbusplus::message::message& msg, - const EventData& eventData) + const EventData* eventData) { // Handle the callback - std::get(eventData)(_bus, msg, *this); + std::get(*eventData)(_bus, msg, *this); // Perform the action - std::get(eventData)(*this, - std::get(eventData)); + std::get(*eventData)(*this, + std::get(*eventData)); } } diff --git a/control/zone.hpp b/control/zone.hpp index c6e0594..5825b52 100644 --- a/control/zone.hpp +++ b/control/zone.hpp @@ -146,7 +146,7 @@ class Zone /** * @brief List of signal event arguments */ - std::vector> _signalEvents; + std::vector> _signalEvents; /** * @brief list of Dbus matches for callbacks @@ -170,24 +170,13 @@ class Zone T& value); /** - * @brief Dbus signal change handler + * @brief Dbus signal change callback handler * - * @param[in] msg - Data associated with the subscribed signal - * @param[in] data - Pointer to the event sensor's data - * @param[in] err - Contains any sdbus error reference if occurred - */ - static int signalHandler(sd_bus_message* msg, - void* data, - sd_bus_error* err); - - /** - * @brief Envokes the assigned handler and action - * - * @param[in] msg - Expanded sdbusplus message data - * @param[in] eventData - The event's data - */ - void handleEvent(sdbusplus::message::message& msg, - const EventData& eventData); + * @param[in] msg - Expanded sdbusplus message data + * @param[in] eventData - The single event's data + */ + void handleEvent(sdbusplus::message::message& msg, + const EventData* eventData); }; } -- cgit v1.2.1