summaryrefslogtreecommitdiffstats
path: root/control/zone.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'control/zone.cpp')
-rw-r--r--control/zone.cpp36
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);
+}
+
+
}
}
}
OpenPOWER on IntegriCloud