一、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 电池管理系统相关推荐

  1. Android电池管理系统框架整理

    一.Android 电池服务 Android电池服务,用来监听内核上报的电池事件,并将最新的电池数据上报给系统,系统收到新数据后会去更新电池显示状态.剩余电量等信息.如果收到过温报警和低电报警,系统会 ...

  2. java手机电池充电代码,android电池管理系统从上层的java到底层驱动的调用(转载)...

    1.概述 随着移动智能设备的快速发屏,电池的续航能力在很大情况下诱导了大众消费者的购买选择,android系统对电源管理的合理与否直接影响到电池的续航能力,而电池系统作为其中的一部分,主要用于对电池状 ...

  3. android电池管理系统

    原文:http://www.2cto.com/kf/201408/326462.html 1.概述 随着移动智能设备的快速发屏,电池的续航能力在很大情况下诱导了大众消费者的购买选择,android系统 ...

  4. android电池管理软件,Android实现电池管理系统

    一.Android 电池服务 Android电池服务,用来监听内核上报的电池事件,并将最新的电池数据上报给系统,系统收到新数据后会去更新电池显示状态.剩余电量等信息.如果收到过温报警和低电报警,系统会 ...

  5. 【转】android电池(四):电池 电量计(MAX17040)驱动分析篇

    关键词:android 电池  电量计  MAX17040 任务初始化宏 power_supply 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0  ...

  6. 多节锂电串联保护板ic_BMS电池管理系统与锂电池保护板的区别

    BMS电池管理系统与锂电池保护板的区别?锂电池保护板主要作用是为电机,储能设备等系统,提供能源供应的锂电池管理系统.BMS电池管理系统具有过充.过放.过温.过流,还有短路保护等功能,锂电池保护板是对多 ...

  7. 杂志订阅管理系统c++_电池管理系统BMS功能安全开发流程详解

    点击上面 "电动知家"可以订阅哦! BMS功能安全开发流程详解 BMS和ISO26262 - BMS & ISO26262简介 BMS即Battery Management ...

  8. bms中soh计算方式_BMS电池管理系统由浅入深全方位解析

    何为BMS? BMS电池管理系统(BATTERY MANAGEMENT SYSTEM)俗称电池保姆或电池管家,主要就是为了智能化管理及维护各个电池单元,防止电池出现过充电和过放电,延长电池的使用寿命, ...

  9. 通用无线设备对码软件_电动车上的无线电池管理系统wBMS

    据悉,通用汽车公司(GM)将在其电动车(EV)上使用无线电池管理系统(wBMS).该系统是与模拟设备一起开发,它将有望成为电子移动领域其他解决方案的主要动力. 市场分析人士认为,无线电池管理系统可以更 ...

最新文章

  1. DATEIF实例说明6
  2. poj 1265 Area(pick 定理)
  3. 昆明理工大学2017计算机考研题,2017年昆明理工大学现代农业工程学院341农业知识综合三[专业硕士]之计算机网络考研题库...
  4. Java多线程编程笔记4:Java内存模型
  5. oracle包写入程序失败_Oracle内核技术揭秘第一篇
  6. 分布式事务一致性解决方案
  7. mysql ddl 锁_MySQL Online DDL导致全局锁表案例分析
  8. 弹性理论法研究桩基受力计算公式_竖向荷载下群桩的承载力分析
  9. Oracle笔记:用户、权限及exp/imp数据
  10. 机器学习模型_如何口述机器学习模型原理
  11. Ibatis 动态查询
  12. 软件设计中的可用性和可用性测试
  13. [渝粤教育] 山东职业学院 话说铁道 参考 资料
  14. 拼多多势不可挡的发展|一度智信
  15. cgroups的实现
  16. 网页导航栏设计方法和技巧
  17. Tomcat启动内存设置
  18. 父进程创建五个子进程
  19. 32蜂鸣器天空之城代码_32篇SCI/EI论文、多项发明专利、本科生科研导师......这个华工青年,有担当!...
  20. 下颌骨锥形束计算机断层扫描的英文缩写,山东地区人下颌后牙C形根管的锥形束CT研究...

热门文章

  1. win7打开桌面计算机很慢,win7电脑开机慢怎么办
  2. 出现 DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 的解决方法
  3. Java中获取CPU与内存利用率
  4. 创建Android工程心德,Android项目的个人总结
  5. Ubuntu外接显示器设置开机镜像显示
  6. java 联合查询取值_如何从SPARQL联合查询(Service关键字)返回特定变量?
  7. 永磁无刷电机及其驱动技术_PDF.rar
  8. 前端必学 - 大文件上传如何实现
  9. 2020年车联网行业深度报告 附下载地址
  10. tftp 源代码解析