diff options
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-07-25 19:52:22 -0400 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2017-08-02 20:18:19 +0000 |
commit | 00b520827e5d16fc8262783e1ccf8de89a213006 (patch) | |
tree | 940e1830b9ad83ccdf90e41ae3eb6560d645852d /presence/anyof.hpp | |
parent | 11083eca847cf8efa0983deb698a48ee0246e1d3 (diff) | |
download | phosphor-fan-presence-00b520827e5d16fc8262783e1ccf8de89a213006.tar.gz phosphor-fan-presence-00b520827e5d16fc8262783e1ccf8de89a213006.zip |
presence: Add any of redundancy policy
Add a bitwise logical or redundancy policy implementation
(fan is present if any sensor indicates as such).
Change-Id: I1d161478a4a6fe9d5690a385703e41c6fff9c81c
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'presence/anyof.hpp')
-rw-r--r-- | presence/anyof.hpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/presence/anyof.hpp b/presence/anyof.hpp new file mode 100644 index 0000000..70ddb43 --- /dev/null +++ b/presence/anyof.hpp @@ -0,0 +1,75 @@ +#pragma once + +#include <functional> +#include <vector> +#include "fan.hpp" +#include "rpolicy.hpp" + +namespace phosphor +{ +namespace fan +{ +namespace presence +{ + +class PresenceSensor; + +/** + * @class AnyOf + * @brief AnyOf redundancy policy. + * + * The any of redundancy policy monitors all sensor + * states in the redundancy set and reports true when any + * sensor in the set reports true. + */ +class AnyOf : public RedundancyPolicy +{ + public: + AnyOf() = delete; + AnyOf(const AnyOf&) = default; + AnyOf& operator=(const AnyOf&) = default; + AnyOf(AnyOf&&) = default; + AnyOf& operator=(AnyOf&&) = default; + ~AnyOf() = default; + + /** + * @brief Construct an any of bitwise policy. + * + * @param[in] fan - The fan associated with the policy. + * @param[in] s - The set of sensors associated with the policy. + */ + AnyOf( + const Fan& fan, + const std::vector<std::reference_wrapper<PresenceSensor>>& s); + + /** + * @brief stateChanged + * + * Update the inventory and execute the fallback + * policy. + * + * @param[in] present - The new presence state according + * to the specified sensor. + * @param[in] sensor - The sensor reporting the new state. + */ + void stateChanged(bool present, PresenceSensor& sensor) override; + + /** + * @brief monitor + * + * Start monitoring the fan. + */ + void monitor() override; + + private: + + /** @brief All presence sensors in the redundancy set. */ + std::vector< + std::tuple< + std::reference_wrapper<PresenceSensor>, + bool>> state; +}; + +} // namespace presence +} // namespace fan +} // namespace phosphor |