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 in the group 34 */ 35 explicit NonzeroSpeed(const std::vector<std::string>& names) : 36 Group(names) 37 { 38 } 39 40 private: 41 42 /** 43 * Determines if the group is trusted by checking 44 * if any sensor has a nonzero speed. If all speeds 45 * are zero, then no sensors in the group are trusted. 46 * 47 * @return bool - if group is trusted or not 48 */ 49 bool checkGroupTrust() override 50 { 51 return std::any_of( 52 _sensors.begin(), 53 _sensors.end(), 54 [](const auto& s) 55 { 56 return s.get()->getInput() != 0; 57 }); 58 } 59 }; 60 61 } 62 } 63 } 64