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有快慢充电的值,如下:

    <!-- Threshold in micro watts below which a charger is rated as "slow"; 1A @ 5V -->
    <integer name="config_chargingSlowlyThreshold">5000000</integer>

    <!-- Threshold in micro watts above which a charger is rated as "fast"; 1.5A @ 5V  -->
    <integer name="config_chargingFastThreshold">7500000</integer>

对应节点:

/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值