harmony 鸿蒙uevent事件定制开发指导
uevent事件定制开发指导
概述
简介
OpenHarmony默认电池管理系统可以接收uevent事件,系统根据事件,对设备进行相应的动作,产品定制开发者可根据产品设计规格来定制。定制时采用修改配置文件的方式,实现根据配置文件有选择的接收uevent事件,并且设备触发相应的动作。
开发指导
搭建环境
设备要求:
标准系统开发板,如DAYU200/Hi3516DV300开源套件。
环境要求:
Linux调测环境,相关要求和配置可参考《快速入门》。
开发步骤
本文以RK3568开发板为例,介绍uevent事件的定制方法。
修改HDI层电池服务配置文件夹中的battery_config.json与service层电池服务配置文件夹中的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=1|uevent事件(支持正则表达式)电池电压小于1。| |BATTERY_UNDER_CURRENT=2|uevent事件(支持正则表达式)电池电流小于2。| |BATTERY_UNDER_VOLTAGE=3|uevent事件(支持正则表达式)电池电压小于3。|
**表3** 动作配置说明
|动作|类型|描述| |——–|——–|——–| |shutdown|string|关机。| |reboot|string|重启。| |sendcommonevent|string|发送广播。|
参考《快速入门》编译定制版本,编译命令如下:
./build.sh --product-name rk3568 --ccache
将定制版本烧录到DAYU200开发板中。
调测验证
更改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); }
参考《快速入门》编译定制版本,编译命令如下:
./build.sh --product-name rk3568 --ccache
将定制版本烧录到DAYU200开发板中。
设备启动后接收到uevent时关机。
参考
开发过程中可参考的配置文件路径:uevent事件配置源码路径
默认配置:
{
"uevent": {
"SUBSYSTEM=hw_power": {
"BATTERY_UNDER_VOLTAGE=1": "shutdown",
"BATTERY_UNDER_VOLTAGE=2": "reboot",
"BATTERY_UNDER_VOLTAGE=3": "sendcommonevent"
}
}
}
打包路径:/system/etc/battery
你可能感兴趣的鸿蒙文章
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