android电源管理资料整理

由于项目需要,我们的android手机及上网本都需要做一个电池的电量检测与电池管理,所以,在开始动手做这一块之前,先整理一下电源管理方面的资料。

 

      首先,看看一下电源芯片驱动在内核的位置:kernel/driver/power/ 路径下,看了一下samsung I9000kernel用的是max17040+max8989max1740I2C接口,需要烧写一些寄存器和通过读写寄存器来获取电池的信息,max8998则是通过控制它的GPIO口来工作。两者相互协调完成底层电源管理的驱动,通过接口与android的中间层交互。里注册了充电器(ac) usb和电池(battery)三个power_supply。各个power_supply提供的属性和上述文件是对应的,从这些文件中可以读到充电器 (ac)usb和电池(battery)三个power_supply的相应状态。

 

BatteryService作为电池及充电相关的服务

 

监听UEvent,读取sysfs里中的状态。

 

实现了一个UEvent的观察者。ueventLinux内核用来向用户空间主动上报事件的机制,对于JAVA程序来说,只实现UEventObserver的虚函数onUEvent,然后注册即可。

 

    private UEventObserver mUEventObserver = new UEventObserver() {

 

        @Override

 

        public void onUEvent(UEventObserver.UEvent event) {

 

            update();

 

        }

 

    };

 

这里只关注power_supply的事件:

 

mUEventObserver.startObserving("SUBSYSTEM=power_supply");

 

当有power_supply相关的事件上报时,就会调用update函数。

 

update先调用native_updatesysfs中读取相关状态(com_android_server_BatteryService.cpp

 

Linux驱动提供了下列文件,供应用程序获取电源相关状态:

 

#define AC_ONLINE_PATH "/sys/class/power_supply/ac/online"

#define USB_ONLINE_PATH "/sys/class/power_supply/usb/online"

#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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值