blob: adb6e9bce72f69d139508c9e82e9885f7c14ffe7 [file] [log] [blame]
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -05001#pragma once
2
Patrick Venture91ac8d32018-11-01 17:03:22 -07003#include "config.h"
4
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -05005#include <sdbusplus/bus.hpp>
6#include <sdbusplus/server.hpp>
George Liua6c18f82020-06-22 10:50:04 +08007
Andrew Geisslerd02c3cb2020-05-16 10:28:02 -05008#include <string>
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -05009
10namespace phosphor
11{
12namespace led
13{
14namespace fru
15{
16namespace fault
17{
18namespace monitor
19{
20
21/** @brief Assert or deassert an LED based on the input FRU
Patrick Venture91ac8d32018-11-01 17:03:22 -070022 * @param[in] bus - The Dbus bus object
23 * @param[in] path - Inventory path of the FRU
24 * @param[in] assert - Assert if true deassert if false
25 */
Patrick Williams3e073ba2022-07-22 19:26:52 -050026void action(sdbusplus::bus_t& bus, const std::string& path, bool assert);
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -050027
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -050028/** @class Remove
29 * @brief Implementation of LED handling after resolution of FRU fault
30 * @details Implement methods for watching the resolution of FRU faults
31 * and deasserting corresponding LED.
32 */
33class Remove
34{
Patrick Venture91ac8d32018-11-01 17:03:22 -070035 public:
36 Remove() = delete;
37 ~Remove() = default;
38 Remove(const Remove&) = delete;
39 Remove& operator=(const Remove&) = delete;
40 Remove(Remove&&) = default;
41 Remove& operator=(Remove&&) = default;
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -050042
Patrick Venture91ac8d32018-11-01 17:03:22 -070043 /** @brief constructs Remove
44 * @param[in] bus - The Dbus bus object
45 * @param[in] path - Inventory path to fru
46 */
Patrick Williams3e073ba2022-07-22 19:26:52 -050047 Remove(sdbusplus::bus_t& bus, const std::string& path) :
Patrick Venture91ac8d32018-11-01 17:03:22 -070048 inventoryPath(path),
49 matchRemoved(bus, match(path),
George Liu226059b2024-08-22 16:01:44 +080050 [this](sdbusplus::message_t& m) { removed(m); })
Patrick Venture91ac8d32018-11-01 17:03:22 -070051 {
52 // Do nothing
53 }
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -050054
Patrick Venture91ac8d32018-11-01 17:03:22 -070055 private:
56 /** @brief inventory path of the FRU */
57 std::string inventoryPath;
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -050058
Patrick Venture91ac8d32018-11-01 17:03:22 -070059 /** @brief sdbusplus signal matches for fault removed */
60 sdbusplus::bus::match_t matchRemoved;
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -050061
Patrick Venture91ac8d32018-11-01 17:03:22 -070062 /** @brief Callback function for fru fault created
63 * @param[in] msg - Data associated with subscribed signal
64 */
Patrick Williams3e073ba2022-07-22 19:26:52 -050065 void removed(sdbusplus::message_t& msg);
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -050066
Patrick Venture91ac8d32018-11-01 17:03:22 -070067 /** @brief function to create fault remove match for a fru
68 * @param[in] path - Inventory path of the faulty unit.
69 */
George Liuf0592552024-08-23 09:46:17 +080070 static std::string match(const std::string& path)
Patrick Venture91ac8d32018-11-01 17:03:22 -070071 {
72 namespace MatchRules = sdbusplus::bus::match::rules;
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -050073
Patrick Venture91ac8d32018-11-01 17:03:22 -070074 std::string matchStmt =
75 MatchRules::interfacesRemoved() +
76 MatchRules::argNpath(0, path + "/" + CALLOUT_REV_ASSOCIATION);
Patrick Williams3eedbe42017-05-31 17:27:05 -050077
Patrick Venture91ac8d32018-11-01 17:03:22 -070078 return matchStmt;
79 }
Dhruvaraj Subhashchandran59b86cd2017-04-13 00:19:44 -050080};
George Liu191949c2024-07-22 15:17:49 +080081
82/** @class Add
83 * @brief Implementation of LED handling during FRU fault
84 * @details This implements methods for watching for a FRU fault
85 * being logged to assert the corresponding LED
86 */
87class Add
88{
89 public:
90 Add() = delete;
91 ~Add() = default;
92 Add(const Add&) = delete;
93 Add& operator=(const Add&) = delete;
94 Add(Add&&) = default;
95 Add& operator=(Add&&) = default;
96
97 /** @brief constructs Add a watch for FRU faults.
98 * @param[in] bus - The Dbus bus object
99 */
100 explicit Add(sdbusplus::bus_t& bus) :
George Liu226059b2024-08-22 16:01:44 +0800101 matchCreated(bus,
102 sdbusplus::bus::match::rules::interfacesAdded() +
103 sdbusplus::bus::match::rules::path_namespace(
104 "/xyz/openbmc_project/logging"),
105 [this](sdbusplus::message_t& m) { created(m); })
George Liu191949c2024-07-22 15:17:49 +0800106 {
107 processExistingCallouts(bus);
108 }
109
110 private:
111 /** @brief sdbusplus signal match for fault created */
112 sdbusplus::bus::match_t matchCreated;
113
114 std::vector<std::unique_ptr<Remove>> removeWatches;
115
116 /** @brief Callback function for fru fault created
117 * @param[in] msg - Data associated with subscribed signal
118 */
119 void created(sdbusplus::message_t& msg);
120
121 /** @brief This function process all callouts at application start
122 * @param[in] bus - The Dbus bus object
123 */
124 void processExistingCallouts(sdbusplus::bus_t& bus);
125};
Patrick Venture91ac8d32018-11-01 17:03:22 -0700126} // namespace monitor
127} // namespace fault
128} // namespace fru
129} // namespace led
130} // namespace phosphor