There are two actually, one for the "keyboard" and another for the "multimedia" keys.
/*
.------------------------------------------------------------------------------
| Keyboard report descriptor (size=63)
`------------------------------------------------------------------------------
*/
const char Hid1ReportDescriptor[] =
{
0x05, 0x01, // Usage Page (Generic Desktop)
0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application)
0x05, 0x07, // Usage Page (Key Codes)
0x19, 0xE0, // Usage Minimun (224)
0x29, 0xE7, // Usage Maximum (231)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1 byte)
0x95, 0x08, // Report Count (8 bits)
0x81, 0x02, // Input (Data, Variable, Absolute) - Modifier Bytes
0x95, 0x01, // Report Count (1)
0x75, 0x08, // Report Size (8)
0x81, 0x01, // Input (Constant) - Reserved Byte
0x95, 0x05, // Report Count (5)
0x75, 0x01, // Report Size (1)
0x05, 0x08, // Usage Page (Page# for LEDs)
0x19, 0x01, // Usage Minimum (1)
0x29, 0x05, // Usage Maximum (5)
0x91, 0x02, // Output (Data, Variable, Absolute) - LEDs (5 bits)
0x95, 0x01, // Report Count (1)
0x75, 0x03, // Report Size (3 bits)
0x91, 0x01, // Output (Constant) - LED byte padding (3 bits)
0x95, 0x06, // Report Count (6 bytes)
0x75, 0x08, // Report Size (8 bits)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x93, // Logical Maximum (147) Added F14-F24, Intl, Lang.
0x05, 0x07, // Usage Page (Key Codes)
0x19, 0x00, // Usage Minimum (0)
0x29, 0x93, // Usage Maximum (147) Added F14-F24, Intl, Lang.
0x81, 0x00, // Input (Data, Array) - Key data (6 bytes)
0x09, 0x03, // Usage (vendor defined)
0x75, 0x08, // Report size (8 bits)
0x95, 0x05, // Report count (5 fields)
0xB1, 0x02, // NEW Feature Report (Data, Variable, Absolute)
0xC0 // End Collection
};
/*
.------------------------------------------------------------------------------
| Vendor defined HID report descriptor (size=23)
`------------------------------------------------------------------------------
*/
const char Hid2ReportDescriptor[] =
{
0x05, 0x0C, // usage page (Consumer Page)
0x09, 0x01, // usage (Consumer Control)
0xA1, 0x01, // collection (application)
0x85, 0x01, // REPORT_ID (1)
0x19, 0x00, // USAGE_MINIMUM (Unassigned)
0x2A, 0x2A, 0x02, // USAGE_MAXIMUM (WWW Faves) Set to our max val.
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0x2A, 0x02, // LOGICAL_MAXIMUM (554) Set to our max val.
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x10, // REPORT_SIZE (16)
0x81, 0x00, // NEW INPUT REPORT (Data,Array,Absolute)
0xC0 // end collection
};