1# 电源模式定制开发指导
2
3## 概述
4
5### 简介
6
7OpenHarmony默认提供了电源模式(如正常模式、性能模式、省电模式、超级省电模式)的特性。但由于不同产品的部件存在差异,导致在同样场景下电源模式的配置需要也存在差异,为此,OpenHarmony提供了电源管理的定制方式,产品定制开发者可根据产品的设计规格来定制这些特性。
8
9### 基本概念
10
11OpenHarmony支持的可定制的电源模式如下,每种模式对应了不同的电源和性能策略模式。
12
13- 正常模式:默认的电源模式,无特殊需求的情况下,此模式下的系统亮度、灭屏时间,进入睡眠时间等均适合大部分用户的需要。
14
15- 性能模式:强调性能表现的电源模式,如增加系统亮度、关闭灭屏时间、防止进入睡眠等。
16
17- 省电模式:强调省电表现的电源模式,如降低系统亮度、缩短灭屏时间、缩短进入睡眠时间等。
18
19- 超级省电模式:强调超级省电表现的电源模式,如大幅降低系统亮度、大幅缩短灭屏时间,大幅缩短进入睡眠时间等。
20
21
22### 约束与限制
23
24产品定制的配置路径,需要根据[配置策略](https://gitee.com/openharmony/customization_config_policy)决定。本开发指导中的定制路径以`/vendor`进行举例,请开发者根据具体的产品配置策略,修改定制路径。
25
26## 开发指导
27
28### 搭建环境
29
30设备要求:
31
32标准系统开发板,如DAYU200/Hi3516DV300开源套件。
33
34环境要求:
35
36Linux调测环境,相关要求和配置可参考《[快速入门](../quick-start/quickstart-overview.md)》。
37
38### 开发步骤
39
40本文以定制[DAYU200](https://gitee.com/openharmony/vendor_hihope/tree/master/rk3568)的电源模式为例介绍电源模式的定制方法:
41
421. 在[vendor/hihope/rk3568](https://gitee.com/openharmony/vendor_hihope/tree/master/rk3568)下创建power_manager文件夹。
43
442. 参考[默认电源模式配置文件夹](https://gitee.com/openharmony/powermgr_power_manager/tree/master/services/native/profile)创建目标文件夹,并安装到//vendor/hihope/rk3568/power_manager,文件格式如下:
45
46    ```text
47    profile
48    ├── BUILD.gn
49    ├── power_mode_config.xml
50    ```
51
523. 参考[默认电源模式配置文件夹中的power_mode_config.xml](https://gitee.com/openharmony/powermgr_power_manager/blob/master/services/native/profile/power_mode_config.xml)编写定制的power_mode_config.xml53
54    proxy节点的说明是电源模式:
55
56    **表1** proxy节点说明
57    | 电源模式 | ID |
58    | :------ | --- |
59    | 正常模式 | 600 |
60    | 省电模式 | 601 |
61    | 性能模式 | 602 |
62    | 超级省电模式 | 603 |
63
64    switch节点的说明是配置项:
65
66    **表2** switch节点说明
67    | 配置项 | ID | 取值范围 |
68    | :------ | ----- | ----- |
69    | 灭屏时间 | 101 | value是时长,为整数,value>=-1, 单位为毫秒(ms),-1为关闭灭屏功能。 |
70    | 系统自动睡眠时间 | 102 | value是时长,为整数,value>=-1, 单位为毫秒(ms),-1为关闭系统自动睡眠功能。  |
71    | 自动调节亮度 | 103 | value为是否开启,取值范围:<br>-1为关闭自动调节亮度功能, <br>1为开启自动调节亮度功能。 |
72    | 自动调节屏幕旋转 | 107 | value为是否开启,取值范围:<br>-1为关闭自动调节屏幕旋转, <br>1为开启自动调节屏幕旋转。 |
73    | 系统亮度 | 115 | value是亮度,为整数,取值范围:0~255。 |
74    | 震动开关 | 120 | value为是否开启,取值范围:<br>-1为关闭震动, <br>1为开启震动。 |
75
76    以正常模式为例:
77
78    ```xml
79    <switch_proxy version="1">
80        <proxy id="600">
81            <switch id="101" value="10000"/>
82            <switch id="102" value="0"/>
83            <switch id="103" value="-1"/>
84            <switch id="107" value="1"/>
85            <switch id="115" value="30"/>
86            <switch id="120" value="1"/>
87        </proxy>
88    ```
89
904. 参考[默认电源模式配置文件夹中的BUILD.gn](https://gitee.com/openharmony/powermgr_power_manager/blob/master/services/native/profile/BUILD.gn)编写BUILD.gn文件,将power_mode_config.xml打包到 `/vendor/etc/power_config`目录下,例如:
91
92    ```shell
93    import("//base/powermgr/power_manager/powermgr.gni")
94    import("//build/ohos.gni")
95
96    ## Install vendor power_mode_config.xml to /vendor/etc/power_config/power_mode_config.xml
97    ohos_prebuilt_etc("power_mode_config_vendor") {  # 自定义名称,例子中用名:power_mode_config_vendor
98    source = "power_mode_config.xml"
99    relative_install_dir = "power_config"
100    install_images = [ chipset_base_dir ]            # 安装到vendor目录下的必要配置,chipset_base_dir = "vendor", 如果不配置,默认安装到system目录
101    part_name = "${product_rk3568}"                  # part_name为product_rk3568,以实现后续编译
102    }
103
104    group("power_service_config") {
105    deps = [ ":power_mode_config_vendor" ]
106    }
107
108    ```
109
1105. 将编译目标添加到[rk3568默认的ohos.build](https://gitee.com/openharmony/vendor_hihope/blob/master/rk3568/ohos.build)的"module_list"中,例如:
111
112    ```json
113    {
114      "parts": {
115        "product_rk3568": {
116          "module_list": [
117            "//vendor/hihope/rk3568/default_app_config:default_app_config",
118            "//vendor/hihope/rk3568/image_conf:custom_image_conf",
119            "//vendor/hihope/rk3568/power_manager/profile:power_mode_config_vendor", # 添加power_mode_config_vendor的编译。
120            "//vendor/hihope/rk3568/preinstall-config:preinstall-config",
121            "//vendor/hihope/rk3568/resourceschedule:resourceschedule",
122            "//vendor/hihope/rk3568/etc:product_etc_conf"
123          ]
124        }
125      },
126      "subsystem": "product_hihope"
127    }
128    ```
129
130
1316. 参考《[快速入门](../quick-start/Readme-CN.md)》编译定制版本,编译命令如下:
132
133    ```shell
134    ./build.sh --product-name rk3568 --ccache
135    ```
136
1377. 将定制版本烧录到DAYU200开发板中。
138
139### 调测验证
140
1411. 开机后,先进入shell命令行:
142
143    ```shell
144    hdc shell
145    ```
146
1472. 设置电源模式为正常模式,并验证。
148
149    1. 执行下列命令,更改电源模式,使设备进入正常模式:
150
151        ```shell
152        power-shell setmode 600
153        ```
154
155    2. 成功进入正常模式:
156
157        ```shell
158        Set Mode: 600
159        Set Mode Success!
160
161        ```
162    3. 执行下列命令,获取当前系统自动睡眠时间:
163
164        ```shell
165        hidumper -s 3301 -a -a
166
167        -------------------------------[ability]-------------------------------
168
169
170        ----------------------------------PowerManagerService---------------------------------
171        POWER STATE DUMP:
172        Current State: INACTIVE  Reason: 1  Time: 33227
173        ScreenOffTime: Timeout=10000ms
174        ······(省略其他,只显示系统自动睡眠时间的配置)
175
176        ```
177
178    4. 点亮屏幕,观察设备屏幕,10秒后灭屏,设置成功。
179
1803. 设置电源模式为省电模式,并验证。
181
182    1. 执行下列命令,更改电源模式,使设备进入省电模式:
183
184        ```shell
185        power-shell setmode 601
186        ```
187
188    2. 成功进入省电模式:
189
190        ```shell
191        Set Mode: 601
192        Set Mode Success!
193
194        ```
195    3. 执行下列命令,获取当前系统自动睡眠时间:
196
197        ```shell
198        hidumper -s 3301 -a -a
199
200        -------------------------------[ability]-------------------------------
201
202
203        ----------------------------------PowerManagerService---------------------------------
204        POWER STATE DUMP:
205        Current State: INACTIVE  Reason: 1  Time: 33227
206        ScreenOffTime: Timeout=20000ms
207        ······(省略其他,只显示系统自动睡眠时间的配置)
208
209        ```
210
211    4. 点亮屏幕,观察设备屏幕,20秒后灭屏,设置成功。
212
2134. 设置电源模式为性能模式,并验证。
214
215    1. 执行下列命令,更改电源模式,使设备进入性能模式:
216
217        ```shell
218        power-shell setmode 602
219        ```
220
221    2. 成功进入性能模式:
222
223        ```shell
224        Set Mode: 602
225        Set Mode Success!
226
227        ```
228    3. 执行下列命令,获取当前系统自动睡眠时间:
229
230        ```shell
231        hidumper -s 3301 -a -a
232
233        -------------------------------[ability]-------------------------------
234
235
236        ----------------------------------PowerManagerService---------------------------------
237        POWER STATE DUMP:
238        Current State: INACTIVE  Reason: 1  Time: 33227
239        ScreenOffTime: Timeout=30000ms
240        ······(省略其他,只显示系统自动睡眠时间的配置)
241
242        ```
243
244    4. 点亮屏幕,观察设备屏幕,30秒后灭屏,设置成功。
245
2465. 设置电源模式为超级省电模式,并验证。
247
248    1. 执行下列命令,更改电源模式,使设备进入超级省电模式:
249
250        ```shell
251        power-shell setmode 603
252        ```
253
254    2. 成功进入超级省电模式:
255
256        ```shell
257        Set Mode: 603
258        Set Mode Success!
259
260        ```
261    3. 执行下列命令,获取当前系统自动睡眠时间:
262
263        ```shell
264        hidumper -s 3301 -a -a
265
266        -------------------------------[ability]-------------------------------
267
268
269        ----------------------------------PowerManagerService---------------------------------
270        POWER STATE DUMP:
271        Current State: INACTIVE  Reason: 1  Time: 33227
272        ScreenOffTime: Timeout=40000ms
273        ······(省略其他,只显示系统自动睡眠时间的配置)
274
275        ```
276
277    4. 点亮屏幕,观察设备屏幕,40秒后灭屏,设置成功。
278
279## 参考
280
281开发过程中可参考的配置文件路径:[系统默认电源模式配置源码路径](https://gitee.com/openharmony/powermgr_power_manager/tree/master/services/native/profile)
282
283[默认配置](https://gitee.com/openharmony/powermgr_power_manager/blob/master/services/native/profile/power_mode_config.xml)
284
285打包路径:`/system/etc/power_config/power_mode_config.xml`
286