diff options
Diffstat (limited to 'control')
-rwxr-xr-x | control/gen-fan-zone-defs.py | 11 | ||||
-rw-r--r-- | control/types.hpp | 4 | ||||
-rw-r--r-- | control/zone.cpp | 29 | ||||
-rw-r--r-- | control/zone.hpp | 25 |
4 files changed, 23 insertions, 46 deletions
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 <sdbusplus/bus.hpp> #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<ZoneGroup> Manager::_zoneLayouts std::vector<PropertyChange>{ %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<Group, Handler, Action>; -constexpr auto zoneObjPos = 0; -constexpr auto eventDataPos = 1; -using SignalEvent = std::tuple<Zone*, EventData>; - 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<propChangeListPos>(event)) { _signalEvents.emplace_back( - std::make_unique<SignalEvent>( - this, + std::make_unique<EventData>( EventData { std::get<groupPos>(event), @@ -81,8 +80,10 @@ Zone::Zone(Mode mode, _matches.emplace_back( bus, std::get<signaturePos>(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<actionPos>(event)(*this, @@ -142,26 +143,14 @@ void Zone::getProperty(sdbusplus::bus::bus& bus, value = sdbusplus::message::variant_ns::get<T>(property); } -int Zone::signalHandler(sd_bus_message* msg, - void* data, - sd_bus_error* err) -{ - auto sdbpMsg = sdbusplus::message::message(msg); - auto& signalEvent = *static_cast<SignalEvent*>(data); - std::get<zoneObjPos>(signalEvent)->handleEvent( - sdbpMsg, - std::get<eventDataPos>(signalEvent)); - return 0; -} - void Zone::handleEvent(sdbusplus::message::message& msg, - const EventData& eventData) + const EventData* eventData) { // Handle the callback - std::get<eventHandlerPos>(eventData)(_bus, msg, *this); + std::get<eventHandlerPos>(*eventData)(_bus, msg, *this); // Perform the action - std::get<eventActionPos>(eventData)(*this, - std::get<eventGroupPos>(eventData)); + std::get<eventActionPos>(*eventData)(*this, + std::get<eventGroupPos>(*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<std::unique_ptr<SignalEvent>> _signalEvents; + std::vector<std::unique_ptr<EventData>> _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); }; } |