Linux矩阵键盘
背景
- Platform: M55S
- OS: Linux
- Kernel: 4
需求:
项目需要添加一个类似电话机的那种矩阵键盘,开始打算自己写个扫描算法,后面发现内核自带。
过程
matrix-keypad(内核自带驱动): drivers/input/keyboard/
matrix-keypad的GPIO口上拉:
Godshand -w -a 0xB3F000B0 -v 0x55555000
注: 这个需要根据自己的硬件平台添加, 这个很重要,可能会导致键值不对或乱码
内核menuconfig添加驱动:
DeviceDrivers --->
Inputdevice support --->
<*> Event interface
Keyboards --->
<*> GPIO driven matrix keypad support
DTS配置
说明见下面注释,也可查看doc
matrix_keypad: matrix-keypad {
status = "disable";
compatible = "gpio-matrix-keypad";
keypad,num-rows = <4>;
keypad,num-columns = <4>;
/* 根据实际硬件配置引脚 */
col-gpios = <&gpio2 19 1
&gpio2 16 1
&gpio2 22 1
&gpio2 21 1
>;
row-gpios = <&gpio2 15 1
&gpio2 20 1
&gpio2 17 1
&gpio2 18 1
>;
/* sample keymap 键值*/
/* row << 24 | column << 16 | key-code */
linux,keymap = <
0x0000004f /* row 0, col 0, KEY_KP1 */
0x0001004b /* row 0, col 1, KEY_KP4 */
0x00020047 /* row 0, col 2, KEY_KP7*/
0x0003003c /* row 0, col 3, */
0x01000050 /* row 1, col 0, KEY_KP2 */
0x0101004c /* row 1, col 1, KEY_KP5*/
0x01020048 /* row 1, col 2, KEY_KP8*/
0x01030052 /* row 1, col 3, KEY_KP0*/
0x02000051 /* row 2, col 0, KEY_KP3 */
0x0201004d /* row 2, col 1, KEY_KP6 */
0x02020049 /* row 2, col 2, KEY_KP9*/
0x0203003b /* row 2, col 3, # */
0x0300001f /* row 3, col 0, S */
0x0301003e /* row 3, col 1, */
0x0302001e /* row 3, col 2, A */
0x03030013 /* row 3, col 3, R */
>;
gpio-activelow;
/*wakeup-source;*/
debounce-delay-ms = <30>;
col-scan-delay-us = <100>;
linux,no-autorepeat;
};
测试
- 自己写测试代码
- 使用input event事件分析工具:
evtest
和getevent
(android中提取)
评论