Add setting zone speed action

Enable an action to be defined that sets the zone to a given speed when
a number of properties are set to a given value

Change-Id: I5252a20a24bdb14dee63080f2c08b080c82ad7e8
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/zone.cpp b/control/zone.cpp
index 28b81f9..3a35b24 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -36,20 +36,24 @@
         _fans.emplace_back(std::make_unique<Fan>(bus, def));
     }
 
-    // Setup signal trigger for property changes

-    for (auto& event : std::get<setSpeedEventsPos>(def))

-    {

-        for (auto& prop : event)

-        {

-            _signalEvents.emplace_back(

-                std::make_unique<SignalEvent>(this,

-                                              std::get<handlerObjPos>(prop)

-                                              ));

-            _matches.emplace_back(bus,

-                                  std::get<signaturePos>(prop).c_str(),

-                                  signalHandler,

-                                  _signalEvents.back().get());

-        }

+    // Setup signal trigger for set speed events
+    for (auto& event : std::get<setSpeedEventsPos>(def))
+    {
+        for (auto& prop : std::get<propChangeListPos>(event))
+        {
+            _signalEvents.emplace_back(
+                std::make_unique<SignalEvent>(this,
+                                              EventData
+                                              {
+                                                  std::get<groupPos>(event),
+                                                  std::get<handlerObjPos>(prop),
+                                                  std::get<actionPos>(event)
+                                              }));
+            _matches.emplace_back(bus,
+                                  std::get<signaturePos>(prop).c_str(),
+                                  signalHandler,
+                                  _signalEvents.back().get());
+        }
     }
 }
 
@@ -70,18 +74,20 @@
     auto& signalEvent = *static_cast<SignalEvent*>(data);
     std::get<zoneObjPos>(signalEvent)->handleEvent(
         sdbpMsg,
-        std::get<handlerObjPos>(signalEvent));
+        std::get<eventDataPos>(signalEvent));
     return 0;
 }
 
 void Zone::handleEvent(sdbusplus::message::message& msg,
-                       const Handler& handler)
+                       const EventData& eventData)
 {
     // Handle the callback
-    handler(_bus, msg, *this);
+    std::get<eventHandlerPos>(eventData)(_bus, msg, *this);
+    // Perform the action
+    std::get<eventActionPos>(eventData)(*this,
+                                        std::get<eventGroupPos>(eventData));
 }
 
-
 }
 }
 }