Android 上 /sys/class/power_supply 中的多个电池条目

asc*_*ied 3 linux android android-ndk sysfs

我正在尝试从 NDK 应用程序读取电池信息。我知道要完成此任务的唯一方法是读取值/sys/class/power_supply。我的困难是我找到了多个类型为“电池”的条目,但我不知道该使用哪一个。

在带有 KitKat 4.4.4 的 Nexus 10 上,我看到:

$ ls /sys/class/power_supply
ds2784-fuelgauge
manta-battery
smb347-battery
# other non-battery entries
Run Code Online (Sandbox Code Playgroud)

类型=电池,适用于所有三个。例如:

$ cat /sys/class/power_supply/ds2784-fuelgauge/type
Battery
Run Code Online (Sandbox Code Playgroud)

在 AndroidBatteryManager代码中,他们只是遍历电池设备并获取第一个具有所需条目的设备(http://androidxref.com/4.4.4_r1/xref/system/core/healthd/BatteryMonitor.cpp)。但是,在我的 Nexus 10 上,它们具有不同的值。例如,对于ds2784-fuelgauge/voltage_nowsmb347-battery/voltage_now

$ cat ds2784-fuelgauge/voltage_now
4153100
$ cat smb347-battery/voltage_now
4300000
Run Code Online (Sandbox Code Playgroud)

ds2784-fuelgauge/voltage_now似乎定期更新(例如,当我开始一项计算量大的任务时它会发生变化),但smb347-battery/voltage_now似乎已修复。当我比较ds2784-fuelgauge/current_now和时,我看到了类似的效果smb347-battery/current_now

我的问题是:

  1. 为什么这里有多个带有 type=battery 的条目?
  2. 我如何以一般方式区分它们?
  3. 我应该使用哪一种?

编辑

  • 修复了voltage_now文件名中的错字
  • 强调所有三个设备的 type=Battery

Luc*_*lli 5

在 Android 设备上,您可能有多个电池,例如 RTC 或其他外围设备的备用电池。您是否已经为所有 3 个 sysfs 条目找到了类型文件?对于所有 3 个你得到“电池”?

考虑到 Android 需要来自电池的几个参数(见下文),我可能猜测它们被拆分在您获得的 3 个 sysfs 文件中。

例如,电量计是硬件组件,它读取来自/流入电池的电流并计算剩余容量,因此从中读取容量文件应该会给你百分比,但电压可能是从另一个文件中读取的。

电池参数(即:/sys/class/power_supply/my_batt/status):

  • 状态:充电、放电、未充电、充满、未知
  • 健康(字符串):冷,死亡,良好,过热,过电压,未指定故障,未知
  • 存在(int):存在时为1
  • 容量 (int): 97 为 97%
  • voltage_now(以 uV 为单位)或 batt_volt(以 mV 为单位):4205000 表示 4205000 uV = 4.205 V
  • temp 或 batt_temp(以°C 为单位的十分之一):305 表示 30.5°C
  • 技术(字符串):锂离子