1. 首先驱动需要先获取到2个power supply

kernel\msm-3.18\drivers\usb\phy\phy-msm-usb.c

motg->usb_psy.name = "usb";
motg->usb_psy.type = POWER_SUPPLY_TYPE_USB;
motg->usb_psy.supplied_to = otg_pm_power_supplied_to;
motg->usb_psy.num_supplicants = ARRAY_SIZE(otg_pm_power_supplied_to);
motg->usb_psy.properties = otg_pm_power_props_usb;
motg->usb_psy.num_properties = ARRAY_SIZE(otg_pm_power_props_usb);
motg->usb_psy.get_property = otg_power_get_property_usb;
motg->usb_psy.set_property = otg_power_set_property_usb;
motg->usb_psy.property_is_writeable
= otg_power_property_is_writeable_usb; if (!msm_otg_register_power_supply(pdev, motg))
psy = &motg->usb_psy;

kernel\msm-3.18\drivers\power\bq2570x\bq2570x_charger.c

	usb_psy = power_supply_get_by_name("usb");

static int bq2570x_psy_register(struct bq2570x *bq)
{
int ret; bq->batt_psy.name = "dc_o2";
bq->batt_psy.type = POWER_SUPPLY_TYPE_BATTERY;
bq->batt_psy.properties = bq2570x_charger_props;
bq->batt_psy.num_properties = ARRAY_SIZE(bq2570x_charger_props);
bq->batt_psy.get_property = bq2570x_charger_get_property;
bq->batt_psy.set_property = bq2570x_charger_set_property;
bq->batt_psy.external_power_changed = bq2570x_external_power_changed;
bq->batt_psy.property_is_writeable = bq2570x_charger_is_writeable; ret = power_supply_register(bq->dev, &bq->batt_psy);
if (ret < 0) {
pr_err("failed to register batt_psy:%d\n", ret);
return ret;
} return 0;
}
  1. 充电的闪电图标和充电动画启动逻辑

闪电图标启动逻辑:POWER_SUPPLY_TYPE_USB的power supply上报USB类型(CDP,DCP,USB)

power_supply_set_supply_type(bq->usb_psy, POWER_SUPPLY_TYPE_USB);
ret = power_supply_set_online(bq->usb_psy, true);
power_supply_changed(bq->usb_psy);

充电动画的启动逻辑:POWER_SUPPLY_TYPE_BATTERY的power supply上报充电状态(CHARGE_STATE_NOT_CHARGING,CHARGE_STATE_FASTCHARGE)

bq->charge_state = CHARGE_STATE_FASTCHARGE;
power_supply_changed(&bq->batt_psy);
  1. 利用dumpsys分析当前battery 状态
V2_PRO:/ # dumpsys battery
Current Battery Service state:
AC powered: false
USB powered: true
Wireless powered: false
Max charging current: 0
Max charging voltage: 0
Charge counter: 0
status: 2
health: 2
present: true
level: 46
scale: 100
voltage: 7
temperature: 270
technology: Li-ion

如上主要关注2个字段:

USB powered : true

那么闪电图标应该会出现

status: 2

那么充电动画应该启动了

同时我们还可以通过shell指令的方式启动充电图标和充电动画

dumpsys battery set usb 1

闪电图标应该会出现

dumpsys battery set status 2

充电动画应该启动了

dumpsys battery set usb 0

闪电图标消失

dumpsys battery set status 4

充电动画消失

