OpenHarmony子系统开发 - 电源管理(一)

OpenHarmony子系统开发 - 电源管理(一)

一、电源模式定制开发指导

概述

简介

OpenHarmony默认提供了电源模式(如正常模式、性能模式、省电模式、超级省电模式)的特性。但由于不同产品的部件存在差异,导致在同样场景下电源模式的配置需要也存在差异,为此,OpenHarmony提供了电源管理的定制方式,产品定制开发者可根据产品的设计规格来定制这些特性。

基本概念

OpenHarmony支持的可定制的电源模式如下,每种模式对应了不同的电源和性能策略模式。

  • 正常模式:默认的电源模式,无特殊需求的情况下,此模式下的系统亮度、灭屏时间,进入睡眠时间等均适合大部分用户的需要。

  • 性能模式:强调性能表现的电源模式,如增加系统亮度、关闭灭屏时间、防止进入睡眠等。

  • 省电模式:强调省电表现的电源模式,如降低系统亮度、缩短灭屏时间、缩短进入睡眠时间等。

  • 超级省电模式:强调超级省电表现的电源模式,如大幅降低系统亮度、大幅缩短灭屏时间,大幅缩短进入睡眠时间等。

约束与限制

产品定制的配置路径,需要根据配置策略决定。本开发指导中的定制路径以/vendor进行举例,请开发者根据具体的产品配置策略,修改定制路径。

开发指导

搭建环境

设备要求:

标准系统开发板,如DAYU200/Hi3516DV300开源套件。

环境要求:

Linux调测环境,相关要求和配置可参考《快速入门》。

开发步骤

本文以定制DAYU200的电源模式为例介绍电源模式的定制方法:

  1. 在vendor/hihope/rk3568下创建power_manager文件夹。

  2. 参考默认电源模式配置文件夹创建目标文件夹,并安装到//vendor/hihope/rk3568/power_manager,文件格式如下:

    profile
    ├── BUILD.gn
    ├── power_mode_config.xml
    
  3. 参考默认电源模式配置文件夹中的power_mode_config.xml编写定制的power_mode_config.xml:

    proxy节点的说明是电源模式:

    表1 proxy节点说明

    电源模式ID
    正常模式600
    省电模式601
    性能模式602
    超级省电模式603

    switch节点的说明是配置项:

    表2 switch节点说明

    配置项ID取值范围
    灭屏时间101value是时长,为整数,value>=-1, 单位为毫秒(ms),-1为关闭灭屏功能。
    系统自动睡眠时间102value是时长,为整数,value>=-1, 单位为毫秒(ms),-1为关闭系统自动睡眠功能。
    自动调节亮度103value为是否开启,取值范围:
    -1为关闭自动调节亮度功能,
    1为开启自动调节亮度功能。
    自动调节屏幕旋转107value为是否开启,取值范围:
    -1为关闭自动调节屏幕旋转,
    1为开启自动调节屏幕旋转。
    系统亮度115value是亮度,为整数,取值范围:0~255。
    震动开关120value为是否开启,取值范围:
    -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>
    
  4. 参考默认电源模式配置文件夹中的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" ]
    }
  5. 将编译目标添加到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"
    }
    
  6. 参考《快速入门》编译定制版本,编译命令如下:

    ./build.sh --product-name rk3568 --ccache
    
  7. 将定制版本烧录到DAYU200开发板中。

