From d6cc57f0f1cb44f24f8ff66d8c768367bd3fe638 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 13 Oct 2021 18:41:31 -0400 Subject: [PATCH 1/7] add back some get_report code for responsiveness --- tmk_core/protocol/chibios/usb_main.c | 36 +++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index cc282e6a9b..71f112ce17 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -79,6 +79,9 @@ report_mouse_t mouse_report_blank = {0}; #ifdef EXTRAKEY_ENABLE uint8_t extra_report_blank[3] = {0}; #endif /* EXTRAKEY_ENABLE */ +#ifdef CONSOLE_ENABLE +uint8_t console_report_blank[32] = {0}; +#endif /* EXTRAKEY_ENABLE */ /* --------------------------------------------------------- * Descriptors and USB driver objects @@ -567,6 +570,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) { case HID_GET_REPORT: switch (usbp->setup[4]) { /* LSB(wIndex) (check MSB==0?) */ case KEYBOARD_INTERFACE: + usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, sizeof(keyboard_report_sent), NULL); return TRUE; break; @@ -577,7 +581,37 @@ static bool usb_request_hook_cb(USBDriver *usbp) { return TRUE; break; #endif - +#ifdef SHARED_EP_ENABLE + case SHARED_INTERFACE: + switch (usbp->setup[2]) { +#ifdef EXTRAKEY_ENABLE + case REPORT_ID_SYSTEM: + usbSetupTransfer(usbp, (uint8_t *)&extra_report_blank, sizeof(extra_report_blank), NULL); + return TRUE; + break; + case REPORT_ID_CONSUMER: + usbSetupTransfer(usbp, (uint8_t *)&extra_report_blank, sizeof(extra_report_blank), NULL); + return TRUE; + break; +#endif +#ifdef NKRO_ENABLE + case REPORT_ID_NKRO: + usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, sizeof(keyboard_report_sent), NULL); + return TRUE; + break; +#endif + default: + return FALSE; + break; + } + break; +#endif +#ifdef CONSOLE_ENABLE + case CONSOLE_INTERFACE: + usbSetupTransfer(usbp, (uint8_t *)&console_report_blank, sizeof(console_report_blank), NULL); + return TRUE; + break; +#endif default: usbSetupTransfer(usbp, NULL, 0, NULL); return TRUE; From 41ccca96b70b99c5a5e8f700d0cf708ddf54ef95 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 13 Oct 2021 20:26:15 -0400 Subject: [PATCH 2/7] add more cases for KEYBOARD_SHARED_EP --- tmk_core/protocol/chibios/usb_main.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 71f112ce17..002e7d23d4 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -569,12 +569,12 @@ static bool usb_request_hook_cb(USBDriver *usbp) { switch (usbp->setup[1]) { /* bRequest */ case HID_GET_REPORT: switch (usbp->setup[4]) { /* LSB(wIndex) (check MSB==0?) */ +#ifndef KEYBOARD_SHARED_EP case KEYBOARD_INTERFACE: - usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, sizeof(keyboard_report_sent), NULL); return TRUE; break; - +#endif #if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) case MOUSE_INTERFACE: usbSetupTransfer(usbp, (uint8_t *)&mouse_report_blank, sizeof(mouse_report_blank), NULL); @@ -594,8 +594,13 @@ static bool usb_request_hook_cb(USBDriver *usbp) { return TRUE; break; #endif +#if defined(KEYBOARD_SHARED_EP) || defined(NKRO_ENABLE) +#ifdef KEYBOARD_SHARED_EP + case REPORT_ID_KEYBOARD: +#endif #ifdef NKRO_ENABLE case REPORT_ID_NKRO: +#endif usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, sizeof(keyboard_report_sent), NULL); return TRUE; break; From eb4793b188c9cbb25c18b390227d968511817997 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 13 Oct 2021 20:40:04 -0400 Subject: [PATCH 3/7] lint ppd --- tmk_core/protocol/chibios/usb_main.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 002e7d23d4..63269db093 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -106,7 +106,7 @@ static const USBDescriptor *usb_get_descriptor_cb(USBDriver *usbp, uint8_t dtype static USBDescriptor desc; uint16_t wValue = ((uint16_t)dtype << 8) | dindex; desc.ud_string = NULL; - desc.ud_size = get_usb_descriptor(wValue, wIndex, (const void **const) & desc.ud_string); + desc.ud_size = get_usb_descriptor(wValue, wIndex, (const void **const)&desc.ud_string); if (desc.ud_string == NULL) return NULL; else @@ -584,7 +584,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) { #ifdef SHARED_EP_ENABLE case SHARED_INTERFACE: switch (usbp->setup[2]) { -#ifdef EXTRAKEY_ENABLE +# ifdef EXTRAKEY_ENABLE case REPORT_ID_SYSTEM: usbSetupTransfer(usbp, (uint8_t *)&extra_report_blank, sizeof(extra_report_blank), NULL); return TRUE; @@ -593,18 +593,18 @@ static bool usb_request_hook_cb(USBDriver *usbp) { usbSetupTransfer(usbp, (uint8_t *)&extra_report_blank, sizeof(extra_report_blank), NULL); return TRUE; break; -#endif -#if defined(KEYBOARD_SHARED_EP) || defined(NKRO_ENABLE) -#ifdef KEYBOARD_SHARED_EP +# endif +# if defined(KEYBOARD_SHARED_EP) || defined(NKRO_ENABLE) +# ifdef KEYBOARD_SHARED_EP case REPORT_ID_KEYBOARD: -#endif -#ifdef NKRO_ENABLE +# endif +# ifdef NKRO_ENABLE case REPORT_ID_NKRO: -#endif +# endif usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, sizeof(keyboard_report_sent), NULL); return TRUE; break; -#endif +# endif default: return FALSE; break; From 9917211afee5a00c15f7342bcc4c6af7ed60eafb Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 13 Oct 2021 23:00:45 -0400 Subject: [PATCH 4/7] add mouse to shared interface response --- tmk_core/protocol/chibios/usb_main.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 63269db093..c9860423b9 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -584,6 +584,12 @@ static bool usb_request_hook_cb(USBDriver *usbp) { #ifdef SHARED_EP_ENABLE case SHARED_INTERFACE: switch (usbp->setup[2]) { +# ifdef MOUSE_SHARED_EP + case REPORT_ID_MOUSE: + usbSetupTransfer(usbp, (uint8_t *)&mouse_report_blank, sizeof(mouse_report_blank), NULL); + return TRUE; + break; +# endif # ifdef EXTRAKEY_ENABLE case REPORT_ID_SYSTEM: usbSetupTransfer(usbp, (uint8_t *)&extra_report_blank, sizeof(extra_report_blank), NULL); From e52eabe8fa2ea10780d334a0564ca3400fdbe345 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 14 Oct 2021 09:41:35 -0400 Subject: [PATCH 5/7] use the console's ep size ref Co-authored-by: Sergey Vlasov --- tmk_core/protocol/chibios/usb_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index c9860423b9..a9b6f41875 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -80,7 +80,7 @@ report_mouse_t mouse_report_blank = {0}; uint8_t extra_report_blank[3] = {0}; #endif /* EXTRAKEY_ENABLE */ #ifdef CONSOLE_ENABLE -uint8_t console_report_blank[32] = {0}; +uint8_t console_report_blank[CONSOLE_EPSIZE] = {0}; #endif /* EXTRAKEY_ENABLE */ /* --------------------------------------------------------- From 56ec2854a879d279c7d25f5ad1b28b21c7bb0404 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 14 Oct 2021 09:43:11 -0400 Subject: [PATCH 6/7] use keyboard report size ref Co-authored-by: Sergey Vlasov --- tmk_core/protocol/chibios/usb_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index a9b6f41875..547b5e0d7b 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -571,7 +571,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) { switch (usbp->setup[4]) { /* LSB(wIndex) (check MSB==0?) */ #ifndef KEYBOARD_SHARED_EP case KEYBOARD_INTERFACE: - usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, sizeof(keyboard_report_sent), NULL); + usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, KEYBOARD_REPORT_SIZE, NULL); return TRUE; break; #endif From 4a62ff5f9a6e26e0cecb0a1e3cb4942a0400d365 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 14 Oct 2021 12:35:16 -0400 Subject: [PATCH 7/7] unify blank reports into one case --- tmk_core/protocol/chibios/usb_main.c | 86 ++++++++++++---------------- 1 file changed, 36 insertions(+), 50 deletions(-) diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 547b5e0d7b..4fa72c5776 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -73,15 +73,24 @@ static virtual_timer_t keyboard_idle_timer; static void keyboard_idle_timer_cb(void *arg); report_keyboard_t keyboard_report_sent = {{0}}; -#ifdef MOUSE_ENABLE -report_mouse_t mouse_report_blank = {0}; -#endif /* MOUSE_ENABLE */ +report_mouse_t mouse_report_sent = {0}; + +union { + uint8_t report_id; + report_keyboard_t keyboard; #ifdef EXTRAKEY_ENABLE -uint8_t extra_report_blank[3] = {0}; -#endif /* EXTRAKEY_ENABLE */ -#ifdef CONSOLE_ENABLE -uint8_t console_report_blank[CONSOLE_EPSIZE] = {0}; -#endif /* EXTRAKEY_ENABLE */ + report_extra_t extra; +#endif +#ifdef MOUSE_ENABLE + report_mouse_t mouse; +#endif +#ifdef DIGITIZER_ENABLE + report_digitizer_t digitizer; +#endif +#ifdef JOYSTICK_ENABLE + joystick_report_t joystick; +#endif +} universal_report_blank = {0}; /* --------------------------------------------------------- * Descriptors and USB driver objects @@ -577,54 +586,30 @@ static bool usb_request_hook_cb(USBDriver *usbp) { #endif #if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) case MOUSE_INTERFACE: - usbSetupTransfer(usbp, (uint8_t *)&mouse_report_blank, sizeof(mouse_report_blank), NULL); + usbSetupTransfer(usbp, (uint8_t *)&mouse_report_sent, sizeof(mouse_report_sent), NULL); return TRUE; - break; + break; #endif #ifdef SHARED_EP_ENABLE case SHARED_INTERFACE: - switch (usbp->setup[2]) { -# ifdef MOUSE_SHARED_EP - case REPORT_ID_MOUSE: - usbSetupTransfer(usbp, (uint8_t *)&mouse_report_blank, sizeof(mouse_report_blank), NULL); - return TRUE; - break; -# endif -# ifdef EXTRAKEY_ENABLE - case REPORT_ID_SYSTEM: - usbSetupTransfer(usbp, (uint8_t *)&extra_report_blank, sizeof(extra_report_blank), NULL); - return TRUE; - break; - case REPORT_ID_CONSUMER: - usbSetupTransfer(usbp, (uint8_t *)&extra_report_blank, sizeof(extra_report_blank), NULL); - return TRUE; - break; -# endif -# if defined(KEYBOARD_SHARED_EP) || defined(NKRO_ENABLE) -# ifdef KEYBOARD_SHARED_EP - case REPORT_ID_KEYBOARD: -# endif -# ifdef NKRO_ENABLE - case REPORT_ID_NKRO: -# endif - usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, sizeof(keyboard_report_sent), NULL); - return TRUE; - break; -# endif - default: - return FALSE; - break; +# ifdef KEYBOARD_SHARED_EP + if (usbp->setup[2] == REPORT_ID_KEYBOARD) { + usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, KEYBOARD_REPORT_SIZE, NULL); + return TRUE; + break; } - break; -#endif -#ifdef CONSOLE_ENABLE - case CONSOLE_INTERFACE: - usbSetupTransfer(usbp, (uint8_t *)&console_report_blank, sizeof(console_report_blank), NULL); - return TRUE; - break; -#endif +# endif +# ifdef MOUSE_SHARED_EP + if (usbp->setup[2] == REPORT_ID_MOUSE) { + usbSetupTransfer(usbp, (uint8_t *)&mouse_report_sent, sizeof(mouse_report_sent), NULL); + return TRUE; + break; + } +# endif +#endif /* SHARED_EP_ENABLE */ default: - usbSetupTransfer(usbp, NULL, 0, NULL); + universal_report_blank.report_id = usbp->setup[2]; + usbSetupTransfer(usbp, (uint8_t *)&universal_report_blank, usbp->setup[6], NULL); return TRUE; break; } @@ -933,6 +918,7 @@ void send_mouse(report_mouse_t *report) { } } usbStartTransmitI(&USB_DRIVER, MOUSE_IN_EPNUM, (uint8_t *)report, sizeof(report_mouse_t)); + mouse_report_sent = *report; osalSysUnlock(); }