充电学习—5、healthed 电池服务

2024-06-17 21:04

本文主要是介绍充电学习—5、healthed 电池服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、healthed服务监听接收内核kernel的电池事件,然后上传数据给framware层的batterysevice,BatteryService计算电池的电量,显示,绘制动画等

android电池系统框架:
在这里插入图片描述

2、healthd服务入口:android/system/core/healthd/healthd.cpp 中main函数

healthd_mode_ops是一个关于充电状态的结构体变量,main里面做healthed初始化,并做一个主循环持续

main函数中,首先根据传入的参数不同区分:开机充电、recovery、关机充电。这三种情况,然后指定不同的healthd_mode_ops回调函数

int main(int argc, char **argv) {
。。。。。。。。。。。。。。。//healthd_mode_ops是一个关于充电状态的结构体变量,healthd_mode_ops = &android_ops;//开机充电时,指向android_ops
。。。。。。。。。。。。。。。。。。。ret = healthd_init(); //healthed初始化
。。。。。。。。。。。。。。。。。。。healthd_mainloop(); //主循环
}

3、healthed_init函数:

static int healthd_init() {epollfd = epoll_create(MAX_EPOLL_EVENTS);//创建一个epoll变量if (epollfd == -1) {KLOG_ERROR(LOG_TAG,"epoll_create failed; errno=%d\n",errno);return -1;}//和板子级别的初始化,里面其实是一个空函数,什么也没做healthd_board_init(&healthd_config);//根据系统所处的模式,有三种情况的init,开机充电,关机充电,recoveryhealthd_mode_ops->init(&healthd_config);//wakealarm定时器初始化wakealarm_init();//uevent事件初始化,用以监听电池的uevent事件。uevent_init();//BatteryMonitor初始化。gBatteryMonitor = new BatteryMonitor();//创建batteryMonitor对象gBatteryMonitor->init(&healthd_config);//初始化batteryMonitor,打开/sys/class/power_supply,//遍历该节点下的电池参数初始化healthd的config参数return 0;
}

4、wakeupalarm_init函数:

static void wakealarm_init(void) {//创建一个wakealarm对应的定时器描述符wakealarm_fd = timerfd_create(CLOCK_BOOTTIME_ALARM, TFD_NONBLOCK);if (wakealarm_fd == -1) {KLOG_ERROR(LOG_TAG, "wakealarm_init: timerfd_create failed\n");return;}//将wakealarm事件注册到wakealarm_fd文件节点上以监听wakealarm事件。if (healthd_register_event(wakealarm_fd, wakealarm_event))KLOG_ERROR(LOG_TAG,"Registration of wakealarm event failed\n");//设置alarm唤醒间隔wakealarm_set_interval(healthd_config.periodic_chores_interval_fast);
}

5、BatteryService电池监听广播服务:

frameworks/base/services/core/java/com/android/server/BatteryService.java

//将电池监听注册到底层

public void onStart() {IBinder b = ServiceManager.getService("batteryproperties");final IBatteryPropertiesRegistrar batteryPropertiesRegistrar =IBatteryPropertiesRegistrar.Stub.asInterface(b);try {//注册电池监听,当底层电池电量发生变化调用此监听,并调用update。batteryPropertiesRegistrar.registerListener(new BatteryListener());} catch (RemoteException e) {// Should never happen.}publishBinderService("battery", new BinderService());publishLocalService(BatteryManagerInternal.class, new LocalService());
}

//当底层有信息时,会调用update更新BatteryService中相关值。

    private void update(BatteryProperties props) {synchronized (mLock) {if (!mUpdatesStopped) {mBatteryProps = props;// Process the new values.processValuesLocked(false);} else {mLastBatteryProps.set(props);}}}

processValuesLocked函数更新上报的电池信息:
电池电量、充电状态、低温关机、低电关机、电池状态、适配器插拔等
在这里:
//发送电池状态变换广播

  sendIntentLocked();

这篇关于充电学习—5、healthed 电池服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070486

相关文章

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将