summaryrefslogtreecommitdiffstats
path: root/presence/tach.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'presence/tach.hpp')
-rw-r--r--presence/tach.hpp110
1 files changed, 110 insertions, 0 deletions
diff --git a/presence/tach.hpp b/presence/tach.hpp
new file mode 100644
index 0000000..4f02521
--- /dev/null
+++ b/presence/tach.hpp
@@ -0,0 +1,110 @@
+#pragma once
+
+#include <sdbusplus/message.hpp>
+#include <sdbusplus/bus/match.hpp>
+#include <string>
+#include <vector>
+#include "psensor.hpp"
+#include "sdbusplus.hpp"
+
+namespace phosphor
+{
+namespace fan
+{
+namespace presence
+{
+class RedundancyPolicy;
+
+/**
+ * @class Tach
+ * @brief Fan tach sensor presence implementation.
+ *
+ * The Tach class uses one or more tach speed indicators
+ * to determine presence state.
+ */
+class Tach : public PresenceSensor
+{
+ public:
+ /**
+ * @brief
+ *
+ * Cannot move or copy due to this ptr as context
+ * for sdbus callbacks.
+ */
+ Tach() = delete;
+ Tach(const Tach&) = delete;
+ Tach& operator=(const Tach&) = delete;
+ Tach(Tach&&) = delete;
+ Tach& operator=(Tach&&) = delete;
+ ~Tach() = default;
+
+ /**
+ * @brief ctor
+ *
+ * @param[in] sensors - Fan tach sensors for this psensor.
+ */
+ Tach(const std::vector<std::string>& sensors);
+
+ /**
+ * @brief start
+ *
+ * Register for dbus signal callbacks on fan
+ * tach sensor change. Query initial tach speeds.
+ *
+ * @return The current sensor state.
+ */
+ bool start() override;
+
+ /**
+ * @brief stop
+ *
+ * De-register dbus signal callbacks.
+ */
+ void stop() override;
+
+ /**
+ * @brief Check the sensor.
+ *
+ * Query the tach speeds.
+ */
+ bool present() override;
+
+ private :
+ /**
+ * @brief Get the policy associated with this sensor.
+ */
+ virtual RedundancyPolicy& getPolicy() = 0;
+
+ /**
+ * @brief Properties changed handler for tach sensor updates.
+ *
+ * @param[in] sensor - The sensor that changed.
+ * @param[in] props - The properties that changed.
+ */
+ void propertiesChanged(
+ size_t sensor,
+ const phosphor::fan::util::Properties<int64_t>& props);
+
+ /**
+ * @brief Properties changed handler for tach sensor updates.
+ *
+ * @param[in] sensor - The sensor that changed.
+ * @param[in] msg - The sdbusplus signal message.
+ */
+ void propertiesChanged(
+ size_t sensor,
+ sdbusplus::message::message& msg);
+
+ /** @brief array of tach sensors dbus matches, and tach values. */
+ std::vector<std::tuple<
+ std::string,
+ std::unique_ptr<sdbusplus::bus::match::match>,
+ int64_t>> state;
+
+ /** The current state of the sensor. */
+ bool currentState;
+};
+
+} // namespace presence
+} // namespace fan
+} // namespace phosphor
OpenPOWER on IntegriCloud