要发送字母“a”,HID 设备会发送以下扫描码:00 00 04 00 00 00 00 00
.
对应于字符“a”的值是<AC01>
(在 中找到/usr/share/X11/xkb/symbols/us
)。根据/usr/share/X11/xkb/keycodes/evdev
,<AC01>
通过按钮代码映射到38
(这是我们必须从设备中获取的)。
evtest /dev/input/event#
显示代码30
。为什么?
键码 in/usr/share/X11/xkb/keycodes/evdev
是来自evtest
+ 8 的键码(参见MIN_KEYCODE
参考资料evdev.c
)。
这是如何找到与给定键码对应的扫描码:
https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07
注意:除了键码之外,还使用了扫描码,原因如下:
Linux 内部事件子系统定义了一组标准的独立于硬件的键码,能够表示来自任何类型键盘的任何扫描码,无论是 AT、XT 还是 USB。根据常见的美国 ASCII 键帽标签为键代码分配了名称。关键代码在 中定义/usr/include/linux/input-event-codes.h
。举个例子#define KEY_A 30
。