【入门到实战】OpenHarmony南向子系统开发:uevent事件定制开发指南

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


uevent事件定制开发

简介

OpenHarmony默认电池管理系统可以接收uevent事件,系统根据事件,对设备进行相应的动作,产品定制开发者可根据产品设计规格来定制。定制时采用修改配置文件的方式,实现根据配置文件有选择的接收uevent事件,并且设备触发相应的动作。

开发指导

搭建环境

设备要求:

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

环境要求:

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

开发步骤

本文以RK3568开发板为例,介绍uevent事件的定制方法。

  1. 修改HDI层电池服务配置文件夹中的battery_config.jsonservice层电池服务配置文件夹中的battery_config.json定制后的uevent事件配置如下:

    {
        "uevent": {
            "SUBSYSTEM=hw_power": {
                "BATTERY_UNDER_VOLTAGE=1": "shutdown",
                "BATTERY_UNDER_CURRENT=2": "reboot",
                "BATTERY_UNDER_VOLTAGE=3": "sendcommonevent"
            }
        }
    }
    

    表1 uevent事件所属子系统说明

    所属子系统描述
    SUBSYSTEM=hw_power所属子系统为hw_power

    表2 uevent事件说明

    uevent事件描述
    BATTERY_UNDER_VOLTAGE=1uevent事件(支持正则表达式) 电池电压小于1
    BATTERY_UNDER_CURRENT=2uevent事件(支持正则表达式) 电池电流小于2
    BATTERY_UNDER_VOLTAGE=3uevent事件(支持正则表达式) 电池电压小于3

    表3 动作配置说明

    动作类型描述
    shutdownstring关机
    rebootstring重启
    sendcommoneventstring发送广播
  2. 参考《快速入门》编译定制版本,编译命令如下:

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

调测验证

  1. 更改uevent接收代码,强制接收配置文件中的uevent事件BATTERY_UNDER_VOLTAGE=1:

     void BatteryThread::UeventCallback(void* service)
     {
         char msg[UEVENT_MSG_LEN + UEVENT_RESERVED_SIZE] = { 0 };
    
         ssize_t len = recv(ueventFd_, msg, UEVENT_MSG_LEN, 0);
         if (len < 0 || len >= UEVENT_MSG_LEN) {
             BATTERY_HILOGI(COMP_HDI, "recv return msg is invalid, len: %{public}zd", len);
             return;
         }
    
         // msg separator
         msg[len] = '\0';
         msg[len + 1] = '\0';
    
         std::string powerUevent;
         if (!MatchPowerUevent(msg, powerUevent)) {
             return;
         }
         powerUevent = "BATTERY_UNDER_VOLTAGE=1";
         BATTERY_HILOGI(FEATURE_BATT_INFO, "PowerUevent msg:%{public}s",
         powerUevent.c_str());
         UpdateBatteryInfo(service, powerUevent);
     }
    
  2. 参考《快速入门》编译定制版本,编译命令如下:

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

  4. 设备启动后接收到uevent时关机。

参考

开发过程中可参考的配置文件路径:uevent事件配置源码路径

默认配置:

{
    "uevent": {
        "SUBSYSTEM=hw_power": {
            "BATTERY_UNDER_VOLTAGE=1": "shutdown",
            "BATTERY_UNDER_VOLTAGE=2": "reboot",
            "BATTERY_UNDER_VOLTAGE=3": "sendcommonevent"
        }
    }
}

打包路径:/system/etc/battery

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值