diff options
author | Matthew Barth <msbarth@us.ibm.com> | 2017-05-11 14:12:27 -0500 |
---|---|---|
committer | Matthew Barth <msbarth@us.ibm.com> | 2017-05-31 10:48:10 -0500 |
commit | 38a93a8aa2feea7f4e785db6b4ff6d9e81f6020d (patch) | |
tree | 93131bf528c712fd9c95c353a23db9ab365d59c1 /control/zone.cpp | |
parent | 06bae85443fdb1e5e9540280a7aeac2f36ffaa7b (diff) | |
download | phosphor-fan-presence-38a93a8aa2feea7f4e785db6b4ff6d9e81f6020d.tar.gz phosphor-fan-presence-38a93a8aa2feea7f4e785db6b4ff6d9e81f6020d.zip |
Add property changed signal handler
Enable the control application to handle property changed signals to set
or update a cached set of these properties
Change-Id: Ib84ffe1e801ee7dd85d17fdbb122d124d307dbd3
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'control/zone.cpp')
-rw-r--r-- | control/zone.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/control/zone.cpp b/control/zone.cpp index 1e50060..28b81f9 100644 --- a/control/zone.cpp +++ b/control/zone.cpp @@ -35,6 +35,22 @@ 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());
+ }
+ } } @@ -46,6 +62,26 @@ void Zone::setSpeed(uint64_t speed) } } +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<handlerObjPos>(signalEvent)); + return 0; +} + +void Zone::handleEvent(sdbusplus::message::message& msg, + const Handler& handler) +{ + // Handle the callback + handler(_bus, msg, *this); +} + + } } } |