From 303a54124817c605bf79ceed0caee3858790e14b Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 17 Nov 2023 20:32:13 -0800 Subject: [PATCH 1/4] Update storaged to use Health AIDL HAL V3. Bug: 309792384 Test: m Change-Id: Ib11dd9b39e5feec864f881118f16dad902813379 --- storaged/Android.bp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storaged/Android.bp b/storaged/Android.bp index fe8c1f3b4..357c0e601 100644 --- a/storaged/Android.bp +++ b/storaged/Android.bp @@ -24,7 +24,7 @@ cc_defaults { shared_libs: [ "android.hardware.health@1.0", "android.hardware.health@2.0", - "android.hardware.health-V2-ndk", + "android.hardware.health-V3-ndk", "libbase", "libbinder", "libbinder_ndk", From d473bcf1ab6cf560d55b1c9c5dd8f7ed2e00cca6 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 17 Nov 2023 20:33:25 -0800 Subject: [PATCH 2/4] Update healthd to use Health AIDL HAL V3. Bug: 309792384 Test: m Change-Id: Ic92e4d699ee49284fea490d48e963555173033d7 --- healthd/Android.bp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/healthd/Android.bp b/healthd/Android.bp index 235303fd3..427ac48ba 100644 --- a/healthd/Android.bp +++ b/healthd/Android.bp @@ -76,7 +76,7 @@ cc_library_static { defaults: ["libbatterymonitor_defaults"], srcs: ["BatteryMonitor.cpp"], static_libs: [ - "android.hardware.health-V2-ndk", + "android.hardware.health-V3-ndk", ], whole_static_libs: [ // Need to translate HIDL to AIDL to support legacy APIs in @@ -203,12 +203,12 @@ cc_library_static { defaults: ["libhealthd_charger_ui_defaults"], static_libs: [ - "android.hardware.health-V2-ndk", + "android.hardware.health-V3-ndk", "android.hardware.health-translate-ndk", ], export_static_lib_headers: [ - "android.hardware.health-V2-ndk", + "android.hardware.health-V3-ndk", ], } @@ -280,7 +280,7 @@ cc_defaults { static_libs: [ // common "android.hardware.health@1.0-convert", - "android.hardware.health-V2-ndk", + "android.hardware.health-V3-ndk", "libbatterymonitor", "libcharger_sysprop", "libhealthd_charger_nops", From 9305c988b3609e54a44460c37bc37952bce94ac5 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 17 Nov 2023 20:40:33 -0800 Subject: [PATCH 3/4] Update fastbootd to use Health AIDL HAL V3. Bug: 309792384 Test: m Change-Id: I660228c89cf18b46ea6c8165a4a74d20c0a2ac41 --- fastboot/Android.bp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastboot/Android.bp b/fastboot/Android.bp index f85d1dea4..c0445f359 100644 --- a/fastboot/Android.bp +++ b/fastboot/Android.bp @@ -170,7 +170,7 @@ cc_binary { "android.hardware.fastboot@1.1", "android.hardware.fastboot-V1-ndk", "android.hardware.health@2.0", - "android.hardware.health-V2-ndk", + "android.hardware.health-V3-ndk", "libasyncio", "libbase", "libbinder_ndk", From 2cb36706f40a7afac9159126a97421b37e2ef8dc Mon Sep 17 00:00:00 2001 From: David Anderson Date: Thu, 7 Dec 2023 20:51:08 -0800 Subject: [PATCH 4/4] fastboot: Add getvar commands to query battery part info. This adds two commands to test the new v3 Health HAL, to query the battery serial number (unlocked devices only) and part status. Bug: 309792384 Test: adb reboot fastboot fastboot getvar battery-part-status fastboot getvar battery-serial-number Change-Id: Ie0a14eda06483d047544833124c327fb88ba43a2 --- fastboot/constants.h | 2 + fastboot/device/commands.cpp | 2 + fastboot/device/variables.cpp | 76 +++++++++++++++++++++++++++++++++++ fastboot/device/variables.h | 4 ++ 4 files changed, 84 insertions(+) diff --git a/fastboot/constants.h b/fastboot/constants.h index a80330746..af4d1eb12 100644 --- a/fastboot/constants.h +++ b/fastboot/constants.h @@ -82,3 +82,5 @@ #define FB_VAR_TREBLE_ENABLED "treble-enabled" #define FB_VAR_MAX_FETCH_SIZE "max-fetch-size" #define FB_VAR_DMESG "dmesg" +#define FB_VAR_BATTERY_SERIAL_NUMBER "battery-serial-number" +#define FB_VAR_BATTERY_PART_STATUS "battery-part-status" diff --git a/fastboot/device/commands.cpp b/fastboot/device/commands.cpp index bd936ae77..e522f4d4d 100644 --- a/fastboot/device/commands.cpp +++ b/fastboot/device/commands.cpp @@ -147,6 +147,8 @@ const std::unordered_map kVariableMap = { {FB_VAR_SECURITY_PATCH_LEVEL, {GetSecurityPatchLevel, nullptr}}, {FB_VAR_TREBLE_ENABLED, {GetTrebleEnabled, nullptr}}, {FB_VAR_MAX_FETCH_SIZE, {GetMaxFetchSize, nullptr}}, + {FB_VAR_BATTERY_SERIAL_NUMBER, {GetBatterySerialNumber, nullptr}}, + {FB_VAR_BATTERY_PART_STATUS, {GetBatteryPartStatus, nullptr}}, }; static bool GetVarAll(FastbootDevice* device) { diff --git a/fastboot/device/variables.cpp b/fastboot/device/variables.cpp index 2847e35ab..77210abcb 100644 --- a/fastboot/device/variables.cpp +++ b/fastboot/device/variables.cpp @@ -570,3 +570,79 @@ bool GetDmesg(FastbootDevice* device) { return true; } + +bool GetBatterySerialNumber(FastbootDevice* device, const std::vector&, + std::string* message) { + auto health_hal = device->health_hal(); + if (!health_hal) { + return false; + } + + if (GetDeviceLockStatus()) { + return device->WriteFail("Device is locked"); + } + + *message = "unsupported"; + + int32_t version = 0; + auto res = health_hal->getInterfaceVersion(&version); + if (!res.isOk()) { + return device->WriteFail("Unable to query battery data"); + } + if (version >= 3) { + using aidl::android::hardware::health::BatteryHealthData; + + BatteryHealthData data; + auto res = health_hal->getBatteryHealthData(&data); + if (!res.isOk()) { + return device->WriteFail("Unable to query battery data"); + } + if (data.batterySerialNumber) { + *message = *data.batterySerialNumber; + } + } + return true; +} + +bool GetBatteryPartStatus(FastbootDevice* device, const std::vector&, + std::string* message) { + auto health_hal = device->health_hal(); + if (!health_hal) { + return false; + } + + using aidl::android::hardware::health::BatteryPartStatus; + + BatteryPartStatus status = BatteryPartStatus::UNSUPPORTED; + + int32_t version = 0; + auto res = health_hal->getInterfaceVersion(&version); + if (!res.isOk()) { + return device->WriteFail("Unable to query battery data"); + } + if (version >= 3) { + using aidl::android::hardware::health::BatteryHealthData; + + BatteryHealthData data; + auto res = health_hal->getBatteryHealthData(&data); + if (!res.isOk()) { + return device->WriteFail("Unable to query battery data"); + } + status = data.batteryPartStatus; + } + switch (status) { + case BatteryPartStatus::UNSUPPORTED: + *message = "unsupported"; + break; + case BatteryPartStatus::ORIGINAL: + *message = "original"; + break; + case BatteryPartStatus::REPLACED: + *message = "replaced"; + break; + default: + *message = "unknown"; + break; + } + return true; +} diff --git a/fastboot/device/variables.h b/fastboot/device/variables.h index 9a4678641..99d1355ef 100644 --- a/fastboot/device/variables.h +++ b/fastboot/device/variables.h @@ -67,6 +67,10 @@ bool GetBatterySoC(FastbootDevice* device, const std::vector& args, std::string* message); bool GetBatterySoCOk(FastbootDevice* device, const std::vector& args, std::string* message); +bool GetBatterySerialNumber(FastbootDevice* device, const std::vector& args, + std::string* message); +bool GetBatteryPartStatus(FastbootDevice* device, const std::vector& args, + std::string* message); bool GetSuperPartitionName(FastbootDevice* device, const std::vector& args, std::string* message); bool GetSnapshotUpdateStatus(FastbootDevice* device, const std::vector& args,