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
이는 복잡한 Bluetooth 장치(특히 여러 입력 장치의 이벤트를 중개하는 Raspberry Pi)입니다.https://github.com/ruundii/bthidhub).
중개되는 RPi에 2개의 마우스가 연결되어 있습니다(각 마우스는 SDP에 자체 리포터 ID를 가지고 있습니다). Ubuntu 노트북에서는 RPi에 연결하면 첫 번째 마우스 입력만 작동하지만 Macbook에서는 위 이벤트가 있는 두 번째 마우스만 작동합니다.
위의 이벤트가 도착하면 볼 수 있지만 hid-recorder
에는 이벤트가 없습니다 libinput debug-events
. 그렇다면 1개의 포인터만 사용하여 ID를 보고하는 데 제한이 있습니까(예: Linux는 SDP의 첫 번째 포인터를 사용하고 Mac은 마지막 포인터를 사용함)? 그러한 제한을 피할 수 있는 방법이 있습니까? 내 생각은 기본적으로 RPi에 있는 여러 입력 장치의 SDP 레코드 부분을 함께 추가한 다음 RPi를 통해 여러 입력 장치를 프록시하기 위해 해당 장치의 보고 ID만 변환하는 것입니다.