aboutsummaryrefslogtreecommitdiff
path: root/protocol/lufa/descriptor.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocol/lufa/descriptor.c')
-rw-r--r--protocol/lufa/descriptor.c65
1 files changed, 62 insertions, 3 deletions
diff --git a/protocol/lufa/descriptor.c b/protocol/lufa/descriptor.c
index d34ab1c5a..a46ba3ec6 100644
--- a/protocol/lufa/descriptor.c
+++ b/protocol/lufa/descriptor.c
@@ -57,9 +57,11 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
57 HID_RI_REPORT_COUNT(8, 0x08), 57 HID_RI_REPORT_COUNT(8, 0x08),
58 HID_RI_REPORT_SIZE(8, 0x01), 58 HID_RI_REPORT_SIZE(8, 0x01),
59 HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), 59 HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
60
60 HID_RI_REPORT_COUNT(8, 0x01), 61 HID_RI_REPORT_COUNT(8, 0x01),
61 HID_RI_REPORT_SIZE(8, 0x08), 62 HID_RI_REPORT_SIZE(8, 0x08),
62 HID_RI_INPUT(8, HID_IOF_CONSTANT), 63 HID_RI_INPUT(8, HID_IOF_CONSTANT), /* reserved */
64
63 HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */ 65 HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */
64 HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */ 66 HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */
65 HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */ 67 HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */
@@ -69,6 +71,7 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
69 HID_RI_REPORT_COUNT(8, 0x01), 71 HID_RI_REPORT_COUNT(8, 0x01),
70 HID_RI_REPORT_SIZE(8, 0x03), 72 HID_RI_REPORT_SIZE(8, 0x03),
71 HID_RI_OUTPUT(8, HID_IOF_CONSTANT), 73 HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
74
72 HID_RI_USAGE_PAGE(8, 0x07), /* Keyboard */ 75 HID_RI_USAGE_PAGE(8, 0x07), /* Keyboard */
73 HID_RI_USAGE_MINIMUM(8, 0x00), /* Reserved (no event indicated) */ 76 HID_RI_USAGE_MINIMUM(8, 0x00), /* Reserved (no event indicated) */
74 HID_RI_USAGE_MAXIMUM(8, 0xFF), /* Keyboard Application */ 77 HID_RI_USAGE_MAXIMUM(8, 0xFF), /* Keyboard Application */
@@ -210,11 +213,13 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM NKROReport[] =
210 213
211 HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */ 214 HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */
212 HID_RI_USAGE_MINIMUM(8, 0x00), /* Keyboard 0 */ 215 HID_RI_USAGE_MINIMUM(8, 0x00), /* Keyboard 0 */
213 HID_RI_USAGE_MAXIMUM(8, NKRO_SIZE*8-1), /* Keyboard Right GUI */ 216 HID_RI_USAGE_MAXIMUM(8, (NKRO_EPSIZE-1)*8-1), /* Keyboard Right GUI */
214 HID_RI_LOGICAL_MINIMUM(8, 0x00), 217 HID_RI_LOGICAL_MINIMUM(8, 0x00),
215 HID_RI_LOGICAL_MAXIMUM(8, 0x01), 218 HID_RI_LOGICAL_MAXIMUM(8, 0x01),
216 HID_RI_REPORT_COUNT(8, NKRO_SIZE*8), 219 HID_RI_REPORT_COUNT(8, (NKRO_EPSIZE-1)*8),
217 HID_RI_REPORT_SIZE(8, 0x01), 220 HID_RI_REPORT_SIZE(8, 0x01),
221 HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
222 HID_RI_END_COLLECTION(0),
218}; 223};
219#endif 224#endif
220 225
@@ -439,6 +444,48 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
439 .PollingIntervalMS = 0x01 444 .PollingIntervalMS = 0x01
440 }, 445 },
441#endif 446#endif
447
448 /*
449 * NKRO
450 */
451#ifdef NKRO_ENABLE
452 .NKRO_Interface =
453 {
454 .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
455
456 .InterfaceNumber = NKRO_INTERFACE,
457 .AlternateSetting = 0x00,
458
459 .TotalEndpoints = 1,
460
461 .Class = HID_CSCP_HIDClass,
462 .SubClass = HID_CSCP_NonBootSubclass,
463 .Protocol = HID_CSCP_NonBootProtocol,
464
465 .InterfaceStrIndex = NO_DESCRIPTOR
466 },
467
468 .NKRO_HID =
469 {
470 .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
471
472 .HIDSpec = VERSION_BCD(01.11),
473 .CountryCode = 0x00,
474 .TotalReportDescriptors = 1,
475 .HIDReportType = HID_DTYPE_Report,
476 .HIDReportLength = sizeof(NKROReport)
477 },
478
479 .NKRO_INEndpoint =
480 {
481 .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
482
483 .EndpointAddress = (ENDPOINT_DIR_IN | NKRO_IN_EPNUM),
484 .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
485 .EndpointSize = NKRO_EPSIZE,
486 .PollingIntervalMS = 0x01
487 },
488#endif
442}; 489};
443 490
444 491
@@ -536,6 +583,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
536 Size = sizeof(USB_HID_Descriptor_HID_t); 583 Size = sizeof(USB_HID_Descriptor_HID_t);
537 break; 584 break;
538#endif 585#endif
586#ifdef NKRO_ENABLE
587 case NKRO_INTERFACE:
588 Address = &ConfigurationDescriptor.NKRO_HID;
589 Size = sizeof(USB_HID_Descriptor_HID_t);
590 break;
591#endif
539 } 592 }
540 break; 593 break;
541 case HID_DTYPE_Report: 594 case HID_DTYPE_Report:
@@ -562,6 +615,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
562 Size = sizeof(ConsoleReport); 615 Size = sizeof(ConsoleReport);
563 break; 616 break;
564#endif 617#endif
618#ifdef NKRO_ENABLE
619 case NKRO_INTERFACE:
620 Address = &NKROReport;
621 Size = sizeof(NKROReport);
622 break;
623#endif
565 } 624 }
566 break; 625 break;
567 } 626 }