summaryrefslogtreecommitdiffstats
path: root/control/zone.cpp
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2017-05-11 15:00:36 -0500
committerMatthew Barth <msbarth@us.ibm.com>2017-05-31 10:55:48 -0500
commit17d1fe23b704cacb1cdd9b58156f354626b36f8c (patch)
treed448834a4cee7a2f71be26141431459f0808bd98 /control/zone.cpp
parent38a93a8aa2feea7f4e785db6b4ff6d9e81f6020d (diff)
downloadphosphor-fan-presence-17d1fe23b704cacb1cdd9b58156f354626b36f8c.tar.gz
phosphor-fan-presence-17d1fe23b704cacb1cdd9b58156f354626b36f8c.zip
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>
Diffstat (limited to 'control/zone.cpp')
-rw-r--r--control/zone.cpp42
1 files changed, 24 insertions, 18 deletions
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 @@ Zone::Zone(sdbusplus::bus::bus& bus,
_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 @@ int Zone::signalHandler(sd_bus_message* msg,
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));
}
-
}
}
}
OpenPOWER on IntegriCloud