【问题标题】:/dev/input keyboard format/dev/input 键盘格式
【发布时间】:2017-11-03 23:41:57
【问题描述】:

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

/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

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

【问题讨论】:

    标签: keyboard input-devices


    【解决方案1】:

    /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)。

    【讨论】:

      【解决方案2】:

      有些按键有异常的扫描码...

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-06-30
        • 2020-06-26
        • 1970-01-01
        • 1970-01-01
        • 2020-10-02
        • 1970-01-01
        • 1970-01-01
        • 2021-08-26
        • 1970-01-01
        相关资源
        最近更新 更多