Android 电池管理系统
一、Android 电池服务
Android电池服务,用来监听内核上报的电池事件,并将最新的电池数据上报给系统,系统收到新数据后会去更新电池显示状态、剩余电量等信息。如果收到过温报警和低电报警,系统会自动触发关机流程,保护电池和机器不受到危害。
Android电池服务的启动和运行流程:
Android电池服务的源码结构
Framework\base\services\java\com\android\server
├── SystemServer.java
创建BatteryServices、PowerManagerService、ActivityManagerService
├── BatterySevices.java
监听底层上报的battery事件,广播电池发生改变的消息
Framework\base\services\java\com\android\server\am
├── ActivityManagerService.java
创建BatteryStatsService
├── BatteryStatsService.java
统计和记录电池参数的信息
Framework\base\services\java\com\android\server\power
├── PowerManagerService.java
监听电池发生变化的广播消息,并调节系统的电源状态,例如亮屏
Framework\base\core\java\com\internal\os\
├── BatteryStatsImpl.java
统计和记录电池参数的信息,并通知其他模块
System\core\healthd
├── healthd.cpp
创建uevent socket,监听内核上报的内核事件
├── BatteryMonitor.cpp
初始化本地电池数据结构,将power_supply路径下属性节点路径填充进去,
├── BatteryMonitor.h
├── BatteryPropertiesRegistrar.cpp
创建电池属性监听器,并将其注册到Android的系统服务中
├── BatteryPropertiesRegistrar.h
二、Healthd
该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework层的BatteryService用来计算电池电量相关信息,
BatteryService通过传递来的数据来计算电池电量等信息,因此healthd在电池管理系统中起着承上启下的作用。
healthd的具体调用流程深入分析android5.1 healthd这篇文章讲得很清楚。
三、驱动
Android电源管理底层用的是Linux power_supply框架,内核提供给电池驱动的接口是结构体power_supply结构体。
struct power_supply {const char *name;enum power_supply_type type;enum power_supply_property *properties;size_t num_properties;char **supplied_to;size_t num_supplicants;int (*get_property)(struct power_supply *psy,enum power_supply_property psp,union power_supply_propval *val);int (*set_property)(struct power_supply *psy,enum power_supply_property psp,const union power_supply_propval *val);int (*property_is_writeable)(struct power_supply *psy,enum power_supply_property psp);void (*external_power_changed)(struct power_supply *psy);void (*set_charged)(struct power_supply *psy);/* For APM emulation, think legacy userspace. */int use_for_apm;/* Driver private data */void *drv_data;//add by bhj/* private */struct device *dev;struct work_struct changed_work;spinlock_t changed_lock;bool changed;struct wake_lock work_wake_lock;struct delayed_work deferred_register_work;#ifdef CONFIG_LEDS_TRIGGERSstruct led_trigger *charging_full_trig;char *charging_full_trig_name;struct led_trigger *charging_trig;char *charging_trig_name;struct led_trigger *full_trig;char *full_trig_name;struct led_trigger *online_trig;char *online_trig_name;struct led_trigger *charging_blink_full_solid_trig;char *charging_blink_full_solid_trig_name;
#endif
};</span>
内核主要通过get_property这个函数指针来获得驱动中的有关电池的信息,而这个函数在内核中只给出了声明,我们在写驱动的
时候要自己实现这个函数,即将自己写的函数赋值给这个函数指针,当内核需要驱动中电源信息的时候就回调这个get_property函数
。另外,我们写驱动程序的时候又要给用户提供接口,内核中提供给用户的接口就是sysfs,通过读取sysfs文件系统中文件内容,就
可以得到电源的信息。内核主要通过两个文件power_supply_class.c和power_supply_core.c,我们调用其中的函数就可以把电源(电
池,USB或AC)的信息展现给用户,有关电源的属性写在/sys/class/powersupply文件夹下(此文件夹为程序运行后所生成的)。
电池系统从底层向Framework层上报数据的流程:
Android 电池管理系统相关推荐
- Android电池管理系统框架整理
一.Android 电池服务 Android电池服务,用来监听内核上报的电池事件,并将最新的电池数据上报给系统,系统收到新数据后会去更新电池显示状态.剩余电量等信息.如果收到过温报警和低电报警,系统会 ...
- java手机电池充电代码,android电池管理系统从上层的java到底层驱动的调用(转载)...
1.概述 随着移动智能设备的快速发屏,电池的续航能力在很大情况下诱导了大众消费者的购买选择,android系统对电源管理的合理与否直接影响到电池的续航能力,而电池系统作为其中的一部分,主要用于对电池状 ...
- android电池管理系统
原文:http://www.2cto.com/kf/201408/326462.html 1.概述 随着移动智能设备的快速发屏,电池的续航能力在很大情况下诱导了大众消费者的购买选择,android系统 ...
- android电池管理软件,Android实现电池管理系统
一.Android 电池服务 Android电池服务,用来监听内核上报的电池事件,并将最新的电池数据上报给系统,系统收到新数据后会去更新电池显示状态.剩余电量等信息.如果收到过温报警和低电报警,系统会 ...
- 【转】android电池(四):电池 电量计(MAX17040)驱动分析篇
关键词:android 电池 电量计 MAX17040 任务初始化宏 power_supply 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0 ...
- 多节锂电串联保护板ic_BMS电池管理系统与锂电池保护板的区别
BMS电池管理系统与锂电池保护板的区别?锂电池保护板主要作用是为电机,储能设备等系统,提供能源供应的锂电池管理系统.BMS电池管理系统具有过充.过放.过温.过流,还有短路保护等功能,锂电池保护板是对多 ...
- 杂志订阅管理系统c++_电池管理系统BMS功能安全开发流程详解
点击上面 "电动知家"可以订阅哦! BMS功能安全开发流程详解 BMS和ISO26262 - BMS & ISO26262简介 BMS即Battery Management ...
- bms中soh计算方式_BMS电池管理系统由浅入深全方位解析
何为BMS? BMS电池管理系统(BATTERY MANAGEMENT SYSTEM)俗称电池保姆或电池管家,主要就是为了智能化管理及维护各个电池单元,防止电池出现过充电和过放电,延长电池的使用寿命, ...
- 通用无线设备对码软件_电动车上的无线电池管理系统wBMS
据悉,通用汽车公司(GM)将在其电动车(EV)上使用无线电池管理系统(wBMS).该系统是与模拟设备一起开发,它将有望成为电子移动领域其他解决方案的主要动力. 市场分析人士认为,无线电池管理系统可以更 ...
最新文章
- DATEIF实例说明6
- poj 1265 Area(pick 定理)
- 昆明理工大学2017计算机考研题,2017年昆明理工大学现代农业工程学院341农业知识综合三[专业硕士]之计算机网络考研题库...
- Java多线程编程笔记4:Java内存模型
- oracle包写入程序失败_Oracle内核技术揭秘第一篇
- 分布式事务一致性解决方案
- mysql ddl 锁_MySQL Online DDL导致全局锁表案例分析
- 弹性理论法研究桩基受力计算公式_竖向荷载下群桩的承载力分析
- Oracle笔记:用户、权限及exp/imp数据
- 机器学习模型_如何口述机器学习模型原理
- Ibatis 动态查询
- 软件设计中的可用性和可用性测试
- [渝粤教育] 山东职业学院 话说铁道 参考 资料
- 拼多多势不可挡的发展|一度智信
- cgroups的实现
- 网页导航栏设计方法和技巧
- Tomcat启动内存设置
- 父进程创建五个子进程
- 32蜂鸣器天空之城代码_32篇SCI/EI论文、多项发明专利、本科生科研导师......这个华工青年,有担当!...
- 下颌骨锥形束计算机断层扫描的英文缩写,山东地区人下颌后牙C形根管的锥形束CT研究...
热门文章
- win7打开桌面计算机很慢,win7电脑开机慢怎么办
- 出现 DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 的解决方法
- Java中获取CPU与内存利用率
- 创建Android工程心德,Android项目的个人总结
- Ubuntu外接显示器设置开机镜像显示
- java 联合查询取值_如何从SPARQL联合查询(Service关键字)返回特定变量?
- 永磁无刷电机及其驱动技术_PDF.rar
- 前端必学 - 大文件上传如何实现
- 2020年车联网行业深度报告 附下载地址
- tftp 源代码解析