# device 0:0
# 0x05, 0x01, // Usage Page (Generic Desktop) 0
# 0x09, 0x02, // Usage (Mouse) 2
# 0xa1, 0x01, // Collection (Application) 4
# 0x09, 0x01, // Usage (Pointer) 6
# 0xa1, 0x00, // Collection (Physical) 8
# 0x05, 0x09, // Usage Page (Button) 10
# 0x19, 0x01, // Usage Minimum (1) 12
# 0x29, 0x05, // Usage Maximum (5) 14
# 0x15, 0x00, // Logical Minimum (0) 16
# 0x25, 0x01, // Logical Maximum (1) 18
# 0x75, 0x01, // Report Size (1) 20
# 0x95, 0x05, // Report Count (5) 22
# 0x81, 0x02, // Input (Data,Var,Abs) 24
# 0x75, 0x01, // Report Size (1) 26
# 0x95, 0x03, // Report Count (3) 28
# 0x81, 0x03, // Input (Cnst,Var,Abs) 30
# 0x06, 0x00, 0xff, // Usage Page (Vendor Defined Page 1) 32
# 0x09, 0x40, // Usage (Vendor Usage 0x40) 35
# 0x75, 0x08, // Report Size (8) 37
# 0x95, 0x02, // Report Count (2) 39
# 0x15, 0x81, // Logical Minimum (-127) 41
# 0x25, 0x7f, // Logical Maximum (127) 43
# 0x81, 0x02, // Input (Data,Var,Abs) 45
# 0x05, 0x01, // Usage Page (Generic Desktop) 47
# 0x09, 0x38, // Usage (Wheel) 49
# 0x15, 0x81, // Logical Minimum (-127) 51
# 0x25, 0x7f, // Logical Maximum (127) 53
# 0x75, 0x08, // Report Size (8) 55
# 0x95, 0x01, // Report Count (1) 57
# 0x81, 0x06, // Input (Data,Var,Rel) 59
# 0x09, 0x30, // Usage (X) 61
# 0x09, 0x31, // Usage (Y) 63
# 0x16, 0x00, 0x80, // Logical Minimum (-32768) 65
# 0x26, 0xff, 0x7f, // Logical Maximum (32767) 68
# 0x75, 0x10, // Report Size (16) 71
# 0x95, 0x02, // Report Count (2) 73
# 0x81, 0x06, // Input (Data,Var,Rel) 75
# 0xc0, // End Collection 77
# 0x06, 0x00, 0xff, // Usage Page (Vendor Defined Page 1) 78
# 0x09, 0x02, // Usage (Vendor Usage 2) 81
# 0x15, 0x00, // Logical Minimum (0) 83
# 0x25, 0x01, // Logical Maximum (1) 85
# 0x75, 0x08, // Report Size (8) 87
# 0x95, 0x5a, // Report Count (90) 89
# 0xb1, 0x01, // Feature (Cnst,Arr,Abs) 91
# 0xc0, // End Collection 93
#
R: 94 05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 05 15 00 25 01 75 01 95 05 81 02 75 01 95 03 81 03 06 00 ff 09 40 75 08 95 02 15 81 25 7f 81 02 05 01 09 38 15 81 25 7f 75 08 95 01 81 06 09 30 09 31 16 00 80 26 ff 7f 75 10 95 02 81 06 c0 06 00 ff 09 02 15 00 25 01 75 08 95 5a b1 01 c0
N: device 0:0
I: 3 0001 0001
# device 1:0
# 0x05, 0x01, // Usage Page (Generic Desktop) 0
# 0x09, 0x06, // Usage (Keyboard) 2
# 0xa1, 0x01, // Collection (Application) 4
# 0x85, 0x01, // Report ID (1) 6
# 0x05, 0x07, // Usage Page (Keyboard) 8
# 0x19, 0xe0, // Usage Minimum (224) 10
# 0x29, 0xe7, // Usage Maximum (231) 12
# 0x15, 0x00, // Logical Minimum (0) 14
# 0x25, 0x01, // Logical Maximum (1) 16
# 0x75, 0x01, // Report Size (1) 18
# 0x95, 0x08, // Report Count (8) 20
# 0x81, 0x02, // Input (Data,Var,Abs) 22
# 0x19, 0x00, // Usage Minimum (0) 24
# 0x2a, 0xff, 0x00, // Usage Maximum (255) 26
# 0x15, 0x00, // Logical Minimum (0) 29
# 0x26, 0xff, 0x00, // Logical Maximum (255) 31
# 0x75, 0x08, // Report Size (8) 34
# 0x95, 0x0e, // Report Count (14) 36
# 0x81, 0x00, // Input (Data,Arr,Abs) 38
# 0xc0, // End Collection 40
# 0x05, 0x0c, // Usage Page (Consumer Devices) 41
# 0x09, 0x01, // Usage (Consumer Control) 43
# 0xa1, 0x01, // Collection (Application) 45
# 0x85, 0x02, // Report ID (2) 47
# 0x19, 0x00, // Usage Minimum (0) 49
# 0x2a, 0x3c, 0x02, // Usage Maximum (572) 51
# 0x15, 0x00, // Logical Minimum (0) 54
# 0x26, 0x3c, 0x02, // Logical Maximum (572) 56
# 0x95, 0x01, // Report Count (1) 59
# 0x75, 0x10, // Report Size (16) 61
# 0x81, 0x00, // Input (Data,Arr,Abs) 63
# 0x75, 0x08, // Report Size (8) 65
# 0x95, 0x0d, // Report Count (13) 67
# 0x81, 0x01, // Input (Cnst,Arr,Abs) 69
# 0xc0, // End Collection 71
# 0x05, 0x01, // Usage Page (Generic Desktop) 72
# 0x09, 0x80, // Usage (System Control) 74
# 0xa1, 0x01, // Collection (Application) 76
# 0x85, 0x03, // Report ID (3) 78
# 0x19, 0x81, // Usage Minimum (129) 80
# 0x29, 0x83, // Usage Maximum (131) 82
# 0x15, 0x00, // Logical Minimum (0) 84
# 0x25, 0x01, // Logical Maximum (1) 86
# 0x75, 0x01, // Report Size (1) 88
# 0x95, 0x03, // Report Count (3) 90
# 0x81, 0x02, // Input (Data,Var,Abs) 92
# 0x95, 0x05, // Report Count (5) 94
# 0x81, 0x01, // Input (Cnst,Arr,Abs) 96
# 0x75, 0x08, // Report Size (8) 98
# 0x95, 0x0e, // Report Count (14) 100
# 0x81, 0x01, // Input (Cnst,Arr,Abs) 102
# 0xc0, // End Collection 104
# 0x05, 0x01, // Usage Page (Generic Desktop) 105
# 0x09, 0x00, // Usage (Undefined) 107
# 0xa1, 0x01, // Collection (Application) 109
# 0x85, 0x04, // Report ID (4) 111
# 0x09, 0x03, // Usage (Vendor Usage 0x03) 113
# 0x15, 0x00, // Logical Minimum (0) 115
# 0x26, 0xff, 0x00, // Logical Maximum (255) 117
# 0x35, 0x00, // Physical Minimum (0) 120
# 0x46, 0xff, 0x00, // Physical Maximum (255) 122
# 0x75, 0x08, // Report Size (8) 125
# 0x95, 0x0f, // Report Count (15) 127
# 0x81, 0x00, // Input (Data,Arr,Abs) 129
# 0xc0, // End Collection 131
# 0x05, 0x01, // Usage Page (Generic Desktop) 132
# 0x09, 0x00, // Usage (Undefined) 134
# 0xa1, 0x01, // Collection (Application) 136
# 0x85, 0x05, // Report ID (5) 138
# 0x09, 0x03, // Usage (Vendor Usage 0x03) 140
# 0x15, 0x00, // Logical Minimum (0) 142
# 0x26, 0xff, 0x00, // Logical Maximum (255) 144
# 0x35, 0x00, // Physical Minimum (0) 147
# 0x46, 0xff, 0x00, // Physical Maximum (255) 149
# 0x75, 0x08, // Report Size (8) 152
# 0x95, 0x0f, // Report Count (15) 154
# 0x81, 0x00, // Input (Data,Arr,Abs) 156
# 0xc0, // End Collection 158
#
R: 159 05 01 09 06 a1 01 85 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 19 00 2a ff 00 15 00 26 ff 00 75 08 95 0e 81 00 c0 05 0c 09 01 a1 01 85 02 19 00 2a 3c 02 15 00 26 3c 02 95 01 75 10 81 00 75 08 95 0d 81 01 c0 05 01 09 80 a1 01 85 03 19 81 29 83 15 00 25 01 75 01 95 03 81 02 95 05 81 01 75 08 95 0e 81 01 c0 05 01 09 00 a1 01 85 04 09 03 15 00 26 ff 00 35 00 46 ff 00 75 08 95 0f 81 00 c0 05 01 09 00 a1 01 85 05 09 03 15 00 26 ff 00 35 00 46 ff 00 75 08 95 0f 81 00 c0
N: device 1:0
I: 3 0001 0001
# device 2:0
# 0x05, 0x01, // Usage Page (Generic Desktop) 0
# 0x09, 0x06, // Usage (Keyboard) 2
# 0xa1, 0x01, // Collection (Application) 4
# 0x05, 0x07, // Usage Page (Keyboard) 6
# 0x19, 0xe0, // Usage Minimum (224) 8
# 0x29, 0xe7, // Usage Maximum (231) 10
# 0x15, 0x00, // Logical Minimum (0) 12
# 0x25, 0x01, // Logical Maximum (1) 14
# 0x75, 0x01, // Report Size (1) 16
# 0x95, 0x08, // Report Count (8) 18
# 0x81, 0x02, // Input (Data,Var,Abs) 20
# 0x81, 0x01, // Input (Cnst,Arr,Abs) 22
# 0x19, 0x00, // Usage Minimum (0) 24
# 0x2a, 0xff, 0x00, // Usage Maximum (255) 26
# 0x15, 0x00, // Logical Minimum (0) 29
# 0x26, 0xff, 0x00, // Logical Maximum (255) 31
# 0x75, 0x08, // Report Size (8) 34
# 0x95, 0x06, // Report Count (6) 36
# 0x81, 0x00, // Input (Data,Arr,Abs) 38
# 0x05, 0x08, // Usage Page (LEDs) 40
# 0x19, 0x01, // Usage Minimum (1) 42
# 0x29, 0x03, // Usage Maximum (3) 44
# 0x15, 0x00, // Logical Minimum (0) 46
# 0x25, 0x01, // Logical Maximum (1) 48
# 0x75, 0x01, // Report Size (1) 50
# 0x95, 0x03, // Report Count (3) 52
# 0x91, 0x02, // Output (Data,Var,Abs) 54
# 0x95, 0x05, // Report Count (5) 56
# 0x91, 0x01, // Output (Cnst,Arr,Abs) 58
# 0xc0, // End Collection 60
#
R: 61 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 81 01 19 00 2a ff 00 15 00 26 ff 00 75 08 95 06 81 00 05 08 19 01 29 03 15 00 25 01 75 01 95 03 91 02 95 05 91 01 c0
N: device 2:0
I: 3 0001 0001
On some devices, unnumbered feature reports seem omitted from the parsed
HIDP_PREPARSED_DATA. Thehid_pp_caps_infoheader indicates the count and size correctly, but marks it empty/unused.hidapi/windows/hidapi_descriptor_reconstruct.h
Lines 109 to 114 in 750bf20
If I anyhow print the trailing
phid_pp_capout, it consists entirely of zeros.This is likely an existing bug/undocumented aspect of
HidD_GetPreparsedDataon MS side, and I am unsure if it could be worked around in userspace.HID report descriptor (dumped on Linux with
hid-decode)Full
1532_00A3_0002_0001.pp_dataFull
HIDP_PREPARSED_DATA(Followed by all
0x00untilHID_API_MAX_REPORT_DESCRIPTOR_SIZE)