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 <msbarth@us.ibm.com>
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 @@
 
 #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 @@
                         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 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 @@
             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 @@
                 _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 @@
     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 @@
         /**
          * @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 @@
                                 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
+         * @param[in] msg - Expanded sdbusplus message data
+         * @param[in] eventData - The single event's data
          */
-        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);
+        void handleEvent(sdbusplus::message::message& msg,
+                         const EventData* eventData);
 };
 
 }