Selaa lähdekoodia

Merge remote-tracking branch 'origin/develop' into xap

QMK Bot 2 vuotta sitten
vanhempi
sitoutus
b4e6f454b6
1 muutettua tiedostoa jossa 38 lisäystä ja 24 poistoa
  1. 38 24
      tmk_core/protocol/vusb/vusb.c

+ 38 - 24
tmk_core/protocol/vusb/vusb.c

@@ -413,30 +413,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:");