blob: 55ce3e49ed5cad0e7cc8838929c4f25ebd24d87f [file] [log] [blame]
// Copyright 2020 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 "diagnostics/cros_healthd/utils/battery_utils.h"
#include <cmath>
#include <base/strings/string_number_conversions.h>
#include "diagnostics/cros_healthd/utils/file_utils.h"
namespace diagnostics {
const char kBatteryDirectoryPath[] = "sys/class/power_supply/BAT0";
const char kBatteryChargeFullFileName[] = "charge_full";
const char kBatteryChargeFullDesignFileName[] = "charge_full_design";
const char kBatteryChargeNowFileName[] = "charge_now";
const char kBatteryCurrentNowFileName[] = "current_now";
const char kBatteryCycleCountFileName[] = "cycle_count";
const char kBatteryEnergyFullFileName[] = "energy_full";
const char kBatteryEnergyFullDesignFileName[] = "energy_full_design";
const char kBatteryManufacturerFileName[] = "manufacturer";
const char kBatteryPresentFileName[] = "present";
const char kBatteryStatusFileName[] = "status";
const char kBatteryVoltageNowFileName[] = "voltage_now";
const char kBatteryStatusChargingValue[] = "Charging";
const char kBatteryStatusDischargingValue[] = "Discharging";
base::Optional<double> CalculateBatteryChargePercent(
const base::FilePath& root_dir) {
base::FilePath battery_path = root_dir.Append(kBatteryDirectoryPath);
uint32_t charge_now;
if (!ReadInteger(battery_path, kBatteryChargeNowFileName, base::StringToUint,
&charge_now)) {
return base::nullopt;
}
uint32_t charge_full;
if (!ReadInteger(battery_path, kBatteryChargeFullFileName, base::StringToUint,
&charge_full)) {
return base::nullopt;
}
return 100.0 *
(static_cast<double>(charge_now) / static_cast<double>(charge_full));
}
} // namespace diagnostics