为什么 BatteryManager 返回错误的温度值?

Why is BatteryManager returning wrong value for temperature?

我正在尝试将 BQ27531 电池电量计集成到 i.MX6 SoM 中。我加载了驱动程序,在 sysfs 上一切看起来都很好。当我 运行 cat /sys/bus/i2c/devices/2-0055/power_supply/bq27531-0/temp 时,我得到正确的值 247(这意味着 24.7°C)。

现在,我想获取Android系统中的值。我写了一个简单的应用程序,基本上调用:

IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent intent = registerReceiver(null, filter);
int temprature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);

这应该会给我温度读数,但它返回的是 424 (42.4°C)。为什么温度值不对?我确定电池在室温附近。

原来是我的系统没有识别电池,424是默认的"fake"温度。它在 platform/system/core/healthd:

中定义
#define POWER_SUPPLY_SUBSYSTEM "power_supply"
#define POWER_SUPPLY_SYSFS_PATH "/sys/class/" POWER_SUPPLY_SUBSYSTEM
#define FAKE_BATTERY_CAPACITY 42
#define FAKE_BATTERY_TEMPERATURE 424
#define ALWAYS_PLUGGED_CAPACITY 100
#define MILLION 1.0e6
#define DEFAULT_VBUS_VOLTAGE 5000000