嚴華 发表于 2024-12-13 11:15:23

鸿蒙OpenHarmony【关机充电动画开辟】子系统电源管理

概述

简介

OpenHarmony默认提供了关机充电动画的特性,展示关机状态下的充电电量、充电动画等信息。由于定制厂商盼望定制符合自身规则和特点的显示样式,盼望根据产物的设计规格来定制此特性。为此OpenHarmony提供了关机充电动画的定制方式,产物定制开辟者可根据产物的设计规格来定制此特性。
约束与限制

配置计谋: 产物定制的配置路径,必要根据[配置计谋]决定。本开辟指导中的定制路径以/vendor进行举例,请开辟者根据详细的产物配置计谋,修改定制路径。
开辟指导

搭建环境

设备要求:
标准系统开辟板,如DAYU200/Hi3516DV300开源套件。
环境要求:
Linux调测环境
开辟步骤

本文以为例介绍关机充电动画的定制方法。

[*] 在产物目次[(/vendor/hihope/rk3568)]下创建animation文件夹。
[*] 创建目标文件夹,并安装到//vendor/hihope/rk3568/animation目次下,文件格式如下:
profile
├── BUILD.gn
├── animation.json

[*] 创建resources文件夹放置构成动画的图片文件,并安装到//vendor/hihope/rk3568/animation目次下,文件格式如下:
animation
├── resources
├── profile

[*] 编写BUILD.gn文件,放入//vendor/hihope/rk3568/animation/resource目次下,例如:
import("//build/ohos.gni")

ohos_prebuilt_etc("resources_config0") {
    source = "loop00000.png"                                        #图片资源
    relative_install_dir = "poweroff_charger_animation/resources"
    install_images = [ chipset_base_dir ]                           #安装到vendor目录下的必要配置
    part_name = "product_rk3568"
}

[*] 编写定制的animation.json。包含定制后的关机充电动画配置如下:
{
    "animation": {
      "components": [
            {
                "type": "UIImageView",
                "id": "Charging_Animation_Image",
                "x": 200,
                "y": 480,
                "w": 400,
                "h": 400,
                "resPath": "/system/etc/charger/resources/",
                "imgCnt": 62,
                "updInterval": 60,
                "filePrefix": "loop"
            },
            {
                "type": "UILabel",
                "id": "Charging_Percent_Label",
                "text": "",
                "x": 326,
                "y": 616,
                "w": 68,
                "h": 48,
                "fontSize": 32,
                "fontColor": "#ffffffe6",
                "bgColor": "#00000000"
                "align": "center"
            }
      ]
    },
    "lackpowerChargingPrompt": {
      "components": [
            {
                "type": "UILabel",
                "id": "LackPower_Charging_Label",
                "text": "电池电量低",
                "x": 229,
                "y": 1037,
                "w": 250,
                "h": 45,
                "fontSize": 42,
                "fontColor": "#ff0000ff",
                "bgColor": "#00000000",
                "align": "center"
            }
      ]
    },
    "lackpowerNotChargingPrompt": {
      "components": [
            {
                "type": "UILabel",
                "id": "LackPower_Not_Charging_Label",
                "text": "电池电量低,请连接电源",
                "x": 110,
                "y": 1037,
                "w": 500,
                "h": 45,
                "fontSize": 42,
                "fontColor": "#ff0000ff",
                "bgColor": "#00000000",
                "align": "center"
            }
      ]
    }
}
表1 关机充电动画配置分析
   节点名称作用animation动画配置信息lackpowerChargingPrompt低电量充电状态提示配置信息lackpowerNotChargingPrompt低电量未充电状态提示配置信息components组件集type组件类型id组件IDtext组件的文本内容x组件的X轴坐标y组件的Y轴坐标w组件的宽度(像素点)h组件的高度(像素点)fontSize文本的字体大小fontColor文本的字体颜色align文本对齐方式imgCnt图片数量updInterval图片更新的时间隔断(毫秒)filePrefix图片文件名的前缀resPath组件的资源文件路径
[*] 编写BUILD.gn文件,将animation.json打包到/vendor/etc/charger目次下,配置如下:
import("//build/ohos.gni")

ohos_prebuilt_etc("animation_config") {
    source = "animation.json"             #引用build/ohos.gni
    relative_install_dir = "animation/resources"
    install_images = [ chipset_base_dir ] #安装到vendor目录下的必要配置
    part_name = "product_rk3568"          #part_name为product_rk3568,以实现后续编译
}

[*] 将编译目标添加到/vendor/hihope/rk3568目次下的"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/battery/profile:battery_config",
      "//vendor/hihope/rk3568/animation/profile:animation_config", #添加animation_config的编译
      "//vendor/hihope/rk3568/animation/resource/resources_config" #添加图片资源的编译
    ]
    }
},
"subsystem": "product_hihope"
}
“//vendor/hihope/rk3568/animation/”为文件夹路径,“profile”为创建的文件夹名字,“animation_config”为编译目标。
[*] 编译定制版本,编译命令如下:
./build.sh --product-name rk3568 --ccache

[*] 将定制版本烧录到DAYU200开辟板中。
调测验证


