blob: 1045369ccd36a47c73bd469826f39a751ff6d8a2 [file] [log] [blame]
Andrew Geissler378fe112022-02-03 16:39:44 -06001#include "config.h"
2
3#include "utils.hpp"
4
5#include <getopt.h>
6#include <systemd/sd-bus.h>
7
8#include <phosphor-logging/elog-errors.hpp>
9#include <phosphor-logging/lg2.hpp>
10#include <sdbusplus/exception.hpp>
11#include <sdbusplus/server.hpp>
12
13#include <iostream>
14#include <map>
15#include <string>
16
17PHOSPHOR_LOG2_USING;
18
19using namespace phosphor::logging;
20using namespace sdbusplus::xyz::openbmc_project::Common::Error;
21
22int main(int argc, char** argv)
23{
24 std::string chassisPath = "/xyz/openbmc_project/state/chassis0";
25 int arg;
26 int optIndex = 0;
27
28 static struct option longOpts[] = {{"chassis", required_argument, 0, 'c'},
29 {0, 0, 0, 0}};
30
31 while ((arg = getopt_long(argc, argv, "c:", longOpts, &optIndex)) != -1)
32 {
33 switch (arg)
34 {
35 case 'c':
36 chassisPath =
37 std::string("/xyz/openbmc_project/state/chassis") + optarg;
38 break;
39 default:
40 break;
41 }
42 }
43
44 auto bus = sdbusplus::bus::new_default();
45
46 // If the chassis power status is not good, log an error and exit with
47 // a non-zero rc so the system does not power on
48 auto currentPowerStatus = phosphor::state::manager::utils::getProperty(
49 bus, chassisPath, CHASSIS_BUSNAME, "CurrentPowerStatus");
50 if (currentPowerStatus !=
51 "xyz.openbmc_project.State.Chassis.PowerStatus.Good")
52 {
53 error("Chassis power status is not good: {CURRENT_PWR_STATUS}",
54 "CURRENT_PWR_STATUS", currentPowerStatus);
55
56 // Generate log telling user why system is not powering on
57 const std::string errorMsg =
58 "xyz.openbmc_project.State.ChassisPowerBad";
59 phosphor::state::manager::utils::createError(
60 bus, errorMsg,
61 sdbusplus::xyz::openbmc_project::Logging::server::Entry::Level::
62 Critical);
63 return -1;
64 }
65 // all good
66 info("Chassis power status good, start power on");
67 return 0;
68}