1 #include "argument.hpp" 2 #include "cooling_type.hpp" 3 #include "sdbusplus.hpp" 4 5 #include <fmt/format.h> 6 7 #include <phosphor-logging/log.hpp> 8 #include <sdbusplus/bus.hpp> 9 10 #include <iostream> 11 #include <memory> 12 13 using namespace phosphor::cooling::type; 14 using namespace phosphor::fan::util; 15 using namespace phosphor::logging; 16 17 int main(int argc, char* argv[]) 18 { 19 auto rc = 1; 20 auto options = ArgumentParser(argc, argv); 21 22 auto objpath = (options)["path"]; 23 if (argc < 2) 24 { 25 std::cerr << std::endl << "Too few arguments" << std::endl; 26 log<level::ERR>("Too few arguments"); 27 options.usage(argv); 28 } 29 else if (objpath == ArgumentParser::empty_string) 30 { 31 log<level::ERR>("Bus path argument required"); 32 } 33 else 34 { 35 auto bus = sdbusplus::bus::new_default(); 36 CoolingType coolingType(bus); 37 38 try 39 { 40 auto air = (options)["air"]; 41 if (air != ArgumentParser::empty_string) 42 { 43 coolingType.setAirCooled(); 44 } 45 46 auto water = (options)["water"]; 47 if (water != ArgumentParser::empty_string) 48 { 49 coolingType.setWaterCooled(); 50 } 51 52 auto gpiopath = (options)["dev"]; 53 if (gpiopath != ArgumentParser::empty_string) 54 { 55 auto keycode = (options)["event"]; 56 if (keycode != ArgumentParser::empty_string) 57 { 58 auto gpiocode = std::stoul(keycode); 59 coolingType.readGpio(gpiopath, gpiocode); 60 } 61 else 62 { 63 log<level::ERR>("--event=<keycode> argument required\n"); 64 return rc; 65 } 66 } 67 68 coolingType.updateInventory(objpath); 69 rc = 0; 70 } 71 catch (const DBusMethodError& dme) 72 { 73 log<level::ERR>( 74 fmt::format("Uncaught DBus method failure exception " 75 "Busname: {} " 76 "Path: {} " 77 "Interface: {} " 78 "Method: {}", 79 dme.busName, dme.path, dme.interface, dme.method) 80 .c_str()); 81 } 82 catch (const std::exception& err) 83 { 84 log<phosphor::logging::level::ERR>(err.what()); 85 } 86 } 87 88 return rc; 89 } 90 91 // vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 92