中科蓝讯 SDK 开发 PWRKEY 功能
在中科蓝讯 SDK 开发的过程中,我们经常需要进行按键功能的开发,《中科蓝讯 SDK 开发——SDK按键功能简析》博文已经将按键的原理讲得很清楚,今天将从应用的角度来介绍 PWRKEY 按键功能。 1、PWRKEY 原理图 PWRKEY 串联不同阻值的电阻(在 2 中介绍如何选取具体阻值),当按键按下 PWRKEY 将采集到不同的值,以此判断是哪一个按键按下。若需要 PWRKEY 实现开关机功能,则不需要串联电阻或串联 0R 电阻。 2、PWRKEY 可以挂载的按键数量和串联电阻的阻值选取
据 SDK 中 PWRKEY 的数组 pwrkey_table[6] 可知,PWRKEY 最多可以挂载 5 个按键,串联电阻的阻值如图中注释,分别为 0Ω、1.5k、3.9k、15k、33k。 这里将产生一个问题,1 中原理图中 PWRKEY 串联电阻的阻值是否不正确?我们可以先了解该数组的含义和结合函数 static u8 get_pwrkey(void) 即可得出该问题的答案。 以元素 {0x0A, KEY_PLAY_PWR_USER_DEF} 为例,0x0A 是 PWRKEY 通过 ADC 采集电压之后转化所得的值,KEY_PLAY_PWR_USER_DEF 是单击 1 中原理图 s2 时上传到函数 static u8
get_pwrkey(void) 中的值(可自定义参考 4),由下图:
可知,0x0A 只是一个范围的临界值,当 PWRKEY 采集到的值小于等于 0x0A 时,上传到 static u8 get_pwrkey(void) 中的值就是 KEY_PLAY_PWR_USER_DEF,因此 1 中串联电阻的阻值可以根据 SDK
中推荐的阻值有所偏差。
3、PWRKEY 按键处理
KEY_PLAY_PWR_USER_DEF 上传到 static u8 get_pwrkey(void) 中处理,还不能最终被上传到 void func_bt_message(u16 msg) 等函数中作为按键消息。例如,若想单击 1 中 s2 后在 void func_bt_message(u16 msg) 函数中产生一个 case,则需要将 KEY_PLAY_PWR_USER_DEF 或上 KEY_SHORT_UP得到可以上传到 void func_bt_message(u16 msg) 函数中的宏 KU_PLAY_PWR_USER_DEF,SDK 把 KU_PLAY_PWR_USER_DEF 识别为单击操作。双击或三击操作同理。 KEY_SHORT、KEY_SHORT_UP、KEY_LONG_UP 、KEY_HOLD 等这些宏都分别对应了不同的的按键操作,大家可自行在相应的按键消息下打印信息探索。 4、添加自定义按键宏 在bsp_key.h 文件中,有说明:普通按键定义,可以支持短按,长按,双击等;范围是 0 ~ 0xdf。若要自定义按键,这个按键值只要是 0 ~ 0xdf 范围内且未被使用的即可。如下便定义好按键单击宏:
接着需要把 KEY_DIY 放到 pwrkey_table[6] 需要自定义按键的数组元素中即可:
最后把 KU_DIY 放到消息处理函数中即可,如下放到 void func_bt_message(u16 msg) 函数中:
单击 1 中 的 s3 后可在 Downloader 中观察打印情况,便可以确定自定义按键是否成功。 5、setting 工具 PWRKEY 按键定制 首先要开启 PWRKEY:
注意,只要使用到 PWRKEY 这里都要是打开状态。
注意,1 中的 s2、s3、s4 分别对应按键 1、按键 4、按键 5,这是由它们串联的电阻决定的,并且setting 工具中定制按键功能之后,SDK 中pwrkey_table[6] 数组定义的按键功能将失效。 PWRKEY 按键功能的内容就介绍到这里,ADKEY 的功能也是相似的,可以相互借鉴参考,有错误欢迎大家批评指正。如果大家还有什么其他的问题或者功能想要询问,亦可以在评论区中提出,可以共同探讨,一起进步。
参考文档: 1、中科蓝讯蓝皮书 2、BT892X DataSheet.pdf
|