题
我一直在玩捕获键盘设备的输入:
/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
依赖两者 type
和 code
. 。例如,键盘事件 value
等于 1
以及关键释放事件 0
.
您可以使用以下方式检查事件数据:
evtest /dev/input/eventX
在哪里 X
是键盘(或任何其他事件设备)的事件设备编号。一键按或发布通常会发出三个事件(EV_MSC
, EV_KEY
和 EV_SYN
).
其他提示
一些键具有不寻常的扫描代码...
从: http://www.beyondlogic.org/keyboard/keybrd.htm (编辑):
现在有101个键和8位制作256个不同的组合,因此您只需要每键发送一个字节,对吗?
没有。不幸的是,键盘上发现的少数键是扩展键,因此需要两个扫描代码。这些键在E0之前。但是它也不会在两个扫描代码上停止。 e1,14,77,e1,f0,14,f0,77!现在,这不能成为有效的扫描代码?又错了。当您按暂停/休息键时,它恰好是发送的。不要问我为什么他们必须做这么长时间!也许他们过得不好?
不隶属于 StackOverflow