/* marked as padding so OS ignores it and uses NKRO. BIOS will still use it. */
const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = {
HID_RI_USAGE_PAGE(8, 0x01),
HID_RI_USAGE(8, 0x06),
HID_RI_COLLECTION(8, 0x01),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_REPORT_COUNT(8, 0x08),
HID_RI_INPUT(8, HID_IOF_CONSTANT),
HID_RI_REPORT_COUNT(8, 0x01),
HID_RI_REPORT_SIZE(8, 0x08),
HID_RI_INPUT(8, HID_IOF_CONSTANT),
HID_RI_REPORT_COUNT(8, 0x05),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
HID_RI_REPORT_COUNT(8, 0x01),
HID_RI_REPORT_SIZE(8, 0x03),
HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
HID_RI_REPORT_COUNT(8, 6),
HID_RI_REPORT_SIZE(8, 0x08),
HID_RI_INPUT(8, HID_IOF_CONSTANT),
HID_RI_END_COLLECTION(0)
};
const USB_Descriptor_HIDReport_Datatype_t PROGMEM NKROReport[] = {
HID_RI_USAGE_PAGE(8, 0x01),
HID_RI_USAGE(8, 0x06),
HID_RI_COLLECTION(8, 0x01),
HID_RI_USAGE_PAGE(8, 0x08), // LED page
HID_RI_USAGE_MINIMUM(8, 0x01), // num lock
HID_RI_USAGE_MAXIMUM(8, 0x03), // scroll lock
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_REPORT_COUNT(8, 0x03),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_OUTPUT(8,
HID_IOF_DATA |
HID_IOF_VARIABLE |
HID_IOF_ABSOLUTE),
HID_RI_REPORT_COUNT(8, 0x01),
HID_RI_REPORT_SIZE(8, 0x05),
HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
HID_RI_USAGE_PAGE(8, 0x07), // key codes page
HID_RI_USAGE_MINIMUM(8, 0xe0), // left ctrl
HID_RI_USAGE_MAXIMUM(8, 0xe7), // right GUI
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_REPORT_COUNT(8, 0x08),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_INPUT(8,
HID_IOF_DATA |
HID_IOF_VARIABLE |
HID_IOF_ABSOLUTE),
HID_RI_USAGE_PAGE(8, 0x07), // key codes page
HID_RI_USAGE_MINIMUM(8, 0x00), // Reserved
HID_RI_USAGE_MAXIMUM(8, 0x31), // Backslash/Bar
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_REPORT_COUNT(8, 0x32),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_INPUT(8,
HID_IOF_DATA |
HID_IOF_VARIABLE |
HID_IOF_ABSOLUTE),
HID_RI_REPORT_COUNT(8, 0x01), // skip Non-US # and ~, workaround
HID_RI_REPORT_SIZE(8, 0x01), // for linux bug with backslashes
HID_RI_INPUT(8, HID_IOF_CONSTANT),
HID_RI_USAGE_PAGE(8, 0x07), // key codes page
HID_RI_USAGE_MINIMUM(8, 0x33), // semicolon/colon
HID_RI_USAGE_MAXIMUM(8, 0x9b), // cancel
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_REPORT_COUNT(8, 0x69),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_INPUT(8,
HID_IOF_DATA |
HID_IOF_VARIABLE |
HID_IOF_ABSOLUTE),
HID_RI_REPORT_COUNT(8, 0x01), // skip clear, workaround for
HID_RI_REPORT_SIZE(8, 0x01), // linux bug (similar to above)
HID_RI_INPUT(8, HID_IOF_CONSTANT),
HID_RI_USAGE_PAGE(8, 0x07), // key codes page
HID_RI_USAGE_MINIMUM(8, 0x9d), // prior
HID_RI_USAGE_MAXIMUM(8, 0xa4), // exsel
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_REPORT_COUNT(8, 0x08),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_INPUT(8,
HID_IOF_DATA |
HID_IOF_VARIABLE |
HID_IOF_ABSOLUTE),
HID_RI_USAGE_PAGE(8, 0x01), // generic desktop page
HID_RI_USAGE_MINIMUM(8, 0x81), // system power down
HID_RI_USAGE_MAXIMUM(8, 0x83), // system wake up
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_REPORT_COUNT(8, 0x03),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_INPUT(8,
HID_IOF_DATA |
HID_IOF_VARIABLE |
HID_IOF_ABSOLUTE),
HID_RI_USAGE_PAGE(8, 0x0c), // consumer page
HID_RI_USAGE_MINIMUM(8, 0xb0), // play
HID_RI_USAGE_MAXIMUM(8, 0xb8), // eject
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_REPORT_COUNT(8, 0x09),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_INPUT(8,
HID_IOF_DATA |
HID_IOF_VARIABLE |
HID_IOF_ABSOLUTE),
HID_RI_USAGE_PAGE(8, 0x0c), // consumer page
HID_RI_USAGE(8, 0xcd), // play/pause
HID_RI_USAGE(8, 0xe2), // mute
HID_RI_USAGE(8, 0xe9), // volume++
HID_RI_USAGE(8, 0xea), // volume--
HID_RI_USAGE(16, 0x18a), // mail
HID_RI_USAGE(16, 0x192), // calculator
HID_RI_USAGE(16, 0x194), // file browser
HID_RI_USAGE(16, 0x221), // web search
HID_RI_USAGE(16, 0x223), // web home
HID_RI_USAGE(16, 0x224), // web back
HID_RI_USAGE(16, 0x225), // web forward
HID_RI_USAGE(16, 0x227), // web refresh
HID_RI_USAGE(16, 0x22a), // web bookmarks
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_REPORT_COUNT(8, 0x0d),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_INPUT(8,
HID_IOF_DATA |
HID_IOF_VARIABLE |
HID_IOF_ABSOLUTE),
HID_RI_REPORT_COUNT(8, 0x01),
HID_RI_REPORT_SIZE(8, 0x02),
HID_RI_INPUT(8, HID_IOF_CONSTANT),
HID_RI_END_COLLECTION(0)
};