Commit 959282b8 authored by Jesse Schettler's avatar Jesse Schettler Committed by Commit Bot

cros_healthd: Add SmartBatteryInfo to cros_healthd_probe.mojom

Add SmartBatteryInfo to store Smart Battery information. Update
DeviceStatusCollector to correctly include this info in the
DeviceStatusReportRequest.

Bug: 1026848
Change-Id: I00951bc8c4ef7e2acdd5f5371108e3d10993f76f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2028261Reviewed-by: default avatarJorge Lucangeli Obes <jorgelo@chromium.org>
Reviewed-by: default avatarMaksim Ivanov <emaxx@chromium.org>
Commit-Queue: Jesse Schettler <jschettler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#737534}
parent 482019aa
......@@ -145,6 +145,9 @@ const char kFirmwareNotParsed[] = "FirmwareNotParsed";
// File to look for firmware number in.
const char kPathFirmware[] = "/var/log/bios_info.txt";
// O°C in deciKelvin.
const unsigned int kZeroCInDeciKelvin = 2731;
// Helper function (invoked via blocking pool) to fetch information about
// mounted disks.
std::vector<em::VolumeInfo> GetVolumeInfo(
......@@ -792,18 +795,9 @@ class DeviceStatusCollectorState : public StatusCollectorState {
// Convert V to mV:
battery_info_out->set_design_min_voltage(
std::lround(battery_info->voltage_min_design * 1000));
if (battery_info->manufacture_date_smart > 0) {
// manufacture_date in (((year-1980) * 16 + month) * 32 + day) format.
int remainder = battery_info->manufacture_date_smart;
int day = remainder % 32;
remainder /= 32;
int month = remainder % 16;
remainder /= 16;
int year = remainder + 1980;
// set manufacture_date in yyyy-mm-dd format.
battery_info_out->set_manufacture_date(
base::StringPrintf("%04d-%02d-%02d", year, month, day));
}
const auto& smart_info = battery_info->smart_battery_info;
if (!smart_info.is_null())
battery_info_out->set_manufacture_date(smart_info->manufacture_date);
const auto& cpu_info = probe_result->cpu_info;
if (cpu_info.has_value()) {
for (const auto& cpu : cpu_info.value()) {
......@@ -1287,7 +1281,11 @@ void DeviceStatusCollector::SampleProbeData(
battery_sample.set_remaining_capacity(
std::lround(battery->charge_now * 1000));
// Convert 0.1 Kelvin to Celsius:
battery_sample.set_temperature((battery->temperature_smart - 2731) / 10);
const auto& smart_info = battery->smart_battery_info;
if (!smart_info.is_null()) {
battery_sample.set_temperature(
(smart_info->temperature - kZeroCInDeciKelvin) / 10);
}
sample->battery_samples[battery->model_name] = battery_sample;
}
......
......@@ -4,6 +4,7 @@
#include "chromeos/services/cros_healthd/public/cpp/service_connection.h"
#include <utility>
#include <vector>
#include "base/bind.h"
......@@ -81,13 +82,14 @@ MakeNonRemovableBlockDeviceInfo() {
}
mojom::BatteryInfoPtr MakeBatteryInfo() {
mojom::SmartBatteryInfoPtr smart_info = mojom::SmartBatteryInfo::New(
"2018-08-06" /* manufacture_date */, 981729 /* temperature */);
return mojom::BatteryInfo::New(
2 /* cycle_count */, 12.9 /* voltage_now */,
"battery_vendor" /* vendor */, "serial_number" /* serial_number */,
5.275 /* charge_full_design */, 5.292 /* charge_full */,
11.55 /* voltage_min_design */, 51785890 /* manufacture_date_smart */,
/*temperature smart=*/981729, /*model_name=*/"battery_model",
/*charge_now=*/5.123);
11.55 /* voltage_min_design */, "battery_model" /* model_name */,
5.123 /* charge_now */, std::move(smart_info));
}
mojom::CachedVpdInfoPtr MakeCachedVpdInfo() {
......
......@@ -27,6 +27,15 @@ enum ProbeCategoryEnum {
kTimezone,
};
// Information related to a Smart Battery, as defined in
// http://sbs-forum.org/specs/sbdat110.pdf.
struct SmartBatteryInfo {
// Manufacture date converted to yyyy-mm-dd format.
string manufacture_date;
// Temperature in 0.1K.
uint64 temperature;
};
// Information related to the main battery.
struct BatteryInfo {
// TODO(https://crbug.com/979245): Update "smart" cycle count.
......@@ -43,17 +52,13 @@ struct BatteryInfo {
double charge_full;
// Desired minimum output voltage (V)
double voltage_min_design;
// Smart Manufacture Date is defined in
// http://sbs-forum.org/specs/sbdat110.pdf. The value is calculated by
// ((year-1980) * 512 + month * 32 + day).
int64 manufacture_date_smart;
// Temperature in 0.1°K as Smart Battery Temperature defined in
// http://sbs-forum.org/specs/sbdat110.pdf
uint64 temperature_smart;
// Model name.
string model_name;
// Current battery charge (Ah)
double charge_now;
// Information related to a Smart Battery. Included when the main battery is a
// Smart Battery.
SmartBatteryInfo? smart_battery_info;
};
// Information related to a specific non-removable block device.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment