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