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", 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, 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", 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",