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"; ...@@ -145,6 +145,9 @@ const char kFirmwareNotParsed[] = "FirmwareNotParsed";
// File to look for firmware number in. // File to look for firmware number in.
const char kPathFirmware[] = "/var/log/bios_info.txt"; 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 // Helper function (invoked via blocking pool) to fetch information about
// mounted disks. // mounted disks.
std::vector<em::VolumeInfo> GetVolumeInfo( std::vector<em::VolumeInfo> GetVolumeInfo(
...@@ -792,18 +795,9 @@ class DeviceStatusCollectorState : public StatusCollectorState { ...@@ -792,18 +795,9 @@ class DeviceStatusCollectorState : public StatusCollectorState {
// Convert V to mV: // Convert V to mV:
battery_info_out->set_design_min_voltage( battery_info_out->set_design_min_voltage(
std::lround(battery_info->voltage_min_design * 1000)); std::lround(battery_info->voltage_min_design * 1000));
if (battery_info->manufacture_date_smart > 0) { const auto& smart_info = battery_info->smart_battery_info;
// manufacture_date in (((year-1980) * 16 + month) * 32 + day) format. if (!smart_info.is_null())
int remainder = battery_info->manufacture_date_smart; battery_info_out->set_manufacture_date(smart_info->manufacture_date);
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& cpu_info = probe_result->cpu_info; const auto& cpu_info = probe_result->cpu_info;
if (cpu_info.has_value()) { if (cpu_info.has_value()) {
for (const auto& cpu : cpu_info.value()) { for (const auto& cpu : cpu_info.value()) {
...@@ -1287,7 +1281,11 @@ void DeviceStatusCollector::SampleProbeData( ...@@ -1287,7 +1281,11 @@ void DeviceStatusCollector::SampleProbeData(
battery_sample.set_remaining_capacity( battery_sample.set_remaining_capacity(
std::lround(battery->charge_now * 1000)); std::lround(battery->charge_now * 1000));
// Convert 0.1 Kelvin to Celsius: // 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; sample->battery_samples[battery->model_name] = battery_sample;
} }
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "chromeos/services/cros_healthd/public/cpp/service_connection.h" #include "chromeos/services/cros_healthd/public/cpp/service_connection.h"
#include <utility>
#include <vector> #include <vector>
#include "base/bind.h" #include "base/bind.h"
...@@ -81,13 +82,14 @@ MakeNonRemovableBlockDeviceInfo() { ...@@ -81,13 +82,14 @@ MakeNonRemovableBlockDeviceInfo() {
} }
mojom::BatteryInfoPtr MakeBatteryInfo() { mojom::BatteryInfoPtr MakeBatteryInfo() {
mojom::SmartBatteryInfoPtr smart_info = mojom::SmartBatteryInfo::New(
"2018-08-06" /* manufacture_date */, 981729 /* temperature */);
return mojom::BatteryInfo::New( return mojom::BatteryInfo::New(
2 /* cycle_count */, 12.9 /* voltage_now */, 2 /* cycle_count */, 12.9 /* voltage_now */,
"battery_vendor" /* vendor */, "serial_number" /* serial_number */, "battery_vendor" /* vendor */, "serial_number" /* serial_number */,
5.275 /* charge_full_design */, 5.292 /* charge_full */, 5.275 /* charge_full_design */, 5.292 /* charge_full */,
11.55 /* voltage_min_design */, 51785890 /* manufacture_date_smart */, 11.55 /* voltage_min_design */, "battery_model" /* model_name */,
/*temperature smart=*/981729, /*model_name=*/"battery_model", 5.123 /* charge_now */, std::move(smart_info));
/*charge_now=*/5.123);
} }
mojom::CachedVpdInfoPtr MakeCachedVpdInfo() { mojom::CachedVpdInfoPtr MakeCachedVpdInfo() {
......
...@@ -27,6 +27,15 @@ enum ProbeCategoryEnum { ...@@ -27,6 +27,15 @@ enum ProbeCategoryEnum {
kTimezone, 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. // Information related to the main battery.
struct BatteryInfo { struct BatteryInfo {
// TODO(https://crbug.com/979245): Update "smart" cycle count. // TODO(https://crbug.com/979245): Update "smart" cycle count.
...@@ -43,17 +52,13 @@ struct BatteryInfo { ...@@ -43,17 +52,13 @@ struct BatteryInfo {
double charge_full; double charge_full;
// Desired minimum output voltage (V) // Desired minimum output voltage (V)
double voltage_min_design; 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. // Model name.
string model_name; string model_name;
// Current battery charge (Ah) // Current battery charge (Ah)
double charge_now; 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. // 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