summaryrefslogtreecommitdiffstats
path: root/control/zone.cpp
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2017-07-28 13:43:04 -0500
committerMatthew Barth <msbarth@us.ibm.com>2017-08-04 13:03:13 -0500
commitccc7770ecd6b758fcef98ce9e7cd585af3f3c77f (patch)
treef0199ba8f9d5e560ea3e95f7c9a99a9b98488cfe /control/zone.cpp
parent771659fcd288e40eda8fb80fe04f32b5d18d3599 (diff)
downloadphosphor-fan-presence-ccc7770ecd6b758fcef98ce9e7cd585af3f3c77f.tar.gz
phosphor-fan-presence-ccc7770ecd6b758fcef98ce9e7cd585af3f3c77f.zip
Initial updates to support preconditions
Any defined preconditions for a set speed event must be satisfied prior to configuring the event parameters for fan control. These preconditions will accept a list of group entries that include the value the group's property must be to have the precondition met for that group. Once all preconditions are met, the set speed event will be initialized and become active. Change-Id: Ia5555be55c5937c891af527bea63da1546655b2f Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'control/zone.cpp')
-rw-r--r--control/zone.cpp68
1 files changed, 34 insertions, 34 deletions
diff --git a/control/zone.cpp b/control/zone.cpp
index 93a616a..4fb60cd 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -57,7 +57,11 @@ Zone::Zone(Mode mode,
// Do not enable set speed events when in init mode
if (mode != Mode::init)
{
- initEvents(def);
+ // Setup signal trigger for set speed events
+ for (auto& event : std::get<setSpeedEventsPos>(def))
+ {
+ initEvent(event);
+ }
// Start timer for fan speed decreases
if (!_decTimer.running() && _decInterval != seconds::zero())
{
@@ -168,42 +172,38 @@ void Zone::decTimerExpired()
// Decrease timer is restarted since its repeating
}
-void Zone::initEvents(const ZoneDefinition& def)
+void Zone::initEvent(const SetSpeedEvent& event)
{
- // Setup signal trigger for set speed events
- for (auto& event : std::get<setSpeedEventsPos>(def))
+ // Get the current value for each property
+ for (auto& entry : std::get<groupPos>(event))
{
- // Get the current value for each property
- for (auto& entry : std::get<groupPos>(event))
- {
- refreshProperty(_bus,
- entry.first,
- std::get<intfPos>(entry.second),
- std::get<propPos>(entry.second));
- }
- // Setup signal matches for property change events
- for (auto& prop : std::get<propChangeListPos>(event))
- {
- _signalEvents.emplace_back(
- std::make_unique<EventData>(
- EventData
- {
- std::get<groupPos>(event),
- std::get<handlerObjPos>(prop),
- std::get<actionPos>(event)
- }));
- _matches.emplace_back(
- _bus,
- std::get<signaturePos>(prop).c_str(),
- std::bind(std::mem_fn(&Zone::handleEvent),
- this,
- std::placeholders::_1,
- _signalEvents.back().get()));
- }
- // Run action function for initial event state
- std::get<actionPos>(event)(*this,
- std::get<groupPos>(event));
+ refreshProperty(_bus,
+ entry.first,
+ std::get<intfPos>(entry.second),
+ std::get<propPos>(entry.second));
+ }
+ // Setup signal matches for property change events
+ for (auto& prop : std::get<propChangeListPos>(event))
+ {
+ _signalEvents.emplace_back(
+ std::make_unique<EventData>(
+ EventData
+ {
+ std::get<groupPos>(event),
+ std::get<handlerObjPos>(prop),
+ std::get<actionPos>(event)
+ }));
+ _matches.emplace_back(
+ _bus,
+ std::get<signaturePos>(prop).c_str(),
+ std::bind(std::mem_fn(&Zone::handleEvent),
+ this,
+ std::placeholders::_1,
+ _signalEvents.back().get()));
}
+ // Run action function for initial event state
+ std::get<actionPos>(event)(*this,
+ std::get<groupPos>(event));
}
void Zone::refreshProperty(sdbusplus::bus::bus& bus,
OpenPOWER on IntegriCloud