1 #pragma once 2 3 #include "config.h" 4 5 #include <sdbusplus/bus.hpp> 6 #include <sdbusplus/server.hpp> 7 8 #include <string> 9 10 namespace phosphor 11 { 12 namespace led 13 { 14 namespace fru 15 { 16 namespace fault 17 { 18 namespace monitor 19 { 20 21 /** @brief Assert or deassert an LED based on the input FRU 22 * @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 */ 26 void action(sdbusplus::bus_t& bus, const std::string& path, bool assert); 27 28 /** @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 */ 33 class Remove 34 { 35 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; 42 43 /** @brief constructs Remove 44 * @param[in] bus - The Dbus bus object 45 * @param[in] path - Inventory path to fru 46 */ Remove(sdbusplus::bus_t & bus,const std::string & path)47 Remove(sdbusplus::bus_t& bus, const std::string& path) : 48 inventoryPath(path), 49 matchRemoved(bus, match(path), 50 [this](sdbusplus::message_t& m) { removed(m); }) 51 { 52 // Do nothing 53 } 54 55 private: 56 /** @brief inventory path of the FRU */ 57 std::string inventoryPath; 58 59 /** @brief sdbusplus signal matches for fault removed */ 60 sdbusplus::bus::match_t matchRemoved; 61 62 /** @brief Callback function for fru fault created 63 * @param[in] msg - Data associated with subscribed signal 64 */ 65 void removed(sdbusplus::message_t& msg); 66 67 /** @brief function to create fault remove match for a fru 68 * @param[in] path - Inventory path of the faulty unit. 69 */ match(const std::string & path)70 static std::string match(const std::string& path) 71 { 72 namespace MatchRules = sdbusplus::bus::match::rules; 73 74 std::string matchStmt = 75 MatchRules::interfacesRemoved() + 76 MatchRules::argNpath(0, path + "/" + CALLOUT_REV_ASSOCIATION); 77 78 return matchStmt; 79 } 80 }; 81 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 */ 87 class 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 */ Add(sdbusplus::bus_t & bus)100 explicit Add(sdbusplus::bus_t& bus) : 101 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); }) 106 { 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 }; 126 } // namespace monitor 127 } // namespace fault 128 } // namespace fru 129 } // namespace led 130 } // namespace phosphor 131