OpenHarmony 电池接口调用流程
上一篇文章中我们介绍了battery HDI接口的实现,这节我们来接着了解下电池接口的调用流程。 首先看一下battery_manager的整体框架图,目标是了解清楚两条通路: 1、上层应用如何通过Napi接口层层向下调用到底层HDI接口并最终与内核交互的 2、底层产生电池uevent事件如何层层上报到上层系统服务并进行相应处理的 图 1 电池服务组件架构
上一篇文章中我们介绍了battery HDI接口的实现,这节我们来接着了解下电池接口的调用流程。
首先看一下battery_manager的整体框架图,目标是了解清楚两条通路:
-
1、上层应用如何通过Napi接口层层向下调用到底层HDI接口并最终与内核交互的
-
2、底层产生电池uevent事件如何层层上报到上层系统服务并进行相应处理的
图 1 电池服务组件架构图
开始之前,先介绍一下框架图中的两个重要模块:
-
一个是PowerSupplyProvider,如名字所示,它就像整个电池模块的信息中枢,所有的电池信息,最终都要通过PowerSupplyProvider来获取,无论是应用调用接口获取电池信息还是底层有电池事件上报时,系统对电池信息的更新。
-
另一个是Batteryd,Batteryd模型向下监听来自底层的电池事件,向上传递电池数据信息给系统服务层的battery_service,battery_service根据传递过来的电池信息做进一步操作,比如温度过高或者电量过低时,系统会直接关机,保护硬件。
一、初始化流程
源码中对这部分的实现还是比较复杂的,这里对一些关键部分做以下解读:
1、驱动启动:
上一节有讲到,HDI服务发布是基于用户态HDF驱动框架,所以需要实现一个驱动入口,并对服务做一个基本的初始化,关键部分已在图中标注:
详解③IBatteryInterface::Get(true):
2、系统服务启动:
battery_service启动时,会定义callback接口,callback提供自底向上的反向调用功能,目的是当底层有电池事件上报时,通过这个接口将数据上报到系统服务层进行处理。
二、uevent事件上报流程
当底层有uevent事件上报时,监听线程会捕获此事件并调用UeventCallBack进行处理,在确定上报的事件类型是power_supply后,会调用UpdateBatteryInfo对电池信息进行更新,并将最后得到的BatteryInfo对象通过回调函数Update传递到系统服务层,系统服务层在对event对象进行类型转换之后,调用HandleBatteryInfo函数对上报的数据进行相应处理,比如电量小于低电量关机阈值时会进行关机操作等。
三、应用接口调用流程
最后,来看一下应用通过系统服务再到HDI服务获取电池信息这部分,如图 1 电池服务组件架构图所示,这条调用流程是非常直观且清晰的,在OpenHarmony中,应用、系统服务与HDI服务三部分分别运行在不同的进程中,它们之间的交互都通过IPC跨进程通信,所以在这里,应用想要获取电池信息,需要经过两次IPC调用,关于这部分内容,几乎在OpenHarmony的所有模块中都有用到,相信阅读过一些源码的朋友对这部分已经有了大概了解,所以这里不再赘述。用一张流程图就可以很清楚的表示出接口的调用流程。
更多推荐
所有评论(0)