~ruther/qmk_firmware

1d4287cb9535a8ba7ab5d2aa0846167f34fc5b67 — Joel Challis 5 years ago 60e4921
Fix chibios when mouse and nkro disabled (#7312)

1 files changed, 6 insertions(+), 16 deletions(-)

M tmk_core/protocol/chibios/usb_main.c
M tmk_core/protocol/chibios/usb_main.c => tmk_core/protocol/chibios/usb_main.c +6 -16
@@ 379,7 379,6 @@ static void    set_led_transfer_cb(USBDriver *usbp) {
/* Callback for SETUP request on the endpoint 0 (control) */
static bool usb_request_hook_cb(USBDriver *usbp) {
    const USBDescriptor *dp;
    int                  has_report_id;

    /* usbp->setup fields:
     *  0:   bmRequestType (bitmask)


@@ 432,26 431,17 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
                switch (usbp->setup[1]) { /* bRequest */
                    case HID_SET_REPORT:
                        switch (usbp->setup[4]) { /* LSB(wIndex) (check MSB==0 and wLength==1?) */
                            case KEYBOARD_INTERFACE:
#if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP)
                            case SHARED_INTERFACE:
                                usbSetupTransfer(usbp, set_report_buf, sizeof(set_report_buf), set_led_transfer_cb);
                                return TRUE;
                                break;
#endif

                            case KEYBOARD_INTERFACE:
                                /* keyboard_led_stats = <read byte from next OUT report>
                                 * keyboard_led_stats needs be word (or dword), otherwise we get an exception on F0 */
                                has_report_id = 0;
#if defined(SHARED_EP_ENABLE)
                                if (usbp->setup[4] == SHARED_INTERFACE) {
                                    has_report_id = 1;
                                }
#endif
                                if (usbp->setup[4] == KEYBOARD_INTERFACE && !keyboard_protocol) {
                                    has_report_id = 0;
                                }
                                if (has_report_id) {
                                    usbSetupTransfer(usbp, set_report_buf, sizeof(set_report_buf), set_led_transfer_cb);
                                } else {
                                    usbSetupTransfer(usbp, (uint8_t *)&keyboard_led_stats, 1, NULL);
                                }
                                usbSetupTransfer(usbp, (uint8_t *)&keyboard_led_stats, 1, NULL);
                                return TRUE;
                                break;
                        }