summaryrefslogtreecommitdiffstats
path: root/control
diff options
context:
space:
mode:
Diffstat (limited to 'control')
-rwxr-xr-xcontrol/gen-fan-zone-defs.py11
-rw-r--r--control/types.hpp4
-rw-r--r--control/zone.cpp29
-rw-r--r--control/zone.hpp25
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);
};
}
OpenPOWER on IntegriCloud