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

/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

到目前为止,我看过的所有其他键都在括号中的两个字节作为匹配值,是否有任何理由这些特殊?

有帮助吗?

解决方案

/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_ 或者 BTN_ 或者 REL_ 或类。可能的值 value 依赖两者 typecode. 。例如,键盘事件 value 等于 1 以及关键释放事件 0.

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

evtest /dev/input/eventX

在哪里 X 是键盘(或任何其他事件设备)的事件设备编号。一键按或发布通常会发出三个事件(EV_MSC, EV_KEYEV_SYN).

其他提示

一些键具有不寻常的扫描代码...

从: http://www.beyondlogic.org/keyboard/keybrd.htm (编辑):

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

没有。不幸的是,键盘上发现的少数键是扩展键,因此需要两个扫描代码。这些键在E0之前。但是它也不会在两个扫描代码上停止。 e1,14,77,e1,f0,14,f0,77!现在,这不能成为有效的扫描代码?又错了。当您按暂停/休息键时,它恰好是发送的。不要问我为什么他们必须做这么长时间!也许他们过得不好?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top