summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Spinler <spinler@us.ibm.com>2017-09-28 10:38:11 -0500
committerMatt Spinler <spinler@us.ibm.com>2017-10-11 09:23:09 -0500
commit0ada59f968b6f51ccb561dd60da36c6bfbf2ae5d (patch)
tree95613986bd6eb29e94a048fc70050cb1113b1902
parent78689dd7cf10b8161ba04a2e9dc22b923baf5aa7 (diff)
downloadphosphor-fan-presence-0ada59f968b6f51ccb561dd60da36c6bfbf2ae5d.tar.gz
phosphor-fan-presence-0ada59f968b6f51ccb561dd60da36c6bfbf2ae5d.zip
monitor: Add NonzeroSpeed trust group class
This class provides the ability to only trust the sensors in the group if at least one of them has a nonzero speed. It is being used for a system where the tach values for a set of rotors are reported as zero by the fan controller hardware when the other rotor on the fan is moving to a new target speed. As all the fans are set to the same speed at the same time, the rotors in question all report as zeros at exactly the same time, and this is then used to know when the values cannot be trusted. Change-Id: I29a014014bc8455287f90e5b573a856814331a53 Signed-off-by: Matt Spinler <spinler@us.ibm.com>
-rw-r--r--monitor/nonzero_speed_trust.hpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/monitor/nonzero_speed_trust.hpp b/monitor/nonzero_speed_trust.hpp
new file mode 100644
index 0000000..3d14adf
--- /dev/null
+++ b/monitor/nonzero_speed_trust.hpp
@@ -0,0 +1,63 @@
+#pragma once
+
+#include "trust_group.hpp"
+
+namespace phosphor
+{
+namespace fan
+{
+namespace trust
+{
+
+/**
+ * @class NonzeroSpeed
+ *
+ * A trust group where the sensors in the group are trusted as long
+ * as at least one of them has a nonzero speed. If all sensors
+ * have a speed of zero, then no sensor in the group is trusted.
+ */
+class NonzeroSpeed : public Group
+{
+ public:
+
+ NonzeroSpeed() = delete;
+ ~NonzeroSpeed() = default;
+ NonzeroSpeed(const NonzeroSpeed&) = delete;
+ NonzeroSpeed& operator=(const NonzeroSpeed&) = delete;
+ NonzeroSpeed(NonzeroSpeed&&) = default;
+ NonzeroSpeed& operator=(NonzeroSpeed&&) = default;
+
+ /**
+ * Constructor
+ *
+ * @param[in] names - the names of the sensors in the group
+ */
+ explicit NonzeroSpeed(const std::vector<std::string>& names) :
+ Group(names)
+ {
+ }
+
+ private:
+
+ /**
+ * Determines if the group is trusted by checking
+ * if any sensor has a nonzero speed. If all speeds
+ * are zero, then no sensors in the group are trusted.
+ *
+ * @return bool - if group is trusted or not
+ */
+ bool checkGroupTrust() override
+ {
+ return std::any_of(
+ _sensors.begin(),
+ _sensors.end(),
+ [](const auto& s)
+ {
+ return s.get()->getInput() != 0;
+ });
+ }
+};
+
+}
+}
+}
OpenPOWER on IntegriCloud