qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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 };