diff --git a/fastboot/constants.h b/fastboot/constants.h index ad169d1dc..a80330746 100644 --- a/fastboot/constants.h +++ b/fastboot/constants.h @@ -69,6 +69,7 @@ #define FB_VAR_VARIANT "variant" #define FB_VAR_OFF_MODE_CHARGE_STATE "off-mode-charge" #define FB_VAR_BATTERY_VOLTAGE "battery-voltage" +#define FB_VAR_BATTERY_SOC "battery-soc" #define FB_VAR_BATTERY_SOC_OK "battery-soc-ok" #define FB_VAR_SUPER_PARTITION_NAME "super-partition-name" #define FB_VAR_SNAPSHOT_UPDATE_STATUS "snapshot-update-status" diff --git a/fastboot/device/commands.cpp b/fastboot/device/commands.cpp index 6de598f69..bd936ae77 100644 --- a/fastboot/device/commands.cpp +++ b/fastboot/device/commands.cpp @@ -134,6 +134,7 @@ const std::unordered_map kVariableMap = { {FB_VAR_IS_FORCE_DEBUGGABLE, {GetIsForceDebuggable, nullptr}}, {FB_VAR_OFF_MODE_CHARGE_STATE, {GetOffModeChargeState, nullptr}}, {FB_VAR_BATTERY_VOLTAGE, {GetBatteryVoltage, nullptr}}, + {FB_VAR_BATTERY_SOC, {GetBatterySoC, nullptr}}, {FB_VAR_BATTERY_SOC_OK, {GetBatterySoCOk, nullptr}}, {FB_VAR_HW_REVISION, {GetHardwareRevision, nullptr}}, {FB_VAR_SUPER_PARTITION_NAME, {GetSuperPartitionName, nullptr}}, diff --git a/fastboot/device/variables.cpp b/fastboot/device/variables.cpp index d2a794715..2847e35ab 100644 --- a/fastboot/device/variables.cpp +++ b/fastboot/device/variables.cpp @@ -130,6 +130,21 @@ bool GetBatteryVoltageHelper(FastbootDevice* device, int32_t* battery_voltage) { return true; } +bool GetBatterySoCHelper(FastbootDevice* device, int32_t* battery_soc) { + using aidl::android::hardware::health::HealthInfo; + + auto health_hal = device->health_hal(); + if (!health_hal) { + return false; + } + + HealthInfo health_info; + auto res = health_hal->getHealthInfo(&health_info); + if (!res.isOk()) return false; + *battery_soc = health_info.batteryLevel; + return true; +} + bool GetBatterySoCOk(FastbootDevice* device, const std::vector& /* args */, std::string* message) { int32_t battery_voltage = 0; @@ -185,6 +200,17 @@ bool GetBatteryVoltage(FastbootDevice* device, const std::vector& / return false; } +bool GetBatterySoC(FastbootDevice* device, const std::vector& /* args */, + std::string* message) { + int32_t battery_soc = 0; + if (GetBatterySoCHelper(device, &battery_soc)) { + *message = std::to_string(battery_soc); + return true; + } + *message = "Unable to get battery soc"; + return false; +} + bool GetCurrentSlot(FastbootDevice* device, const std::vector& /* args */, std::string* message) { std::string suffix = device->GetCurrentSlot(); diff --git a/fastboot/device/variables.h b/fastboot/device/variables.h index 3b2d48447..9a4678641 100644 --- a/fastboot/device/variables.h +++ b/fastboot/device/variables.h @@ -63,6 +63,8 @@ bool GetOffModeChargeState(FastbootDevice* device, const std::vector& args, std::string* message); +bool GetBatterySoC(FastbootDevice* device, const std::vector& args, + std::string* message); bool GetBatterySoCOk(FastbootDevice* device, const std::vector& args, std::string* message); bool GetSuperPartitionName(FastbootDevice* device, const std::vector& args,