Android 电池系统节点信息简述

Android 电池系统节点信息简述

Android系统默认可通过dumpsys获取如下的电池信息:

adb shell dumpsys battery

Current Battery Service state:

AC powered: false

USB powered: true

Wireless powered: false

Max charging current: 500000

Max charging voltage: 5000000

Charge counter: 2238960

status: 2

health: 2

present: true

level: 76

scale: 100

voltage: 4111

temperature: 268

technology: Li-ion

对应代码实现位置为:aosp/frameworks/base/services/core/java/com/android/server/BatteryService.java

private void dumpInternal(FileDescriptor fd, PrintWriter pw, String[] args) {

synchronized (mLock) {

if (args == null || args.length == 0 || "-a".equals(args[0])) {

pw.println("Current Battery Service state:");

if (mUpdatesStopped) {

pw.println(" (UPDATES STOPPED -- use 'reset' to restart)");

}

pw.println(" AC powered: " + mHealthInfo.chargerAcOnline);

pw.println(" USB powered: " + mHealthInfo.chargerUsbOnline);

pw.println(" Wireless powered: " + mHealthInfo.chargerWirelessOnline);

pw.println(" Max charging current: " + mHealthInfo.maxChargingCurrent);

pw.println(" Max charging voltage: " + mHealthInfo.maxChargingVoltage);

pw.println(" Charge counter: " + mHealthInfo.batteryChargeCounter);

pw.println(" status: " + mHealthInfo.batteryStatus);

pw.println(" health: " + mHealthInfo.batteryHealth);

pw.println(" present: " + mHealthInfo.batteryPresent);

pw.println(" level: " + mHealthInfo.batteryLevel);

pw.println(" scale: " + BATTERY_SCALE);

pw.println(" voltage: " + mHealthInfo.batteryVoltage);

pw.println(" temperature: " + mHealthInfo.batteryTemperature);

pw.println(" technology: " + mHealthInfo.batteryTechnology);

} else {

Shell shell = new Shell();

shell.exec(mBinderService, null, fd, null, args, null, new ResultReceiver(null));

}

}

}

电池常见log信息

# ---------------------------

# BatteryService.java

# ---------------------------

2722 battery_level (level|1|6),(voltage|1|1),(temperature|1|1)

2723 battery_status (status|1|5),(health|1|5),(present|1|5),(plugged|1|5),(technology|3)

# This is logged when battery goes from discharging to charging.

# It lets us count the total amount of time between charges and the discharge level

2730 battery_discharge (duration|2|3),(minLevel|1|6),(maxLevel|1|6)

另外/sys/class/power_supply下包括了所有的有关电池的信息,如下:

root:/sys/class/power_supply $ ls

ac battery charger usb

power_supply文件夹之下的子文件夹下会有一个type,如:

root:/ $ cat /sys/class/power_supply/ac/type

Mains

root:/sys/class/power_supply $ ls

ac battery charger usb

root:/sys/class/power_supply $ cat */type

Mains

Battery

Unknown

USB

type的值反应了当前的文件中的属性,其字符串和其属性的对应关系为:

{"Unknown", ANDROID_POWER_SUPPLY_TYPE_UNKNOWN},

{"Battery", ANDROID_POWER_SUPPLY_TYPE_BATTERY},

{"UPS", ANDROID_POWER_SUPPLY_TYPE_AC},

{"Mains", ANDROID_POWER_SUPPLY_TYPE_AC},

{"USB", ANDROID_POWER_SUPPLY_TYPE_USB},

{"USB_DCP", ANDROID_POWER_SUPPLY_TYPE_AC},

{"USB_HVDCP", ANDROID_POWER_SUPPLY_TYPE_AC},

{"USB_CDP", ANDROID_POWER_SUPPLY_TYPE_AC},

{"USB_ACA", ANDROID_POWER_SUPPLY_TYPE_AC},

{"USB_C", ANDROID_POWER_SUPPLY_TYPE_AC},

{"USB_PD", ANDROID_POWER_SUPPLY_TYPE_AC},

{"USB_PD_DRP", ANDROID_POWER_SUPPLY_TYPE_USB},

{"Wireless", ANDROID_POWER_SUPPLY_TYPE_WIRELESS},

(1)当前的充电类型:

AC powered: false

USB powered: true

Wireless powered: false

对应节点:

