diff options
Diffstat (limited to 'protocol/lufa/descriptor.c')
| -rw-r--r-- | protocol/lufa/descriptor.c | 65 |
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 | } |
