diff options
author | Matthew Barth <msbarth@us.ibm.com> | 2017-10-24 15:58:17 -0500 |
---|---|---|
committer | Matthew Barth <msbarth@us.ibm.com> | 2017-11-17 13:14:11 -0600 |
commit | 0decd1bd00ecb1d4b7357c49947ee19142ea8e27 (patch) | |
tree | b49f97572b64fa1408f3568e31a7aee0f97ad62e /control/actions.cpp | |
parent | 98726c4585d6743c0948ed0140835e438de1df79 (diff) | |
download | phosphor-fan-presence-0decd1bd00ecb1d4b7357c49947ee19142ea8e27.tar.gz phosphor-fan-presence-0decd1bd00ecb1d4b7357c49947ee19142ea8e27.zip |
Set fan speed on missing owner action
Sets the zone's fan speeds to a given speed when any service owner
associated with an event group is missing. Once all the services are
functional and providing the event data again, active fan speed changes
are allowed.
Change-Id: I318f6114c8d0392432c421f803db07a4683d1097
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'control/actions.cpp')
-rw-r--r-- | control/actions.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/control/actions.cpp b/control/actions.cpp index 6eda2a6..66bba2b 100644 --- a/control/actions.cpp +++ b/control/actions.cpp @@ -99,6 +99,27 @@ void default_floor_on_missing_owner(Zone& zone, const Group& group) zone.setFloorChangeAllow(&group, !defFloor); } +Action set_speed_on_missing_owner(uint64_t speed) +{ + return [speed](control::Zone& zone, const Group& group) + { + auto services = zone.getGroupServices(&group); + auto missingOwner = std::any_of( + services.begin(), + services.end(), + [](const auto& s) + { + return !std::get<hasOwnerPos>(s); + }); + if (missingOwner) + { + zone.setSpeed(speed); + } + // Update group's fan control active allowed based on action results + zone.setActiveAllow(&group, !missingOwner); + }; +} + void set_request_speed_base_with_max(control::Zone& zone, const Group& group) { |