blob: 4f02521edf266b9c08269bbb9b8c6c99a71c3781 [file] [log] [blame]
Brad Bishopdd62e362017-06-14 16:54:03 -04001#pragma once
2
3#include <sdbusplus/message.hpp>
4#include <sdbusplus/bus/match.hpp>
5#include <string>
6#include <vector>
7#include "psensor.hpp"
8#include "sdbusplus.hpp"
9
10namespace phosphor
11{
12namespace fan
13{
14namespace presence
15{
16class RedundancyPolicy;
17
18/**
19 * @class Tach
20 * @brief Fan tach sensor presence implementation.
21 *
22 * The Tach class uses one or more tach speed indicators
23 * to determine presence state.
24 */
25class Tach : public PresenceSensor
26{
27 public:
28 /**
29 * @brief
30 *
31 * Cannot move or copy due to this ptr as context
32 * for sdbus callbacks.
33 */
34 Tach() = delete;
35 Tach(const Tach&) = delete;
36 Tach& operator=(const Tach&) = delete;
37 Tach(Tach&&) = delete;
38 Tach& operator=(Tach&&) = delete;
39 ~Tach() = default;
40
41 /**
42 * @brief ctor
43 *
44 * @param[in] sensors - Fan tach sensors for this psensor.
45 */
46 Tach(const std::vector<std::string>& sensors);
47
48 /**
49 * @brief start
50 *
51 * Register for dbus signal callbacks on fan
52 * tach sensor change. Query initial tach speeds.
53 *
54 * @return The current sensor state.
55 */
56 bool start() override;
57
58 /**
59 * @brief stop
60 *
61 * De-register dbus signal callbacks.
62 */
63 void stop() override;
64
65 /**
66 * @brief Check the sensor.
67 *
68 * Query the tach speeds.
69 */
70 bool present() override;
71
72 private :
73 /**
74 * @brief Get the policy associated with this sensor.
75 */
76 virtual RedundancyPolicy& getPolicy() = 0;
77
78 /**
79 * @brief Properties changed handler for tach sensor updates.
80 *
81 * @param[in] sensor - The sensor that changed.
82 * @param[in] props - The properties that changed.
83 */
84 void propertiesChanged(
85 size_t sensor,
86 const phosphor::fan::util::Properties<int64_t>& props);
87
88 /**
89 * @brief Properties changed handler for tach sensor updates.
90 *
91 * @param[in] sensor - The sensor that changed.
92 * @param[in] msg - The sdbusplus signal message.
93 */
94 void propertiesChanged(
95 size_t sensor,
96 sdbusplus::message::message& msg);
97
98 /** @brief array of tach sensors dbus matches, and tach values. */
99 std::vector<std::tuple<
100 std::string,
101 std::unique_ptr<sdbusplus::bus::match::match>,
102 int64_t>> state;
103
104 /** The current state of the sensor. */
105 bool currentState;
106};
107
108} // namespace presence
109} // namespace fan
110} // namespace phosphor