Keyboard /开发/输入键盘格式

Keyboard /开发/输入键盘格式,keyboard,input-devices,Keyboard,Input Devices,我一直在玩从键盘设备捕获输入的游戏: /dev/input/by-path/platform-i8042-serio-0-event-kbd 对于我来说,我想知道是否有任何关于它返回什么的规范,使用 od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd 听。我好奇主要是因为某些键的行为;元、箭头键、numpad正斜杠 0520300 ac 9d 86 4c 6b 0f 04 00 04 00 04 00 (db) 00

我一直在玩从键盘设备捕获输入的游戏:

/dev/input/by-path/platform-i8042-serio-0-event-kbd 
对于我来说,我想知道是否有任何关于它返回什么的规范,使用

od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd 
听。我好奇主要是因为某些键的行为;元、箭头键、numpad正斜杠

0520300 ac 9d 86 4c 6b 0f 04 00 04 00  04  00 (db) 00 00 00
0520320 ac 9d 86 4c 8c 0f 04 00 01 00 (7d) 00  00 00 00 00
0520340 ac 9d 86 4c 95 0f 04 00 00 00  00  00  00 00 00 00

到目前为止,我看到的每一个键都有括号中的两个字节作为匹配值,有什么原因使它们特别吗?

有些键有不寻常的扫描代码

发件人:(带编辑):

现在有101个键,8位组成256种不同的组合,因此每个键只需要发送一个字节,对吗


没有。不幸的是,在键盘上找到的一些键是扩展键,所以需要两个扫描码。这些键前面有一个E0(十六进制)。但它也不会在两个扫描码处停止。E1,14,77,E1,F0,14,F0,77怎么样!那不是一个有效的扫描码吗?又错了。当您按下暂停/中断键时,它正好被发送。别问我为什么他们要坚持这么久!也许他们今天过得不好还是怎么了?

/dev/input/by path/platform-i8042-serio-0-event-kbd只是指向
/dev/input/eventX
事件设备文件的符号链接。可以从事件设备文件中读取数据,如下所示:

struct input_event {
    struct timeval time;
    __u16 type;
    __u16 code;
    __s32 value;
};
/usr/include/linux/input.h
中定义

类型
的可能值前缀为
EV
code
的可能值取决于
类型。它们的前缀是
KEY\uuu
BTN\uu
REL\uu
等。
value
的可能值取决于
type
code
。例如,对于按键事件
等于
1
,对于按键释放事件
0

您可以使用以下工具检查事件数据:

evtest /dev/input/eventX
其中
X
是键盘(或任何其他事件设备)的事件设备编号。一次按键或释放通常会发出三个事件(
EV\u MSC
EV\u key
EV\u SYN