我一直在玩我的键盘设备捕获输入:
/dev/input/by-path/platform-i8042-serio-0-event-kbd
对我来说,我想知道是否有任何关于它返回的规范,使用
od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd
听。我很好奇主要是由于某些键的行为; meta,arrow keys,numpad forward slash。
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
到目前为止我看过的其他每个键都有括号中的两个字节作为匹配值,这有什么特别的原因吗?
答案 0 :(得分:13)
/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
)。
答案 1 :(得分:3)
某些密钥有不寻常的扫描码......
发件人:http://www.beyondlogic.org/keyboard/keybrd.htm(带编辑):
现在有101个键,8个位有256个不同的组合,因此你只需要为每个键发送一个字节,对吗?
不。不幸的是,键盘上的一些键是扩展键,因此需要两个扫描码。这些键前面有一个E0(十六进制)。但它也不会停在两个扫描码上。怎么样E1,14,77,E1,F0,14,F0,77!现在这不是一个有效的扫描码?又错了。按下暂停/中断键时会发送它。不要问我为什么要这么长时间!也许他们有一个糟糕的一天或什么?