可视化工具按键功能自定义配置方法
📎 原始文档:https://www.kdocs.cn/l/cuOZ9qqTcLYo 可视化工具按键功能自定义配置方法
提示:按键添加/修改可以只看【添加/修改】的标识,查看按键消息完整转发流程可详细看文档。
| 序号 | 标题 |
|---|---|
| 1 | 可视化工具-按键消息流程+常规按键添加流程 |
| 2 | 可视化工具-长按时间按键自定义/长按时间抬起自定义 |
一、可视化工具按键消息流程+常规按键添加
可视化工具 key_driver.c 只保留单击,长按等基本操作,各方案可跟进自身的业务需求,通过消息字段中增加的时间戳信息实现多击、组合键等操作,以此可以保证key_driver.c 的简洁稳定,各方案自己的修改也不会影响其它方案。
1.触摸按键消息发出:
触摸按键中断:void p33_ctmu_key_event_irq_handler()
2.1【如果没有开启滑动触摸,添加按键事件如下】【添加/修改】





2.2【下方添加按键事件是在开启滑动触摸中】【添加/修改】




知识点:推送按键原始消息:(MSG_FROM_KEY为按键原始消息)
MSG_FROM_KEY就是按键事件的原始消息,上方触摸做的识别(识别几击/滑动),即是推送出去原始的按键消息,原始按键消息结构如下:
app_send_message_from(MSG_FROM_KEY, sizeof(*event), (int *)event);
按键原始消息:
struct key_event {
value; //键值
event; //动作
}
所有注册了获取按键原始消息的接口都能接收到按键原始消息并做处理,如下注册的key_tone_msg_handler
消息获取注册方式:
APP_MSG_HANDLER(key_tone_msg_entry) = {
.owner = 0xff,
.from = MSG_FROM_KEY,
.handler = key_tone_msg_handler,
};
3.TWS转发按键消息:
(app_core收到按键原始消息后进行app按键消息转发)
MSG_FROM_APP就是APP消息
app_core 收到原始的按键消息后,会分发给注册了按键消息的接口,bt模式下收到后会通过get_key_remap_table() 函数获取映射表,将按键消息映射成 APP 消息【如下图】
然后通过 tws 的发送函数发送给对方。默认的映射表定义在key_ablity.c 中定义,通过 APP_KEY_MSG_REMAP()完成映射。
以上是tws转发的按键消息,是以MSG_FROM_APP发出去的,注册app消息接口的处理函数都能收到,就是消息的中转站,这里并不需要做修改。如下就是注册了MSG_FROM_APP消息的按键事件处理接口。
APP_MSG_HANDLER(app_key_msg_entry) = {
.owner = 0xff,
.from = MSG_FROM_APP,
.handler = app_key_msg_handler,
};
4.APP按键消息的接收及最终处理:【添加/修改】
以app_key_msg_handler为例,如下是对应触摸按键类型的按键事件案例



二、可视化工具长按时间按键自定义/长按时间抬起自定义
案例:添加长按2s和长按2s抬起 (【添加/修改】)
1.长按保持2s按键事件添加






【至此触摸长按保持2s事件即新增好了,即可在创建接受app按键消息的处理函数(如app_key_msg_handler)中再处理了】【同上常规按键消息的添加】
2.长按保持2s抬起按键事件添加
触摸按键单击/长按抬起后,最后都会触发抬起事件
长按抬起事件首先是判断上一按键事件类型,在之中再判断长按2s的标识,标识变量可以直接定义在触摸按键结构体中;当判断为长按2s后,修改最终的按键事件类型,需要注意的是,注意清除变量。


【至此触摸长按保持2s抬起事件即新增好了,即可在创建接受app按键消息的处理函数(如app_key_msg_handler)中再处理了】【同上常规按键消息的添加】