forked from ibm-openbmc/phosphor-led-manager
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlamptest.hpp
145 lines (117 loc) · 4.27 KB
/
lamptest.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#pragma once
#include "config.h"
#include "group.hpp"
#include "manager.hpp"
#include <nlohmann/json.hpp>
#include <sdeventplus/utility/timer.hpp>
#include <queue>
#include <vector>
namespace phosphor
{
namespace led
{
/** @class LampTest
* @brief Manager LampTest feature
*/
class LampTest
{
public:
LampTest() = delete;
~LampTest() = default;
LampTest(const LampTest&) = delete;
LampTest& operator=(const LampTest&) = delete;
LampTest(LampTest&&) = default;
LampTest& operator=(LampTest&&) = default;
/** @brief Constructs LED LampTest
*
* Constructs timer and when the timeout occurs, the stop method is called
* back to stop timer and also end the lamp test.
*
* @param[in] event - sd event handler
* @param[in] manager - reference to manager instance
*/
LampTest(const sdeventplus::Event& event, Manager& manager) :
timer(event, std::bind(std::mem_fn(&LampTest::timeOutHandler), this)),
manager(manager), groupObj(NULL)
{
// Get the force update and/or skipped physical LEDs names from the
// lamp-test-led-overrides.json file during lamp
getPhysicalLEDNamesFromJson(LAMP_TEST_LED_OVERRIDES_JSON);
}
/** @brief the lamp test request handler
*
* @param[in] group - Pointer to Group object
* @param[in] value - true: start lamptest
* false: stop lamptest
* @return
*/
void requestHandler(Group* group, bool value);
/** @brief Update physical LEDs states during lamp test and the lamp test is
* running
*
* @param[in] ledsAssert - LEDs that are to be asserted newly or to a
* different state
* @param[in] ledsDeAssert - LEDs that are to be Deasserted
*
* @return Is running lamp test, true running
*/
bool processLEDUpdates(const Manager::group& ledsAssert,
const Manager::group& ledsDeAssert);
private:
/** @brief Timer used for LEDs lamp test period */
sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic> timer;
/** @brief Reference to Manager object */
Manager& manager;
/** DBusHandler class handles the D-Bus operations */
DBusHandler dBusHandler;
/** @brief Pointer to Group object */
Group* groupObj;
/** all the Physical paths */
std::vector<std::string> physicalLEDPaths;
/** @brief Queue to save LED states during lamp test */
std::queue<std::pair<Manager::group, Manager::group>>
updatedLEDsDuringLampTest;
/** @brief Get state of the lamp test operation */
bool isLampTestRunning{false};
/** @brief Physical LED states prior to lamp test */
Manager::group physicalLEDStatesPriorToLampTest;
/** @brief Vector of names of physical LEDs, whose changes will be forcibly
* updated even during lamp test. */
std::vector<std::string> forceUpdateLEDs;
/** @brief Vector of names of physical LEDs, that will be exempted from lamp
* test */
std::vector<std::string> skipUpdateLEDs;
/** @brief Start and restart lamp test depending on what is the current
* state. */
void start();
/** @brief Stop lamp test. */
void stop();
/** @brief This method gets called when the lamp test procedure is done as
* part of timeout. */
void timeOutHandler();
/** @brief Restore the physical LEDs states after the lamp test finishes */
void restorePhysicalLedStates();
/** @brief Store the physical LEDs states before the lamp test start */
void storePhysicalLEDsStates();
/** @brief Returns action enum based on string
*
* @param[in] str - Action string
*
* @return enumeration equivalent of the passed in string
*/
Layout::Action getActionFromString(const std::string& str);
/** @brief Notify PHYP to start / stop the lamp test
*
* @param[in] value - the Asserted property value
*/
void doHostLampTest(bool value);
/** @brief Get physical LED names from lamp test JSON config file
*
* @param[in] path - path of LED JSON file
*
* return
*/
void getPhysicalLEDNamesFromJson(const fs::path& path);
};
} // namespace led
} // namespace phosphor