6

我一直在尝试从我的键盘设备捕获输入:

/dev/input/by-path/platform-i8042-serio-0-event-kbd 

对我来说,我想知道是否有任何关于它返回的规范,使用

od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd 

听。我很好奇主要是由于某些键的行为;meta,箭头键,小键盘正斜杠。

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

到目前为止,我查看的所有其他键都有括号中的两个字节作为匹配值,有什么特殊的原因吗?

4

2 回答 2

15

/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

的可能值以type为前缀EV_。的可能值code取决于type。它们以KEY_orBTN_REL_or 等​​为前缀。的可能值value取决于typecode。例如按键事件valueequals1和 key-release events 0

您可以使用以下方法检查事件数据:

evtest /dev/input/eventX

X您的键盘(或任何其他事件设备)的事件设备编号在哪里。一键按下或释放通常会发出三个事件(EV_MSCEV_KEYEV_SYN

于 2010-10-06T21:24:34.203 回答
3

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

来自:http ://www.beyondlogic.org/keyboard/keybrd.htm (有编辑):

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

没有。不幸的是,键盘上的一些键是扩展键,因此需要两个扫描码。这些键前面有一个 E0(十六进制)。但它也不会停留在两个扫描码上。E1,14,77,E1,F0,14,F0,77 怎么样!现在这不能是有效的扫描码?又错了。当您按下暂停/中断键时,它恰好被发送。不要问我为什么他们要坚持这么久!也许他们度过了糟糕的一天或其他什么?

于 2010-09-07T20:32:24.630 回答