Android 开机充电图标和充电动画的更多相关文章

  1. android的充电图标显示

    最近RK3026的项目需要修改开机充电,才分析了Android原生态的充电过程. 充电的代码和图标在system/core/charger中,会编译成名字为charger的可执行文件,打包进ramdi ...

  2. 【转】android 电池(二):android关机充电流程、充电画面显示

    关键词:android 电池关机充电 androidboot.mode charger关机充电 充电画面显示 平台信息:内核:linux2.6/linux3.0系统:android/android4. ...

  3. android 电池(二):android关机充电流程、充电画面显示【转】

    本文转载自:http://blog.csdn.net/xubin341719/article/details/8498580 上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下a ...

  4. Android 开机动画启动过程详解

    Android 开机会出现3个画面: 1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片): 2. Android平台启动初始化,出 ...

  5. Android 开机动画源码分析

    Android系统在启动SystemServer进程时,通过两个阶段来启动系统所有服务,在第一阶段启动本地服务,如SurfaceFlinger,SensorService等,在第二阶段则启动一系列的J ...

  6. Android开机动画启动流程

    android开机动画启动流程   从android的Surface Flinger服务启动分析知道,开机动画是在SurfaceFlinger实例通过调用startBootAnim()启动的. 下面我 ...

  7. OpenGL—Android 开机动画源码分析一

    .1 Android开机动画实现方式目前实现Android开机动画的方式主要是逐帧动画和OpenGL动画. ?逐帧动画 逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的 ...

  8. android开机动画(bootanimation)

    Android开机动画有两种修改方法,android 2.0及之后,使用bootanimation程序显示开机画面,如需修改开机画面,不用修改代码,只需按格式要求做bootanimation.zip包 ...

  9. android logo:内核、android开机动画【转】

    本文转载自: 关键词:Android 开机logo  开机动画 initlogo.rle   bootanimation  desc.txt 平台信息:内核:linux2.6/linux3.0系统:a ...

随机推荐

  1. 为什么坚果云Markdown值得使用?

    值得使用说明是被认为有价值的,值得有两种意思的解释:1.有价值,有意义:2.价钱合适,合算:那么坚果云Markdown是否是人们值得使用的呢?下面就来看看坚果云Markdown到底是什么?为什么值得使 ...

  2. 小白学 Python 爬虫(12):urllib 基础使用(二)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  3. linux虚拟机中FTP本地用户模式配置流程

    1.首先在自己虚拟机中安装vsftpd服务,可以先去yum中下载(当然你要有本地yum仓库) 输入命令: yum  install  vsftpd 下载完成之后打开vsftpd服务 输入命令:syst ...

  4. git 路上的拦路虎 了解一下

    我们提交代码现在大部分都在用git  管理代码,有时候会遇到一些问题 用git 会发现一些问题 之前报了一些错误,没有记录,这次记录一下,顺便写一下解决方式: 输输入git remote add or ...

  5. 能避开很多坑的mysql面试题,你知道吗?

    最近有一些朋友问我一些mysql相关的面试题,有一些比较基础,有些比较偏.这里就总结一些常见的mysql面试题吧,都是自己平时工作的总结以及经验.大家看完,能避开很多坑.而且很多问题,都是面试中也经常 ...

  6. 上手spring boot项目(二)之spring boot整合shiro安全框架

    题记:在学习了springboot和thymeleaf之后,想完成一个项目练练手,于是使用springboot+mybatis和thymeleaf完成一个博客系统,在完成的过程中出现的一些问题,将这些 ...

  7. .Net Core使用Ocelot网关(一) -负载,限流,熔断,Header转换

    1.什么是API网关 API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API.它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等.API ...

  8. 为什么每一个爬虫工程师都应该学习 Kafka

    这篇文章不会涉及到Kafka 的具体操作,而是告诉你 Kafka 是什么,以及它能在爬虫开发中扮演什么重要角色. 一个简单的需求 假设我们需要写一个微博爬虫,老板给的需求如下: 开发爬虫对你来说非常简 ...

  9. GIS学习汇总

    GIS之家: Geoserver: geoserver安装部署步骤 geoserver发布地图服务WMS geoserver发布地图服务WMTS geoserver集成以及部署arcgis serve ...

  10. 四点之间最短路(spfa+优先队列+枚举优化)UESTC1955喜马拉雅山上的猴子

    喜马拉雅山上的猴子 Time Limit: 1000 MS     Memory Limit: 256 MB Submit Status 余周周告诉我喜马拉雅山上有猴子,他们知道点石成金的方法.我不信 ...