/sys/class/power_supply/%s/online

(2)当前的充电电流与电压:

Max charging current: 500000(微安)

Max charging voltage: 5000000(微伏)

Charge counter: 2238960(瞬时电池容量 uA-h)

//* 当以上两者相乘是会得到其充电功率,上层软件以此基础确定当前是否为慢/快速充电。

SettingsLib 下的BatteryStatus.java

final int maxChargingMicroAmp = batteryChangedIntent.getIntExtra(EXTRA_MAX_CHARGING_CURRENT,

-1);

int maxChargingMicroVolt = batteryChangedIntent.getIntExtra(EXTRA_MAX_CHARGING_VOLTAGE, -1);

if (maxChargingMicroVolt <= 0) {

maxChargingMicroVolt = DEFAULT_CHARGING_VOLTAGE_MICRO_VOLT;

}

if (maxChargingMicroAmp > 0) {

// Calculating muW = muA * muV / (10^6 mu^2 / mu); splitting up the divisor

// to maintain precision equally on both factors.

maxChargingWattage = (maxChargingMicroAmp / 1000)

* (maxChargingMicroVolt / 1000);

} else {

maxChargingWattage = -1;

}

/**

* Return current chargin speed is fast, slow or normal.

*

* @return the charing speed

*/

public final int getChargingSpeed(Context context) {

final int slowThreshold = context.getResources().getInteger(

R.integer.config_chargingSlowlyThreshold);

final int fastThreshold = context.getResources().getInteger(

R.integer.config_chargingFastThreshold);

return maxChargingWattage <= 0 ? CHARGING_UNKNOWN :

maxChargingWattage < slowThreshold ? CHARGING_SLOWLY :

maxChargingWattage > fastThreshold ? CHARGING_FAST :

CHARGING_REGULAR;

}

SettingsLib下的config.xml有快慢充电的值,如下:

5000000

7500000

对应节点:

/sys/class/power_supply/%s/current_max

/sys/class/power_supply/%s/voltage_max

/sys/class/power_supply/battery/charge_counter

(3)电池状态:

status: 2

BatteryManager.BATTERY_STATUS_UNKNOWN = 1

BatteryManager.BATTERY_STATUS_CHARGING = 2

BatteryManager.BATTERY_STATUS_DISCHARGING = 3

BatteryManager.BATTERY_STATUS_NOT_CHARGING = 4 //*电池不充电-有充电器时的特殊情况,但电池不充电

BatteryManager.BATTERY_STATUS_FULL = 5

对应节点:

/sys/class/power_supply/battery/status

(4)电池健康状态:

health: 2

BatteryManager.BATTERY_HEALTH_UNKNOWN = 1

BatteryManager.BATTERY_HEALTH_GOOD = 2

BatteryManager.BATTERY_HEALTH_OVERHEAT = 3

BatteryManager.BATTERY_HEALTH_DEAD = 4

BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE = 5

BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE = 6 //*蓄电池出现未知/未指定的FID故障。

BatteryManager.BATTERY_HEALTH_COLD = 7

对应节点:

/sys/class/power_supply/battery/health

(5)电池瞬时电量:

level: 76

剩余电池容量百分比

对应节点:

/sys/class/power_supply/battery/capacity

(6)电池瞬时电压:

voltage: 4111(毫伏)

瞬时电池电压,以毫伏 (mV) 为单位

对应节点:

/sys/class/power_supply/battery/voltage_now

(7)电池瞬时温度:

temperature: 268

以摄氏度为单位的瞬时电池温度

对应节点:

/sys/class/power_supply/battery/temp

参考源码:

aosp/frameworks/base/services/core/java/com/android/server/BatteryService.java

aosp/frameworks/base/core/java/android/os/BatteryManager.java

aosp/frameworks/base/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java

aosp/system/core/healthd/BatteryMonitor.cpp

aosp/hardware/interfaces/health/1.0/types.hal

相关推荐

「昔日殘影」期間將推出強化寶可夢的新方式——「極限特訓」
从杨超越到虞书欣,非典型偶像出圈背后的“人设论”
365bet手机娱乐场

从杨超越到虞书欣,非典型偶像出圈背后的“人设论”

📅 07-27 👁️ 3062
拍摄方式/拍摄技巧
365bet手机娱乐场

拍摄方式/拍摄技巧

📅 07-19 👁️ 5221