aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan <[email protected]>2023-10-27 11:21:13 +1000
committerGitHub <[email protected]>2023-10-27 12:21:13 +1100
commitdb4e3bb232af27ef79ad0f5a4b17c828f283334a (patch)
treea5a8851899cd08cff54e459420a9154f114f0daf
parentc5716f84ada7f142c99cb89f685b06a0c9d8601b (diff)
downloadqmk_firmware-db4e3bb232af27ef79ad0f5a4b17c828f283334a.tar.gz
qmk_firmware-db4e3bb232af27ef79ad0f5a4b17c828f283334a.zip
V-USB: Fix `GET_IDLE/SET_IDLE` (#22332)
Co-authored-by: Sergey Vlasov <[email protected]>
-rw-r--r--quantum/command.c5
-rw-r--r--tmk_core/protocol/vusb/vusb.c28
2 files changed, 12 insertions, 21 deletions
diff --git a/quantum/command.c b/quantum/command.c
index aa64b75064..c188638eb4 100644
--- a/quantum/command.c
+++ b/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
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c
index d7d2227687..3502d9e644 100644
--- a/tmk_core/protocol/vusb/vusb.c
+++ b/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;