diff options
author | Ryan <fauxpark@gmail.com> | 2021-01-11 19:46:30 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-11 19:46:30 +1100 |
commit | aa0e33eca01ffcc1bae1fa97846e997de2759bea (patch) | |
tree | c9a01d80a652ebf7a92e400b21ec9ddc2f20031d | |
parent | 407e5be34d6693ba1625391a6659291b6f281918 (diff) | |
download | qmk_firmware-aa0e33eca01ffcc1bae1fa97846e997de2759bea.tar.gz qmk_firmware-aa0e33eca01ffcc1bae1fa97846e997de2759bea.zip |
Add support for shared EP on V-USB boards (#11103)
-rw-r--r-- | tmk_core/common/report.h | 6 | ||||
-rw-r--r-- | tmk_core/protocol/vusb/vusb.c | 123 | ||||
-rw-r--r-- | tmk_core/protocol/vusb/vusb.h | 21 |
3 files changed, 104 insertions, 46 deletions
diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h index 610addf43..5d7c5b3b2 100644 --- a/tmk_core/common/report.h +++ b/tmk_core/common/report.h | |||
@@ -123,12 +123,6 @@ enum desktop_usages { | |||
123 | 123 | ||
124 | #define KEYBOARD_REPORT_KEYS 6 | 124 | #define KEYBOARD_REPORT_KEYS 6 |
125 | 125 | ||
126 | /* VUSB hardcodes keyboard and mouse+extrakey only */ | ||
127 | #if defined(PROTOCOL_VUSB) | ||
128 | # undef KEYBOARD_SHARED_EP | ||
129 | # undef MOUSE_SHARED_EP | ||
130 | #endif | ||
131 | |||
132 | #ifdef __cplusplus | 126 | #ifdef __cplusplus |
133 | extern "C" { | 127 | extern "C" { |
134 | #endif | 128 | #endif |
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index 9ce75334a..a422903cc 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c | |||
@@ -46,19 +46,28 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
46 | * Interface indexes | 46 | * Interface indexes |
47 | */ | 47 | */ |
48 | enum usb_interfaces { | 48 | enum usb_interfaces { |
49 | #ifndef KEYBOARD_SHARED_EP | ||
49 | KEYBOARD_INTERFACE = NEXT_INTERFACE, | 50 | KEYBOARD_INTERFACE = NEXT_INTERFACE, |
51 | #else | ||
52 | SHARED_INTERFACE = NEXT_INTERFACE, | ||
53 | # define KEYBOARD_INTERFACE SHARED_INTERFACE | ||
54 | #endif | ||
55 | |||
50 | // It is important that the Raw HID interface is at a constant | 56 | // It is important that the Raw HID interface is at a constant |
51 | // interface number, to support Linux/OSX platforms and chrome.hid | 57 | // interface number, to support Linux/OSX platforms and chrome.hid |
52 | // If Raw HID is enabled, let it be always 1. | 58 | // If Raw HID is enabled, let it be always 1. |
53 | #ifdef RAW_ENABLE | 59 | #ifdef RAW_ENABLE |
54 | RAW_INTERFACE = NEXT_INTERFACE, | 60 | RAW_INTERFACE = NEXT_INTERFACE, |
55 | #endif | 61 | #endif |
56 | #if (defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)) | 62 | |
57 | MOUSE_EXTRA_INTERFACE = NEXT_INTERFACE, | 63 | #if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP) |
64 | SHARED_INTERFACE = NEXT_INTERFACE, | ||
58 | #endif | 65 | #endif |
66 | |||
59 | #ifdef CONSOLE_ENABLE | 67 | #ifdef CONSOLE_ENABLE |
60 | CONSOLE_INTERFACE = NEXT_INTERFACE, | 68 | CONSOLE_INTERFACE = NEXT_INTERFACE, |
61 | #endif | 69 | #endif |
70 | |||
62 | TOTAL_INTERFACES = NEXT_INTERFACE | 71 | TOTAL_INTERFACES = NEXT_INTERFACE |
63 | }; | 72 | }; |
64 | 73 | ||
@@ -90,7 +99,16 @@ void vusb_transfer_keyboard(void) { | |||
90 | for (int i = 0; i < VUSB_TRANSFER_KEYBOARD_MAX_TRIES; i++) { | 99 | for (int i = 0; i < VUSB_TRANSFER_KEYBOARD_MAX_TRIES; i++) { |
91 | if (usbInterruptIsReady()) { | 100 | if (usbInterruptIsReady()) { |
92 | if (kbuf_head != kbuf_tail) { | 101 | if (kbuf_head != kbuf_tail) { |
102 | #ifndef KEYBOARD_SHARED_EP | ||
93 | usbSetInterrupt((void *)&kbuf[kbuf_tail], sizeof(report_keyboard_t)); | 103 | usbSetInterrupt((void *)&kbuf[kbuf_tail], sizeof(report_keyboard_t)); |
104 | #else | ||
105 | // Ugly hack! :( | ||
106 | usbSetInterrupt((void *)&kbuf[kbuf_tail], sizeof(report_keyboard_t) - 1); | ||
107 | while (!usbInterruptIsReady()) { | ||
108 | usbPoll(); | ||
109 | } | ||
110 | usbSetInterrupt((void *)(&(kbuf[kbuf_tail].keys[5])), 1); | ||
111 | #endif | ||
94 | kbuf_tail = (kbuf_tail + 1) % KBUF_SIZE; | 112 | kbuf_tail = (kbuf_tail + 1) % KBUF_SIZE; |
95 | if (debug_keyboard) { | 113 | if (debug_keyboard) { |
96 | dprintf("V-USB: kbuf[%d->%d](%02X)\n", kbuf_tail, kbuf_head, (kbuf_head < kbuf_tail) ? (KBUF_SIZE - kbuf_tail + kbuf_head) : (kbuf_head - kbuf_tail)); | 114 | dprintf("V-USB: kbuf[%d->%d](%02X)\n", kbuf_tail, kbuf_head, (kbuf_head < kbuf_tail) ? (KBUF_SIZE - kbuf_tail + kbuf_head) : (kbuf_head - kbuf_tail)); |
@@ -230,16 +248,18 @@ static void send_keyboard(report_keyboard_t *report) { | |||
230 | keyboard_report_sent = *report; | 248 | keyboard_report_sent = *report; |
231 | } | 249 | } |
232 | 250 | ||
233 | typedef struct { | 251 | #ifndef KEYBOARD_SHARED_EP |
234 | uint8_t report_id; | 252 | # define usbInterruptIsReadyShared usbInterruptIsReady3 |
235 | report_mouse_t report; | 253 | # define usbSetInterruptShared usbSetInterrupt3 |
236 | } __attribute__((packed)) vusb_mouse_report_t; | 254 | #else |
255 | # define usbInterruptIsReadyShared usbInterruptIsReady | ||
256 | # define usbSetInterruptShared usbSetInterrupt | ||
257 | #endif | ||
237 | 258 | ||
238 | static void send_mouse(report_mouse_t *report) { | 259 | static void send_mouse(report_mouse_t *report) { |
239 | #ifdef MOUSE_ENABLE | 260 | #ifdef MOUSE_ENABLE |
240 | vusb_mouse_report_t r = {.report_id = REPORT_ID_MOUSE, .report = *report}; | 261 | if (usbInterruptIsReadyShared()) { |
241 | if (usbInterruptIsReady3()) { | 262 | usbSetInterruptShared((void *)report, sizeof(report_mouse_t)); |
242 | usbSetInterrupt3((void *)&r, sizeof(vusb_mouse_report_t)); | ||
243 | } | 263 | } |
244 | #endif | 264 | #endif |
245 | } | 265 | } |
@@ -253,8 +273,8 @@ static void send_extra(uint8_t report_id, uint16_t data) { | |||
253 | last_data = data; | 273 | last_data = data; |
254 | 274 | ||
255 | report_extra_t report = {.report_id = report_id, .usage = data}; | 275 | report_extra_t report = {.report_id = report_id, .usage = data}; |
256 | if (usbInterruptIsReady3()) { | 276 | if (usbInterruptIsReadyShared()) { |
257 | usbSetInterrupt3((void *)&report, sizeof(report)); | 277 | usbSetInterruptShared((void *)&report, sizeof(report_extra_t)); |
258 | } | 278 | } |
259 | } | 279 | } |
260 | #endif | 280 | #endif |
@@ -360,10 +380,18 @@ void usbFunctionWriteOut(uchar *data, uchar len) { | |||
360 | * Descriptors * | 380 | * Descriptors * |
361 | *------------------------------------------------------------------*/ | 381 | *------------------------------------------------------------------*/ |
362 | 382 | ||
383 | #ifdef KEYBOARD_SHARED_EP | ||
384 | const PROGMEM uchar shared_hid_report[] = { | ||
385 | # define SHARED_REPORT_STARTED | ||
386 | #else | ||
363 | const PROGMEM uchar keyboard_hid_report[] = { | 387 | const PROGMEM uchar keyboard_hid_report[] = { |
388 | #endif | ||
364 | 0x05, 0x01, // Usage Page (Generic Desktop) | 389 | 0x05, 0x01, // Usage Page (Generic Desktop) |
365 | 0x09, 0x06, // Usage (Keyboard) | 390 | 0x09, 0x06, // Usage (Keyboard) |
366 | 0xA1, 0x01, // Collection (Application) | 391 | 0xA1, 0x01, // Collection (Application) |
392 | #ifdef KEYBOARD_SHARED_EP | ||
393 | 0x85, REPORT_ID_KEYBOARD, // Report ID | ||
394 | #endif | ||
367 | // Modifiers (8 bits) | 395 | // Modifiers (8 bits) |
368 | 0x05, 0x07, // Usage Page (Keyboard/Keypad) | 396 | 0x05, 0x07, // Usage Page (Keyboard/Keypad) |
369 | 0x19, 0xE0, // Usage Minimum (Keyboard Left Control) | 397 | 0x19, 0xE0, // Usage Minimum (Keyboard Left Control) |
@@ -398,12 +426,17 @@ const PROGMEM uchar keyboard_hid_report[] = { | |||
398 | 0x95, 0x01, // Report Count (1) | 426 | 0x95, 0x01, // Report Count (1) |
399 | 0x75, 0x03, // Report Size (3) | 427 | 0x75, 0x03, // Report Size (3) |
400 | 0x91, 0x03, // Output (Constant) | 428 | 0x91, 0x03, // Output (Constant) |
401 | 0xC0 // End Collection | 429 | 0xC0, // End Collection |
430 | #ifndef KEYBOARD_SHARED_EP | ||
402 | }; | 431 | }; |
432 | #endif | ||
403 | 433 | ||
404 | #if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE) | 434 | #if defined(SHARED_EP_ENABLE) && !defined(SHARED_REPORT_STARTED) |
405 | const PROGMEM uchar mouse_extra_hid_report[] = { | 435 | const PROGMEM uchar shared_hid_report[] = { |
406 | # ifdef MOUSE_ENABLE | 436 | # define SHARED_REPORT_STARTED |
437 | #endif | ||
438 | |||
439 | #ifdef MOUSE_ENABLE | ||
407 | // Mouse report descriptor | 440 | // Mouse report descriptor |
408 | 0x05, 0x01, // Usage Page (Generic Desktop) | 441 | 0x05, 0x01, // Usage Page (Generic Desktop) |
409 | 0x09, 0x02, // Usage (Mouse) | 442 | 0x09, 0x02, // Usage (Mouse) |
@@ -452,9 +485,9 @@ const PROGMEM uchar mouse_extra_hid_report[] = { | |||
452 | 0x81, 0x06, // Input (Data, Variable, Relative) | 485 | 0x81, 0x06, // Input (Data, Variable, Relative) |
453 | 0xC0, // End Collection | 486 | 0xC0, // End Collection |
454 | 0xC0, // End Collection | 487 | 0xC0, // End Collection |
455 | # endif | 488 | #endif |
456 | 489 | ||
457 | # ifdef EXTRAKEY_ENABLE | 490 | #ifdef EXTRAKEY_ENABLE |
458 | // Extrakeys report descriptor | 491 | // Extrakeys report descriptor |
459 | 0x05, 0x01, // Usage Page (Generic Desktop) | 492 | 0x05, 0x01, // Usage Page (Generic Desktop) |
460 | 0x09, 0x80, // Usage (System Control) | 493 | 0x09, 0x80, // Usage (System Control) |
@@ -481,7 +514,8 @@ const PROGMEM uchar mouse_extra_hid_report[] = { | |||
481 | 0x75, 0x10, // Report Size (16) | 514 | 0x75, 0x10, // Report Size (16) |
482 | 0x81, 0x00, // Input (Data, Array, Absolute) | 515 | 0x81, 0x00, // Input (Data, Array, Absolute) |
483 | 0xC0 // End Collection | 516 | 0xC0 // End Collection |
484 | # endif | 517 | #endif |
518 | #ifdef SHARED_EP_ENABLE | ||
485 | }; | 519 | }; |
486 | #endif | 520 | #endif |
487 | 521 | ||
@@ -618,6 +652,7 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = { | |||
618 | .bMaxPower = USB_MAX_POWER_CONSUMPTION / 2 | 652 | .bMaxPower = USB_MAX_POWER_CONSUMPTION / 2 |
619 | }, | 653 | }, |
620 | 654 | ||
655 | # ifndef KEYBOARD_SHARED_EP | ||
621 | /* | 656 | /* |
622 | * Keyboard | 657 | * Keyboard |
623 | */ | 658 | */ |
@@ -655,6 +690,7 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = { | |||
655 | .wMaxPacketSize = 8, | 690 | .wMaxPacketSize = 8, |
656 | .bInterval = USB_POLLING_INTERVAL_MS | 691 | .bInterval = USB_POLLING_INTERVAL_MS |
657 | }, | 692 | }, |
693 | # endif | ||
658 | 694 | ||
659 | # if defined(RAW_ENABLE) | 695 | # if defined(RAW_ENABLE) |
660 | /* | 696 | /* |
@@ -705,24 +741,30 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = { | |||
705 | .bInterval = USB_POLLING_INTERVAL_MS | 741 | .bInterval = USB_POLLING_INTERVAL_MS |
706 | }, | 742 | }, |
707 | # endif | 743 | # endif |
708 | # if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE) | 744 | |
745 | # ifdef SHARED_EP_ENABLE | ||
709 | /* | 746 | /* |
710 | * Mouse/Extrakeys | 747 | * Shared |
711 | */ | 748 | */ |
712 | .mouseExtraInterface = { | 749 | .sharedInterface = { |
713 | .header = { | 750 | .header = { |
714 | .bLength = sizeof(usbInterfaceDescriptor_t), | 751 | .bLength = sizeof(usbInterfaceDescriptor_t), |
715 | .bDescriptorType = USBDESCR_INTERFACE | 752 | .bDescriptorType = USBDESCR_INTERFACE |
716 | }, | 753 | }, |
717 | .bInterfaceNumber = MOUSE_EXTRA_INTERFACE, | 754 | .bInterfaceNumber = SHARED_INTERFACE, |
718 | .bAlternateSetting = 0x00, | 755 | .bAlternateSetting = 0x00, |
719 | .bNumEndpoints = 1, | 756 | .bNumEndpoints = 1, |
720 | .bInterfaceClass = 0x03, | 757 | .bInterfaceClass = 0x03, |
758 | # ifdef KEYBOARD_SHARED_EP | ||
759 | .bInterfaceSubClass = 0x01, | ||
760 | .bInterfaceProtocol = 0x01, | ||
761 | # else | ||
721 | .bInterfaceSubClass = 0x00, | 762 | .bInterfaceSubClass = 0x00, |
722 | .bInterfaceProtocol = 0x00, | 763 | .bInterfaceProtocol = 0x00, |
764 | # endif | ||
723 | .iInterface = 0x00 | 765 | .iInterface = 0x00 |
724 | }, | 766 | }, |
725 | .mouseExtraHID = { | 767 | .sharedHID = { |
726 | .header = { | 768 | .header = { |
727 | .bLength = sizeof(usbHIDDescriptor_t), | 769 | .bLength = sizeof(usbHIDDescriptor_t), |
728 | .bDescriptorType = USBDESCR_HID | 770 | .bDescriptorType = USBDESCR_HID |
@@ -731,19 +773,24 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = { | |||
731 | .bCountryCode = 0x00, | 773 | .bCountryCode = 0x00, |
732 | .bNumDescriptors = 1, | 774 | .bNumDescriptors = 1, |
733 | .bDescriptorType = USBDESCR_HID_REPORT, | 775 | .bDescriptorType = USBDESCR_HID_REPORT, |
734 | .wDescriptorLength = sizeof(mouse_extra_hid_report) | 776 | .wDescriptorLength = sizeof(shared_hid_report) |
735 | }, | 777 | }, |
736 | .mouseExtraINEndpoint = { | 778 | .sharedINEndpoint = { |
737 | .header = { | 779 | .header = { |
738 | .bLength = sizeof(usbEndpointDescriptor_t), | 780 | .bLength = sizeof(usbEndpointDescriptor_t), |
739 | .bDescriptorType = USBDESCR_ENDPOINT | 781 | .bDescriptorType = USBDESCR_ENDPOINT |
740 | }, | 782 | }, |
783 | # ifdef KEYBOARD_SHARED_EP | ||
784 | .bEndpointAddress = (USBRQ_DIR_DEVICE_TO_HOST | 1), | ||
785 | # else | ||
741 | .bEndpointAddress = (USBRQ_DIR_DEVICE_TO_HOST | USB_CFG_EP3_NUMBER), | 786 | .bEndpointAddress = (USBRQ_DIR_DEVICE_TO_HOST | USB_CFG_EP3_NUMBER), |
787 | # endif | ||
742 | .bmAttributes = 0x03, | 788 | .bmAttributes = 0x03, |
743 | .wMaxPacketSize = 8, | 789 | .wMaxPacketSize = 8, |
744 | .bInterval = USB_POLLING_INTERVAL_MS | 790 | .bInterval = USB_POLLING_INTERVAL_MS |
745 | }, | 791 | }, |
746 | # endif | 792 | # endif |
793 | |||
747 | # if defined(CONSOLE_ENABLE) | 794 | # if defined(CONSOLE_ENABLE) |
748 | /* | 795 | /* |
749 | * Console | 796 | * Console |
@@ -791,7 +838,7 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = { | |||
791 | .bmAttributes = 0x03, | 838 | .bmAttributes = 0x03, |
792 | .wMaxPacketSize = CONSOLE_EPSIZE, | 839 | .wMaxPacketSize = CONSOLE_EPSIZE, |
793 | .bInterval = 0x01 | 840 | .bInterval = 0x01 |
794 | }, | 841 | } |
795 | # endif | 842 | # endif |
796 | }; | 843 | }; |
797 | 844 | ||
@@ -833,22 +880,27 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) { | |||
833 | break; | 880 | break; |
834 | case USBDESCR_HID: | 881 | case USBDESCR_HID: |
835 | switch (rq->wValue.bytes[0]) { | 882 | switch (rq->wValue.bytes[0]) { |
883 | #ifndef KEYBOARD_SHARED_EP | ||
836 | case KEYBOARD_INTERFACE: | 884 | case KEYBOARD_INTERFACE: |
837 | usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.keyboardHID; | 885 | usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.keyboardHID; |
838 | len = sizeof(usbHIDDescriptor_t); | 886 | len = sizeof(usbHIDDescriptor_t); |
839 | break; | 887 | break; |
888 | #endif | ||
889 | |||
840 | #if defined(RAW_ENABLE) | 890 | #if defined(RAW_ENABLE) |
841 | case RAW_INTERFACE: | 891 | case RAW_INTERFACE: |
842 | usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.rawHID; | 892 | usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.rawHID; |
843 | len = sizeof(usbHIDDescriptor_t); | 893 | len = sizeof(usbHIDDescriptor_t); |
844 | break; | 894 | break; |
845 | #endif | 895 | #endif |
846 | #if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE) | 896 | |
847 | case MOUSE_EXTRA_INTERFACE: | 897 | #ifdef SHARED_EP_ENABLE |
848 | usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.mouseExtraHID; | 898 | case SHARED_INTERFACE: |
899 | usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.sharedHID; | ||
849 | len = sizeof(usbHIDDescriptor_t); | 900 | len = sizeof(usbHIDDescriptor_t); |
850 | break; | 901 | break; |
851 | #endif | 902 | #endif |
903 | |||
852 | #if defined(CONSOLE_ENABLE) | 904 | #if defined(CONSOLE_ENABLE) |
853 | case CONSOLE_INTERFACE: | 905 | case CONSOLE_INTERFACE: |
854 | usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.consoleHID; | 906 | usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.consoleHID; |
@@ -860,22 +912,27 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) { | |||
860 | case USBDESCR_HID_REPORT: | 912 | case USBDESCR_HID_REPORT: |
861 | /* interface index */ | 913 | /* interface index */ |
862 | switch (rq->wIndex.word) { | 914 | switch (rq->wIndex.word) { |
915 | #ifndef KEYBOARD_SHARED_EP | ||
863 | case KEYBOARD_INTERFACE: | 916 | case KEYBOARD_INTERFACE: |
864 | usbMsgPtr = (usbMsgPtr_t)keyboard_hid_report; | 917 | usbMsgPtr = (usbMsgPtr_t)keyboard_hid_report; |
865 | len = sizeof(keyboard_hid_report); | 918 | len = sizeof(keyboard_hid_report); |
866 | break; | 919 | break; |
920 | #endif | ||
921 | |||
867 | #if defined(RAW_ENABLE) | 922 | #if defined(RAW_ENABLE) |
868 | case RAW_INTERFACE: | 923 | case RAW_INTERFACE: |
869 | usbMsgPtr = (usbMsgPtr_t)raw_hid_report; | 924 | usbMsgPtr = (usbMsgPtr_t)raw_hid_report; |
870 | len = sizeof(raw_hid_report); | 925 | len = sizeof(raw_hid_report); |
871 | break; | 926 | break; |
872 | #endif | 927 | #endif |
873 | #if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE) | 928 | |
874 | case MOUSE_EXTRA_INTERFACE: | 929 | #ifdef SHARED_EP_ENABLE |
875 | usbMsgPtr = (usbMsgPtr_t)mouse_extra_hid_report; | 930 | case SHARED_INTERFACE: |
876 | len = sizeof(mouse_extra_hid_report); | 931 | usbMsgPtr = (usbMsgPtr_t)shared_hid_report; |
932 | len = sizeof(shared_hid_report); | ||
877 | break; | 933 | break; |
878 | #endif | 934 | #endif |
935 | |||
879 | #if defined(CONSOLE_ENABLE) | 936 | #if defined(CONSOLE_ENABLE) |
880 | case CONSOLE_INTERFACE: | 937 | case CONSOLE_INTERFACE: |
881 | usbMsgPtr = (usbMsgPtr_t)console_hid_report; | 938 | usbMsgPtr = (usbMsgPtr_t)console_hid_report; |
diff --git a/tmk_core/protocol/vusb/vusb.h b/tmk_core/protocol/vusb/vusb.h index 828960fc3..b4c73aaba 100644 --- a/tmk_core/protocol/vusb/vusb.h +++ b/tmk_core/protocol/vusb/vusb.h | |||
@@ -85,9 +85,16 @@ typedef struct usbHIDDescriptor { | |||
85 | 85 | ||
86 | typedef struct usbConfigurationDescriptor { | 86 | typedef struct usbConfigurationDescriptor { |
87 | usbConfigurationDescriptorHeader_t header; | 87 | usbConfigurationDescriptorHeader_t header; |
88 | usbInterfaceDescriptor_t keyboardInterface; | 88 | |
89 | usbHIDDescriptor_t keyboardHID; | 89 | #ifndef KEYBOARD_SHARED_EP |
90 | usbEndpointDescriptor_t keyboardINEndpoint; | 90 | usbInterfaceDescriptor_t keyboardInterface; |
91 | usbHIDDescriptor_t keyboardHID; | ||
92 | usbEndpointDescriptor_t keyboardINEndpoint; | ||
93 | #else | ||
94 | usbInterfaceDescriptor_t sharedInterface; | ||
95 | usbHIDDescriptor_t sharedHID; | ||
96 | usbEndpointDescriptor_t sharedINEndpoint; | ||
97 | #endif | ||
91 | 98 | ||
92 | #if defined(RAW_ENABLE) | 99 | #if defined(RAW_ENABLE) |
93 | usbInterfaceDescriptor_t rawInterface; | 100 | usbInterfaceDescriptor_t rawInterface; |
@@ -96,10 +103,10 @@ typedef struct usbConfigurationDescriptor { | |||
96 | usbEndpointDescriptor_t rawOUTEndpoint; | 103 | usbEndpointDescriptor_t rawOUTEndpoint; |
97 | #endif | 104 | #endif |
98 | 105 | ||
99 | #if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE) | 106 | #if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP) |
100 | usbInterfaceDescriptor_t mouseExtraInterface; | 107 | usbInterfaceDescriptor_t sharedInterface; |
101 | usbHIDDescriptor_t mouseExtraHID; | 108 | usbHIDDescriptor_t sharedHID; |
102 | usbEndpointDescriptor_t mouseExtraINEndpoint; | 109 | usbEndpointDescriptor_t sharedINEndpoint; |
103 | #endif | 110 | #endif |
104 | 111 | ||
105 | #if defined(CONSOLE_ENABLE) | 112 | #if defined(CONSOLE_ENABLE) |