9.4.1. 按键矩阵使用指南
9.4.1.1. 概述
此章节介绍按键矩阵的使用方法以及相关配置。
9.4.1.2. 内核配置
参考快速入门 - 编译概述 - Kernel配置,进入kernel的功能配置,按如下选择:
Linux
Device Drivers
[*] Input device Support
<*> Event interface
[*] Keyboards
<*> ADC Ladder Buttons
9.4.1.3. 软件配置
在openwrt的根目录下通过make menuconfig可以打开test-keyadc:
zx (openwrt)
sample-code
[*] test-keyadc
9.4.1.4. DTS参数配置
这些参数主要在文件board.dts中,功能参数的设置必须和硬件原理图相匹配
设置数据通路如下:
key_button: adc-keys { compatible = "adc-keys"; io-channels = <&gpai 6>; io-channel-names = "buttons"; poll-interval = <200>; keyup-threshold-microvolt = <3000000>; up-key { label = "up_key"; linux,code = <KEY_UP>; press-threshold-microvolt = <300000>; }; down-key { label = "down_key"; linux,code = <KEY_DOWN>; press-threshold-microvolt = <800000>; }; left-key { label = "left_key"; linux,code = <KEY_LEFT>; press-threshold-microvolt = <1400000>; }; right-key { label = "right_key"; linux,code = <KEY_RIGHT>; press-threshold-microvolt = <2000000>; }; };
其中:
io-channels:所选择的io通道
io-channels-names:io通道的别名
poll-interval:表示获取ADC值的轮询间隔(单位毫秒)
keyup-threshold-microvolt:按键抬起时,对应io通道的电压(单位微伏),可设置为标准电压
label:键值的说明
linux,code:按键上报的键值
press-threshold-microvolt:按键按下时,对应io通道的电压(单位微伏)
threshold-microvolt范围判断逻辑如下:
为了简洁表格,up-key的press-threshold-microvolt配置简写为up_mv,同理得down_mv、left_mv、right_mv。keyup-threshold-microvolt简写为keyup_mv。
参数定义范围 |
含义 |
---|---|
(right_mv + keyup_mv)/2 <= value |
no key pressed |
(left_mv + right_mv)/2 <= value < (right_mv + keyup_mv)/2 |
KEY_RIGHT pressed |
(down_mv + left_mv)/2 <= value < (left_mv + right_mv)/2 |
KEY_LEFT pressed |
(up_mv + down_mv)/2 <= value < (down_mv + right_mv)/2 |
KEY_DOWN pressed |
value < (up_mv + down_mv)/2 |
KEY_UP pressed |
小技巧
所有press-threshold-microvolt值需均小于keyup-threshold-microvolt,并且press-threshold-microvolt间需均不相同
9.4.1.5. 测试指南
在shell中直接运行keyadc_test即可
[aic@] # keyadc_test -h
Usage: keyadc_test [options]:
-d, --device The name of event device
-h, --usage
Example: keyadc_test -d event0
keyadc_test的使用示例:
[aic@] # keyadc_test -d event0
key up pressed
key left pressed
key right pressed
key down pressed