WQ7033 按键设置

WQ7033 SDK中的按键集成了多种按键来源, 多种按键来源都集成在SDK中, 如SIMPLE_IO, DEBOUNCE_IO, WQ_TOUCH和各种外部按键芯片来源等, 在SDK中的实现比较复杂, 官方推荐比较常用的是使用DEBOUNCE_IO. 本篇文章跟随WQ7033 SDK看如何使用DEBOUNCE_IO来实现按键功能

WQ7033的按键在软件上分有上中下3层的软件分层结构. 负责上层的主要是APP_BTN模块, 主要负责上层按键事件的处理; 中间层有KEY_SENSOR, KEY_BASE, 负责区分和管理底层按键驱动模块, 下层底层也就是各个按键来源的驱动

按键事件的来源

在SDK中定义了多种不同的按键来源, 在中间层中有定义
按键事件的来源
这里默认选用的是DEBOUNCE_IO来作为按键事件的来源, 也可以在customer/xxx/cfg中的build.ini中增加defines定义
增加宏定义

按键IO和按键事件的配置

在UI工具中选择IOMap选项进入界面, 设置按键的IO选择和上下拉的选择
按键IO的设置
在UserKey界面设置按键产生对应的事件, 支持长按产生的时间, 多击有效时间间隔, 按键防抖时间等设置, 还支持将对应事件设置成组合键的设置
userkey事件
以上这些配置只会在导出的时候生效, 建议是将json文件导出, 直接放在customer/xxx/prebuild路径下, 这样修改代码都能带上配置, 就不需要生成wpk后再重新设置了

按键处理流程分析

  1. 初始化
    key_sensor_init()初始化的时候注册发送按键类型的callback, 当底层有单击, 双击, 长按等按键动作产生的时候会进入btn_callback, 在btn_callback中发送了个消息ID为APP_BTN_MSG_ID_KEY_CALLBACK的事件给到上层APP_BTN按键模块处理, 即进入到app_btn_handle_msg()
    app_btn初始化
    所以当有按键事件来的时候会进入到keypress_parse()中处理按键事件, 并解析按键事件的内容
    keypress_parse函数
  2. 按键事件的解析
    按键事件的解析是再keypress_parse()中处理, 按键事件的解析在SDK中有以下3个步骤:
    首先判断此按键事件是否在econn模块中有处理, econn模块中返回true的情况就不往下做SDK的处理逻辑. 默认SDK中econn模块是没有做处理的
    按键事件解析1
    接下来判断有没有customized user event, 这里的user event指的是在代码运行中动态配置写入flash中存储的按键事件, 一般配合econn代码做按键动态flash存储使用, 这里判断当前来的按键事件在cuskey中是否在flash中有存储, 如果flash有这个设置的话则用app_evt_send()将用户事件发出给上层处理, 默认的SDK也不进入此步骤
    按键事件解析2
    最后的处理方式, 也是SDK默认的处理方式, 这里判断当前按键事件, 是否是UI工具中配置的事件, 如果是UI工具中配置的事件并且系统状态一致的情况, 则使用app_evt_send发送对应的用户事件, 比如工具中配置的是单击执行音乐播放或暂停, 则这里会发送EVTUSR_MUSIC_PLAY_PAUSE事件, APP_EVT模块收到对应的用户事件后, 进入handle_usr_evt()调用相应的API做播放暂停处理
    按键事件解析3
    用户事件处理

按键相关问题

最近有小伙伴在后台私信提出了个问题: 如果UI设计上需要区分单耳模式和双耳模式应该如何实现. 这里举个例子, TWS连接的时候, 双击的UI配置成左边上一曲, 右边下一曲; TWS没有连接单耳使用的时候, 左边右边双击UI都进行下一曲操作
如下为左右的UserKey配置
KV配置
以上配置在双击的时候, 进入keypress_parse()按键事件解析, 不论单边使用或TWS使用都会解析成左边双击上一曲, 右边双击下一曲. 那要区分单耳情况和双耳使用做不同的UI操作, UI工具beetle tool上没有可以进行这个UI的设置. 当UI工具的配置不能满足我们的UI需求的时候, 官方推荐使用自定义的ECONN模块增加相应的逻辑, 自定义ECONN模块的添加可以参考这篇文章: WQ7033自定义交互模块.
可以在自定义的econn模块中的app_econn_handle_key_pressed()函数中增加自定义的功能逻辑, 比如这里拦截了按键双击事件 并添加判断, 在单耳模式下给app_evt模块发送下一曲的消息事件EVTUSR_MUSIC_FORWARD, 返回值设置ret = true表示econn拦截并处理了按键消息之后不再做SDK后续的按键处理, 如下代码仅供参考
econn处理按键

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小的代码里面挖呀挖呀挖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值