[*] 修改代码配置: 修改代码路径:base/startup/init/services/init/init_config.c 修改函数:ReadConfig 修改前
void ReadConfig(void)
{
    // parse cfg
    char buffer = {0}; // 32 reason max leb
    uint32_t len = sizeof(buffer);
    SystemReadParam("ohos.boot.mode", buffer, &len);
    INIT_LOGI("ohos.boot.mode %s", buffer);
    if (strcmp(buffer, "charger_mode") == 0) {
      // 产品化定制执行此分支流程
      ParseInitCfg(INIT_CONFIGURATION_FILE, NULL);
      ReadFileInDir(OTHER_CHARGE_PATH, ".cfg", ParseInitCfg, NULL);
      ParseInitCfgByPriority();
    } else if (strcmp(buffer, "charger") == 0) {
      ParseInitCfg(INIT_CONFIGURATION_FILE, NULL);
      ReadFileInDir(OTHER_CHARGE_PATH, ".cfg", ParseInitCfg, NULL);
    } else if (InUpdaterMode() == 0) {
      ParseInitCfg(INIT_CONFIGURATION_FILE, NULL);
      ParseInitCfgByPriority();
    } else {
      ReadFileInDir("/etc", ".cfg", ParseInitCfg, NULL);
    }
}
修改后
void ReadConfig(void)
{
    // parse cfg
    char buffer = {0}; // 32 reason max leb
    uint32_t len = sizeof(buffer);
    SystemReadParam("ohos.boot.mode", buffer, &len);
    INIT_LOGI("ohos.boot.mode %s", buffer);
    ParseInitCfg(INIT_CONFIGURATION_FILE, NULL);
    ReadFileInDir(OTHER_CHARGE_PATH, ".cfg", ParseInitCfg, NULL);
    ParseInitCfgByPriority();
}

[*] 利用hdc执行如下命令,使开辟板进入关机充电状态。
hdc shell
reboot charge
https://i-blog.csdnimg.cn/direct/17ba4d9cdf224ebebf60d993379245c9.png
[*] 进入电池电量的节点路径(以当前DAYU开辟版路径为例)。
cd /data/service/el0/battery/battery

[*] 修改电量数值,并观察充电动画数值变化。
cat capacity
修改当前电量为3
echo 3 > capacity
https://i-blog.csdnimg.cn/direct/805c3baa31944e078e262355dad5c5b7.png
[*] 切为Not charging状态,直接进入关机状态。
echo Not charging > status

[*] 在极低电量时(此处默认1%)修改充电状态,不同的充电状态对应显示动画或关机。

[*]进入电池电量的节点路径。
cd /data/service/el0/battery/battery
cat capacity
   
[*]修改当前电量为1。
echo 1 > capacity
   
[*]检察当前状态。
cat status
当前状态为Charging
https://i-blog.csdnimg.cn/direct/fccf098870e84295871513f72474153b.png
   
[*]改变当前状态,为未连接电源状态。
echo Not charging > status
https://i-blog.csdnimg.cn/direct/80be237f86094acea5de3d2138b3cda8.png

[*] 以下对关机动画的图片进行可定制化的测试修改,步骤与上方相同,只是图片作出替换。

[*]初始状态。
https://i-blog.csdnimg.cn/direct/32fcdd9064bb4638a25d888beba3acf7.png
   
[*]3%电量状态。
https://i-blog.csdnimg.cn/direct/403b4ca5176742c78e7f734ee114e684.png
   
[*]1%电量,充电状态。
https://i-blog.csdnimg.cn/direct/84d649a396474ec2a05d87ff2c42fa35.png
   
[*]1%电量,未充电状态。
https://i-blog.csdnimg.cn/direct/8831c62f237349ab93c0abcf7a3f01d9.png
   
[*]当电量高于1%,切为Not charging状态
echo 3 > capacity
echo Not charging > status

参考

开辟过程中可参考的配置文件路径:[默认关机充电动画配置源码路径]
默认配置:
{
      "animation": {
            "components": [
                {
                  "type": "UIImageView",
                  "id": "Charging_Animation_Image",
                  "x": 180,
                  "y": 410,
                  "w": 400,
                  "h": 400,
                  "resPath": "/system/etc/charger/resources/",
                  "imgCnt": 62,
                  "updInterval": 60,
                  "filePrefix": "loop"
                },
                {
                  "type": "UILabel",
                  "id": "Charging_Percent_Label",
                  "text": "",
                  "x": 365,
                  "y": 580,
                  "w": 65,
                  "h": 43,
                  "fontSize": 32,
                  "fontColor": "#ffffffe6",
                  "bgColor": "#00000000",
                  "align": "center"
                }
            ],
      },
      "lackpowerChargingPrompt": {
            "components": [
                {
                  "type": "UILabel",
                  "id": "LackPower_Charging_Label",
                  "text": "电池电量低",
                  "x": 229,
                  "y": 1037,
                  "w": 250,
                  "h": 45,
                  "fontSize": 42,
                  "fontColor": "#ff0000ff",
                  "bgColor": "#00000000",
                  "align": "center"
                }
            ]
      },
      "lackpowerNotChargingPrompt": {
            "components": [
                {
                  "type": "UILabel",
                  "id": "LackPower_Not_Charging_Label",
                  "text": "电池电量低,请连接电源",
                  "x": 110,
                  "y": 1037,
                  "w": 500,
                  "h": 45,
                  "fontSize": 42,
                  "fontColor": "#ff0000ff",
                  "bgColor": "#00000000",
                  "align": "center"
                }
            ]
      }
    }
打包路径:/system/etc/charger/resource

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 鸿蒙OpenHarmony【关机充电动画开辟】子系统电源管理