1 #include <memory> 2 #include <algorithm> 3 #include <phosphor-logging/log.hpp> 4 #include "occ_pass_through.hpp" 5 #include "occ_finder.hpp" 6 7 namespace open_power 8 { 9 namespace occ 10 { 11 namespace pass_through 12 { 13 14 void run() 15 { 16 auto bus = sdbusplus::bus::new_default(); 17 sdbusplus::server::manager::manager objManager(bus, 18 OCC_PASS_THROUGH_ROOT); 19 20 std::vector<std::unique_ptr<PassThrough>> objects; 21 auto occs = open_power::occ::finder::get(); 22 23 for (const auto& occ : occs) 24 { 25 auto occPassThrough = object(occ); 26 objects.emplace_back( 27 std::make_unique<PassThrough>(bus, occPassThrough.c_str())); 28 } 29 bus.request_name(OCC_PASS_THROUGH_BUSNAME); 30 31 while (true) 32 { 33 bus.process_discard(); 34 bus.wait(); 35 } 36 } 37 38 PassThrough::PassThrough( 39 sdbusplus::bus::bus& bus, 40 const char* path) : 41 Iface(bus, path), 42 path(path) 43 { 44 // Nothing 45 } 46 47 std::vector<int32_t> PassThrough::send(std::vector<int32_t> command) 48 { 49 std::string msg = "Pass through to OCC "; 50 msg += path; 51 52 std::string cmd; 53 std::for_each(command.cbegin(), command.cend(), 54 [&cmd](const auto& c) 55 { 56 cmd += std::to_string(c); 57 cmd += ','; 58 }); 59 if (!cmd.empty()) 60 { 61 // Remove trailing ',' 62 cmd.pop_back(); 63 } 64 65 using namespace phosphor::logging; 66 log<level::INFO>(msg.c_str(), entry("COMMAND=%s", cmd.c_str())); 67 68 return {}; 69 } 70 71 } // namespace pass_through 72 } // namespace occ 73 } // namespace open_power 74