~ruther/qmk_firmware

63dd131d812be4b8d4894fc20ca9968e25996b07 — Joel Challis 1 year, 2 months ago 4bbfeca
Refactor vusb to protocol use pre/post task (#14944)

M quantum/main.c => quantum/main.c +18 -17
@@ 25,22 25,9 @@ void protocol_pre_task(void);
void protocol_post_task(void);

// Bodge as refactoring this area sucks....
void protocol_init(void) __attribute__((weak));
void protocol_init(void) {
    protocol_pre_init();

    keyboard_init();

    protocol_post_init();
}

void protocol_task(void) __attribute__((weak));
void protocol_task(void) {
    protocol_pre_task();

void protocol_keyboard_task(void) __attribute__((weak));
void protocol_keyboard_task(void) {
    keyboard_task();

    protocol_post_task();
}

/** \brief Main


@@ 53,11 40,25 @@ int main(void) {
    protocol_setup();
    keyboard_setup();

    protocol_init();
    protocol_pre_init();
    keyboard_init();
    protocol_post_init();

    /* Main loop */
    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
        // Run Quantum Painter task

M tmk_core/protocol/chibios/chibios.c => tmk_core/protocol/chibios/chibios.c +0 -13
@@ 70,13 70,6 @@ host_driver_t chibios_driver = {keyboard_leds, send_keyboard, send_nkro, send_mo
void virtser_task(void);
#endif

#ifdef RAW_ENABLE
void raw_hid_task(void);
#endif

#ifdef CONSOLE_ENABLE
void console_task(void);
#endif
#ifdef MIDI_ENABLE
void midi_ep_task(void);
#endif


@@ 209,17 202,11 @@ void protocol_pre_task(void) {
}

void protocol_post_task(void) {
#ifdef CONSOLE_ENABLE
    console_task();
#endif
#ifdef MIDI_ENABLE
    midi_ep_task();
#endif
#ifdef VIRTSER_ENABLE
    virtser_task();
#endif
#ifdef RAW_ENABLE
    raw_hid_task();
#endif
    usb_idle_task();
}

M tmk_core/protocol/lufa/lufa.c => tmk_core/protocol/lufa/lufa.c +1 -5
@@ 151,7 151,7 @@ __attribute__((weak)) void raw_hid_receive(uint8_t *data, uint8_t length) {
 *
 * 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
    uint8_t data[RAW_EPSIZE];
    bool    data_read = false;


@@ 865,10 865,6 @@ void protocol_post_task(void) {
    CDC_Device_USBTask(&cdc_device);
#endif

#ifdef RAW_ENABLE
    raw_hid_task();
#endif

#if !defined(INTERRUPT_CONTROL_ENDPOINT)
    USB_USBTask();
#endif

M tmk_core/protocol/vusb/protocol.c => tmk_core/protocol/vusb/protocol.c +6 -24
@@ 31,14 31,6 @@
#    include "sleep_led.h"
#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 */
static void initForUsbConnectivity(void) {
    uint8_t i = 0;


@@ 136,7 128,7 @@ static inline bool should_do_suspend(void) {
    return vusb_suspended;
}

void protocol_task(void) {
void protocol_pre_task(void) {
#if !defined(NO_USB_STARTUP_CHECK)
    if (should_do_suspend()) {
        dprintln("suspending keyboard");


@@ 159,7 151,9 @@ void protocol_task(void) {
        vusb_wakeup();
    }
#endif
}

void protocol_keyboard_task(void) {
    usbPoll();

    // TODO: configuration process is inconsistent. it sometime fails.


@@ 167,20 161,8 @@ void protocol_task(void) {
    if (usbConfiguration && usbInterruptIsReady()) {
        keyboard_task();
    }
}

#ifdef RAW_ENABLE
    usbPoll();

    if (usbConfiguration && usbInterruptIsReady4()) {
        raw_hid_task();
    }
#endif

#ifdef CONSOLE_ENABLE
    usbPoll();

    if (usbConfiguration && usbInterruptIsReady3()) {
        console_task();
    }
#endif
void protocol_post_task(void) {
    // do nothing
}

M tmk_core/protocol/vusb/vusb.c => tmk_core/protocol/vusb/vusb.c +9 -1
@@ 162,6 162,12 @@ __attribute__((weak)) void raw_hid_receive(uint8_t *data, uint8_t length) {
}

void raw_hid_task(void) {
    usbPoll();

    if (!usbConfiguration || !usbInterruptIsReady4()) {
        return;
    }

    if (raw_output_received_bytes == RAW_BUFFER_SIZE) {
        raw_hid_receive(raw_output_buffer, RAW_BUFFER_SIZE);
        raw_output_received_bytes = 0;


@@ 182,7 188,9 @@ int8_t sendchar(uint8_t c) {
}

void console_task(void) {
    if (!usbConfiguration) {
    usbPoll();

    if (!usbConfiguration || !usbInterruptIsReady3()) {
        return;
    }


Do not follow this link