1
0
Fork 0
forked from forks/qmk_firmware

Refactor vusb to protocol use pre/post task (#14944)

This commit is contained in:
Joel Challis 2024-03-14 10:45:12 +00:00 committed by GitHub
parent 4bbfecae90
commit 63dd131d81
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 35 additions and 61 deletions

View file

@ -25,22 +25,9 @@ void protocol_pre_task(void);
void protocol_post_task(void); void protocol_post_task(void);
// Bodge as refactoring this area sucks.... // Bodge as refactoring this area sucks....
void protocol_init(void) __attribute__((weak)); void protocol_keyboard_task(void) __attribute__((weak));
void protocol_init(void) { void protocol_keyboard_task(void) {
protocol_pre_init();
keyboard_init();
protocol_post_init();
}
void protocol_task(void) __attribute__((weak));
void protocol_task(void) {
protocol_pre_task();
keyboard_task(); keyboard_task();
protocol_post_task();
} }
/** \brief Main /** \brief Main
@ -53,11 +40,25 @@ int main(void) {
protocol_setup(); protocol_setup();
keyboard_setup(); keyboard_setup();
protocol_init(); protocol_pre_init();
keyboard_init();
protocol_post_init();
/* Main loop */ /* Main loop */
while (true) { while (true) {
protocol_task(); protocol_pre_task();
protocol_keyboard_task();
protocol_post_task();
#ifdef RAW_ENABLE
void raw_hid_task(void);
raw_hid_task();
#endif
#ifdef CONSOLE_ENABLE
void console_task(void);
console_task();
#endif
#ifdef QUANTUM_PAINTER_ENABLE #ifdef QUANTUM_PAINTER_ENABLE
// Run Quantum Painter task // Run Quantum Painter task

View file

@ -70,13 +70,6 @@ host_driver_t chibios_driver = {keyboard_leds, send_keyboard, send_nkro, send_mo
void virtser_task(void); void virtser_task(void);
#endif #endif
#ifdef RAW_ENABLE
void raw_hid_task(void);
#endif
#ifdef CONSOLE_ENABLE
void console_task(void);
#endif
#ifdef MIDI_ENABLE #ifdef MIDI_ENABLE
void midi_ep_task(void); void midi_ep_task(void);
#endif #endif
@ -209,17 +202,11 @@ void protocol_pre_task(void) {
} }
void protocol_post_task(void) { void protocol_post_task(void) {
#ifdef CONSOLE_ENABLE
console_task();
#endif
#ifdef MIDI_ENABLE #ifdef MIDI_ENABLE
midi_ep_task(); midi_ep_task();
#endif #endif
#ifdef VIRTSER_ENABLE #ifdef VIRTSER_ENABLE
virtser_task(); virtser_task();
#endif
#ifdef RAW_ENABLE
raw_hid_task();
#endif #endif
usb_idle_task(); usb_idle_task();
} }

View file

@ -151,7 +151,7 @@ __attribute__((weak)) void raw_hid_receive(uint8_t *data, uint8_t length) {
* *
* FIXME: Needs doc * FIXME: Needs doc
*/ */
static void raw_hid_task(void) { void raw_hid_task(void) {
// Create a temporary buffer to hold the read in data from the host // Create a temporary buffer to hold the read in data from the host
uint8_t data[RAW_EPSIZE]; uint8_t data[RAW_EPSIZE];
bool data_read = false; bool data_read = false;
@ -865,10 +865,6 @@ void protocol_post_task(void) {
CDC_Device_USBTask(&cdc_device); CDC_Device_USBTask(&cdc_device);
#endif #endif
#ifdef RAW_ENABLE
raw_hid_task();
#endif
#if !defined(INTERRUPT_CONTROL_ENDPOINT) #if !defined(INTERRUPT_CONTROL_ENDPOINT)
USB_USBTask(); USB_USBTask();
#endif #endif

View file

@ -31,14 +31,6 @@
# include "sleep_led.h" # include "sleep_led.h"
#endif #endif
#ifdef CONSOLE_ENABLE
void console_task(void);
#endif
#ifdef RAW_ENABLE
void raw_hid_task(void);
#endif
/* This is from main.c of USBaspLoader */ /* This is from main.c of USBaspLoader */
static void initForUsbConnectivity(void) { static void initForUsbConnectivity(void) {
uint8_t i = 0; uint8_t i = 0;
@ -136,7 +128,7 @@ static inline bool should_do_suspend(void) {
return vusb_suspended; return vusb_suspended;
} }
void protocol_task(void) { void protocol_pre_task(void) {
#if !defined(NO_USB_STARTUP_CHECK) #if !defined(NO_USB_STARTUP_CHECK)
if (should_do_suspend()) { if (should_do_suspend()) {
dprintln("suspending keyboard"); dprintln("suspending keyboard");
@ -159,7 +151,9 @@ void protocol_task(void) {
vusb_wakeup(); vusb_wakeup();
} }
#endif #endif
}
void protocol_keyboard_task(void) {
usbPoll(); usbPoll();
// TODO: configuration process is inconsistent. it sometime fails. // TODO: configuration process is inconsistent. it sometime fails.
@ -167,20 +161,8 @@ void protocol_task(void) {
if (usbConfiguration && usbInterruptIsReady()) { if (usbConfiguration && usbInterruptIsReady()) {
keyboard_task(); keyboard_task();
} }
}
#ifdef RAW_ENABLE
usbPoll(); void protocol_post_task(void) {
// do nothing
if (usbConfiguration && usbInterruptIsReady4()) {
raw_hid_task();
}
#endif
#ifdef CONSOLE_ENABLE
usbPoll();
if (usbConfiguration && usbInterruptIsReady3()) {
console_task();
}
#endif
} }

View file

@ -162,6 +162,12 @@ __attribute__((weak)) void raw_hid_receive(uint8_t *data, uint8_t length) {
} }
void raw_hid_task(void) { void raw_hid_task(void) {
usbPoll();
if (!usbConfiguration || !usbInterruptIsReady4()) {
return;
}
if (raw_output_received_bytes == RAW_BUFFER_SIZE) { if (raw_output_received_bytes == RAW_BUFFER_SIZE) {
raw_hid_receive(raw_output_buffer, RAW_BUFFER_SIZE); raw_hid_receive(raw_output_buffer, RAW_BUFFER_SIZE);
raw_output_received_bytes = 0; raw_output_received_bytes = 0;
@ -182,7 +188,9 @@ int8_t sendchar(uint8_t c) {
} }
void console_task(void) { void console_task(void) {
if (!usbConfiguration) { usbPoll();
if (!usbConfiguration || !usbInterruptIsReady3()) {
return; return;
} }