调测验证

  1. 开机后,先进入shell命令行:

    hdc shell
    
  2. 设置电源模式为正常模式,并验证。

    1. 执行下列命令,更改电源模式,使设备进入正常模式:

      power-shell setmode 600
      
    2. 成功进入正常模式:

      Set Mode: 600
      Set Mode Success!
    3. 执行下列命令,获取当前系统自动睡眠时间:

      hidumper -s 3301 -a -a-------------------------------[ability]-----------------------------------------------------------------PowerManagerService---------------------------------
      POWER STATE DUMP:
      Current State: INACTIVE  Reason: 1  Time: 33227
      ScreenOffTime: Timeout=10000ms
      ······(省略其他,只显示系统自动睡眠时间的配置)
    4. 点亮屏幕,观察设备屏幕,10秒后灭屏,设置成功。

  3. 设置电源模式为省电模式,并验证。

    1. 执行下列命令,更改电源模式,使设备进入省电模式:

      power-shell setmode 601
      
    2. 成功进入省电模式:

      Set Mode: 601
      Set Mode Success!
    3. 执行下列命令,获取当前系统自动睡眠时间:

      hidumper -s 3301 -a -a-------------------------------[ability]-----------------------------------------------------------------PowerManagerService---------------------------------
      POWER STATE DUMP:
      Current State: INACTIVE  Reason: 1  Time: 33227
      ScreenOffTime: Timeout=20000ms
      ······(省略其他,只显示系统自动睡眠时间的配置)
    4. 点亮屏幕,观察设备屏幕,20秒后灭屏,设置成功。

  4. 设置电源模式为性能模式,并验证。

    1. 执行下列命令,更改电源模式,使设备进入性能模式:

      power-shell setmode 602
      
    2. 成功进入性能模式:

      Set Mode: 602
      Set Mode Success!
    3. 执行下列命令,获取当前系统自动睡眠时间:

      hidumper -s 3301 -a -a-------------------------------[ability]-----------------------------------------------------------------PowerManagerService---------------------------------
      POWER STATE DUMP:
      Current State: INACTIVE  Reason: 1  Time: 33227
      ScreenOffTime: Timeout=30000ms
      ······(省略其他,只显示系统自动睡眠时间的配置)
    4. 点亮屏幕,观察设备屏幕,30秒后灭屏,设置成功。

  5. 设置电源模式为超级省电模式,并验证。

    1. 执行下列命令,更改电源模式,使设备进入超级省电模式:

      power-shell setmode 603
      
    2. 成功进入超级省电模式:

      Set Mode: 603
      Set Mode Success!
    3. 执行下列命令,获取当前系统自动睡眠时间:

      hidumper -s 3301 -a -a-------------------------------[ability]-----------------------------------------------------------------PowerManagerService---------------------------------
      POWER STATE DUMP:
      Current State: INACTIVE  Reason: 1  Time: 33227
      ScreenOffTime: Timeout=40000ms
      ······(省略其他,只显示系统自动睡眠时间的配置)
    4. 点亮屏幕,观察设备屏幕,40秒后灭屏,设置成功。

参考

开发过程中可参考的配置文件路径:系统默认电源模式配置源码路径

默认配置

打包路径:/system/etc/power_config/power_mode_config.xml

二、电源默认休眠行为定制开发指导

概述

简介

当前OpenHarmony灭屏后会启动运行锁循环检测线程,然后默认进入休眠状态。不同设备的灭屏方式不相同,可能为合盖灭屏、超时灭屏、盖屏灭屏或是按电源键灭屏等;灭屏后的默认行为也不相同,可能为无动作、将屏幕下电,或是进入休眠状态等。为此,OpenHarmony提供电源默认休眠行为的定制方式,产品可以根据具体的设计规格来定制此特性。

约束与限制

配置策略: 产品定制的配置路径,需要根据配置策略决定。本开发指导中的定制路径以/vendor进行举例,请开发者根据具体的产品配置策略,修改定制路径。

开发指导

搭建环境

设备要求:

标准系统开发板,如DAYU200/Hi3516DV300开源套件。

环境要求:

Linux调测环境,相关要求和配置可参考《快速入门》

开发步骤

本文以DAYU200为例介绍电源默认休眠行为的定制方法。

  1. 在产品目录/vendor/hihope/rk3568下创建power_manager文件夹。

  2. 参考电源管理服务组件中的电源默认休眠行为配置文件夹创建目标文件夹,并安装到/vendor/hihope/rk3568/power_manager目录下,文件格式如下:

    profile
    ├── BUILD.gn
    ├── power_suspend.json
    
  3. 编写定制的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_NONE0无动作
    ACTION_AUTO_SUSPEND1自动进入睡眠
    ACTION_FORCE_SUSPEND2强制进入睡眠
    ACTION_HIBERNATE3进入休眠
    ACTION_SHUTDOWN4关机
  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,以实现后续编译
    }
    
  5. 将编译目标添加到/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”为编译目标。

  6. 参考《快速入门》编译定制版本,编译命令如下:

    ./build.sh --product-name rk3568 --ccache
    
  7. 将定制版本烧录到DAYU200开发板中。

