OpenHarmony子系统开发 - 电源管理(一)
OpenHarmony子系统开发 - 电源管理(一)
一、电源模式定制开发指导
概述
简介
OpenHarmony默认提供了电源模式(如正常模式、性能模式、省电模式、超级省电模式)的特性。但由于不同产品的部件存在差异,导致在同样场景下电源模式的配置需要也存在差异,为此,OpenHarmony提供了电源管理的定制方式,产品定制开发者可根据产品的设计规格来定制这些特性。
基本概念
OpenHarmony支持的可定制的电源模式如下,每种模式对应了不同的电源和性能策略模式。
-
正常模式:默认的电源模式,无特殊需求的情况下,此模式下的系统亮度、灭屏时间,进入睡眠时间等均适合大部分用户的需要。
-
性能模式:强调性能表现的电源模式,如增加系统亮度、关闭灭屏时间、防止进入睡眠等。
-
省电模式:强调省电表现的电源模式,如降低系统亮度、缩短灭屏时间、缩短进入睡眠时间等。
-
超级省电模式:强调超级省电表现的电源模式,如大幅降低系统亮度、大幅缩短灭屏时间,大幅缩短进入睡眠时间等。
约束与限制
产品定制的配置路径,需要根据配置策略决定。本开发指导中的定制路径以/vendor进行举例,请开发者根据具体的产品配置策略,修改定制路径。
开发指导
搭建环境
设备要求:
标准系统开发板,如DAYU200/Hi3516DV300开源套件。
环境要求:
Linux调测环境,相关要求和配置可参考《快速入门》。
开发步骤
本文以定制DAYU200的电源模式为例介绍电源模式的定制方法:
-
在vendor/hihope/rk3568下创建power_manager文件夹。
-
参考默认电源模式配置文件夹创建目标文件夹,并安装到//vendor/hihope/rk3568/power_manager,文件格式如下:
profile ├── BUILD.gn ├── power_mode_config.xml -
参考默认电源模式配置文件夹中的power_mode_config.xml编写定制的power_mode_config.xml:
proxy节点的说明是电源模式:
表1 proxy节点说明
电源模式 ID 正常模式 600 省电模式 601 性能模式 602 超级省电模式 603 switch节点的说明是配置项:
表2 switch节点说明
配置项 ID 取值范围 灭屏时间 101 value是时长,为整数,value>=-1, 单位为毫秒(ms),-1为关闭灭屏功能。 系统自动睡眠时间 102 value是时长,为整数,value>=-1, 单位为毫秒(ms),-1为关闭系统自动睡眠功能。 自动调节亮度 103 value为是否开启,取值范围:
-1为关闭自动调节亮度功能,
1为开启自动调节亮度功能。自动调节屏幕旋转 107 value为是否开启,取值范围:
-1为关闭自动调节屏幕旋转,
1为开启自动调节屏幕旋转。系统亮度 115 value是亮度,为整数,取值范围:0~255。 震动开关 120 value为是否开启,取值范围:
-1为关闭震动,
1为开启震动。以正常模式为例:
<switch_proxy version="1"><proxy id="600"><switch id="101" value="10000"/><switch id="102" value="0"/><switch id="103" value="-1"/><switch id="107" value="1"/><switch id="115" value="30"/><switch id="120" value="1"/></proxy> -
参考默认电源模式配置文件夹中的BUILD.gn编写BUILD.gn文件,将power_mode_config.xml打包到
/vendor/etc/power_config目录下,例如:import("//base/powermgr/power_manager/powermgr.gni") import("//build/ohos.gni")## Install vendor power_mode_config.xml to /vendor/etc/power_config/power_mode_config.xml ohos_prebuilt_etc("power_mode_config_vendor") { # 自定义名称,例子中用名:power_mode_config_vendor source = "power_mode_config.xml" relative_install_dir = "power_config" install_images = [ chipset_base_dir ] # 安装到vendor目录下的必要配置,chipset_base_dir = "vendor", 如果不配置,默认安装到system目录 part_name = "${product_rk3568}" # part_name为product_rk3568,以实现后续编译 }group("power_service_config") { deps = [ ":power_mode_config_vendor" ] } -
将编译目标添加到rk3568默认的ohos.build的"module_list"中,例如:
{"parts": {"product_rk3568": {"module_list": ["//vendor/hihope/rk3568/default_app_config:default_app_config","//vendor/hihope/rk3568/image_conf:custom_image_conf","//vendor/hihope/rk3568/power_manager/profile:power_mode_config_vendor", # 添加power_mode_config_vendor的编译。"//vendor/hihope/rk3568/preinstall-config:preinstall-config","//vendor/hihope/rk3568/resourceschedule:resourceschedule","//vendor/hihope/rk3568/etc:product_etc_conf"]}},"subsystem": "product_hihope" } -
参考《快速入门》编译定制版本,编译命令如下:
./build.sh --product-name rk3568 --ccache -
将定制版本烧录到DAYU200开发板中。
调测验证
-
开机后,先进入shell命令行:
hdc shell -
设置电源模式为正常模式,并验证。
-
执行下列命令,更改电源模式,使设备进入正常模式:
power-shell setmode 600 -
成功进入正常模式:
Set Mode: 600 Set Mode Success! -
执行下列命令,获取当前系统自动睡眠时间:
hidumper -s 3301 -a -a-------------------------------[ability]-----------------------------------------------------------------PowerManagerService--------------------------------- POWER STATE DUMP: Current State: INACTIVE Reason: 1 Time: 33227 ScreenOffTime: Timeout=10000ms ······(省略其他,只显示系统自动睡眠时间的配置) -
点亮屏幕,观察设备屏幕,10秒后灭屏,设置成功。
-
-
设置电源模式为省电模式,并验证。
-
执行下列命令,更改电源模式,使设备进入省电模式:
power-shell setmode 601 -
成功进入省电模式:
Set Mode: 601 Set Mode Success! -
执行下列命令,获取当前系统自动睡眠时间:
hidumper -s 3301 -a -a-------------------------------[ability]-----------------------------------------------------------------PowerManagerService--------------------------------- POWER STATE DUMP: Current State: INACTIVE Reason: 1 Time: 33227 ScreenOffTime: Timeout=20000ms ······(省略其他,只显示系统自动睡眠时间的配置) -
点亮屏幕,观察设备屏幕,20秒后灭屏,设置成功。
-
-
设置电源模式为性能模式,并验证。
-
执行下列命令,更改电源模式,使设备进入性能模式:
power-shell setmode 602 -
成功进入性能模式:
Set Mode: 602 Set Mode Success! -
执行下列命令,获取当前系统自动睡眠时间:
hidumper -s 3301 -a -a-------------------------------[ability]-----------------------------------------------------------------PowerManagerService--------------------------------- POWER STATE DUMP: Current State: INACTIVE Reason: 1 Time: 33227 ScreenOffTime: Timeout=30000ms ······(省略其他,只显示系统自动睡眠时间的配置) -
点亮屏幕,观察设备屏幕,30秒后灭屏,设置成功。
-
-
设置电源模式为超级省电模式,并验证。
-
执行下列命令,更改电源模式,使设备进入超级省电模式:
power-shell setmode 603 -
成功进入超级省电模式:
Set Mode: 603 Set Mode Success! -
执行下列命令,获取当前系统自动睡眠时间:
hidumper -s 3301 -a -a-------------------------------[ability]-----------------------------------------------------------------PowerManagerService--------------------------------- POWER STATE DUMP: Current State: INACTIVE Reason: 1 Time: 33227 ScreenOffTime: Timeout=40000ms ······(省略其他,只显示系统自动睡眠时间的配置) -
点亮屏幕,观察设备屏幕,40秒后灭屏,设置成功。
-
参考
开发过程中可参考的配置文件路径:系统默认电源模式配置源码路径
默认配置
打包路径:/system/etc/power_config/power_mode_config.xml
二、电源默认休眠行为定制开发指导
概述
简介
当前OpenHarmony灭屏后会启动运行锁循环检测线程,然后默认进入休眠状态。不同设备的灭屏方式不相同,可能为合盖灭屏、超时灭屏、盖屏灭屏或是按电源键灭屏等;灭屏后的默认行为也不相同,可能为无动作、将屏幕下电,或是进入休眠状态等。为此,OpenHarmony提供电源默认休眠行为的定制方式,产品可以根据具体的设计规格来定制此特性。
约束与限制
配置策略: 产品定制的配置路径,需要根据配置策略决定。本开发指导中的定制路径以/vendor进行举例,请开发者根据具体的产品配置策略,修改定制路径。
开发指导
搭建环境
设备要求:
标准系统开发板,如DAYU200/Hi3516DV300开源套件。
环境要求:
Linux调测环境,相关要求和配置可参考《快速入门》
开发步骤
本文以DAYU200为例介绍电源默认休眠行为的定制方法。
-
在产品目录
/vendor/hihope/rk3568下创建power_manager文件夹。 -
参考电源管理服务组件中的电源默认休眠行为配置文件夹创建目标文件夹,并安装到
/vendor/hihope/rk3568/power_manager目录下,文件格式如下:profile ├── BUILD.gn ├── power_suspend.json -
编写定制的power_suspend.json,定制后的电源默认休眠行为示例如下:
{"powerkey": {"action": 1,"delayMs": 0},"timeout": {"action": 1,"delayMs": 0},"lid": {"action": 1,"delayMs": 0},"switch": {"action": 1,"delayMs": 0},"tp_cover": {"action": 1,"delayMs": 0} }表1 休眠源说明
休眠源 描述 powerkey 电源键灭屏 timeout 超时灭屏 lid 皮套灭屏 switch 合盖灭屏 tp_cover 盖屏灭屏 表2 休眠源配置说明
配置项 描述 action 执行动作,需配置具体枚举值数字,详细说明见下表。 delayMs 延迟时间,单位毫秒。 表3 action说明
action 取值 描述 ACTION_NONE 0 无动作 ACTION_AUTO_SUSPEND 1 自动进入睡眠 ACTION_FORCE_SUSPEND 2 强制进入睡眠 ACTION_HIBERNATE 3 进入休眠 ACTION_SHUTDOWN 4 关机 -
参考电源默认休眠行为的配置文件夹中的BUILD.gn编写BUILD.gn文件,将power_suspend.json打包到
/vendor/etc/power_config目录下,配置如下:import("//build/ohos.gni") #引用build/ohos.gniohos_prebuilt_etc("suspend_config") {source = "power_suspend.json"relative_install_dir = "power_config"install_images = [ chipset_base_dir ] #安装到vendor目录下的必要配置part_name = "product_rk3568" #part_name为product_rk3568,以实现后续编译 } -
将编译目标添加到
/vendor/hihope/rk3568目录下ohos.build的"module_list"中,例如:{"parts": {"product_rk3568": {"module_list": ["//vendor/hihope/rk3568/default_app_config:default_app_config","//vendor/hihope/rk3568/image_conf:custom_image_conf","//vendor/hihope/rk3568/preinstall-config:preinstall-config","//vendor/hihope/rk3568/resourceschedule:resourceschedule","//vendor/hihope/rk3568/etc:product_etc_conf","//vendor/hihope/rk3568/power_manager/profile:suspend_config" //添加suspend_config的编译]}},"subsystem": "product_hihope" }“//vendor/hihope/rk3568/power_manager/”为文件夹路径,“profile”为创建的文件夹名字,“suspend_config”为编译目标。
-
参考《快速入门》编译定制版本,编译命令如下:
./build.sh --product-name rk3568 --ccache -
将定制版本烧录到DAYU200开发板中。
调测验证
-
以新的休眠源配置文件为例,更改之后:
{"powerkey": {"action": 4,"delayMs": 0},"timeout": {"action": 1,"delayMs": 0},"lid": {"action": 1,"delayMs": 0},"switch": {"action": 1,"delayMs": 0},"tp_cover": {"action": 1,"delayMs": 0} } -
开机后,点击电源按键。
设备进入关机状态。
-
再次开机后等待一段时间。
设备进入黑屏状态。
相关文章:
OpenHarmony子系统开发 - 电源管理(一)
OpenHarmony子系统开发 - 电源管理(一) 一、电源模式定制开发指导 概述 简介 OpenHarmony默认提供了电源模式(如正常模式、性能模式、省电模式、超级省电模式)的特性。但由于不同产品的部件存在差异,导致在同样场景…...
使用 OpenCV 拼接进行图像处理对比:以形态学操作为例
图像处理在计算机视觉中起着至关重要的作用,而 OpenCV 作为一个强大的图像处理库,提供了丰富的函数来实现各类图像处理任务。形态学操作(Morphological Operations)是其中常用的技术,尤其适用于二值图像的处理。常见的…...
数据库的左连接,右连接,全外连接,自连接,内连接的区别
从语法层面上看, 全外连接full outer join 左连接是left outer join 右连接是right outer join 内连接是inner join 自连接是自身表与自身表进行的左右连接,需要注意的是并没有左内连接和右内连接。 左外连接 select * from A left outer join B …...
Nexus L2 L3基本配置
接口基本配置 N7K上所有端口默认处于shutdown状态; N5K上所有端口默认处于no shutdown状态(所有端口都是switchport) 默认所有接口都是三层route模式, 只有当线卡不支持三层的时候, 接口才会处于二层switchport模式 show run all | in “system default” 创建SVI口需要提前打…...
OpenHarmony 入门——ArkUI 跨页面数据同步和页面级UI状态存储LocalStorage小结(二)
文章大纲 引言一、在代码逻辑使用LocalStorage二、从UI内部使用LocalStorage三、LocalStorageProp和LocalStorage单向同步四、LocalStorageLink和LocalStorage双向同步五、兄弟组件之间同步状态变量七、将LocalStorage实例从UIAbility共享到一个或多个视图 引言 前面一篇文章主…...
Python数据可视化实战:从基础图表到高级分析
Python数据可视化实战:从基础图表到高级分析 数据可视化是数据分析的重要环节,通过直观的图表可以快速洞察数据规律。本文将通过5个实际案例,手把手教你使用Python的Matplotlib库完成各类数据可视化任务,涵盖条形图、堆积面积图、…...
在 Elasticsearch 中扩展后期交互模型 - 第 2 部分 - 8.18
作者:来自 Elastic Peter Straer 及 Benjamin Trent 本文探讨了如何优化后期交互向量,以适应大规模生产工作负载,例如减少磁盘空间占用和提高计算效率。 在之前关于 ColPali 的博客中,我们探讨了如何使用 Elasticsearch 创建视觉搜…...
蓝桥每日打卡--区间移位
#蓝桥#JAVA#区间移位 题目描述 数轴上有n个闭区间:D1,⋯Dn。 其中区间Di用一对整数[ai,bi]来描述,满足 ai≤bi。 已知这些区间的长度之和至少有。 所以,通过适当的移动这些区间,你总可以使得他们的"并"覆盖 [0,],也…...
CUDAOpenCV 基于Hessian矩阵计算特征值
文章目录 一、简介二、实现代码三、实现效果一、简介 基于之前的博客:CUDA&OpenCV Hessain矩阵计算,我们可以计算出每个像素的特征值: 二、实现代码 ComputeHessainMatrix.cuh #ifndef HESSAIN_GPU_CUH #...
基于CAMEL 的Workforce 实现多智能体协同工作系统
文章目录 一、workforce 简介1.架构设计2.通信机制 二、workforce 工作流程图示例1.用户角色2.工作流程 三、workforce 中重要函数说明1.__init__函数2.add_single_agent_worker 函数3.add_role_playing_worker 函数4.add_workforce 函数 四、基于workforce实现多智能体协调&am…...
深入探讨 `ip2region` 中三种初始化方法:newWithBuffer、newWithVectorIndex 和 newWithFileOnly
在处理IP地址地理位置定位时,ip2region 提供了多种方式来初始化 Searcher 实例,以适应不同的应用场景和资源限制。本文将详细介绍并对比 newWithBuffer、newWithVectorIndex 和 newWithFileOnly 这三种初始化方法,帮助开发者根据自己的需求选…...
PostgreSQL_数据表结构设计并创建
目录 前置: 1 数据表设计思路 2 数据表格SQL 3 创建 3.1 创建数据库 db_stock 3.2 在 pgAdmin4 中创建表 前置: 本博文是一个系列。在本人“数据库专栏”-》“PostgreSQL_”开头的博文 1 数据表设计思路 1 日数据来自优矿,优矿的数据…...
如何在MCU工程中启用HardFault硬错误中断
文章目录 一、HardFault出现场景二、启动HardFault三、C代码示例 一、HardFault出现场景 HardFault(硬故障) 错误中断是 ARM Cortex-M 系列微控制器中一个较为严重的错误中断,一旦触发,表明系统遇到了无法由其他异常处理机制解决…...
MySQL -- 复合查询
数据库的查询是数据库使用中比较重要的环节,前面的基础查询比较简单,不做介绍,可自行查阅。本文主要介绍复合查询,并结合用例进行讲解。 本文的用例依据Soctt模式的经典测试表,可以自行下载,也可以自己创建…...
@EnableWebMvc注解导致的坑-记录
1.添加了EnableWebMvc,需要手动添加相关配置,swagger页面问题,出现Unable to render this definition The provided definition does not specify a valid version field. Please indicate a valid Swagger or OpenAPI version field. Suppor…...
卷积神经网络 - 卷积层(具体例子)
为了更一步学习卷积神经网络之卷积层,本文我们来通过几个个例子来加深理解。 一、灰度图像和彩色图像的关于特征映射的例子 下面我们通过2个例子来形象说明卷积层中“特征映射”的概念,一个针对灰度图像,一个针对彩色图像。 例子 1&#x…...
测试Claude3.7 sonnet画蛋白质
测试Claude3.7 sonnet画蛋白虽然画的很粗糙,但是大致画了出来...
java项目之基于ssm的游戏攻略网站(源码+文档)
项目简介 游戏攻略网站实现了以下功能: 管理员主要负责填充图书和其类别信息,并对已填充的数据进行维护,包括修改与删除,管理员也需要审核老师注册信息,发布公告信息,管理自助租房信息等。 💕…...
本地基于Ollama部署的DeepSeek详细接口文档说明
前文,我们已经在本地基于Ollama部署好了DeepSeek大模型,并且已经告知过如何查看本地的API。为了避免网络安全问题,我们希望已经在本地调优的模型,能够嵌入到在本地的其他应用程序中,发挥本地DeepSeek的作用。因此需要知…...
python NameError报错之导库报错
在日常代码编写中,经常出现如 图1 一样的报错,在代码多时很难找到问题,但翻看代码后就会发现是因为未导库, 图1 报错 代码: time.sleep(0.1) print("time库") 解决方法: 第一步:在代码中添加导库代码 import time #…...
Web3网络生态中数据保护合规性分析
Web3网络生态中数据保护合规性分析 在这个信息爆炸的时代,Web3网络生态以其独特的去中心化特性,逐渐成为数据交互和价值转移的新平台。Web3,也被称为去中心化互联网,其核心理念是将数据的控制权归还给用户,实现数据的…...
【数学建模】模糊综合评价模型详解、模糊集合论简介
模糊综合评价模型详解 文章目录 模糊综合评价模型详解1. 模糊综合评价模型概述2. 模糊综合评价的基本原理2.1 基本概念2.2 评价步骤 3. 模糊综合评价的数学模型3.1 数学表达3.2 模糊合成运算 4. 模糊综合评价的应用领域5. 模糊综合评价的优缺点5.1 优点5.2 缺点 6. 模糊综合评价…...
C++ 语法之数组指针
一维数组: 如果我们定义了一个一维数组,那么这个数组名,就是指向第一个数组元素的地址,也即,是整个数组分配的内存空间的首地址。 比如 int a[3]; 定义了一个包含三个元素的数组。因为一个int占4个字节,那…...
从0到1在windows上用flutter开发android app(环境准备、创建项目、加速构建)
一、项目环境准备 1、设置环境变量 需配置以下两个核心环境变量,以替换官方资源链接为国内镜像: Windows系统(通过PowerShell或系统属性面板设置) # 临时生效(当前会话) $env:PUB_HOSTED_URL = "https://pub.flutter-io.cn" $env:FLUTTER_STORAGE_BA…...
PLY格式文件如何转换成3DTiles格式——使用GISBox软件实现高效转换
一、概述 在三维GIS和数字孪生领域,3DTiles格式已成为主流的数据格式之一。它由Cesium团队提出,专为大规模3D数据可视化设计,能够高效地加载和展示海量模型数据。而PLY格式则是一种常见的三维模型文件格式,主要用于存储点云数据或…...
Java定时任务的三重境界:从单机心跳到分布式协调
《Java定时任务的三重境界:从单机心跳到分布式协调》 本文将以生产级代码标准,揭秘Java定时任务从基础API到分布式调度的6种实现范式,深入剖析ScheduledThreadPoolExecutor与Quartz Scheduler的线程模型差异,并给出各方案的性能压…...
响应压缩导致的接口请求response没有响应体问题排查
目录 一、背景二、排查过程三、解决方法四、学习与思考-响应压缩(一)可能原因(二)深入排查(三)注意 一、背景 接口发布到测试环境,测试同学说没有数据 二、排查过程 1、本地用相同的参数、相…...
【Linux网络】手动部署并测试内网穿透
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
java项目之在线购物系统(源码+文档)
项目简介 在线购物系统实现了以下功能: 使用在线购物系统的用户分管理员和用户两个角色的权限子模块。 管理员所能使用的功能主要有:主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等。 用户可以实现主页、个人中心、我的…...
【设计模式】C++ 单例模式总结与最佳实践
1. 单例模式简介 单例模式(Singleton Pattern) 是软件开发中常见的设计模式之一,主要用于 确保某个类只有一个实例,并提供一个全局访问点。常见的使用场景包括: 日志管理:全局唯一的日志记录器。数据库连…...
