From 38a93a8aa2feea7f4e785db6b4ff6d9e81f6020d Mon Sep 17 00:00:00 2001 From: Matthew Barth Date: Thu, 11 May 2017 14:12:27 -0500 Subject: 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 --- control/zone.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'control/zone.cpp') 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(bus, def)); } + + // Setup signal trigger for property changes + for (auto& event : std::get(def)) + { + for (auto& prop : event) + { + _signalEvents.emplace_back( + std::make_unique(this, + std::get(prop) + )); + _matches.emplace_back(bus, + std::get(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(data); + std::get(signalEvent)->handleEvent( + sdbpMsg, + std::get(signalEvent)); + return 0; +} + +void Zone::handleEvent(sdbusplus::message::message& msg, + const Handler& handler) +{ + // Handle the callback + handler(_bus, msg, *this); +} + + } } } -- cgit v1.2.1