美文网首页
充电状态异常分析

充电状态异常分析

作者: 李海洲 | 来源:发表于2018-04-02 23:18 被阅读0次

最近项目上遇到一个问题,问题描述如下:

没有插入充电器的情况下状态栏充电动画在跑

借此机会,梳理了充电的流程,本文受限于篇幅,不会列出具体代码细节,阐述大致的流程,以后日后遇到类似问题,有分析和排查的思路。

完整flow如下:

Step1
Charger 收到 plugin or plugout的interrupt,调用battery_callback()

Step2
battery_callback()透过battery_update()调用power_supply_changed()

Step3
这里的power_supply_changed()位于drivers\power\power_supply_core.c这支文件中,作用是向用户空间发送 uevent并更新sys/class/power_supply/battery/status 节点。

Step4
当 sys/class/power_supply/battery/status 节点更新了, BatteryMonitor.cpp监听uevent 的部分会update,这里的update里会调用到healthd_mode_ops->battery_update(&props)用来notify batteryservice中注册的监听器。注意这里的参数对应BatteryProperties,正是要传给BatteryService的数据。

Step5
batteryservice中注册监听的回调会被触发,这时候拿到BatteryProperties这个数据包,调用update最终会调用到sendIntentLocked这个方法,该方法中做的是发送广播给所有监听电池状态变化的监听者,一般对应的是监听了这个广播的所有应用程序

注1:
这里BatteryMonitor.cpp对应的是healthd部分
从Android 4.4开始,Google专门提供了一个healthd来监控电源状态。它的路径在:system/core/healthd,编译出来的文件为/sbin/healthd,healthd是Android平台电量管理的一部分。
在Android平台中电池电量数据是通过驱动节点的形式提供给用户空间层,所以上层要获得手机电池相关的硬件数据只需要去读取文件节点数据即可,healthd进程就是负责读取值并把读取的结果通过通知给上层。

注2:
提供给用户的接口 sys/class/power_supply是通过 drivers\power\power_supply_core.c 中的power_supply_register创建的。Power Supply驱动程序与用户空间的接口是正是sys文件系统。

mtk kernel日志中需要关注的关键点如下:
plug in log:
[56:pmic_thread]: mtk_charger_int_handler
判断充电器类型log:
[243:charger_thread]: mtk_is_charger_on plug in, tyupe:1
battery_callback log:
[243:charger_thread]: battery_callback:1
healthd上报开始充电:
[366:healthd]: healthd: wsg update--after props.batteryStatus 2
另外,kernel日志中搜索关键字healthd,可以查看healthd中的状态

下面这张图,大概描述了整个流程

image

图片资源摘自互联网

相关文章

  • 充电状态异常分析

    最近项目上遇到一个问题,问题描述如下: 没有插入充电器的情况下状态栏充电动画在跑 借此机会,梳理了充电的流程,本文...

  • 异常状态

    在设计过程中,大部分设计师专注于主操作流程、主页面、分支流程、小页面和页面的不同状态。却容易忽略产品中容易出现的各...

  • 【2019-06-28】yarn服务nodemanger故障

    问题描述 yarn服务故障,查看服务管理一个nodemanger状态异常 分析过程 1.首先分析启动日志,由于HE...

  • MT2503获取充电状态及充电电流

    获取充电状态 充电状态由BMT.pmictrl_state标识,在mcu\hal\peripheral\src\d...

  • 关于异常状态的设计总结

    异常状态多在特殊场景下出现,比如服务器异常、网络异常等,因为异常状态出现的概率是较低的,所以异常状态也常常会被忽略...

  • 一个标准的行业分析怎么做?

    导读:最近共享充电宝异常的火爆,对于这门生意褒贬不一,Lemon今天就来和大家一起讨论一个问题,如何做行业分析? ...

  • 成为自己的逆袭偶像

    欲罢不能的状态,人人都有,从科学角度分析是因为人处于上瘾状态,正在从事的事情或接触的人事能激发多巴胺的异常...

  • android 获取设备充电状态,接收不到action的char

    通过自实现receiver,监听返回的action,一直等不到充电状态action和非充电状态action,总是返...

  • 异常分析

    本文分析了一份标准的iOS应用程序的Crash报告,它通常由以下6个部分组成。 报告头(Header) 报告头包含...

  • 异常分析

    java.lang.IllegalArgumentException: XPP3 pull parser libr...

网友评论

      本文标题:充电状态异常分析

      本文链接:https://www.haomeiwen.com/subject/iqyfhftx.html