diff options
Diffstat (limited to 'monitor/nonzero_speed_trust.hpp')
-rw-r--r-- | monitor/nonzero_speed_trust.hpp | 63 |
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; + }); + } +}; + +} +} +} |