blob: d4af0bb12ba87e7694b9b65b76fb8b71334127fe [file] [log] [blame]
// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "debugd/src/battery_tool.h"
#include <unistd.h>
#include "debugd/src/process_with_id.h"
#include "debugd/src/process_with_output.h"
namespace {
const char kBatteryFirmware[] = "/usr/sbin/ec_sb_firmware_update";
const char kEcTool[] = "/usr/sbin/ectool";
const char kUnsupportedMessage[] =
"Sorry, but this command is unavailable on this device.";
} // namespace
namespace debugd {
std::string BatteryTool::BatteryFirmware(const std::string& option) {
const char* tool_name;
std::string output;
ProcessWithOutput process;
// Disabling sandboxing since battery requires higher privileges.
process.DisableSandbox();
if (!process.Init())
return "<process init failed>";
if (option == "info") {
tool_name = kEcTool;
process.AddArg(tool_name);
process.AddArg("battery");
} else if (option == "update") {
tool_name = kBatteryFirmware;
process.AddArg(tool_name);
process.AddArg("update");
} else if (option == "check") {
tool_name = kBatteryFirmware;
process.AddArg(tool_name);
process.AddArg("check");
} else {
return "<process invalid option>";
}
if (access(tool_name, F_OK) != 0)
return kUnsupportedMessage;
process.Run();
process.GetOutput(&output);
return output;
}
} // namespace debugd