KeyPad使用参考
1. 概述¶
为方便用户使用矩阵按键,目前我们开发板专门规划出14个IO口,最大支持7x7键盘共49个按键。由底层硬件直接处理按键信息,减轻cpu去查询按键的负担。
2. Dts配置¶
2.1. Demo板支持的keypad padmux¶
表2-1
KeyPad Group | Mode | GPIO | DEV |
---|---|---|---|
7x7 | 1 | PAD_KEY0 ~ PAD_KEY13 | /dev/input/event0 or /dev/input/event1 |
4x4 | 2 | PAD_KEY0 ~ PAD_KEY7 | |
3x3 | 3 | PAD_KEY8 ~ PAD_KEY13 |
2.2. KeyPad的dts配置¶
-
Pioneer.dtsi
-
Standard: 选择使用矩阵键盘大小,
-
keypad7*7,使用PINMUX_FOR_BT1120_MODE_1
-
keypad4*4,使用PINMUX_FOR_BT1120_MODE_2
-
keypad3*3,使用PINMUX_FOR_BT1120_MODE_3
-
-
Keypadmode:按键触发中断类型,具体如下:
-
Occur Irq in key Pressed or release. Keep all press and all release key status.
release result will be store R17-1e->{64:128}
-
Occur Irq in key Pressed.Keep current press and last time press status.
last time pressd result store R17-1e->{64:128}
-
Occur Irq in key release. Keep current release and last time release status.
last time relsase result store R17-1e->{64:128}
-
Occur Irq in key Pressed. Support press single key.(暂不支持使用)
-
-
Keypad-rowX: 用户定义键值
-
-
Keypad mode设置,修改pioneer3-ssc020a-s01a-demo-padmux.dtsi,三种选择其中一种
-
使用7x7键盘,设置mode为PINMUX_FOR_BT1120_MODE_1
-
使用4x4键盘,设置mode为PINMUX_FOR_BT1120_MODE_2
-
使用3x3键盘,设置mode为PINMUX_FOR_BT1120_MODE_3
-
3. Kernel配置¶
打开SStar I2C对Keypad的配置
4. KEYPAD短接帽配置¶
-
使用7x7键盘,所有短接帽都靠左接
-
使用4x4键盘,SW1 ~ SW8靠右接
-
使用3x3键盘,SW9 ~ SW14靠右接
5. app读取key¶
使用如下demo验证
//Demo位置:kernel/drivers/sstar/keypad/verify/key.c
#include <stdio.h> #include <stdlib.h> #include <stdlib.h> #include <linux/input.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main(int argc,char *argv[]) { int fd; struct input_event ev_key; if (argc != 2) { printf("Usage:\n"); printf("%s /dev/input/event0 or /dev/input/event1\n",argv[0]); return 0; } fd= open(argv[1], O_RDWR); if(fd < 0) { perror("open device buttons"); exit(1); } while(1) { read(fd,&ev_key,sizeof(struct input_event)); printf("type:%d,code:%d,value:%d\n",ev_key.type, ev_key.code,ev_key.value); } close(fd); return 0; }