diff options
author | Matthew Barth <msbarth@us.ibm.com> | 2017-05-11 15:00:36 -0500 |
---|---|---|
committer | Matthew Barth <msbarth@us.ibm.com> | 2017-05-31 10:55:48 -0500 |
commit | 17d1fe23b704cacb1cdd9b58156f354626b36f8c (patch) | |
tree | d448834a4cee7a2f71be26141431459f0808bd98 /control/zone.cpp | |
parent | 38a93a8aa2feea7f4e785db6b4ff6d9e81f6020d (diff) | |
download | phosphor-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.cpp | 42 |
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)); } - } } } |