Loading...
 

Dual USB Descriptor

PROGMEM char usbHidReportDescriptor[90] = {
   /* Controller and report_id 1 */
    0x05, 0x01,         // USAGE_PAGE (Generic Desktop)
    0x09, 0x04,         // USAGE (Joystick)
    0xa1, 0x01,         //   COLLECTION (Application)
   0x85, 0x01,         //         REPORT_ID (1)
    0xa1, 0x02,         //      COLLECTION (Physical)
    0x09, 0x01,         //      USAGE (Pointer)
   0x09, 0x30,         //         USAGE (X)
    0x09, 0x31,         //         USAGE (Y)
    0x15, 0x00,         //         LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,   //         LOGICAL_MAXIMUM (255)
    0x75, 0x08,         //         REPORT_SIZE (8)
    0x95, 0x02,         //         REPORT_COUNT (2)
    0x81, 0x02,         //         INPUT (Data,Var,Abs)

    0x05, 0x09,         //         USAGE_PAGE (Button)
    0x19, 1,         //         USAGE_MINIMUM (Button 1)
    0x29, 8,         //         USAGE_MAXIMUM (Button 8)
    0x15, 0x00,         //         LOGICAL_MINIMUM (0)
    0x25, 0x01,         //         LOGICAL_MAXIMUM (1)
    0x75, 1,         //          REPORT_SIZE (1)
    0x95, 8,         //         REPORT_COUNT (8)
    0x81, 0x02,         //         INPUT (Data,Var,Abs)
   0xc0,            //      END_COLLECTION
    0xc0,            // END_COLLECTION

   /* Controller and report_id 2 */
    0x05, 0x01,         // USAGE_PAGE (Generic Desktop)
    0x09, 0x04,         // USAGE (Joystick)
    0xa1, 0x01,         //   COLLECTION (Application)
   0x85, 0x02,         //         REPORT_ID (2)
    0xa1, 0x02,         //      COLLECTION (Physical)
    0x09, 0x01,         //      USAGE (Pointer)
   0x09, 0x30,         //         USAGE (X)
    0x09, 0x31,         //         USAGE (Y)
    0x15, 0x00,         //         LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,   //         LOGICAL_MAXIMUM (255)
    0x75, 0x08,         //         REPORT_SIZE (8)
    0x95, 0x02,         //         REPORT_COUNT (2)
    0x81, 0x02,         //         INPUT (Data,Var,Abs)
    0x05, 0x09,         //         USAGE_PAGE (Button)
    0x19, 1,         //         USAGE_MINIMUM (Button 1)
    0x29, 8,         //         USAGE_MAXIMUM (Button 8)
    0x15, 0x00,         //         LOGICAL_MINIMUM (0)
    0x25, 0x01,         //         LOGICAL_MAXIMUM (1)
    0x75, 1,         //          REPORT_SIZE (1)
    0x95, 8,         //         REPORT_COUNT (8)
    0x81, 0x02,         //         INPUT (Data,Var,Abs)
   0xc0,            //      END_COLLECTION
    0xc0,            // END_COLLECTION
};