1
0
Files
surface-dial-linux/notes/HID_Report_Descriptor.txt
Daniel Prilik e6fa6845fe haptics!
https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/radial-controller-protocol-implementation

With a little bit of trial and error (and a crash-course in how the heck
HID even works), I figured out how to get the dial to provide haptic
feedback!

Along the way, I also learned that you can take advantage of the
(incorrectly named) Resolution Multiplier field to customize how many
"steps" the dial should have, offloading the work to the device itself!

Very cool!!
2020-10-30 19:59:23 -04:00

235 lines
7.9 KiB
Plaintext

# extracted using cat /sys/bus/hid/devices/*:045E:091B.*/report_descriptor | hidrd-convert -o spec
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (0Eh),
Collection (Application),
Report ID (1),
Usage Page (Digitizer), ; Digitizer (0Dh)
Usage (Puck), ; Puck (21h, logical collection)
Collection (Logical),
Logical Minimum (0),
Logical Maximum (1),
Report Size (1),
Report Count (1),
Collection (Physical),
Usage Page (Button), ; Button (09h)
Usage (01h),
Input (Variable),
Usage Page (Digitizer), ; Digitizer (0Dh)
Usage (Touch), ; Touch (33h, momentary control)
Input (Variable),
Report Count (6),
Input (Constant, Variable),
Collection (Logical),
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Dial), ; Dial (37h, dynamic value)
Logical Minimum (-32767),
Logical Maximum (32767),
Report Size (16),
Report Count (1),
Input (Variable, Relative),
Physical Minimum (0),
Physical Maximum (3600),
Logical Minimum (0),
Logical Maximum (3600),
Usage (Resolution Multiplier), ; Resolution multiplier (48h, dynamic value)
Feature (Variable),
Physical Maximum (0),
End Collection,
Unit Exponent (14),
Unit (Centimeter),
Physical Maximum (0),
Logical Maximum (0),
Usage (X), ; X (30h, dynamic value)
Input (Variable, Null State),
Usage (Y), ; Y (31h, dynamic value)
Physical Maximum (0),
Logical Maximum (0),
Input (Variable, Null State),
Usage Page (Digitizer), ; Digitizer (0Dh)
Usage (Width), ; Width (48h, dynamic value)
Logical Minimum (58),
Logical Maximum (58),
Report Size (8),
Unit Exponent (15),
Physical Minimum (58),
Physical Maximum (58),
Input (Constant, Variable),
Unit Exponent (0),
Unit,
Physical Minimum (0),
Physical Maximum (0),
Usage Page (0Eh), ; 0Eh, reserved
Usage (01h),
Collection (Logical),
Logical Minimum (0),
Logical Maximum (255),
Usage (24h),
Feature (Variable, Null State),
Usage (24h),
Output (Variable, Null State),
Logical Minimum (1),
Logical Maximum (7),
Usage (20h),
Feature (Variable, Null State),
Usage (21h),
Output (Variable, Null State),
Logical Maximum (10),
Usage (28h),
Feature (Variable, Null State),
Report Size (16),
Logical Maximum (2000),
Usage (25h),
Feature (Variable, Null State),
Usage (25h),
Output (Variable, Null State),
Report ID (2),
Report Size (32),
Logical Minimum (65591),
Logical Maximum (65591),
Usage (22h),
Feature (Variable),
Usage (11h),
Collection (Logical),
Usage Page (Ordinal), ; Ordinal (0Ah)
Report Count (3),
Usage (03h),
Usage (04h),
Usage (05h),
Report Size (8),
Logical Minimum (0),
Logical Maximum (-1),
Feature (Variable),
End Collection,
Usage Page (0Eh), ; 0Eh, reserved
Usage (10h),
Collection (Logical),
Usage Page (Ordinal), ; Ordinal (0Ah)
Report Count (1),
Logical Minimum (3),
Logical Maximum (3),
Physical Minimum (4099),
Physical Maximum (4099),
Usage (03h),
Feature (Variable),
Logical Minimum (4),
Logical Maximum (4),
Physical Minimum (4100),
Physical Maximum (4100),
Usage (04h),
Feature (Variable),
Logical Minimum (5),
Logical Maximum (5),
Physical Minimum (4100),
Physical Maximum (4100),
Usage (05h),
Feature (Variable),
Physical Minimum (0),
Physical Maximum (0),
End Collection,
End Collection,
End Collection,
End Collection,
End Collection,
Usage Page (FF07h), ; FF07h, vendor-defined
Usage (70h),
Collection (Application),
Report ID (48),
Logical Minimum (0),
Logical Maximum (-1),
Report Count (1),
Report Size (8),
Usage (00h),
Output (Variable),
End Collection,
Usage (71h),
Collection (Application),
Logical Minimum (0),
Logical Maximum (-1),
Report Size (8),
Report Count (72),
Report ID (42),
Usage (C6h),
Input (Variable, Buffered Bytes),
Usage (C7h),
Output (Variable, Buffered Bytes),
Report Count (52),
Usage (C8h),
Feature (Constant, Variable, Buffered Bytes),
Report ID (43),
Usage (C9h),
Input (Variable, Buffered Bytes),
Usage (CAh),
Output (Variable, Buffered Bytes),
Usage (CBh),
Feature (Variable, Buffered Bytes),
Logical Minimum (-2147483648),
Logical Maximum (2147483647),
Report Size (32),
Report Count (4),
Report ID (44),
Usage Minimum (CCh),
Usage Maximum (CFh),
Input (Variable),
Report Count (4),
Report ID (45),
Usage Minimum (D8h),
Usage Maximum (DBh),
Input (Variable),
Report Count (4),
Usage Minimum (DCh),
Usage Maximum (DFh),
Output (Variable),
Usage Minimum (E0h),
Usage Maximum (E3h),
Feature (Variable),
Report ID (46),
Usage Minimum (E4h),
Usage Maximum (E7h),
Input (Variable),
Usage Minimum (E8h),
Usage Maximum (EBh),
Output (Variable),
Report Count (11),
Usage Minimum (ECh),
Usage Maximum (EFh),
Feature (Variable),
Report Count (4),
Report ID (47),
Usage Minimum (F0h),
Usage Maximum (F3h),
Input (Variable),
Usage Minimum (F4h),
Usage Maximum (F7h),
Output (Variable),
Usage Minimum (F8h),
Usage Maximum (FBh),
Feature (Variable),
End Collection,
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Sys Control), ; System control (80h, application collection)
Collection (Application),
Report ID (50),
Usage (Sys Sleep), ; System sleep (82h, one-shot control)
Usage (Sys Wake Up), ; System wake up (83h, one-shot control)
Logical Minimum (0),
Logical Maximum (1),
Report Count (2),
Report Size (1),
Input (Variable),
Report Count (6),
Input (Constant, Variable),
End Collection,
Usage (72h),
Collection (Application),
Report ID (49),
Report Count (10),
Report Size (8),
Logical Minimum (0),
Logical Maximum (-1),
Usage (C6h),
Input (Variable),
Usage (C7h),
Output (Variable),
End Collection