1 #include "common/utils.hpp" 2 #include "softoff.hpp" 3 4 #include <iostream> 5 6 int main() 7 { 8 // Get a default event loop 9 auto event = sdeventplus::Event::get_default(); 10 11 // Get a handle to system D-Bus. 12 auto& bus = pldm::utils::DBusHandler::getBus(); 13 14 // Attach the bus to sd_event to service user requests 15 bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL); 16 17 pldm::SoftPowerOff softPower(bus, event.get()); 18 19 if (softPower.isError()) 20 { 21 std::cerr << "Host failed to gracefully shutdown, exiting " 22 "pldm-softpoweroff app\n"; 23 return -1; 24 } 25 26 if (softPower.isCompleted()) 27 { 28 std::cerr << "Host current state is not Running, exiting " 29 "pldm-softpoweroff app\n"; 30 return 0; 31 } 32 33 // Send the gracefully shutdown request to the host and 34 // wait the host gracefully shutdown. 35 if (softPower.hostSoftOff(event)) 36 { 37 std::cerr << "pldm-softpoweroff:Failure in sending soft off request to " 38 "the host. Exiting pldm-softpoweroff app\n"; 39 40 return -1; 41 } 42 43 if (softPower.isTimerExpired() && softPower.isReceiveResponse()) 44 { 45 pldm::utils::reportError( 46 "pldm soft off: Waiting for the host soft off timeout"); 47 std::cerr 48 << "PLDM host soft off: ERROR! Wait for the host soft off timeout." 49 << "Exit the pldm-softpoweroff " 50 << "\n"; 51 return -1; 52 } 53 54 return 0; 55 } 56