diff options
Diffstat (limited to 'tmk_core/protocol')
| -rw-r--r-- | tmk_core/protocol/vusb/vusb.c | 62 | 
1 files changed, 38 insertions, 24 deletions
| diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index d2c7749937..d7d2227687 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c @@ -325,30 +325,44 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) {      usbRequest_t *rq = (void *)data;      if ((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS) { /* class request type */ -        if (rq->bRequest == USBRQ_HID_GET_REPORT) { -            dprint("GET_REPORT:"); -            if (rq->wIndex.word == KEYBOARD_INTERFACE) { -                usbMsgPtr = (usbMsgPtr_t)&keyboard_report_sent; -                return sizeof(keyboard_report_sent); -            } -        } else if (rq->bRequest == USBRQ_HID_GET_IDLE) { -            dprint("GET_IDLE:"); -            usbMsgPtr = (usbMsgPtr_t)&vusb_idle_rate; -            return 1; -        } else if (rq->bRequest == USBRQ_HID_SET_IDLE) { -            vusb_idle_rate = rq->wValue.bytes[1]; -            dprintf("SET_IDLE: %02X", vusb_idle_rate); -        } else if (rq->bRequest == USBRQ_HID_SET_REPORT) { -            dprint("SET_REPORT:"); -            // Report Type: 0x02(Out)/ReportID: 0x00(none) && Interface: 0(keyboard) -            if (rq->wValue.word == 0x0200 && rq->wIndex.word == KEYBOARD_INTERFACE) { -                dprint("SET_LED:"); -                last_req.kind = SET_LED; -                last_req.len  = rq->wLength.word; -            } -            return USB_NO_MSG; // to get data in usbFunctionWrite -        } else { -            dprint("UNKNOWN:"); +        switch (rq->bRequest) { +            case USBRQ_HID_GET_REPORT: +                dprint("GET_REPORT:"); +                if (rq->wIndex.word == KEYBOARD_INTERFACE) { +                    usbMsgPtr = (usbMsgPtr_t)&keyboard_report_sent; +                    return sizeof(keyboard_report_sent); +                } +                break; +            case USBRQ_HID_GET_IDLE: +                dprint("GET_IDLE:"); +                usbMsgPtr = (usbMsgPtr_t)&vusb_idle_rate; +                return 1; +            case USBRQ_HID_GET_PROTOCOL: +                dprint("GET_PROTOCOL:"); +                usbMsgPtr = (usbMsgPtr_t)&keyboard_protocol; +                return 1; +            case USBRQ_HID_SET_REPORT: +                dprint("SET_REPORT:"); +                // Report Type: 0x02(Out)/ReportID: 0x00(none) && Interface: 0(keyboard) +                if (rq->wValue.word == 0x0200 && rq->wIndex.word == KEYBOARD_INTERFACE) { +                    dprint("SET_LED:"); +                    last_req.kind = SET_LED; +                    last_req.len  = rq->wLength.word; +                } +                return USB_NO_MSG; // to get data in usbFunctionWrite +            case USBRQ_HID_SET_IDLE: +                vusb_idle_rate = rq->wValue.bytes[1]; +                dprintf("SET_IDLE: %02X", vusb_idle_rate); +                break; +            case USBRQ_HID_SET_PROTOCOL: +                if (rq->wIndex.word == KEYBOARD_INTERFACE) { +                    keyboard_protocol = rq->wValue.word & 0xFF; +                    dprintf("SET_PROTOCOL: %02X", keyboard_protocol); +                } +                break; +            default: +                dprint("UNKNOWN:"); +                break;          }      } else {          dprint("VENDOR:"); | 
