1 #include "config.h" 2 3 #include "group.hpp" 4 #ifdef LED_USE_JSON 5 #include "json-parser.hpp" 6 #else 7 #include "led-gen.hpp" 8 #endif 9 #include "ledlayout.hpp" 10 #include "manager.hpp" 11 #include "serialize.hpp" 12 #include "utils.hpp" 13 #ifdef USE_LAMP_TEST 14 #include "lamptest/lamptest.hpp" 15 #endif 16 17 #include <sdeventplus/event.hpp> 18 19 #include <algorithm> 20 #include <iostream> 21 22 int main(void) 23 { 24 // Get a default event loop 25 auto event = sdeventplus::Event::get_default(); 26 27 /** @brief Dbus constructs used by LED Group manager */ 28 auto& bus = phosphor::led::utils::DBusHandler::getBus(); 29 30 #ifdef LED_USE_JSON 31 auto systemLedMap = getSystemLedMap(); 32 #endif 33 34 /** @brief Group manager object */ 35 phosphor::led::Manager manager(bus, systemLedMap); 36 37 /** @brief sd_bus object manager */ 38 sdbusplus::server::manager::manager objManager(bus, OBJPATH); 39 40 /** @brief vector of led groups */ 41 std::vector<std::unique_ptr<phosphor::led::Group>> groups; 42 43 /** @brief store and re-store Group */ 44 phosphor::led::Serialize serialize(SAVED_GROUPS_FILE); 45 46 #ifdef USE_LAMP_TEST 47 phosphor::led::LampTest lampTest(event, manager); 48 49 groups.emplace_back(std::make_unique<phosphor::led::Group>( 50 bus, LAMP_TEST_OBJECT, manager, serialize, 51 std::bind(std::mem_fn(&phosphor::led::LampTest::requestHandler), 52 &lampTest, std::placeholders::_1, std::placeholders::_2))); 53 54 // Register a lamp test method in the manager class, and call this method 55 // when the lamp test is started 56 manager.setLampTestCallBack( 57 std::bind(std::mem_fn(&phosphor::led::LampTest::processLEDUpdates), 58 &lampTest, std::placeholders::_1, std::placeholders::_2)); 59 #endif 60 61 /** Now create so many dbus objects as there are groups */ 62 std::ranges::transform( 63 systemLedMap, std::back_inserter(groups), 64 [&bus, &manager, &serialize]( 65 const std::pair<std::string, 66 std::set<phosphor::led::Layout::LedAction>>& grp) { 67 return std::make_unique<phosphor::led::Group>(bus, grp.first, 68 manager, serialize); 69 }); 70 71 // Attach the bus to sd_event to service user requests 72 bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL); 73 74 /** @brief Claim the bus */ 75 bus.request_name(BUSNAME); 76 event.loop(); 77 78 return 0; 79 } 80