|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在RP4412开发板使用了电池管理。
不论是哪个牌子的开发板,只要用到android的电池管理,都是需要学习和了解的。以下是这个android电池管理的大体。
Android电池管理
1、整体框架
电池管理整体框架
java代码: frameworks/frameworks/base/services/java/com/android/server/BatteryService.java
JNI代码: frameworks/base/services/jni/com_android_server_BatteryService.cpp kernel driver代码
2、BatteryService BatteryService
作为电池及充电相关的服务:监听Uevent、读取sysfs 里中的状态、广播Intent.ACTION_BATTERY_CHANGED。
(1)、mUEventObserver BatteryService实现了一个UevenObserver mUEventObserver。
uevent是Linux内核用来向用户空间主动上报事件的机制,对于JAVA程序来说,只实现UEventObserver的虚函数onUEvent,然后注册即可。
函数图
BatteryService只关注power_supply的事件,所以在构造函数注册:
构造函数
(2)、update()
update读取sysfs文件做到同步取得电池信息, 然后根据读到的状态更新BatteryService的成员变量,并广播一个Intent来通知其它关注电源状态的 组件。当kernel有power_supply事件上报时,mUEventObserver调用update()函数,然后update调用native_update从sysfs中读取相关状态(com_android_server_BatteryService.cpp):
图4
(3)、sysfs
Linux驱动driver维护着保存电池信息的一组文件sysfs,供应用程序获取电源相关状态:
#define AC_ONLINE_PATH "/sys/class/power_supply/ac/online" AC电源连接状态
#define USB_ONLINE_PATH "/sys/class/power_supply/usb/online" USB电源连接状态
#define BATTERY_STATUS_PATH "/sys/class/power_supply/battery/status"充电状态
#define BATTERY_HEALTH_PATH "/sys/class/power_supply/battery/health"电池状态
#define BATTERY_PRESENT_PATH "/sys/class/power_supply/battery/present"使用状态
#define BATTERY_CAPACITY_PATH "/sys/class/power_supply/battery/capacity"电池level
#define BATTERY_VOLTAGE_PATH "/sys/class/power_supply/battery/batt_vol"电池电压
#define BATTERY_TEMPERATURE_PATH "/sys/class/power_supply/battery/batt_temp"电池温度
#define BATTERY_TECHNOLOGY_PATH "/sys/class/power_supply/battery/technology"
电池技术当电池状态发生变化时,driver会更新这些文件。 |
|