OpenHarmony源码解析之显示屏亮度获取功能 原创 精华
深开鸿
发布于 2022-8-11 17:02
浏览
8收藏
作者:严明舟
本文以OpenHarmony 3.1 Release - powermgr_display_manager源码为基础进行分析。
1 简介
显示能效管理组件是OpenHarmony电源管理子系统的一个组件,主要负责如下功能:
- 显示屏的亮/灭。
- 显示屏亮度调节。
- 显示屏亮度获取。
本文主要分析显示屏亮度获取功能,包括NAPI接口及功能实现的整个流程。
图1 电源管理子系统架构图
图2 显示能效管理组件架构图
2 显示能效管理组件代码目录
3 显示屏亮度获取整体流程
图3 显示屏亮度获取时序图
流程描述:
- JavaScript应用调用getValue获取显示屏亮度
- getValue调用brightness.cpp注册的NAPI接口GetValue,GetValue会将获取显示屏亮度委托给DisplayPowerMgrClient对象的GetBrightness方法
- GetBrightness首先获取显示服务代理端DisplayPowerMgrProxy对象,然后调用DisplayPowerMgrProxy的GetBrightness方法
- 显示服务代理端对象的GetBrightness方法调用SendRequest向显示服务提供方DisplayPowerMgrService发送获取屏幕亮度请求
- DisplayPowerMgrService通过父类DisplayPowerMgrStub的OnRemoteRequest方法收到获取屏幕亮度请求后,调用父类DisplayPowerMgrStub的GetBrightnessStub方法
- GetBrightnessStub继续调用DisplayPowerMgrService的GetBrightness方法
- GetBrightness根据设备id找到对应的ScreenController对象,然后调用ScreenController对象的GetBrightness方法
- ScreenController对象的GetBrightness方法调用ScreenAction对象的GetBrightness方法
- ScreenAction对象的GetBrightness方法调用DisplayManager的GetScreenBrightness操控底层硬件实现显示屏的亮度获取。
3.1 显示能效管理服务注册
- 调用System Ability的MakeAndRegisterAbility接口注册Display Power Manager Service实例
- System Ability调用Display Power Manager Service的OnStart函数实现显示能效管理服务组件的启动
3.2 显示屏亮度调节NAPI接口定义及实现
- NAPI接口声明
- NAPI接口实现,NAPI接口GetValue会进一步调用显示屏亮度调节客户端DisplayPowerMgrClient对象提供的GetBrightness方法
3.3 显示屏亮度获取客户端实现
- DisplayPowerMgrClient首先会调用GetProxy方法,GetProxy会通过GetSystemAbilityManager方法获取SystemAbilityManager实例,然后通过CheckSystemAbility方法检查对应的SA是否存在,并返回remoteObject对象,最后通过iface_cast构造proxy对象,此时创建了PowerMgrProxy实例
- 然后DisplayPowerMgrClient会将亮度获取委托给显示服务代理端DisplayPowerMgrProxy对象的GetBrightness方法处理。
3.4 显示屏亮度获取服务代理端实现
DisplayPowerMgrProxy对象会将亮度获取请求以IPC方式发送给显示服务提供端DisplayPowerMgrService对象处理。
3.5 显示屏亮度获取服务提供端实现
DisplayPowerMgrStub会将亮度获取转发给子类DisplayPowerMgrService的SetBrightness方法处理
DisplayPowerMgrService会根据设备id找到对应的ScreenController对象,然后将亮度获取转发给ScreenController对象的GetBrightness方法处理
3.6 屏幕控制器实现
ScreenController将亮度调节转发给ScreenAction对象的GetBrightness方法处理
3.7 屏幕Action实现
ScreenAction最终调用底层驱动获取显示屏亮度
总结
本文主要和大家分享了OpenHarmony电源管理子系统中显示屏亮度获取功能的实现细节,对NAPI接口、显示服务请求端及显示服务提供端流程等,做了较为详细的代码说明,希望通过本文您能初步掌握电源管理子系统的关键功能和核心流程。关于OpenHarmony其它子系统的分析,请关注后续文章。
更多原创内容请关注:深开鸿技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-8-11 17:05:00修改
赞
6
收藏 8
回复
6
7
8
相关推荐
看到新的组件我马上前排收藏,原来亮度也是在电源管理下。
厉害呀,这么详细的讲解。
不错不错
OpenHarmony每个版本老师都会做讲解吗?
文中的图是从文档中有吗?
膜拜啃源码的大佬,自己看太困难了
没看到HDF驱动层,请大佬解答