summaryrefslogtreecommitdiffstats
path: root/control/actions.cpp
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2017-10-24 15:58:17 -0500
committerMatthew Barth <msbarth@us.ibm.com>2017-11-17 13:14:11 -0600
commit0decd1bd00ecb1d4b7357c49947ee19142ea8e27 (patch)
treeb49f97572b64fa1408f3568e31a7aee0f97ad62e /control/actions.cpp
parent98726c4585d6743c0948ed0140835e438de1df79 (diff)
downloadphosphor-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.cpp21
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)
{
OpenPOWER on IntegriCloud