【鸿蒙南向开发】OpenHarmony源码解析之获取显示状态功能

1 简介

显示能效管理组件是OpenHarmony电源管理子系统的一个组件,主要负责如下功能:

  1. 显示屏的亮/灭。
  2. 显示屏亮度调节。
  3. 获取显示状态。

本文主要分析获取显示状态功能,包括NAPI接口及功能实现的整个流程。

图1 电源管理子系统架构图

image.png

图2 显示能效管理组件架构图

image.png

2 显示能效管理组件代码目录

base/powermgr/display_manager
├── figures                  	# 架构图
├── frameworks                  # FrameWork层
│   ├── napi                  	# NAPI
│   └── native                  # Native层
├── interfaces                  # 接口层
│   ├── innerkits               # 内部 APIs
│   └── kits                    # 外部接口 APIs
├── sa_profile                  # SA 配置文件
├── service                    	# 服务层
│   ├── native                  # Native 层
│   └── zidl                    # zidl 接口层
├── test                        # 测试用例
└── utils                       # 工具和通用层

3 获取显示状态整体流程

图3 获取显示状态时序图

image.png

流程描述:

  1. JavaScript应用调用getState获取显示状态
  2. getState调用brightness.cpp注册的NAPI接口GetDisplayState,GetDisplayState会将获取显示屏亮度委托给DisplayPowerMgrClient对象的GetDisplayState方法
  3. GetDisplayState首先获取显示服务代理端DisplayPowerMgrProxy对象,然后调用DisplayPowerMgrProxy的GetDisplayState方法
  4. 显示服务代理端对象的GetDisplayState方法调用SendRequest向显示服务提供方DisplayPowerMgrService发送获取显示状态请求
  5. DisplayPowerMgrService通过父类DisplayPowerMgrStub的OnRemoteRequest方法收到获取显示状态请求后,调用父类DisplayPowerMgrStub的GetDisplayStateStub方法
  6. GetDisplayStateStub继续调用DisplayPowerMgrService的GetDisplayState方法
  7. GetDisplayState根据设备id找到对应的ScreenController对象,然后调用ScreenController对象的GetState方法
  8. ScreenController调用其自身的公共方法GetState方法,直接返回自身的私有成员变量state_,state_变量在构造ScreenController对象时默认设置为on状态,并且可通过ScreenController对象的公共方法UpdateState去改变

3.1 显示能效管理服务注册

  1. 调用System Ability的MakeAndRegisterAbility接口注册Display Power Manager Service实例
//rk3568/base/powermgr/display_manager/service/native/src/display_system_ability.cpp

REGISTER_SYSTEM_ABILITY_BY_ID(DisplaySystemAbility, DISPLAY_MANAGER_SERVICE_ID, true);

//rk3568/foundation/distributedschedule/safwk/interfaces/innerkits/safwk/system_ability.h
#define REGISTER_SYSTEM_ABILITY_BY_ID(abilityClassName, systemAbilityId, runOnCreate) \
    const bool abilityClassName##_##RegisterResult = \
    SystemAbility::MakeAndRegisterAbility(new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值