Edit online

按键矩阵

17 Dec 2024
Read time: 3 minute(s)

此章节介绍按键矩阵的使用方法以及相关配置。

Luban 可以实现按键矩阵,具体配置步骤如下

内核配置

  1. 在 SDK 根目录下,执行下列命令,进入 kernel 的功能配置界面:
    make kernel-menuconfig

    或使用简写命令

    make km
  2. 在内核配置界面,按如下选择:
    Linux
        Device Drivers
            [*] Input device Support
                <*> Event interface
                [*] Keyboards
                    <*> ADC Ladder Buttons
    

软件配置

  1. 在 SDK 根目录下,执行下列命令,进入 menuconfig 功能配置界面:
    make menuconfig
  2. 按如下选择,打开 test-keyadc
    Artinchip packages
        Sample code
            [*] test-keyadc

DTS 参数配置

DTS 参数主要存放在 target/d211/方案 x/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 的 microvolt 配置简写为 mv,同理得 mv、left_mv、right_mv。keyup-threshold-microvolt 简写为 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
    注:

    所有 microvolt 值需均小于 microvolt,并且 microvolt 间需均不相同。

测试指南

  1. 在 Shell 中运行 keyadc_test 命令:
    keyadc_test -h
    输出结果示例如下:
    Usage: keyadc_test [options]:
    -d, --device    The name of event device
    -h, --usage
    
    Example: keyadc_test -d event0
    
  2. -d 为例,keyadc_test 使用示例如下:
    keyadc_test -d event0
    key up pressed
    key left pressed
    key right pressed
    key down pressed