Browse Source

V-USB: Fix `GET_IDLE/SET_IDLE` (#22332)

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Ryan 2 years ago
parent
commit
db4e3bb232
2 changed files with 12 additions and 21 deletions
  1. 0 5
      quantum/command.c
  2. 12 16
      tmk_core/protocol/vusb/vusb.c

+ 0 - 5
quantum/command.c

@@ -222,21 +222,16 @@ static void print_status(void) {
         "\n\t- Status -\n"
 
         "host_keyboard_leds(): %02X\n"
-#ifndef PROTOCOL_VUSB
         "keyboard_protocol: %02X\n"
         "keyboard_idle: %02X\n"
-#endif
 #ifdef NKRO_ENABLE
         "keymap_config.nkro: %02X\n"
 #endif
         "timer_read32(): %08lX\n"
 
         , host_keyboard_leds()
-#ifndef PROTOCOL_VUSB
-        /* these aren't set on the V-USB protocol, so we just ignore them for now */
         , keyboard_protocol
         , keyboard_idle
-#endif
 #ifdef NKRO_ENABLE
         , keymap_config.nkro
 #endif

+ 12 - 16
tmk_core/protocol/vusb/vusb.c

@@ -48,16 +48,14 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #    include "os_detection.h"
 #endif
 
-#define NEXT_INTERFACE __COUNTER__
-
 /*
  * Interface indexes
  */
 enum usb_interfaces {
 #ifndef KEYBOARD_SHARED_EP
-    KEYBOARD_INTERFACE = NEXT_INTERFACE,
+    KEYBOARD_INTERFACE,
 #else
-    SHARED_INTERFACE = NEXT_INTERFACE,
+    SHARED_INTERFACE,
 #    define KEYBOARD_INTERFACE SHARED_INTERFACE
 #endif
 
@@ -65,32 +63,30 @@ enum usb_interfaces {
 // interface number, to support Linux/OSX platforms and chrome.hid
 // If Raw HID is enabled, let it be always 1.
 #ifdef RAW_ENABLE
-    RAW_INTERFACE = NEXT_INTERFACE,
+    RAW_INTERFACE,
 #endif
 
 #if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP)
-    SHARED_INTERFACE = NEXT_INTERFACE,
+    SHARED_INTERFACE,
 #endif
 
 #ifdef CONSOLE_ENABLE
-    CONSOLE_INTERFACE = NEXT_INTERFACE,
+    CONSOLE_INTERFACE,
 #endif
 
-    TOTAL_INTERFACES = NEXT_INTERFACE
+    TOTAL_INTERFACES
 };
 
 #define MAX_INTERFACES 3
 
-#if (NEXT_INTERFACE - 1) > MAX_INTERFACES
-#    error There are not enough available interfaces to support all functions. Please disable one or more of the following: Mouse Keys, Extra Keys, Raw HID, Console
-#endif
+_Static_assert(TOTAL_INTERFACES <= MAX_INTERFACES, "There are not enough available interfaces to support all functions. Please disable one or more of the following: Mouse Keys, Extra Keys, Raw HID, Console.");
 
 #if (defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)) && CONSOLE_ENABLE
 #    error Mouse/Extra Keys share an endpoint with Console. Please disable one of the two.
 #endif
 
 static uint8_t keyboard_led_state = 0;
-static uint8_t vusb_idle_rate     = 0;
+uint8_t        keyboard_idle      = 0;
 uint8_t        keyboard_protocol  = 1;
 
 /* Keyboard report send buffer */
@@ -335,7 +331,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) {
                 break;
             case USBRQ_HID_GET_IDLE:
                 dprint("GET_IDLE:");
-                usbMsgPtr = (usbMsgPtr_t)&vusb_idle_rate;
+                usbMsgPtr = (usbMsgPtr_t)&keyboard_idle;
                 return 1;
             case USBRQ_HID_GET_PROTOCOL:
                 dprint("GET_PROTOCOL:");
@@ -351,8 +347,8 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) {
                 }
                 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);
+                keyboard_idle = (rq->wValue.word & 0xFF00) >> 8;
+                dprintf("SET_IDLE: %02X", keyboard_idle);
                 break;
             case USBRQ_HID_SET_PROTOCOL:
                 if (rq->wIndex.word == KEYBOARD_INTERFACE) {
@@ -1044,7 +1040,7 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) {
 #endif
             break;
         case USBDESCR_HID:
-            switch (rq->wValue.bytes[0]) {
+            switch (rq->wIndex.word) {
 #ifndef KEYBOARD_SHARED_EP
                 case KEYBOARD_INTERFACE:
                     usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.keyboardHID;