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