usb_endpoints.c (6219B)
1 // Copyright 2023 Stefan Kerkmann (@KarlK90) 2 // SPDX-License-Identifier: GPL-3.0-or-later 3 4 #include <ch.h> 5 #include <hal.h> 6 7 #include "usb_main.h" 8 #include "usb_driver.h" 9 #include "usb_endpoints.h" 10 #include "report.h" 11 12 usb_endpoint_in_t usb_endpoints_in[USB_ENDPOINT_IN_COUNT] = { 13 // clang-format off 14 #if defined(SHARED_EP_ENABLE) 15 [USB_ENDPOINT_IN_SHARED] = QMK_USB_ENDPOINT_IN(USB_EP_MODE_TYPE_INTR, SHARED_EPSIZE, SHARED_IN_EPNUM, SHARED_IN_CAPACITY, NULL, 16 QMK_USB_REPORT_STORAGE( 17 &usb_shared_get_report, 18 &usb_shared_set_report, 19 &usb_shared_reset_report, 20 &usb_shared_get_idle_rate, 21 &usb_shared_set_idle_rate, 22 &usb_shared_idle_timer_elapsed, 23 (REPORT_ID_COUNT + 1), 24 #if defined(KEYBOARD_SHARED_EP) 25 QMK_USB_REPORT_STROAGE_ENTRY(REPORT_ID_KEYBOARD, sizeof(report_keyboard_t)), 26 #endif 27 #if defined(MOUSE_SHARED_EP) 28 QMK_USB_REPORT_STROAGE_ENTRY(REPORT_ID_MOUSE, sizeof(report_mouse_t)), 29 #endif 30 #if defined(EXTRAKEY_ENABLE) 31 QMK_USB_REPORT_STROAGE_ENTRY(REPORT_ID_SYSTEM, sizeof(report_extra_t)), 32 QMK_USB_REPORT_STROAGE_ENTRY(REPORT_ID_CONSUMER, sizeof(report_extra_t)), 33 #endif 34 #if defined(PROGRAMMABLE_BUTTON_ENABLE) 35 QMK_USB_REPORT_STROAGE_ENTRY(REPORT_ID_PROGRAMMABLE_BUTTON, sizeof(report_programmable_button_t)), 36 #endif 37 #if defined(NKRO_ENABLE) 38 QMK_USB_REPORT_STROAGE_ENTRY(REPORT_ID_NKRO, sizeof(report_nkro_t)), 39 #endif 40 #if defined(JOYSTICK_SHARED_EP) 41 QMK_USB_REPORT_STROAGE_ENTRY(REPORT_ID_JOYSTICK, sizeof(report_joystick_t)), 42 #endif 43 #if defined(DIGITIZER_SHARED_EP) 44 QMK_USB_REPORT_STROAGE_ENTRY(REPORT_ID_DIGITIZER, sizeof(report_digitizer_t)), 45 #endif 46 ) 47 ), 48 #endif 49 // clang-format on 50 51 #if !defined(KEYBOARD_SHARED_EP) 52 [USB_ENDPOINT_IN_KEYBOARD] = QMK_USB_ENDPOINT_IN(USB_EP_MODE_TYPE_INTR, KEYBOARD_EPSIZE, KEYBOARD_IN_EPNUM, KEYBOARD_IN_CAPACITY, NULL, QMK_USB_REPORT_STORAGE_DEFAULT(sizeof(report_keyboard_t))), 53 #endif 54 55 #if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) 56 [USB_ENDPOINT_IN_MOUSE] = QMK_USB_ENDPOINT_IN(USB_EP_MODE_TYPE_INTR, MOUSE_EPSIZE, MOUSE_IN_EPNUM, MOUSE_IN_CAPACITY, NULL, QMK_USB_REPORT_STORAGE_DEFAULT(sizeof(report_mouse_t))), 57 #endif 58 59 #if defined(JOYSTICK_ENABLE) && !defined(JOYSTICK_SHARED_EP) 60 [USB_ENDPOINT_IN_JOYSTICK] = QMK_USB_ENDPOINT_IN(USB_EP_MODE_TYPE_INTR, JOYSTICK_EPSIZE, JOYSTICK_IN_EPNUM, JOYSTICK_IN_CAPACITY, NULL, QMK_USB_REPORT_STORAGE_DEFAULT(sizeof(report_joystick_t))), 61 #endif 62 63 #if defined(DIGITIZER_ENABLE) && !defined(DIGITIZER_SHARED_EP) 64 [USB_ENDPOINT_IN_DIGITIZER] = QMK_USB_ENDPOINT_IN(USB_EP_MODE_TYPE_INTR, DIGITIZER_EPSIZE, DIGITIZER_IN_EPNUM, DIGITIZER_IN_CAPACITY, NULL, QMK_USB_REPORT_STORAGE_DEFAULT(sizeof(report_digitizer_t))), 65 #endif 66 67 #if defined(CONSOLE_ENABLE) 68 # if defined(USB_ENDPOINTS_ARE_REORDERABLE) 69 [USB_ENDPOINT_IN_CONSOLE] = QMK_USB_ENDPOINT_IN_SHARED(USB_EP_MODE_TYPE_INTR, CONSOLE_EPSIZE, CONSOLE_IN_EPNUM, CONSOLE_IN_CAPACITY, NULL, QMK_USB_REPORT_STORAGE_DEFAULT(CONSOLE_EPSIZE)), 70 # else 71 [USB_ENDPOINT_IN_CONSOLE] = QMK_USB_ENDPOINT_IN(USB_EP_MODE_TYPE_INTR, CONSOLE_EPSIZE, CONSOLE_IN_EPNUM, CONSOLE_IN_CAPACITY, NULL, QMK_USB_REPORT_STORAGE_DEFAULT(CONSOLE_EPSIZE)), 72 # endif 73 #endif 74 75 #if defined(RAW_ENABLE) 76 # if defined(USB_ENDPOINTS_ARE_REORDERABLE) 77 [USB_ENDPOINT_IN_RAW] = QMK_USB_ENDPOINT_IN_SHARED(USB_EP_MODE_TYPE_INTR, RAW_EPSIZE, RAW_IN_EPNUM, RAW_IN_CAPACITY, NULL, QMK_USB_REPORT_STORAGE_DEFAULT(RAW_EPSIZE)), 78 # else 79 [USB_ENDPOINT_IN_RAW] = QMK_USB_ENDPOINT_IN(USB_EP_MODE_TYPE_INTR, RAW_EPSIZE, RAW_IN_EPNUM, RAW_IN_CAPACITY, NULL, QMK_USB_REPORT_STORAGE_DEFAULT(RAW_EPSIZE)), 80 # endif 81 #endif 82 83 #if defined(MIDI_ENABLE) 84 # if defined(USB_ENDPOINTS_ARE_REORDERABLE) 85 [USB_ENDPOINT_IN_MIDI] = QMK_USB_ENDPOINT_IN_SHARED(USB_EP_MODE_TYPE_BULK, MIDI_STREAM_EPSIZE, MIDI_STREAM_IN_EPNUM, MIDI_STREAM_IN_CAPACITY, NULL, NULL), 86 # else 87 [USB_ENDPOINT_IN_MIDI] = QMK_USB_ENDPOINT_IN(USB_EP_MODE_TYPE_BULK, MIDI_STREAM_EPSIZE, MIDI_STREAM_IN_EPNUM, MIDI_STREAM_IN_CAPACITY, NULL, NULL), 88 # endif 89 #endif 90 91 #if defined(VIRTSER_ENABLE) 92 # if defined(USB_ENDPOINTS_ARE_REORDERABLE) 93 [USB_ENDPOINT_IN_CDC_DATA] = QMK_USB_ENDPOINT_IN_SHARED(USB_EP_MODE_TYPE_BULK, CDC_EPSIZE, CDC_IN_EPNUM, CDC_IN_CAPACITY, virtser_usb_request_cb, NULL), 94 # else 95 [USB_ENDPOINT_IN_CDC_DATA] = QMK_USB_ENDPOINT_IN(USB_EP_MODE_TYPE_BULK, CDC_EPSIZE, CDC_IN_EPNUM, CDC_IN_CAPACITY, virtser_usb_request_cb, NULL), 96 # endif 97 [USB_ENDPOINT_IN_CDC_SIGNALING] = QMK_USB_ENDPOINT_IN(USB_EP_MODE_TYPE_INTR, CDC_NOTIFICATION_EPSIZE, CDC_NOTIFICATION_EPNUM, CDC_SIGNALING_DUMMY_CAPACITY, NULL, NULL), 98 #endif 99 }; 100 101 usb_endpoint_in_lut_t usb_endpoint_interface_lut[TOTAL_INTERFACES] = { 102 #if !defined(KEYBOARD_SHARED_EP) 103 [KEYBOARD_INTERFACE] = USB_ENDPOINT_IN_KEYBOARD, 104 #endif 105 106 #if defined(RAW_ENABLE) 107 [RAW_INTERFACE] = USB_ENDPOINT_IN_RAW, 108 #endif 109 110 #if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) 111 [MOUSE_INTERFACE] = USB_ENDPOINT_IN_MOUSE, 112 #endif 113 114 #if defined(SHARED_EP_ENABLE) 115 [SHARED_INTERFACE] = USB_ENDPOINT_IN_SHARED, 116 #endif 117 118 #if defined(CONSOLE_ENABLE) 119 [CONSOLE_INTERFACE] = USB_ENDPOINT_IN_CONSOLE, 120 #endif 121 122 #if defined(MIDI_ENABLE) 123 [AS_INTERFACE] = USB_ENDPOINT_IN_MIDI, 124 #endif 125 126 #if defined(VIRTSER_ENABLE) 127 [CCI_INTERFACE] = USB_ENDPOINT_IN_CDC_SIGNALING, 128 [CDI_INTERFACE] = USB_ENDPOINT_IN_CDC_DATA, 129 #endif 130 131 #if defined(JOYSTICK_ENABLE) && !defined(JOYSTICK_SHARED_EP) 132 [JOYSTICK_INTERFACE] = USB_ENDPOINT_IN_JOYSTICK, 133 #endif 134 135 #if defined(DIGITIZER_ENABLE) && !defined(DIGITIZER_SHARED_EP) 136 [DIGITIZER_INTERFACE] = USB_ENDPOINT_IN_DIGITIZER, 137 #endif 138 }; 139 140 usb_endpoint_out_t usb_endpoints_out[USB_ENDPOINT_OUT_COUNT] = { 141 #if defined(RAW_ENABLE) 142 [USB_ENDPOINT_OUT_RAW] = QMK_USB_ENDPOINT_OUT(USB_EP_MODE_TYPE_INTR, RAW_EPSIZE, RAW_OUT_EPNUM, RAW_OUT_CAPACITY), 143 #endif 144 145 #if defined(MIDI_ENABLE) 146 [USB_ENDPOINT_OUT_MIDI] = QMK_USB_ENDPOINT_OUT(USB_EP_MODE_TYPE_BULK, MIDI_STREAM_EPSIZE, MIDI_STREAM_OUT_EPNUM, MIDI_STREAM_OUT_CAPACITY), 147 #endif 148 149 #if defined(VIRTSER_ENABLE) 150 [USB_ENDPOINT_OUT_CDC_DATA] = QMK_USB_ENDPOINT_OUT(USB_EP_MODE_TYPE_BULK, CDC_EPSIZE, CDC_OUT_EPNUM, CDC_OUT_CAPACITY), 151 #endif 152 };