`evdev`中`MSC_SCAN`的`values`从哪里来?

问题描述 投票:0回答:1

如果你运行类似的东西

sudo evtest /dev/input/event7

其中

event7
对应于(比如说)键盘,并且您按下一个键,您会得到如下报告:

Event: time 1725511187.487035, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70004
Event: time 1725511187.487035, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1725511187.487035, -------------- SYN_REPORT ------------

对于

a
按键

Event: time 1725511187.543033, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70004
Event: time 1725511187.543033, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event: time 1725511187.543033, -------------- SYN_REPORT ------------

用于

a
按键释放。

我对

value
MSC_SCAN
感兴趣(大概是 evdev 扫描码),其中这些(十六进制)值类似于
70004
70005
70006
10086
 c0224
,等等

这些值似乎与 USB HID 键码直接相关,其中:

  • x
    中的
    Keyboard/Keypad Page (0x07)
    0x70000 | x
    (例如,
    a
    的USB HID键码为
    0x04
    0x70000 | 0x04
    0x70004
  • 系统控制值
    x
    0x10000 | x
  • x
     中的
    Consumer Page (0x0c)
    0xc0000 | x

所以我的问题是:“基值”

0x70000
0x10000
0xc0000
从哪里来,
0x70000 | x
逻辑从哪里来?

例如。 (在 Ubuntu 20 上)

value
KEY_A
30
(十进制),
30
来自
/usr/include/linux/input-event-codes.h
,其中有一个
#define KEY_A 30

(我正在为 USB HID 设备编写固件,并且正在编写 USB HID 报告描述符,到目前为止,我可以添加键盘/小键盘键(USB HID 页 0x07)、系统控制键(USB HID 页 0x01),消费者控制键(USB HID 页面 0x0c)和鼠标,我也尝试添加 Unicode 页面(USB HID 页面 0x10),但由于某种原因

evdev
无法识别它。)

linux linux-kernel usb hid evdev
1个回答
0
投票

我认为它们正是 HID 使用页面,其中 4 个最不重要的半字节是 HID 键码,之后是 HID 使用页面(因此,像往常一样,您可以从右读取数字-左)。

例如:

  • 0x70000
    来自使用页面
    0x7
    键盘/小键盘页面
  • 0x10000
    来自使用页面
    0x1
    通用桌面页面,特别是系统控制
  • 0xc0000
    来自使用页面
    0xc
    消费者页面

因此,Linux 基本上是将整个 HID 信息或运算为单个键码,并将其称为扫描码。

© www.soinside.com 2019 - 2024. All rights reserved.