我想了解 HID 事件和 libinput 之间缺少什么。我有一个设备正在发送正确的鼠标事件,记录自hid-recorder
:
例如,左键单击:
# ReportID: 11 / Button: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | AC Pan: 0
E: 000000.000000 8 0b 01 00 00 00 00 00 00
# ReportID: 11 / Button: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | AC Pan: 0
E: 000000.074781 8 0b 00 00 00 00 00 00 00
SDP记录的相关部分是:
# 0x05, 0x01, // Usage Page (Generic Desktop) 456
# 0x09, 0x02, // Usage (Mouse) 458
# 0xa1, 0x01, // Collection (Application) 460
# 0x85, 0x0b, // Report ID (11) 462
# 0x09, 0x01, // Usage (Pointer) 464
# 0xa1, 0x00, // Collection (Physical) 466
# 0x95, 0x10, // Report Count (16) 468
# 0x75, 0x01, // Report Size (1) 470
# 0x15, 0x00, // Logical Minimum (0) 472
# 0x25, 0x01, // Logical Maximum (1) 474
# 0x05, 0x09, // Usage Page (Button) 476
# 0x19, 0x01, // Usage Minimum (1) 478
# 0x29, 0x10, // Usage Maximum (16) 480
# 0x81, 0x02, // Input (Data,Var,Abs) 482
# 0x05, 0x01, // Usage Page (Generic Desktop) 484
# 0x16, 0x01, 0xf8, // Logical Minimum (-2047) 486
# 0x26, 0xff, 0x07, // Logical Maximum (2047) 489
# 0x75, 0x0c, // Report Size (12) 492
# 0x95, 0x02, // Report Count (2) 494
# 0x09, 0x30, // Usage (X) 496
# 0x09, 0x31, // Usage (Y) 498
# 0x81, 0x06, // Input (Data,Var,Rel) 500
# 0x15, 0x81, // Logical Minimum (-127) 502
# 0x25, 0x7f, // Logical Maximum (127) 504
# 0x75, 0x08, // Report Size (8) 506
# 0x95, 0x01, // Report Count (1) 508
# 0x09, 0x38, // Usage (Wheel) 510
# 0x81, 0x06, // Input (Data,Var,Rel) 512
# 0x95, 0x01, // Report Count (1) 514
# 0x05, 0x0c, // Usage Page (Consumer Devices) 516
# 0x0a, 0x38, 0x02, // Usage (AC Pan) 518
# 0x81, 0x06, // Input (Data,Var,Rel) 521
# 0xc0, // End Collection 523
# 0xc0, // End Collection 524
这是一个复杂的蓝牙设备(具体来说,是一个代理来自多个输入设备的事件的 Raspberry Pi:https://github.com/ruundii/bthidhub)。
有 2 只小鼠连接到正在代理的 RPi(每只小鼠在 SDP 中都有自己的报告 ID)。在 Ubuntu 笔记本电脑上,连接到 RPi 时,只有第一个鼠标输入可以工作,但在 Macbook 上,只有第二个鼠标(具有上述事件)可以工作。
我可以看到上面的事件随着 到达hid-recorder
,但是 中没有事件libinput debug-events
。那么,是否存在只能使用 1 个指针报告 ID 的限制(即 Linux 使用 SDP 中的第一个指针,而 Mac 使用最后一个指针)?有没有办法解决这样的限制?我的想法基本上是将来自 RPi 上多个输入设备的 SDP 记录部分附加在一起,然后仅转换这些设备的报告 ID,以便通过 RPi 代理多个输入设备。