usb_endpoints.c 7.0 KB

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