mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-11-25 01:47:10 +06:00
Refactor vusb to protocol use pre/post task (#14944)
This commit is contained in:
parent
4bbfecae90
commit
63dd131d81
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user