调测验证

  1. 以新的休眠源配置文件为例,更改之后:

    {"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}
    }
    
  2. 开机后,点击电源按键。

    设备进入关机状态。

  3. 再次开机后等待一段时间。

    设备进入黑屏状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37796.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中的锁机制:从全局锁到行级锁

目录 1. 锁的基本概念 2. 全局锁 2.1 全局锁的定义 2.2 全局锁的类型 2.3 全局锁的使用场景 2.4 全局锁的实现方式 2.5 全局锁的优缺点 2.6 全局锁的优化 3. 表级锁 3.1 表级锁的类型 3.2 表级锁的使用场景 3.3 表级锁的优缺点 4. 意向锁&#xff08;Intention Lo…

2025年渗透测试面试题总结- 某亭-安全研究员(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 一、SQL注入过滤单引号绕过方法 二、MySQL报错注入常用函数 三、报错注入绕WAF 四、MySQL写文件函数…

MacOS安装 nextcloud 的 Virtual File System

需求 在Mac上安装next cloud实现类似 OneDrive 那样&#xff0c;文件直接保存在服务器&#xff0c;需要再下载到本地。 方法 在 官网下载Download for desktop&#xff0c;注意要下对版本&#xff0c;千万别下 Mac OS默认的那个。 安装了登录在配置过程中千万不要设置任何同…

1.8 函数的连续性和间断点

1.连续的定义 2.间断点的定义 3.间断点的分类

Unity 云渲染本地部署方案

Unity Render Streaming 云渲染环境搭建 0.安装 Unity Render Streaming 实现原理: 服务器与客户端实现功能包括: 详细内容见官方文档&#xff1a; 官方文档: https://docs.unity3d.com/Packages/com.unity.renderstreaming3.1/manual/tutorial.html Unity 流送云渲染介绍: …

每日一题力扣3248.矩阵中的蛇c++

3248. 矩阵中的蛇 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int finalPositionOfSnake(int n, vector<string>& commands) {int i 0;int j 0;for (int k0;k<commands.size();k) {if (commands[k] "RIGHT")j;else if (comma…

本地基于Ollama部署的DeepSeek详细接口文档说明

前文&#xff0c;我们已经在本地基于Ollama部署好了DeepSeek大模型&#xff0c;并且已经告知过如何查看本地的API。为了避免网络安全问题&#xff0c;我们希望已经在本地调优的模型&#xff0c;能够嵌入到在本地的其他应用程序中&#xff0c;发挥本地DeepSeek的作用。因此需要知…

FPGA 以太网通信(三)

一、UDP协议 UDP&#xff08;User Datagram Protocol Protocol&#xff09;&#xff0c;即用户数据报协议&#xff0c;是一种面向无连接的传输层协议。UDP和TCP协议都属于传输层协议&#xff0c;在网络传输中同一 IP 服务器需要提供各种不同的服务&#xff0c;为了区别不同的服…

期刊分区表2025年名单下载(经济学、管理学)

2025年期刊分区表包括SCIE、SSCI、A&HCI、ESCI和OAJ&#xff0c;共设置了包括自然科学、社会科学和人文科学在内的21个大类 本次分享的是期刊分区表2025年名单经济学类、管理学类&#xff0c;一共7631025条 一、数据介绍 数据名称&#xff1a;期刊分区表2025年名单 数据…

如何在MCU工程中启用HardFault硬错误中断

文章目录 一、HardFault出现场景二、启动HardFault三、C代码示例 一、HardFault出现场景 HardFault&#xff08;硬故障&#xff09; 错误中断是 ARM Cortex-M 系列微控制器中一个较为严重的错误中断&#xff0c;一旦触发&#xff0c;表明系统遇到了无法由其他异常处理机制解决…

智能体开发革命:灵燕平台如何重塑企业AI应用生态

在AI技术深度渗透产业的今天&#xff0c;**灵燕智能体平台**以“全生命周期管理”为核心&#xff0c;为企业提供从智能体开发、协作到落地的闭环解决方案&#xff0c;开创了AI应用工业化生产的新模式。 三位一体的智能体开发体系 1. Agent Builder&#xff1a;零门槛构建专属…

机器学习之支持向量机(SVM)算法详解

文章目录 引言一、 什么是支持向量机&#xff08;SVM&#xff09;二、 SVM的基本原理三、数学推导1.线性可分情况2. 非线性可分情况3. 核函数 四、SVM的优缺点优点&#xff1a;缺点&#xff1a; 五、 应用场景六、 Python实现示例七、 总结 引言 支持向量机&#xff08;Suppor…

【C++进阶】深入探索类型转换

目录 一、C语言中的类型转换 1.1 隐式类型转换 1.2. 显式类型转换 1.3.C语言类型转换的局限性 二、C 类型转换四剑客 2.1 static_cast&#xff1a;静态类型转换&#xff08;编译期检查&#xff09; 2.2 dynamic_cast&#xff1a;动态类型转换&#xff08;运行时检查&…

机器学习之KL散度推导

机器学习之KL散度推导 预备知识 熵、交叉熵、条件熵 熵 (Entropy) 这一词最初来源于热力学。1948年&#xff0c;克劳德爱尔伍德香农将热力学中的熵引入信息论&#xff0c;所以也被称为香农熵 (Shannon entropy)、信息熵 (information entropy)。 对于具体熵的定义和用法推荐…

使用PlotNeuralNet绘制ResNet50模型

一、下载所需软件 1、下载MikTex 作用:将.tex文件转换为PDF文件 下载官网链接:Getting MiKTeX 2、下载Git 作用:将PlotNeuralNet库从GitHub上下载下来,在cmd使用命令行: git clone https://github.com/SamuraiBUPT/PlotNeuralNet-Windows.git 就可以将PlotNeuralNet…

10分钟打造专属AI助手:用ms-swift实现自我认知微调

想象一下&#xff0c;你是辛辛苦苦利用开源模型打造一个专属的AI产品助手。这个助手不仅能高效解答客户的问题&#xff0c;还能自豪地告诉大家&#xff1a;“我是某某打造的某某助手&#xff0c;代表着我们的品牌和价值观。” 然而&#xff0c;当前市面上的开源AI模型虽然技术先…

尝试使用tauri2+Django+React的项目

前言 使用Tauri2前端&#xff0c;本质是进程间的通信。并非前后端。 而想使用nw&#xff0c;先后端打包exe&#xff0c;再和前端打包成exe&#xff0c;并没有完成成功。 而笔者从Tauri中看到这种可能性。很有可能成功基于SeaORMMySQLTauri2ViteReact等的CRUD交互项目-CSDN博…

【JavaWeb学习Day27】

Tlias前端 员工管理 条件分页查询&#xff1a; 页面布局 搜索栏&#xff1a; <!-- 搜索栏 --><div class"container"><el-form :inline"true" :model"searchEmp" class"demo-form-inline"><el-form-item label…

Milvus WeightedRanker 对比 RRF 重排机制

省流:优先选择WeightedRanker 以rag为例,优先选择bm25全文检索,其次选择向量检索 Milvus混合搜索中的重排机制 Milvus通过hybrid_search() API启用混合搜索功能&#xff0c;结合复杂的重排策略来优化多个AnnSearchRequest实例的搜索结果。本主题涵盖了重排过程&#xff0c;…

PLY格式文件如何转换成3DTiles格式——使用GISBox软件实现高效转换

一、概述 在三维GIS和数字孪生领域&#xff0c;3DTiles格式已成为主流的数据格式之一。它由Cesium团队提出&#xff0c;专为大规模3D数据可视化设计&#xff0c;能够高效地加载和展示海量模型数据。而PLY格式则是一种常见的三维模型文件格式&#xff0c;主要用于存储点云数据或…