blob: 2c31757258c59c97c1e21156554561809b653258 [file] [log] [blame]
#include "cooling_type.hpp"
#include "sdbusplus.hpp"
#include <CLI/CLI.hpp>
#include <phosphor-logging/log.hpp>
#include <sdbusplus/bus.hpp>
#include <format>
#include <iostream>
#include <memory>
using namespace phosphor::cooling::type;
using namespace phosphor::fan::util;
using namespace phosphor::logging;
int main(int argc, char* argv[])
{
auto rc = 1;
CLI::App app{"Phosphor Cooling type"};
std::string objpath{};
bool air = false;
bool water = false;
std::string gpiopath{};
std::string keycode{};
app.add_option("-p,--path", objpath,
"object path under inventory to have CoolingType updated")
->required();
app.add_flag("-a,--air", air,
"Force 'AirCooled' property to be set to true.");
app.add_flag("-w,--water", water,
"Force 'WaterCooled' property to be set to true.");
app.add_option(
"-d,--dev", gpiopath,
"Device to read for GPIO pin state to determine 'WaterCooled' (true) and 'AirCooled' (false)");
app.add_option("-e,--event", keycode, "Keycode for pin to read");
app.allow_extras();
try
{
app.parse(argc, argv);
}
catch (const CLI::Error& e)
{
return app.exit(e);
}
if (objpath.empty())
{
log<level::ERR>("Bus path argument required");
return rc;
}
auto bus = sdbusplus::bus::new_default();
CoolingType coolingType(bus);
try
{
if (air)
{
coolingType.setAirCooled();
}
if (water)
{
coolingType.setWaterCooled();
}
if (!gpiopath.empty())
{
if (keycode.empty())
{
log<level::ERR>("--event=<keycode> argument required\n");
return rc;
}
auto gpiocode = std::stoul(keycode);
coolingType.readGpio(gpiopath, gpiocode);
}
coolingType.updateInventory(objpath);
rc = 0;
}
catch (const DBusMethodError& dme)
{
log<level::ERR>(std::format("Uncaught DBus method failure exception "
"Busname: {} "
"Path: {} "
"Interface: {} "
"Method: {}",
dme.busName, dme.path, dme.interface,
dme.method)
.c_str());
}
catch (const std::exception& err)
{
log<phosphor::logging::level::ERR>(err.what());
}
return rc;
}
// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4