diff options
author | Matthew Barth <msbarth@us.ibm.com> | 2017-07-28 13:43:04 -0500 |
---|---|---|
committer | Matthew Barth <msbarth@us.ibm.com> | 2017-08-04 13:03:13 -0500 |
commit | ccc7770ecd6b758fcef98ce9e7cd585af3f3c77f (patch) | |
tree | f0199ba8f9d5e560ea3e95f7c9a99a9b98488cfe /control/zone.cpp | |
parent | 771659fcd288e40eda8fb80fe04f32b5d18d3599 (diff) | |
download | phosphor-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.cpp | 68 |
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, |