On Sat, 01 Sep 2018 at 20:53:45 +0200, Mark Kettenis wrote: > Not sure if that is indeed the right approach, but we can always fix > it in a better way later.
The HID report descriptor contains this: [...] 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0x09, 0x30, // Usage (X) 0x75, 0x10, // Report Size (16) 0x95, 0x01, // Report Count (1) 0xA4, // Push 0x55, 0x0F, // Unit Exponent (-1) 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 0x46, 0xD3, 0x00, // Physical Maximum (211) 0x26, 0x00, 0x34, // Logical Maximum (13312) 0x81, 0x42, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State) 0x09, 0x31, // Usage (Y) 0x46, 0x8D, 0x00, // Physical Maximum (141) 0x26, 0x00, 0x23, // Logical Maximum (8960) 0x81, 0x42, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State) 0xB4, // Pop So it matched HUP_GENERIC_DESKTOP and was setting the logical maximums to 13312/8960, but that chunk is nested in other collections. I'm not sure how our HID Parser is supposed to deal with that. Here's the full HID report descriptor from the i2c touchscreen: 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x04, // Usage (Touch Screen) 0xA1, 0x01, // Collection (Application) 0x85, 0x01, // Report ID (1) 0x09, 0x22, // Usage (Finger) 0xA1, 0x02, // Collection (Logical) 0x09, 0x42, // Usage (Tip Switch) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x01, // Report Count (1) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x01, // Report Size (1) 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x06, // Report Size (6) 0x09, 0x51, // Usage (0x51) 0x25, 0x3F, // Logical Maximum (63) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x75, 0x08, // Report Size (8) 0x09, 0x48, // Usage (0x48) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x09, 0x49, // Usage (0x49) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0x01, // Report Count (1) 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0xA4, // Push 0x26, 0xC0, 0x09, // Logical Maximum (2496) 0x75, 0x10, // Report Size (16) 0x55, 0x0F, // Unit Exponent (-1) 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 0x09, 0x30, // Usage (X) 0x35, 0x00, // Physical Minimum (0) 0x46, 0xD3, 0x00, // Physical Maximum (211) 0x95, 0x02, // Report Count (2) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x26, 0x90, 0x06, // Logical Maximum (1680) 0x46, 0x8D, 0x00, // Physical Maximum (141) 0x09, 0x31, // Usage (Y) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xB4, // Pop 0xC0, // End Collection 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x22, // Usage (Finger) 0xA1, 0x02, // Collection (Logical) 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x42, // Usage (Tip Switch) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x01, // Report Count (1) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x01, // Report Size (1) 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x06, // Report Size (6) 0x09, 0x51, // Usage (0x51) 0x25, 0x3F, // Logical Maximum (63) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x75, 0x08, // Report Size (8) 0x09, 0x48, // Usage (0x48) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x09, 0x49, // Usage (0x49) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0x01, // Report Count (1) 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0xA4, // Push 0x26, 0xC0, 0x09, // Logical Maximum (2496) 0x75, 0x10, // Report Size (16) 0x55, 0x0F, // Unit Exponent (-1) 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 0x09, 0x30, // Usage (X) 0x35, 0x00, // Physical Minimum (0) 0x46, 0xD3, 0x00, // Physical Maximum (211) 0x95, 0x02, // Report Count (2) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x26, 0x90, 0x06, // Logical Maximum (1680) 0x46, 0x8D, 0x00, // Physical Maximum (141) 0x09, 0x31, // Usage (Y) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xB4, // Pop 0xC0, // End Collection 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x22, // Usage (Finger) 0xA1, 0x02, // Collection (Logical) 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x42, // Usage (Tip Switch) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x01, // Report Count (1) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x01, // Report Size (1) 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x06, // Report Size (6) 0x09, 0x51, // Usage (0x51) 0x25, 0x3F, // Logical Maximum (63) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x75, 0x08, // Report Size (8) 0x09, 0x48, // Usage (0x48) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x09, 0x49, // Usage (0x49) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0x01, // Report Count (1) 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0xA4, // Push 0x26, 0xC0, 0x09, // Logical Maximum (2496) 0x75, 0x10, // Report Size (16) 0x55, 0x0F, // Unit Exponent (-1) 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 0x09, 0x30, // Usage (X) 0x35, 0x00, // Physical Minimum (0) 0x46, 0xD3, 0x00, // Physical Maximum (211) 0x95, 0x02, // Report Count (2) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x26, 0x90, 0x06, // Logical Maximum (1680) 0x46, 0x8D, 0x00, // Physical Maximum (141) 0x09, 0x31, // Usage (Y) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xB4, // Pop 0xC0, // End Collection 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x22, // Usage (Finger) 0xA1, 0x02, // Collection (Logical) 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x42, // Usage (Tip Switch) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x01, // Report Count (1) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x01, // Report Size (1) 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x06, // Report Size (6) 0x09, 0x51, // Usage (0x51) 0x25, 0x3F, // Logical Maximum (63) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x75, 0x08, // Report Size (8) 0x09, 0x48, // Usage (0x48) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x09, 0x49, // Usage (0x49) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0x01, // Report Count (1) 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0xA4, // Push 0x26, 0xC0, 0x09, // Logical Maximum (2496) 0x75, 0x10, // Report Size (16) 0x55, 0x0F, // Unit Exponent (-1) 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 0x09, 0x30, // Usage (X) 0x35, 0x00, // Physical Minimum (0) 0x46, 0xD3, 0x00, // Physical Maximum (211) 0x95, 0x02, // Report Count (2) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x26, 0x90, 0x06, // Logical Maximum (1680) 0x46, 0x8D, 0x00, // Physical Maximum (141) 0x09, 0x31, // Usage (Y) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xB4, // Pop 0xC0, // End Collection 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x22, // Usage (Finger) 0xA1, 0x02, // Collection (Logical) 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x42, // Usage (Tip Switch) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x01, // Report Count (1) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x01, // Report Size (1) 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x06, // Report Size (6) 0x09, 0x51, // Usage (0x51) 0x25, 0x3F, // Logical Maximum (63) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x75, 0x08, // Report Size (8) 0x09, 0x48, // Usage (0x48) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x09, 0x49, // Usage (0x49) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0x01, // Report Count (1) 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0xA4, // Push 0x26, 0xC0, 0x09, // Logical Maximum (2496) 0x75, 0x10, // Report Size (16) 0x55, 0x0F, // Unit Exponent (-1) 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 0x09, 0x30, // Usage (X) 0x35, 0x00, // Physical Minimum (0) 0x46, 0xD3, 0x00, // Physical Maximum (211) 0x95, 0x02, // Report Count (2) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x26, 0x90, 0x06, // Logical Maximum (1680) 0x46, 0x8D, 0x00, // Physical Maximum (141) 0x09, 0x31, // Usage (Y) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xB4, // Pop 0xC0, // End Collection 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x56, // Usage (0x56) 0x55, 0x00, // Unit Exponent (0) 0x65, 0x00, // Unit (None) 0x27, 0xFF, 0xFF, 0xFF, 0x7F, // Logical Maximum (2147483646) 0x95, 0x01, // Report Count (1) 0x75, 0x20, // Report Size (32) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x09, 0x54, // Usage (0x54) 0x25, 0x7F, // Logical Maximum (127) 0x95, 0x01, // Report Count (1) 0x75, 0x08, // Report Size (8) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x85, 0x0A, // Report ID (10) 0x09, 0x55, // Usage (0x55) 0x25, 0x0A, // Logical Maximum (10) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0x85, 0x44, // Report ID (68) 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 0x09, 0xC5, // Usage (0xC5) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x75, 0x08, // Report Size (8) 0x96, 0x00, 0x01, // Report Count (256) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0xC0, // End Collection 0x06, 0xFF, 0x01, // Usage Page (Reserved 0x01FF) 0x09, 0x01, // Usage (0x01) 0xA1, 0x01, // Collection (Application) 0x85, 0x02, // Report ID (2) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x75, 0x08, // Report Size (8) 0x95, 0x40, // Report Count (64) 0x09, 0x00, // Usage (0x00) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 0x09, 0x01, // Usage (0x01) 0xA1, 0x01, // Collection (Application) 0x85, 0x03, // Report ID (3) 0x75, 0x08, // Report Size (8) 0x95, 0x20, // Report Count (32) 0x09, 0x01, // Usage (0x01) 0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0xC0, // End Collection 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 0x09, 0x01, // Usage (0x01) 0xA1, 0x01, // Collection (Application) 0x85, 0x06, // Report ID (6) 0x09, 0x03, // Usage (0x03) 0x75, 0x08, // Report Size (8) 0x95, 0x12, // Report Count (18) 0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0x09, 0x04, // Usage (0x04) 0x75, 0x08, // Report Size (8) 0x95, 0x03, // Report Count (3) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0xC0, // End Collection 0x06, 0x01, 0xFF, // Usage Page (Vendor Defined 0xFF01) 0x09, 0x01, // Usage (0x01) 0xA1, 0x01, // Collection (Application) 0x85, 0x04, // Report ID (4) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x75, 0x08, // Report Size (8) 0x95, 0x13, // Report Count (19) 0x09, 0x00, // Usage (0x00) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x02, // Usage (Pen) 0xA1, 0x01, // Collection (Application) 0x85, 0x07, // Report ID (7) 0x35, 0x00, // Physical Minimum (0) 0x09, 0x20, // Usage (Stylus) 0xA1, 0x00, // Collection (Physical) 0x09, 0x32, // Usage (In Range) 0x09, 0x42, // Usage (Tip Switch) 0x09, 0x44, // Usage (Barrel Switch) 0x09, 0x3C, // Usage (Invert) 0x09, 0x45, // Usage (Eraser) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x05, // Report Count (5) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0x03, // Report Count (3) 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0x09, 0x30, // Usage (X) 0x75, 0x10, // Report Size (16) 0x95, 0x01, // Report Count (1) 0xA4, // Push 0x55, 0x0F, // Unit Exponent (-1) 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 0x46, 0xD3, 0x00, // Physical Maximum (211) 0x26, 0x00, 0x34, // Logical Maximum (13312) 0x81, 0x42, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State) 0x09, 0x31, // Usage (Y) 0x46, 0x8D, 0x00, // Physical Maximum (141) 0x26, 0x00, 0x23, // Logical Maximum (8960) 0x81, 0x42, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State) 0xB4, // Pop 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x30, // Usage (Tip Pressure) 0x26, 0x00, 0x10, // Logical Maximum (4096) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x08, // Report Size (8) 0x95, 0x01, // Report Count (1) 0x09, 0x3B, // Usage (Battery Strength) 0x25, 0x64, // Logical Maximum (100) 0x81, 0x42, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State) 0x75, 0x10, // Report Size (16) 0x95, 0x01, // Report Count (1) 0x09, 0x3D, // Usage (X Tilt) 0xA4, // Push 0x65, 0x14, // Unit (System: English Rotation, Length: Centimeter) 0x55, 0x0E, // Unit Exponent (-2) 0x36, 0xD8, 0xDC, // Physical Minimum (-9000) 0x46, 0x28, 0x23, // Physical Maximum (9000) 0x16, 0xD8, 0xDC, // Logical Minimum (-9000) 0x26, 0x28, 0x23, // Logical Maximum (9000) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x09, 0x3E, // Usage (Y Tilt) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x35, 0x00, // Physical Minimum (0) 0x47, 0xA0, 0x8C, 0x00, 0x00, // Physical Maximum (35999) 0x15, 0x00, // Logical Minimum (0) 0x27, 0xA0, 0x8C, 0x00, 0x00, // Logical Maximum (35999) 0x09, 0x3F, // Usage (Azimuth) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xB4, // Pop 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 0x75, 0x08, // Report Size (8) 0x95, 0x02, // Report Count (2) 0x09, 0x01, // Usage (0x01) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection 0xC0, // End Collection 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 0x09, 0x81, // Usage (0x81) 0xA1, 0x01, // Collection (Application) 0x85, 0x17, // Report ID (23) 0x75, 0x08, // Report Size (8) 0x95, 0x1F, // Report Count (31) 0x09, 0x05, // Usage (0x05) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection 0x75, 0x08, // Report Size (8) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x06, 0x0B, 0xFF, // Usage Page (Vendor Defined 0xFF0B) 0x09, 0x0B, // Usage (0x0B) 0xA1, 0x01, // Collection (Application) 0x95, 0x02, // Report Count (2) 0x09, 0x48, // Usage (0x48) 0x85, 0x48, // Report ID (72) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0x95, 0x0F, // Report Count (15) 0x09, 0x29, // Usage (0x29) 0x85, 0x29, // Report ID (41) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0x95, 0x1F, // Report Count (31) 0x09, 0x2A, // Usage (0x2A) 0x85, 0x2A, // Report ID (42) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0x95, 0x3E, // Report Count (62) 0x09, 0x2B, // Usage (0x2B) 0x85, 0x2B, // Report ID (43) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0x95, 0xFE, // Report Count (-2) 0x09, 0x2C, // Usage (0x2C) 0x85, 0x2C, // Report ID (44) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0x96, 0xFE, 0x01, // Report Count (510) 0x09, 0x2D, // Usage (0x2D) 0x85, 0x2D, // Report ID (45) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0x95, 0x0F, // Report Count (15) 0x09, 0x2E, // Usage (0x2E) 0x85, 0x2E, // Report ID (46) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0x1F, // Report Count (31) 0x09, 0x2F, // Usage (0x2F) 0x85, 0x2F, // Report ID (47) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0x3E, // Report Count (62) 0x09, 0x30, // Usage (0x30) 0x85, 0x30, // Report ID (48) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0xFE, // Report Count (-2) 0x09, 0x31, // Usage (0x31) 0x85, 0x31, // Report ID (49) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x96, 0xFE, 0x01, // Report Count (510) 0x09, 0x32, // Usage (0x32) 0x85, 0x32, // Report ID (50) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x96, 0xFE, 0x03, // Report Count (1022) 0x09, 0x33, // Usage (0x33) 0x85, 0x33, // Report ID (51) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x96, 0xFE, 0x07, // Report Count (2046) 0x09, 0x34, // Usage (0x34) 0x85, 0x34, // Report ID (52) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x96, 0xFE, 0x0F, // Report Count (4094) 0x09, 0x35, // Usage (0x35) 0x85, 0x35, // Report ID (53) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x96, 0x3F, 0x1D, // Report Count (7487) 0x09, 0x36, // Usage (0x36) 0x85, 0x36, // Report ID (54) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection 0x06, 0x0F, 0xFF, // Usage Page (Vendor Defined 0xFF0F) 0x09, 0x60, // Usage (0x60) 0xA1, 0x01, // Collection (Application) 0x85, 0x19, // Report ID (25) 0x75, 0x08, // Report Size (8) 0x95, 0x04, // Report Count (4) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x09, 0x00, // Usage (0x00) 0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0x85, 0x19, // Report ID (25) 0x75, 0x08, // Report Size (8) 0x95, 0x04, // Report Count (4) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x09, 0xC6, // Usage (0xC6) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection 0x06, 0x0F, 0xFF, // Usage Page (Vendor Defined 0xFF0F) 0x09, 0x50, // Usage (0x50) 0xA1, 0x01, // Collection (Application) 0x85, 0x22, // Report ID (34) 0x75, 0x20, // Report Size (32) 0x95, 0x01, // Report Count (1) 0x17, 0x00, 0x00, 0x00, 0x80, // Logical Minimum (-2147483649) 0x27, 0xFF, 0xFF, 0xFF, 0x7F, // Logical Maximum (2147483646) 0x09, 0x72, // Usage (0x72) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x09, 0x73, // Usage (0x73) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x09, 0x74, // Usage (0x74) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x09, 0x75, // Usage (0x75) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection // 948 bytes
