Skip to content

Instantly share code, notes, and snippets.

@archseer

archseer/hid.c Secret

Created December 24, 2019 00:38
Show Gist options
  • Save archseer/80e33f90b02db83da0d88d95af1eb3a9 to your computer and use it in GitHub Desktop.
Save archseer/80e33f90b02db83da0d88d95af1eb3a9 to your computer and use it in GitHub Desktop.
0x06, 0xFF, 0xFF, /* Usage Page (FFFFh), */
0x09, 0x01, /* Usage (01h), */
0xA1, 0x01, /* Collection (Application), */
0x85, 0x5A, /* Report ID (90), */
0x09, 0x03, /* Usage (03h), */
0x75, 0x20, /* Report Size (32), */
0x95, 0x80, /* Report Count (128), */
0xB1, 0x02, /* Feature (Variable), */
0x85, 0x5B, /* Report ID (91), */
0x09, 0x04, /* Usage (04h), */
0x75, 0x20, /* Report Size (32), */
0x95, 0x80, /* Report Count (128), */
0x81, 0x02, /* Input (Variable), */
0xC0, /* End Collection, */
0x05, 0x0D, /* Usage Page (Digitizer), */
0x09, 0x04, /* Usage (Touchscreen), */
0xA1, 0x02, /* Collection (Logical), */
0x85, 0x40, /* Report ID (64), */
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 (Variable), */
0x95, 0x07, /* Report Count (7), */
0x81, 0x03, /* Input (Constant, Variable), */
0x05, 0x01, /* Usage Page (Desktop), */
0x09, 0x30, /* Usage (X), */
0x75, 0x10, /* Report Size (16), */
0x95, 0x01, /* Report Count (1), */
0xA4, /* Push, */
0x55, 0x0E, /* Unit Exponent (14), */
0x65, 0x11, /* Unit (Centimeter), */
0x46, 0x76, 0x0B, /* Physical Maximum (2934), */
0x26, 0xFF, 0x7F, /* Logical Maximum (32767), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x31, /* Usage (Y), */
0x46, 0x74, 0x06, /* Physical Maximum (1652), */
0x26, 0xFF, 0x7F, /* Logical Maximum (32767), */
0x81, 0x02, /* Input (Variable), */
0xB4, /* Pop, */
0xC0, /* End Collection, */
0x75, 0x08, /* Report Size (8), */
0x15, 0x00, /* Logical Minimum (0), */
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
0x06, 0x0B, 0xFF, /* Usage Page (FF0Bh), */
0x09, 0x0B, /* Usage (0Bh), */
0xA1, 0x01, /* Collection (Application), */
0x95, 0x02, /* Report Count (2), */
0x09, 0x48, /* Usage (48h), */
0x85, 0x48, /* Report ID (72), */
0xB1, 0x02, /* Feature (Variable), */
0x95, 0x0F, /* Report Count (15), */
0x09, 0x29, /* Usage (29h), */
0x85, 0x29, /* Report ID (41), */
0xB1, 0x02, /* Feature (Variable), */
0x95, 0x1F, /* Report Count (31), */
0x09, 0x2A, /* Usage (2Ah), */
0x85, 0x2A, /* Report ID (42), */
0xB1, 0x02, /* Feature (Variable), */
0x95, 0x3E, /* Report Count (62), */
0x09, 0x2B, /* Usage (2Bh), */
0x85, 0x2B, /* Report ID (43), */
0xB1, 0x02, /* Feature (Variable), */
0x95, 0xFE, /* Report Count (254), */
0x09, 0x2C, /* Usage (2Ch), */
0x85, 0x2C, /* Report ID (44), */
0xB1, 0x02, /* Feature (Variable), */
0x96, 0xFE, 0x01, /* Report Count (510), */
0x09, 0x2D, /* Usage (2Dh), */
0x85, 0x2D, /* Report ID (45), */
0xB1, 0x02, /* Feature (Variable), */
0x95, 0x0F, /* Report Count (15), */
0x09, 0x2E, /* Usage (2Eh), */
0x85, 0x2E, /* Report ID (46), */
0x81, 0x02, /* Input (Variable), */
0x95, 0x1F, /* Report Count (31), */
0x09, 0x2F, /* Usage (2Fh), */
0x85, 0x2F, /* Report ID (47), */
0x81, 0x02, /* Input (Variable), */
0x95, 0x3E, /* Report Count (62), */
0x09, 0x30, /* Usage (30h), */
0x85, 0x30, /* Report ID (48), */
0x81, 0x02, /* Input (Variable), */
0x95, 0xFE, /* Report Count (254), */
0x09, 0x31, /* Usage (31h), */
0x85, 0x31, /* Report ID (49), */
0x81, 0x02, /* Input (Variable), */
0x96, 0xFE, 0x01, /* Report Count (510), */
0x09, 0x32, /* Usage (32h), */
0x85, 0x32, /* Report ID (50), */
0x81, 0x02, /* Input (Variable), */
0x96, 0xFE, 0x03, /* Report Count (1022), */
0x09, 0x33, /* Usage (33h), */
0x85, 0x33, /* Report ID (51), */
0x81, 0x02, /* Input (Variable), */
0x96, 0xFE, 0x07, /* Report Count (2046), */
0x09, 0x34, /* Usage (34h), */
0x85, 0x34, /* Report ID (52), */
0x81, 0x02, /* Input (Variable), */
0x96, 0xFE, 0x0F, /* Report Count (4094), */
0x09, 0x35, /* Usage (35h), */
0x85, 0x35, /* Report ID (53), */
0x81, 0x02, /* Input (Variable), */
0x96, 0xFE, 0x0D, /* Report Count (3582), */
0x09, 0x36, /* Usage (36h), */
0x85, 0x36, /* Report ID (54), */
0x81, 0x02, /* Input (Variable), */
0x96, 0x3F, 0x1D, /* Report Count (7487), */
0x09, 0x37, /* Usage (37h), */
0x85, 0x37, /* Report ID (55), */
0x81, 0x02, /* Input (Variable), */
0xC0, /* End Collection, */
0x05, 0x0D, /* Usage Page (Digitizer), */
0x09, 0x0F, /* Usage (Capacitive Hm Digitizer), */
0xA1, 0x01, /* Collection (Application), */
0x85, 0x07, /* Report ID (7), */
0x09, 0x56, /* Usage (Scan Time), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x10, /* Report Size (16), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x61, /* Usage (Gesture Char Quality), */
0x75, 0x08, /* Report Size (8), */
0x95, 0x3D, /* Report Count (61), */
0x81, 0x03, /* Input (Constant, Variable), */
0x85, 0x08, /* Report ID (8), */
0x09, 0x56, /* Usage (Scan Time), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x10, /* Report Size (16), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x61, /* Usage (Gesture Char Quality), */
0x75, 0x08, /* Report Size (8), */
0x95, 0xD1, /* Report Count (209), */
0x81, 0x03, /* Input (Constant, Variable), */
0x85, 0x0A, /* Report ID (10), */
0x09, 0x56, /* Usage (Scan Time), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x10, /* Report Size (16), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x61, /* Usage (Gesture Char Quality), */
0x75, 0x08, /* Report Size (8), */
0x95, 0xFD, /* Report Count (253), */
0x81, 0x03, /* Input (Constant, Variable), */
0x85, 0x0B, /* Report ID (11), */
0x09, 0x56, /* Usage (Scan Time), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x10, /* Report Size (16), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x61, /* Usage (Gesture Char Quality), */
0x75, 0x08, /* Report Size (8), */
0x96, 0xA9, 0x0D, /* Report Count (3497), */
0x81, 0x03, /* Input (Constant, Variable), */
0x85, 0x0C, /* Report ID (12), */
0x09, 0x56, /* Usage (Scan Time), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x10, /* Report Size (16), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x61, /* Usage (Gesture Char Quality), */
0x75, 0x08, /* Report Size (8), */
0x96, 0xC9, 0x10, /* Report Count (4297), */
0x81, 0x03, /* Input (Constant, Variable), */
0x85, 0x0D, /* Report ID (13), */
0x09, 0x56, /* Usage (Scan Time), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x10, /* Report Size (16), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x61, /* Usage (Gesture Char Quality), */
0x75, 0x08, /* Report Size (8), */
0x96, 0xD9, 0x05, /* Report Count (1497), */
0x81, 0x03, /* Input (Constant, Variable), */
0x85, 0x1C, /* Report ID (28), */
0x09, 0x56, /* Usage (Scan Time), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x10, /* Report Size (16), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x61, /* Usage (Gesture Char Quality), */
0x75, 0x08, /* Report Size (8), */
0x96, 0xCD, 0x07, /* Report Count (1997), */
0x81, 0x03, /* Input (Constant, Variable), */
0x85, 0x1A, /* Report ID (26), */
0x09, 0x56, /* Usage (Scan Time), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x10, /* Report Size (16), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x61, /* Usage (Gesture Char Quality), */
0x75, 0x08, /* Report Size (8), */
0x96, 0x3D, 0x1D, /* Report Count (7485), */
0x81, 0x03, /* Input (Constant, Variable), */
0x85, 0x06, /* Report ID (6), */
0x09, 0x63, /* Usage (Char Gesture Data), */
0x75, 0x08, /* Report Size (8), */
0x95, 0x77, /* Report Count (119), */
0xB1, 0x02, /* Feature (Variable), */
0x85, 0x05, /* Report ID (5), */
0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
0x09, 0xC8, /* Usage (C8h), */
0x75, 0x08, /* Report Size (8), */
0x95, 0x01, /* Report Count (1), */
0xB1, 0x02, /* Feature (Variable), */
0x85, 0x09, /* Report ID (9), */
0x09, 0xC9, /* Usage (C9h), */
0x75, 0x08, /* Report Size (8), */
0x95, 0x3F, /* Report Count (63), */
0xB1, 0x02, /* Feature (Variable), */
0xC0, /* End Collection, */
0x06, 0x0F, 0xFF, /* Usage Page (FF0Fh), */
0x09, 0x50, /* Usage (50h), */
0xA1, 0x01, /* Collection (Application), */
0x85, 0x1F, /* Report ID (31), */
0x75, 0x08, /* Report Size (8), */
0x95, 0x3C, /* Report Count (60), */
0x15, 0x00, /* Logical Minimum (0), */
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
0x09, 0x60, /* Usage (60h), */
0x81, 0x02, /* Input (Variable), */
0x85, 0x1F, /* Report ID (31), */
0x75, 0x08, /* Report Size (8), */
0x95, 0x3C, /* Report Count (60), */
0x15, 0x00, /* Logical Minimum (0), */
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
0x09, 0x61, /* Usage (61h), */
0x91, 0x02, /* Output (Variable), */
0x85, 0x21, /* Report ID (33), */
0x75, 0x20, /* Report Size (32), */
0x95, 0x01, /* Report Count (1), */
0x17, 0x00, 0x00, 0x00, 0x80, /* Logical Minimum (-2147483648), */
0x27, 0xFF, 0xFF, 0xFF, 0x7F, /* Logical Maximum (2147483647), */
0x09, 0x66, /* Usage (66h), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x67, /* Usage (67h), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x68, /* Usage (68h), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x69, /* Usage (69h), */
0x81, 0x02, /* Input (Variable), */
0x85, 0x22, /* Report ID (34), */
0x75, 0x20, /* Report Size (32), */
0x95, 0x01, /* Report Count (1), */
0x17, 0x00, 0x00, 0x00, 0x80, /* Logical Minimum (-2147483648), */
0x27, 0xFF, 0xFF, 0xFF, 0x7F, /* Logical Maximum (2147483647), */
0x09, 0x72, /* Usage (72h), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x73, /* Usage (73h), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x74, /* Usage (74h), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x75, /* Usage (75h), */
0x81, 0x02, /* Input (Variable), */
0x85, 0x22, /* Report ID (34), */
0x75, 0x20, /* Report Size (32), */
0x95, 0x01, /* Report Count (1), */
0x17, 0x00, 0x00, 0x00, 0x80, /* Logical Minimum (-2147483648), */
0x27, 0xFF, 0xFF, 0xFF, 0x7F, /* Logical Maximum (2147483647), */
0x09, 0x7A, /* Usage (7Ah), */
0xB1, 0x02, /* Feature (Variable), */
0x09, 0x7B, /* Usage (7Bh), */
0xB1, 0x02, /* Feature (Variable), */
0x09, 0x7C, /* Usage (7Ch), */
0xB1, 0x02, /* Feature (Variable), */
0x09, 0x7D, /* Usage (7Dh), */
0xB1, 0x02, /* Feature (Variable), */
0x85, 0x23, /* Report ID (35), */
0x75, 0x20, /* Report Size (32), */
0x95, 0x01, /* Report Count (1), */
0x17, 0x00, 0x00, 0x00, 0x80, /* Logical Minimum (-2147483648), */
0x27, 0xFF, 0xFF, 0xFF, 0x7F, /* Logical Maximum (2147483647), */
0x09, 0x86, /* Usage (86h), */
0xB1, 0x02, /* Feature (Variable), */
0x09, 0x87, /* Usage (87h), */
0xB1, 0x02, /* Feature (Variable), */
0x09, 0x88, /* Usage (88h), */
0xB1, 0x02, /* Feature (Variable), */
0x09, 0x89, /* Usage (89h), */
0xB1, 0x02, /* Feature (Variable), */
0xC0, /* End Collection, */
0x06, 0x09, 0xFF, /* Usage Page (FF09h), */
0x0A, 0x00, 0x01, /* Usage (0100h), */
0xA1, 0x01, /* Collection (Application), */
0xA1, 0x00, /* Collection (Physical), */
0x85, 0x50, /* Report ID (80), */
0x75, 0x08, /* Report Size (8), */
0x95, 0x01, /* Report Count (1), */
0x15, 0x00, /* Logical Minimum (0), */
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
0x81, 0x03, /* Input (Constant, Variable), */
0x0A, 0x01, 0x01, /* Usage (0101h), */
0x75, 0x10, /* Report Size (16), */
0x27, 0xFF, 0xFF, 0x00, 0x00, /* Logical Maximum (65535), */
0x81, 0x02, /* Input (Variable), */
0x05, 0x0D, /* Usage Page (Digitizer), */
0x09, 0x01, /* Usage (Digitizer), */
0xA1, 0x02, /* Collection (Logical), */
0x09, 0x42, /* Usage (Tip Switch), */
0x25, 0x01, /* Logical Maximum (1), */
0x75, 0x01, /* Report Size (1), */
0x81, 0x02, /* Input (Variable), */
0x81, 0x03, /* Input (Constant, Variable), */
0x09, 0x47, /* Usage (Touch Valid), */
0x81, 0x02, /* Input (Variable), */
0x95, 0x05, /* Report Count (5), */
0x81, 0x03, /* Input (Constant, Variable), */
0x95, 0x08, /* Report Count (8), */
0x81, 0x03, /* Input (Constant, Variable), */
0x09, 0x51, /* Usage (Contact Identifier), */
0x75, 0x10, /* Report Size (16), */
0x95, 0x01, /* Report Count (1), */
0x27, 0xFF, 0xFF, 0x00, 0x00, /* Logical Maximum (65535), */
0x81, 0x02, /* Input (Variable), */
0x05, 0x01, /* Usage Page (Desktop), */
0x09, 0x30, /* Usage (X), */
0x95, 0x02, /* Report Count (2), */
0xA4, /* Push, */
0x55, 0x0E, /* Unit Exponent (14), */
0x65, 0x11, /* Unit (Centimeter), */
0x46, 0x76, 0x0B, /* Physical Maximum (2934), */
0x26, 0xFF, 0x7F, /* Logical Maximum (32767), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x31, /* Usage (Y), */
0x46, 0x74, 0x06, /* Physical Maximum (1652), */
0x26, 0xFF, 0x7F, /* Logical Maximum (32767), */
0x81, 0x02, /* Input (Variable), */
0x46, 0x76, 0x0B, /* Physical Maximum (2934), */
0x26, 0xFF, 0x7F, /* Logical Maximum (32767), */
0x05, 0x0D, /* Usage Page (Digitizer), */
0x09, 0x48, /* Usage (Width), */
0x95, 0x01, /* Report Count (1), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x49, /* Usage (Height), */
0x46, 0x74, 0x06, /* Physical Maximum (1652), */
0x26, 0xFF, 0x7F, /* Logical Maximum (32767), */
0x81, 0x02, /* Input (Variable), */
0xB4, /* Pop, */
0xC0, /* End Collection, */
0x05, 0x0D, /* Usage Page (Digitizer), */
0x09, 0x54, /* Usage (Contact Count), */
0x95, 0x01, /* Report Count (1), */
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
0x75, 0x08, /* Report Size (8), */
0x81, 0x02, /* Input (Variable), */
0x95, 0x03, /* Report Count (3), */
0x81, 0x03, /* Input (Constant, Variable), */
0x09, 0x56, /* Usage (Scan Time), */
0x75, 0x20, /* Report Size (32), */
0x95, 0x01, /* Report Count (1), */
0x27, 0xFF, 0xFF, 0xFF, 0x0F, /* Logical Maximum (268435455), */
0x81, 0x02, /* Input (Variable), */
0xC0, /* End Collection, */
0xC0, /* End Collection, */
0x06, 0x0F, 0xFF, /* Usage Page (FF0Fh), */
0x09, 0x60, /* Usage (60h), */
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 (00h), */
0x91, 0x02, /* Output (Variable), */
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 (C6h), */
0x81, 0x02, /* Input (Variable), */
0xC0, /* End Collection, */
0x05, 0x0D, /* Usage Page (Digitizer), */
0x09, 0x02, /* Usage (Pen), */
0xA1, 0x01, /* Collection (Application), */
0x85, 0x01, /* Report ID (1), */
0x09, 0x20, /* Usage (Stylus), */
0x35, 0x00, /* Physical Minimum (0), */
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 (Variable), */
0x95, 0x03, /* Report Count (3), */
0x81, 0x03, /* Input (Constant, Variable), */
0x05, 0x01, /* Usage Page (Desktop), */
0x09, 0x30, /* Usage (X), */
0x75, 0x10, /* Report Size (16), */
0x95, 0x01, /* Report Count (1), */
0xA4, /* Push, */
0x55, 0x0E, /* Unit Exponent (14), */
0x65, 0x11, /* Unit (Centimeter), */
0x46, 0x25, 0x0B, /* Physical Maximum (2853), */
0x26, 0x80, 0x25, /* Logical Maximum (9600), */
0x81, 0x02, /* Input (Variable), */
0x09, 0x31, /* Usage (Y), */
0x46, 0x6E, 0x07, /* Physical Maximum (1902), */
0x26, 0x20, 0x1C, /* Logical Maximum (7200), */
0x81, 0x02, /* Input (Variable), */
0xB4, /* Pop, */
0x05, 0x0D, /* Usage Page (Digitizer), */
0x09, 0x30, /* Usage (Tip Pressure), */
0x26, 0x00, 0x10, /* Logical Maximum (4096), */
0x81, 0x02, /* Input (Variable), */
0xA4, /* Push, */
0x55, 0x0E, /* Unit Exponent (14), */
0x65, 0x14, /* Unit (Degrees), */
0x36, 0xD8, 0xDC, /* Physical Minimum (-9000), */
0x46, 0x28, 0x23, /* Physical Maximum (9000), */
0x26, 0x50, 0x46, /* Logical Maximum (18000), */
0x09, 0x3D, /* Usage (X Tilt), */
0x81, 0x42, /* Input (Variable, Null State), */
0x09, 0x3E, /* Usage (Y Tilt), */
0x81, 0x42, /* Input (Variable, Null State), */
0x55, 0x0C, /* Unit Exponent (12), */
0x66, 0x01, 0x10, /* Unit (Seconds), */
0x35, 0x00, /* Physical Minimum (0), */
0x47, 0xFF, 0xFF, 0x00, 0x00, /* Physical Maximum (65535), */
0x27, 0xFF, 0xFF, 0x00, 0x00, /* Logical Maximum (65535), */
0x09, 0x56, /* Usage (Scan Time), */
0x81, 0x02, /* Input (Variable), */
0xB4, /* Pop, */
0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
0x09, 0x01, /* Usage (01h), */
0x75, 0x08, /* Report Size (8), */
0x95, 0x01, /* Report Count (1), */
0x81, 0x02, /* Input (Variable), */
0x81, 0x03, /* Input (Constant, Variable), */
0xC0, /* End Collection, */
0xC0 /* End Collection */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment