1 #pragma once 2 3 #include "trust_group.hpp" 4 5 namespace phosphor 6 { 7 namespace fan 8 { 9 namespace trust 10 { 11 12 /** 13 * @class NonzeroSpeed 14 * 15 * A trust group where the sensors in the group are trusted as long 16 * as at least one of them has a nonzero speed. If all sensors 17 * have a speed of zero, then no sensor in the group is trusted. 18 */ 19 class NonzeroSpeed : public Group 20 { 21 public: 22 23 NonzeroSpeed() = delete; 24 ~NonzeroSpeed() = default; 25 NonzeroSpeed(const NonzeroSpeed&) = delete; 26 NonzeroSpeed& operator=(const NonzeroSpeed&) = delete; 27 NonzeroSpeed(NonzeroSpeed&&) = default; 28 NonzeroSpeed& operator=(NonzeroSpeed&&) = default; 29 30 /** 31 * Constructor 32 * 33 * @param[in] names - the names of the sensors and its inclusion in 34 * determining trust for the group 35 */ 36 explicit NonzeroSpeed(const std::vector<GroupDefinition>& names) : 37 Group(names) 38 { 39 } 40 41 private: 42 43 /** 44 * Determines if the group is trusted by checking 45 * if any sensor included in the trust determination 46 * has a nonzero speed. If all the speeds of these sensors 47 * are zero, then no sensors in the group are trusted. 48 * 49 * @return bool - if group is trusted or not 50 */ 51 bool checkGroupTrust() override 52 { 53 return std::any_of( 54 _sensors.begin(), 55 _sensors.end(), 56 [](const auto& s) 57 { 58 return s.inTrust && s.sensor->getInput() != 0; 59 }); 60 } 61 }; 62 63 } 64 } 65 } 66