/ dev /输入键盘格式

时间:2010-09-07 20:18:56

标签: 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 

听。我很好奇主要是由于某些键的行为; 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

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

2 个答案:

答案 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的可能值取决于typecode。例如,按键事件value等于1以及密钥释放事件0

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

evtest /dev/input/eventX

其中X是键盘(或任何其他事件设备)的事件设备编号。一键按下或发布通常会发出三个事件(EV_MSCEV_KEYEV_SYN)。

答案 1 :(得分:3)

某些密钥有不寻常的扫描码......

发件人:http://www.beyondlogic.org/keyboard/keybrd.htm(带编辑):

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

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