xref: /openbmc/pldm/softoff/main.cpp (revision fe6f0d40)
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