From 6d356114a84fcc022826ea18f93ed05dac031621 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Tue, 26 Jun 2018 18:24:30 -0700 Subject: [PATCH 01/20] Debounce key releases --- right/src/usb_report_updater.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 6a9e9f0..6497bf5 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -326,7 +326,7 @@ static void updateActiveUsbReports(void) if (keyState->debounceCounter < KEY_DEBOUNCER_TIMEOUT_MSEC) { keyState->current = keyState->previous; - } else if (!keyState->previous && keyState->current) { + } else if (keyState->previous != keyState->current) { keyState->debounceCounter = 0; } From ff99c2e734a0fade225c94dfa5fb93eae4487baf Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Tue, 26 Jun 2018 18:27:01 -0700 Subject: [PATCH 02/20] Change KEY_DEBOUNCER_TIMEOUT_MSEC to match keyswitch datasheets --- right/src/key_debouncer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/right/src/key_debouncer.h b/right/src/key_debouncer.h index c6455bc..25a35b4 100644 --- a/right/src/key_debouncer.h +++ b/right/src/key_debouncer.h @@ -9,7 +9,7 @@ // Macros: #define KEY_DEBOUNCER_INTERVAL_MSEC 1 - #define KEY_DEBOUNCER_TIMEOUT_MSEC 100 + #define KEY_DEBOUNCER_TIMEOUT_MSEC 5 // Functions: From cdfabaec4211c18370a483a9d3cabc996956902d Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Tue, 26 Jun 2018 21:58:48 -0700 Subject: [PATCH 03/20] Make the debounce counters count down --- right/src/key_debouncer.c | 4 ++-- right/src/usb_report_updater.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/right/src/key_debouncer.c b/right/src/key_debouncer.c index 8a85eb3..fceebcb 100644 --- a/right/src/key_debouncer.c +++ b/right/src/key_debouncer.c @@ -11,8 +11,8 @@ void PIT_KEY_DEBOUNCER_HANDLER(void) for (uint8_t slotId=0; slotIddebounceCounter < KEY_DEBOUNCER_TIMEOUT_MSEC) { + if (keyState->debounceCounter) { keyState->current = keyState->previous; } else if (keyState->previous != keyState->current) { - keyState->debounceCounter = 0; + keyState->debounceCounter = KEY_DEBOUNCER_TIMEOUT_MSEC + 1; } if (keyState->current) { From d21fe30139fef163012f094facb9f69bf8767789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Wed, 27 Jun 2018 14:26:29 +0200 Subject: [PATCH 04/20] Bump firmware version to 8.3.2. Update changelog, package.json and versions.h --- CHANGELOG.md | 8 ++++++++ scripts/package.json | 2 +- shared/versions.h | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d8f2ba..fe29f2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is loosely based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to the [UHK Versioning](VERSIONING.md) conventions. +## [8.3.2] - 2018-06-27 + +Device Protocol: 4.3.1 | Module Protocol: 4.0.0 | User Config: 4.1.0 | Hardware Config: 1.0.0 + +- Make the debouncer debounce not only on key presses but also on key releases, and change the debounce interval from 100ms to the suggested 5ms of MX switches. +- Revert the Windows related commits of firmware 8.3.1 because they introduced a nondeterministic bug that made USB hang. +- Add base layer key mappings for the left and right add-ons for testing purposes. + ## [8.3.1] - 2018-06-07 Device Protocol: 4.3.1 | Module Protocol: 4.0.0 | User Config: 4.1.0 | Hardware Config: 1.0.0 diff --git a/scripts/package.json b/scripts/package.json index 0f3f10e..bf99869 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -15,7 +15,7 @@ "commander": "^2.11.0", "shelljs": "^0.7.8" }, - "firmwareVersion": "8.3.1", + "firmwareVersion": "8.3.2", "deviceProtocolVersion": "4.3.1", "moduleProtocolVersion": "4.0.0", "userConfigVersion": "4.1.0", diff --git a/shared/versions.h b/shared/versions.h index adbd2f2..36cc614 100644 --- a/shared/versions.h +++ b/shared/versions.h @@ -20,7 +20,7 @@ #define FIRMWARE_MAJOR_VERSION 8 #define FIRMWARE_MINOR_VERSION 3 - #define FIRMWARE_PATCH_VERSION 1 + #define FIRMWARE_PATCH_VERSION 2 #define DEVICE_PROTOCOL_MAJOR_VERSION 4 #define DEVICE_PROTOCOL_MINOR_VERSION 3 From 5c3e2966c46dfd91206ccb9f30af7e851e57bea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Wed, 27 Jun 2018 21:42:15 +0200 Subject: [PATCH 05/20] Restore the logic of the key debouncer. Make it only debounce keypresses and set its timeout to 100ms. --- lib/agent | 2 +- right/src/key_debouncer.h | 2 +- right/src/usb_report_updater.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/agent b/lib/agent index 81a8399..32d9635 160000 --- a/lib/agent +++ b/lib/agent @@ -1 +1 @@ -Subproject commit 81a83994abe36f653abf18ee2daaa7c2f198b14a +Subproject commit 32d9635b340e4dfbb12fdcfc909ec89e488ce56a diff --git a/right/src/key_debouncer.h b/right/src/key_debouncer.h index 25a35b4..c6455bc 100644 --- a/right/src/key_debouncer.h +++ b/right/src/key_debouncer.h @@ -9,7 +9,7 @@ // Macros: #define KEY_DEBOUNCER_INTERVAL_MSEC 1 - #define KEY_DEBOUNCER_TIMEOUT_MSEC 5 + #define KEY_DEBOUNCER_TIMEOUT_MSEC 100 // Functions: diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 0194de2..2fdf5ed 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -326,7 +326,7 @@ static void updateActiveUsbReports(void) if (keyState->debounceCounter) { keyState->current = keyState->previous; - } else if (keyState->previous != keyState->current) { + } else if (!keyState->previous && keyState->current) { keyState->debounceCounter = KEY_DEBOUNCER_TIMEOUT_MSEC + 1; } From 1bd8c7dca88b7e9c86a6e75d9ca45768add89952 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Thu, 28 Jun 2018 16:10:26 -0700 Subject: [PATCH 06/20] Use a switch statement --- .../src/usb_descriptors/usb_descriptor_hid.c | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/right/src/usb_descriptors/usb_descriptor_hid.c b/right/src/usb_descriptors/usb_descriptor_hid.c index 18c005f..4e3ba9c 100644 --- a/right/src/usb_descriptors/usb_descriptor_hid.c +++ b/right/src/usb_descriptors/usb_descriptor_hid.c @@ -12,23 +12,29 @@ usb_status_t USB_DeviceGetHidDescriptor( usb_status_t USB_DeviceGetHidReportDescriptor( usb_device_handle handle, usb_device_get_hid_report_descriptor_struct_t *hidReportDescriptor) { - if (USB_GENERIC_HID_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) { - hidReportDescriptor->buffer = UsbGenericHidReportDescriptor; - hidReportDescriptor->length = USB_GENERIC_HID_REPORT_DESCRIPTOR_LENGTH; - } else if (USB_BASIC_KEYBOARD_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) { - hidReportDescriptor->buffer = UsbBasicKeyboardReportDescriptor; - hidReportDescriptor->length = USB_BASIC_KEYBOARD_REPORT_DESCRIPTOR_LENGTH; - } else if (USB_MEDIA_KEYBOARD_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) { - hidReportDescriptor->buffer = UsbMediaKeyboardReportDescriptor; - hidReportDescriptor->length = USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH; - } else if (USB_SYSTEM_KEYBOARD_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) { - hidReportDescriptor->buffer = UsbSystemKeyboardReportDescriptor; - hidReportDescriptor->length = USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH; - } else if (USB_MOUSE_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) { - hidReportDescriptor->buffer = UsbMouseReportDescriptor; - hidReportDescriptor->length = USB_MOUSE_REPORT_DESCRIPTOR_LENGTH; - } else { - return kStatus_USB_InvalidRequest; + switch (hidReportDescriptor->interfaceNumber) { + case USB_GENERIC_HID_INTERFACE_INDEX: + hidReportDescriptor->buffer = UsbGenericHidReportDescriptor; + hidReportDescriptor->length = USB_GENERIC_HID_REPORT_DESCRIPTOR_LENGTH; + break; + case USB_BASIC_KEYBOARD_INTERFACE_INDEX: + hidReportDescriptor->buffer = UsbBasicKeyboardReportDescriptor; + hidReportDescriptor->length = USB_BASIC_KEYBOARD_REPORT_DESCRIPTOR_LENGTH; + break; + case USB_MEDIA_KEYBOARD_INTERFACE_INDEX: + hidReportDescriptor->buffer = UsbMediaKeyboardReportDescriptor; + hidReportDescriptor->length = USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH; + break; + case USB_SYSTEM_KEYBOARD_INTERFACE_INDEX: + hidReportDescriptor->buffer = UsbSystemKeyboardReportDescriptor; + hidReportDescriptor->length = USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH; + break; + case USB_MOUSE_INTERFACE_INDEX: + hidReportDescriptor->buffer = UsbMouseReportDescriptor; + hidReportDescriptor->length = USB_MOUSE_REPORT_DESCRIPTOR_LENGTH; + break; + default: + return kStatus_USB_InvalidRequest; } return kStatus_USB_Success; } From c1dc4be8c87cfe63dca3050cd9551a14cf062991 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Thu, 28 Jun 2018 16:39:41 -0700 Subject: [PATCH 07/20] Fix USB_DeviceGetHidDescriptor --- .../usb_descriptor_configuration.h | 4 ++ .../src/usb_descriptors/usb_descriptor_hid.c | 43 ++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/right/src/usb_descriptors/usb_descriptor_configuration.h b/right/src/usb_descriptors/usb_descriptor_configuration.h index 57869cd..6595f22 100644 --- a/right/src/usb_descriptors/usb_descriptor_configuration.h +++ b/right/src/usb_descriptors/usb_descriptor_configuration.h @@ -14,6 +14,10 @@ #define USB_COMPOSITE_CONFIGURATION_INDEX 1 #define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH 141 +// Variables: + + extern uint8_t UsbConfigurationDescriptor[USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH]; + // Functions: usb_status_t USB_DeviceGetConfigurationDescriptor( diff --git a/right/src/usb_descriptors/usb_descriptor_hid.c b/right/src/usb_descriptors/usb_descriptor_hid.c index 4e3ba9c..f70dfa1 100644 --- a/right/src/usb_descriptors/usb_descriptor_hid.c +++ b/right/src/usb_descriptors/usb_descriptor_hid.c @@ -2,11 +2,52 @@ #include "usb_descriptor_hid.h" #include "usb_descriptor_mouse_report.h" #include "usb_descriptor_generic_hid_report.h" +#include "usb_descriptor_configuration.h" + +#define USB_GENERIC_HID_DESCRIPTOR_INDEX \ + (USB_DESCRIPTOR_LENGTH_CONFIGURE + USB_DESCRIPTOR_LENGTH_INTERFACE) + +#define USB_BASIC_KEYBOARD_HID_DESCRIPTOR_INDEX \ + (USB_GENERIC_HID_DESCRIPTOR_INDEX + USB_DESCRIPTOR_LENGTH_HID + \ + 2 * USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_INTERFACE) + +#define USB_MEDIA_KEYBOARD_HID_DESCRIPTOR_INDEX \ + (USB_BASIC_KEYBOARD_HID_DESCRIPTOR_INDEX + USB_DESCRIPTOR_LENGTH_HID + \ + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_INTERFACE) + +#define USB_SYSTEM_KEYBOARD_HID_DESCRIPTOR_INDEX \ + (USB_MEDIA_KEYBOARD_HID_DESCRIPTOR_INDEX + USB_DESCRIPTOR_LENGTH_HID + \ + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_INTERFACE) + +#define USB_MOUSE_HID_DESCRIPTOR_INDEX \ + (USB_SYSTEM_KEYBOARD_HID_DESCRIPTOR_INDEX + USB_DESCRIPTOR_LENGTH_HID + \ + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_INTERFACE) usb_status_t USB_DeviceGetHidDescriptor( usb_device_handle handle, usb_device_get_hid_descriptor_struct_t *hidDescriptor) { - return kStatus_USB_InvalidRequest; + hidDescriptor->length = USB_DESCRIPTOR_LENGTH_HID; + + switch (hidDescriptor->interfaceNumber) { + case USB_GENERIC_HID_INTERFACE_INDEX: + hidDescriptor->buffer = &UsbConfigurationDescriptor[USB_GENERIC_HID_DESCRIPTOR_INDEX]; + break; + case USB_BASIC_KEYBOARD_INTERFACE_INDEX: + hidDescriptor->buffer = &UsbConfigurationDescriptor[USB_BASIC_KEYBOARD_HID_DESCRIPTOR_INDEX]; + break; + case USB_MEDIA_KEYBOARD_INTERFACE_INDEX: + hidDescriptor->buffer = &UsbConfigurationDescriptor[USB_MEDIA_KEYBOARD_HID_DESCRIPTOR_INDEX]; + break; + case USB_SYSTEM_KEYBOARD_INTERFACE_INDEX: + hidDescriptor->buffer = &UsbConfigurationDescriptor[USB_SYSTEM_KEYBOARD_HID_DESCRIPTOR_INDEX]; + break; + case USB_MOUSE_INTERFACE_INDEX: + hidDescriptor->buffer = &UsbConfigurationDescriptor[USB_MOUSE_HID_DESCRIPTOR_INDEX]; + break; + default: + return kStatus_USB_InvalidRequest; + } + return kStatus_USB_Success; } usb_status_t USB_DeviceGetHidReportDescriptor( From cbd5f1b500f1ea5a3d3242abb956405fde06c75c Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Thu, 28 Jun 2018 17:23:21 -0700 Subject: [PATCH 08/20] Redefine USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH --- right/src/usb_descriptors/usb_descriptor_configuration.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/right/src/usb_descriptors/usb_descriptor_configuration.h b/right/src/usb_descriptors/usb_descriptor_configuration.h index 6595f22..d5fa96a 100644 --- a/right/src/usb_descriptors/usb_descriptor_configuration.h +++ b/right/src/usb_descriptors/usb_descriptor_configuration.h @@ -12,7 +12,9 @@ // Macros: #define USB_COMPOSITE_CONFIGURATION_INDEX 1 - #define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH 141 + #define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH \ + (5 * USB_DESCRIPTOR_LENGTH_INTERFACE + 5 * USB_DESCRIPTOR_LENGTH_HID + \ + 6 * USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CONFIGURE) // Variables: From baa5e8f037b6d3710399fd1c526bfd561e36d5f6 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Fri, 29 Jun 2018 12:37:53 -0700 Subject: [PATCH 09/20] Remove redundant guard clauses --- right/src/usb_interfaces/usb_interface_basic_keyboard.c | 8 +++----- right/src/usb_interfaces/usb_interface_media_keyboard.c | 8 +++----- right/src/usb_interfaces/usb_interface_mouse.c | 8 +++----- right/src/usb_interfaces/usb_interface_system_keyboard.c | 8 +++----- 4 files changed, 12 insertions(+), 20 deletions(-) diff --git a/right/src/usb_interfaces/usb_interface_basic_keyboard.c b/right/src/usb_interfaces/usb_interface_basic_keyboard.c index 2bf39e8..306b364 100644 --- a/right/src/usb_interfaces/usb_interface_basic_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_basic_keyboard.c @@ -23,15 +23,13 @@ void ResetActiveUsbBasicKeyboardReport(void) usb_status_t UsbBasicKeyboardAction(void) { - if (((usb_device_hid_struct_t *)UsbCompositeDevice.basicKeyboardHandle)->interruptInPipeBusy) - return kStatus_USB_Busy; // The previous report has not been sent yet - - UsbBasicKeyboardActionCounter++; SwitchActiveUsbBasicKeyboardReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( UsbCompositeDevice.basicKeyboardHandle, USB_BASIC_KEYBOARD_ENDPOINT_INDEX, (uint8_t*)GetInactiveUsbBasicKeyboardReport(), USB_BASIC_KEYBOARD_REPORT_LENGTH); - if (usb_status != kStatus_USB_Success) { + if (usb_status == kStatus_USB_Success) { + UsbBasicKeyboardActionCounter++; + } else { SwitchActiveUsbBasicKeyboardReport(); // Switch back, as the command failed } return usb_status; diff --git a/right/src/usb_interfaces/usb_interface_media_keyboard.c b/right/src/usb_interfaces/usb_interface_media_keyboard.c index aa7e74e..8e32d56 100644 --- a/right/src/usb_interfaces/usb_interface_media_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_media_keyboard.c @@ -21,15 +21,13 @@ void ResetActiveUsbMediaKeyboardReport(void) usb_status_t UsbMediaKeyboardAction(void) { - if (((usb_device_hid_struct_t *)UsbCompositeDevice.mediaKeyboardHandle)->interruptInPipeBusy) - return kStatus_USB_Busy; // The previous report has not been sent yet - - UsbMediaKeyboardActionCounter++; SwitchActiveUsbMediaKeyboardReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( UsbCompositeDevice.mediaKeyboardHandle, USB_MEDIA_KEYBOARD_ENDPOINT_INDEX, (uint8_t*)GetInactiveUsbMediaKeyboardReport(), USB_MEDIA_KEYBOARD_REPORT_LENGTH); - if (usb_status != kStatus_USB_Success) { + if (usb_status == kStatus_USB_Success) { + UsbMediaKeyboardActionCounter++; + } else { SwitchActiveUsbMediaKeyboardReport(); // Switch back, as the command failed } return usb_status; diff --git a/right/src/usb_interfaces/usb_interface_mouse.c b/right/src/usb_interfaces/usb_interface_mouse.c index 89e9ddb..91fe4d3 100644 --- a/right/src/usb_interfaces/usb_interface_mouse.c +++ b/right/src/usb_interfaces/usb_interface_mouse.c @@ -21,15 +21,13 @@ void ResetActiveUsbMouseReport(void) usb_status_t usbMouseAction(void) { - if (((usb_device_hid_struct_t *)UsbCompositeDevice.mouseHandle)->interruptInPipeBusy) - return kStatus_USB_Busy; // The previous report has not been sent yet - - UsbMouseActionCounter++; SwitchActiveUsbMouseReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( UsbCompositeDevice.mouseHandle, USB_MOUSE_ENDPOINT_INDEX, (uint8_t*)GetInactiveUsbMouseReport(), USB_MOUSE_REPORT_LENGTH); - if (usb_status != kStatus_USB_Success) { + if (usb_status == kStatus_USB_Success) { + UsbMouseActionCounter++; + } else { SwitchActiveUsbMouseReport(); // Switch back, as the command failed } return usb_status; diff --git a/right/src/usb_interfaces/usb_interface_system_keyboard.c b/right/src/usb_interfaces/usb_interface_system_keyboard.c index 10ca8d9..5fb1620 100644 --- a/right/src/usb_interfaces/usb_interface_system_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_system_keyboard.c @@ -21,15 +21,13 @@ void ResetActiveUsbSystemKeyboardReport(void) usb_status_t UsbSystemKeyboardAction(void) { - if (((usb_device_hid_struct_t *)UsbCompositeDevice.systemKeyboardHandle)->interruptInPipeBusy) - return kStatus_USB_Busy; // The previous report has not been sent yet - - UsbSystemKeyboardActionCounter++; SwitchActiveUsbSystemKeyboardReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( UsbCompositeDevice.systemKeyboardHandle, USB_SYSTEM_KEYBOARD_ENDPOINT_INDEX, (uint8_t*)GetInactiveUsbSystemKeyboardReport(), USB_SYSTEM_KEYBOARD_REPORT_LENGTH); - if (usb_status != kStatus_USB_Success) { + if (usb_status == kStatus_USB_Success) { + UsbSystemKeyboardActionCounter++; + } else { SwitchActiveUsbSystemKeyboardReport(); // Switch back, as the command failed } return usb_status; From 994e2f6b79ce76f12e8f17c0c6d691caab7046b5 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Fri, 29 Jun 2018 12:43:59 -0700 Subject: [PATCH 10/20] Simplify logic --- right/src/usb_interfaces/usb_interface_basic_keyboard.c | 8 +++----- right/src/usb_interfaces/usb_interface_media_keyboard.c | 8 +++----- right/src/usb_interfaces/usb_interface_mouse.c | 8 +++----- right/src/usb_interfaces/usb_interface_system_keyboard.c | 8 +++----- 4 files changed, 12 insertions(+), 20 deletions(-) diff --git a/right/src/usb_interfaces/usb_interface_basic_keyboard.c b/right/src/usb_interfaces/usb_interface_basic_keyboard.c index 306b364..290959d 100644 --- a/right/src/usb_interfaces/usb_interface_basic_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_basic_keyboard.c @@ -23,14 +23,12 @@ void ResetActiveUsbBasicKeyboardReport(void) usb_status_t UsbBasicKeyboardAction(void) { - SwitchActiveUsbBasicKeyboardReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( - UsbCompositeDevice.basicKeyboardHandle, USB_BASIC_KEYBOARD_ENDPOINT_INDEX, - (uint8_t*)GetInactiveUsbBasicKeyboardReport(), USB_BASIC_KEYBOARD_REPORT_LENGTH); + UsbCompositeDevice.basicKeyboardHandle, USB_BASIC_KEYBOARD_ENDPOINT_INDEX, + (uint8_t *)ActiveUsbBasicKeyboardReport, USB_BASIC_KEYBOARD_REPORT_LENGTH); if (usb_status == kStatus_USB_Success) { UsbBasicKeyboardActionCounter++; - } else { - SwitchActiveUsbBasicKeyboardReport(); // Switch back, as the command failed + SwitchActiveUsbBasicKeyboardReport(); } return usb_status; } diff --git a/right/src/usb_interfaces/usb_interface_media_keyboard.c b/right/src/usb_interfaces/usb_interface_media_keyboard.c index 8e32d56..2fce4e9 100644 --- a/right/src/usb_interfaces/usb_interface_media_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_media_keyboard.c @@ -21,14 +21,12 @@ void ResetActiveUsbMediaKeyboardReport(void) usb_status_t UsbMediaKeyboardAction(void) { - SwitchActiveUsbMediaKeyboardReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( - UsbCompositeDevice.mediaKeyboardHandle, USB_MEDIA_KEYBOARD_ENDPOINT_INDEX, - (uint8_t*)GetInactiveUsbMediaKeyboardReport(), USB_MEDIA_KEYBOARD_REPORT_LENGTH); + UsbCompositeDevice.mediaKeyboardHandle, USB_MEDIA_KEYBOARD_ENDPOINT_INDEX, + (uint8_t *)ActiveUsbMediaKeyboardReport, USB_MEDIA_KEYBOARD_REPORT_LENGTH); if (usb_status == kStatus_USB_Success) { UsbMediaKeyboardActionCounter++; - } else { - SwitchActiveUsbMediaKeyboardReport(); // Switch back, as the command failed + SwitchActiveUsbMediaKeyboardReport(); } return usb_status; } diff --git a/right/src/usb_interfaces/usb_interface_mouse.c b/right/src/usb_interfaces/usb_interface_mouse.c index 91fe4d3..34a8165 100644 --- a/right/src/usb_interfaces/usb_interface_mouse.c +++ b/right/src/usb_interfaces/usb_interface_mouse.c @@ -21,14 +21,12 @@ void ResetActiveUsbMouseReport(void) usb_status_t usbMouseAction(void) { - SwitchActiveUsbMouseReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( - UsbCompositeDevice.mouseHandle, USB_MOUSE_ENDPOINT_INDEX, - (uint8_t*)GetInactiveUsbMouseReport(), USB_MOUSE_REPORT_LENGTH); + UsbCompositeDevice.mouseHandle, USB_MOUSE_ENDPOINT_INDEX, + (uint8_t *)ActiveUsbMouseReport, USB_MOUSE_REPORT_LENGTH); if (usb_status == kStatus_USB_Success) { UsbMouseActionCounter++; - } else { - SwitchActiveUsbMouseReport(); // Switch back, as the command failed + SwitchActiveUsbMouseReport(); } return usb_status; } diff --git a/right/src/usb_interfaces/usb_interface_system_keyboard.c b/right/src/usb_interfaces/usb_interface_system_keyboard.c index 5fb1620..7d741bd 100644 --- a/right/src/usb_interfaces/usb_interface_system_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_system_keyboard.c @@ -21,14 +21,12 @@ void ResetActiveUsbSystemKeyboardReport(void) usb_status_t UsbSystemKeyboardAction(void) { - SwitchActiveUsbSystemKeyboardReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( - UsbCompositeDevice.systemKeyboardHandle, USB_SYSTEM_KEYBOARD_ENDPOINT_INDEX, - (uint8_t*)GetInactiveUsbSystemKeyboardReport(), USB_SYSTEM_KEYBOARD_REPORT_LENGTH); + UsbCompositeDevice.systemKeyboardHandle, USB_SYSTEM_KEYBOARD_ENDPOINT_INDEX, + (uint8_t *)ActiveUsbSystemKeyboardReport, USB_SYSTEM_KEYBOARD_REPORT_LENGTH); if (usb_status == kStatus_USB_Success) { UsbSystemKeyboardActionCounter++; - } else { - SwitchActiveUsbSystemKeyboardReport(); // Switch back, as the command failed + SwitchActiveUsbSystemKeyboardReport(); } return usb_status; } From 6eceb6ad30930848ae7ad8d4bfc5c5d2b7f68b99 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Fri, 29 Jun 2018 12:54:06 -0700 Subject: [PATCH 11/20] Default to kStatus_USB_Success --- .../usb_interfaces/usb_interface_basic_keyboard.c | 11 +++-------- right/src/usb_interfaces/usb_interface_generic_hid.c | 12 ++++-------- .../usb_interfaces/usb_interface_media_keyboard.c | 12 +++--------- right/src/usb_interfaces/usb_interface_mouse.c | 12 +++--------- .../usb_interfaces/usb_interface_system_keyboard.c | 12 +++--------- 5 files changed, 16 insertions(+), 43 deletions(-) diff --git a/right/src/usb_interfaces/usb_interface_basic_keyboard.c b/right/src/usb_interfaces/usb_interface_basic_keyboard.c index 290959d..2203f1f 100644 --- a/right/src/usb_interfaces/usb_interface_basic_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_basic_keyboard.c @@ -35,16 +35,13 @@ usb_status_t UsbBasicKeyboardAction(void) usb_status_t UsbBasicKeyboardCallback(class_handle_t handle, uint32_t event, void *param) { - usb_status_t error = kStatus_USB_Error; + usb_status_t error = kStatus_USB_Success; switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: - error = kStatus_USB_Success; - break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: - error = kStatus_USB_InvalidRequest; break; case kUSB_DeviceHidEventSetReport: { usb_device_hid_report_struct_t *report = (usb_device_hid_report_struct_t*)param; @@ -70,20 +67,18 @@ usb_status_t UsbBasicKeyboardCallback(class_handle_t handle, uint32_t event, voi case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: - break; default: break; } - return error; } usb_status_t UsbBasicKeyboardSetConfiguration(class_handle_t handle, uint8_t configuration) { - return kStatus_USB_Error; + return kStatus_USB_Success; } usb_status_t UsbBasicKeyboardSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting) { - return kStatus_USB_Error; + return kStatus_USB_Success; } diff --git a/right/src/usb_interfaces/usb_interface_generic_hid.c b/right/src/usb_interfaces/usb_interface_generic_hid.c index 446821e..5bd4569 100644 --- a/right/src/usb_interfaces/usb_interface_generic_hid.c +++ b/right/src/usb_interfaces/usb_interface_generic_hid.c @@ -15,7 +15,7 @@ static usb_status_t UsbReceiveData(void) usb_status_t UsbGenericHidCallback(class_handle_t handle, uint32_t event, void *param) { - usb_status_t error = kStatus_USB_Error; + usb_status_t error = kStatus_USB_Success; switch (event) { case kUSB_DeviceHidEventSendResponse: @@ -28,22 +28,18 @@ usb_status_t UsbGenericHidCallback(class_handle_t handle, uint32_t event, void * GenericHidOutBuffer, USB_GENERIC_HID_OUT_BUFFER_LENGTH); UsbGenericHidActionCounter++; - return UsbReceiveData(); + error = UsbReceiveData(); break; case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: case kUSB_DeviceHidEventRequestReportBuffer: - error = kStatus_USB_InvalidRequest; - break; case kUSB_DeviceHidEventGetIdle: case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: - break; default: break; } - return error; } @@ -52,7 +48,7 @@ usb_status_t UsbGenericHidSetConfiguration(class_handle_t handle, uint8_t config if (USB_COMPOSITE_CONFIGURATION_INDEX == configuration) { return UsbReceiveData(); } - return kStatus_USB_Error; + return kStatus_USB_Success; } usb_status_t UsbGenericHidSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting) @@ -60,5 +56,5 @@ usb_status_t UsbGenericHidSetInterface(class_handle_t handle, uint8_t interface, if (USB_GENERIC_HID_INTERFACE_INDEX == interface) { return UsbReceiveData(); } - return kStatus_USB_Error; + return kStatus_USB_Success; } diff --git a/right/src/usb_interfaces/usb_interface_media_keyboard.c b/right/src/usb_interfaces/usb_interface_media_keyboard.c index 2fce4e9..9ea8eea 100644 --- a/right/src/usb_interfaces/usb_interface_media_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_media_keyboard.c @@ -33,37 +33,31 @@ usb_status_t UsbMediaKeyboardAction(void) usb_status_t UsbMediaKeyboardCallback(class_handle_t handle, uint32_t event, void *param) { - usb_status_t error = kStatus_USB_Error; + usb_status_t error = kStatus_USB_Success; switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: - error = kStatus_USB_Success; - break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: case kUSB_DeviceHidEventRequestReportBuffer: - error = kStatus_USB_InvalidRequest; - break; case kUSB_DeviceHidEventGetIdle: case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: - break; default: break; } - return error; } usb_status_t UsbMediaKeyboardSetConfiguration(class_handle_t handle, uint8_t configuration) { - return kStatus_USB_Error; + return kStatus_USB_Success; } usb_status_t UsbMediaKeyboardSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting) { - return kStatus_USB_Error; + return kStatus_USB_Success; } diff --git a/right/src/usb_interfaces/usb_interface_mouse.c b/right/src/usb_interfaces/usb_interface_mouse.c index 34a8165..60861cd 100644 --- a/right/src/usb_interfaces/usb_interface_mouse.c +++ b/right/src/usb_interfaces/usb_interface_mouse.c @@ -33,37 +33,31 @@ usb_status_t usbMouseAction(void) usb_status_t UsbMouseCallback(class_handle_t handle, uint32_t event, void *param) { - usb_status_t error = kStatus_USB_Error; + usb_status_t error = kStatus_USB_Success; switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: - error = kStatus_USB_Success; - break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: case kUSB_DeviceHidEventRequestReportBuffer: - error = kStatus_USB_InvalidRequest; - break; case kUSB_DeviceHidEventGetIdle: case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: - break; default: break; } - return error; } usb_status_t UsbMouseSetConfiguration(class_handle_t handle, uint8_t configuration) { - return kStatus_USB_Error; + return kStatus_USB_Success; } usb_status_t UsbMouseSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting) { - return kStatus_USB_Error; + return kStatus_USB_Success; } diff --git a/right/src/usb_interfaces/usb_interface_system_keyboard.c b/right/src/usb_interfaces/usb_interface_system_keyboard.c index 7d741bd..747290b 100644 --- a/right/src/usb_interfaces/usb_interface_system_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_system_keyboard.c @@ -33,37 +33,31 @@ usb_status_t UsbSystemKeyboardAction(void) usb_status_t UsbSystemKeyboardCallback(class_handle_t handle, uint32_t event, void *param) { - usb_status_t error = kStatus_USB_Error; + usb_status_t error = kStatus_USB_Success; switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: - error = kStatus_USB_Success; - break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: case kUSB_DeviceHidEventRequestReportBuffer: - error = kStatus_USB_InvalidRequest; - break; case kUSB_DeviceHidEventGetIdle: case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: - break; default: break; } - return error; } usb_status_t UsbSystemKeyboardSetConfiguration(class_handle_t handle, uint8_t configuration) { - return kStatus_USB_Error; + return kStatus_USB_Success; } usb_status_t UsbSystemKeyboardSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting) { - return kStatus_USB_Error; + return kStatus_USB_Success; } From 4214f3e0b616d0ff60c6f05d8672d84e0e00255f Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Wed, 27 Jun 2018 22:57:07 -0700 Subject: [PATCH 12/20] Use a semaphore to control the rate at which reports are updated --- .../usb_interface_basic_keyboard.c | 3 ++ .../usb_interface_media_keyboard.c | 3 ++ .../src/usb_interfaces/usb_interface_mouse.c | 3 ++ .../usb_interface_system_keyboard.c | 3 ++ right/src/usb_report_updater.c | 36 ++++++++++++------- right/src/usb_report_updater.h | 1 + 6 files changed, 36 insertions(+), 13 deletions(-) diff --git a/right/src/usb_interfaces/usb_interface_basic_keyboard.c b/right/src/usb_interfaces/usb_interface_basic_keyboard.c index 2203f1f..77146dd 100644 --- a/right/src/usb_interfaces/usb_interface_basic_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_basic_keyboard.c @@ -1,5 +1,6 @@ #include "led_display.h" #include "usb_composite_device.h" +#include "usb_report_updater.h" static usb_basic_keyboard_report_t usbBasicKeyboardReports[2]; uint32_t UsbBasicKeyboardActionCounter; @@ -40,6 +41,8 @@ usb_status_t UsbBasicKeyboardCallback(class_handle_t handle, uint32_t event, voi switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: + UsbReportUpdateSemaphore &= ~(1 << USB_BASIC_KEYBOARD_INTERFACE_INDEX); + break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: break; diff --git a/right/src/usb_interfaces/usb_interface_media_keyboard.c b/right/src/usb_interfaces/usb_interface_media_keyboard.c index 9ea8eea..186e230 100644 --- a/right/src/usb_interfaces/usb_interface_media_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_media_keyboard.c @@ -1,4 +1,5 @@ #include "usb_composite_device.h" +#include "usb_report_updater.h" uint32_t UsbMediaKeyboardActionCounter; static usb_media_keyboard_report_t usbMediaKeyboardReports[2]; @@ -38,6 +39,8 @@ usb_status_t UsbMediaKeyboardCallback(class_handle_t handle, uint32_t event, voi switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: + UsbReportUpdateSemaphore &= ~(1 << USB_MEDIA_KEYBOARD_INTERFACE_INDEX); + break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: diff --git a/right/src/usb_interfaces/usb_interface_mouse.c b/right/src/usb_interfaces/usb_interface_mouse.c index 60861cd..7f18f35 100644 --- a/right/src/usb_interfaces/usb_interface_mouse.c +++ b/right/src/usb_interfaces/usb_interface_mouse.c @@ -1,4 +1,5 @@ #include "usb_composite_device.h" +#include "usb_report_updater.h" uint32_t UsbMouseActionCounter; static usb_mouse_report_t usbMouseReports[2]; @@ -38,6 +39,8 @@ usb_status_t UsbMouseCallback(class_handle_t handle, uint32_t event, void *param switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: + UsbReportUpdateSemaphore &= ~(1 << USB_MOUSE_INTERFACE_INDEX); + break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: diff --git a/right/src/usb_interfaces/usb_interface_system_keyboard.c b/right/src/usb_interfaces/usb_interface_system_keyboard.c index 747290b..2304b56 100644 --- a/right/src/usb_interfaces/usb_interface_system_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_system_keyboard.c @@ -1,4 +1,5 @@ #include "usb_composite_device.h" +#include "usb_report_updater.h" uint32_t UsbSystemKeyboardActionCounter; static usb_system_keyboard_report_t usbSystemKeyboardReports[2]; @@ -38,6 +39,8 @@ usb_status_t UsbSystemKeyboardCallback(class_handle_t handle, uint32_t event, vo switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: + UsbReportUpdateSemaphore &= ~(1 << USB_SYSTEM_KEYBOARD_INTERFACE_INDEX); + break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 642ca2e..5daa5de 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -25,6 +25,8 @@ static uint16_t DoubleTapSwitchLayerReleaseTimeout = 100; static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT]; +volatile uint8_t UsbReportUpdateSemaphore = 0; + mouse_kinetic_state_t MouseMoveState = { .isScroll = false, .upState = SerializedMouseAction_MoveUp, @@ -402,20 +404,16 @@ static void updateActiveUsbReports(void) } uint32_t UsbReportUpdateCounter; -static uint32_t lastMouseUpdateTimeMicros; void UpdateUsbReports(void) { - UsbReportUpdateCounter++; - if (((usb_device_hid_struct_t *)UsbCompositeDevice.basicKeyboardHandle)->interruptInPipeBusy || - ((usb_device_hid_struct_t *)UsbCompositeDevice.mediaKeyboardHandle)->interruptInPipeBusy || - ((usb_device_hid_struct_t *)UsbCompositeDevice.systemKeyboardHandle)->interruptInPipeBusy || - ((usb_device_hid_struct_t *)UsbCompositeDevice.mouseHandle)->interruptInPipeBusy) { - return; - } else if (Timer_GetElapsedTimeMicros(&lastMouseUpdateTimeMicros) < 1000U * USB_BASIC_KEYBOARD_INTERRUPT_IN_INTERVAL) { + usb_status_t status; + + if (UsbReportUpdateSemaphore) { return; } - Timer_SetCurrentTimeMicros(&lastMouseUpdateTimeMicros); + + UsbReportUpdateCounter++; ResetActiveUsbBasicKeyboardReport(); ResetActiveUsbMediaKeyboardReport(); @@ -426,24 +424,36 @@ void UpdateUsbReports(void) bool HasUsbBasicKeyboardReportChanged = memcmp(ActiveUsbBasicKeyboardReport, GetInactiveUsbBasicKeyboardReport(), sizeof(usb_basic_keyboard_report_t)) != 0; if (HasUsbBasicKeyboardReportChanged) { - UsbBasicKeyboardAction(); + UsbReportUpdateSemaphore |= 1 << USB_BASIC_KEYBOARD_INTERFACE_INDEX; + do { + status = UsbBasicKeyboardAction(); + } while (status != kStatus_USB_Success); } bool HasUsbMediaKeyboardReportChanged = memcmp(ActiveUsbMediaKeyboardReport, GetInactiveUsbMediaKeyboardReport(), sizeof(usb_media_keyboard_report_t)) != 0; if (HasUsbMediaKeyboardReportChanged) { - UsbMediaKeyboardAction(); + UsbReportUpdateSemaphore |= 1 << USB_MEDIA_KEYBOARD_INTERFACE_INDEX; + do { + status = UsbMediaKeyboardAction(); + } while (status != kStatus_USB_Success); } bool HasUsbSystemKeyboardReportChanged = memcmp(ActiveUsbSystemKeyboardReport, GetInactiveUsbSystemKeyboardReport(), sizeof(usb_system_keyboard_report_t)) != 0; if (HasUsbSystemKeyboardReportChanged) { - UsbSystemKeyboardAction(); + UsbReportUpdateSemaphore |= 1 << USB_SYSTEM_KEYBOARD_INTERFACE_INDEX; + do { + status = UsbSystemKeyboardAction(); + } while (status != kStatus_USB_Success); } // Send out the mouse position and wheel values continuously if the report is not zeros, but only send the mouse button states when they change. bool HasUsbMouseReportChanged = memcmp(ActiveUsbMouseReport, GetInactiveUsbMouseReport(), sizeof(usb_mouse_report_t)) != 0; if (HasUsbMouseReportChanged || ActiveUsbMouseReport->x || ActiveUsbMouseReport->y || ActiveUsbMouseReport->wheelX || ActiveUsbMouseReport->wheelY) { - usbMouseAction(); + UsbReportUpdateSemaphore |= 1 << USB_MOUSE_INTERFACE_INDEX; + do { + status = usbMouseAction(); + } while (status != kStatus_USB_Success); } if (IsHostSleeping && (previousLayer != LayerId_Base || HasUsbBasicKeyboardReportChanged || HasUsbMediaKeyboardReportChanged || HasUsbSystemKeyboardReportChanged || HasUsbMouseReportChanged)) { diff --git a/right/src/usb_report_updater.h b/right/src/usb_report_updater.h index 1a0f28b..33589f8 100644 --- a/right/src/usb_report_updater.h +++ b/right/src/usb_report_updater.h @@ -70,6 +70,7 @@ extern mouse_kinetic_state_t MouseMoveState; extern mouse_kinetic_state_t MouseScrollState; extern uint32_t UsbReportUpdateCounter; + extern volatile uint8_t UsbReportUpdateSemaphore; // Functions: From bd97bba4b544af54d14a7ef58c91080368403997 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Fri, 29 Jun 2018 13:19:49 -0700 Subject: [PATCH 13/20] Wake up the host before attempting to send reports --- right/src/usb_report_updater.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 5daa5de..4594a72 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -423,6 +423,14 @@ void UpdateUsbReports(void) updateActiveUsbReports(); bool HasUsbBasicKeyboardReportChanged = memcmp(ActiveUsbBasicKeyboardReport, GetInactiveUsbBasicKeyboardReport(), sizeof(usb_basic_keyboard_report_t)) != 0; + bool HasUsbMediaKeyboardReportChanged = memcmp(ActiveUsbMediaKeyboardReport, GetInactiveUsbMediaKeyboardReport(), sizeof(usb_media_keyboard_report_t)) != 0; + bool HasUsbSystemKeyboardReportChanged = memcmp(ActiveUsbSystemKeyboardReport, GetInactiveUsbSystemKeyboardReport(), sizeof(usb_system_keyboard_report_t)) != 0; + bool HasUsbMouseReportChanged = memcmp(ActiveUsbMouseReport, GetInactiveUsbMouseReport(), sizeof(usb_mouse_report_t)) != 0; + + if (IsHostSleeping && (previousLayer != LayerId_Base || HasUsbBasicKeyboardReportChanged || HasUsbMediaKeyboardReportChanged || HasUsbSystemKeyboardReportChanged || HasUsbMouseReportChanged)) { + WakeUpHost(true); // Wake up the host if any key is pressed and the computer is sleeping. + } + if (HasUsbBasicKeyboardReportChanged) { UsbReportUpdateSemaphore |= 1 << USB_BASIC_KEYBOARD_INTERFACE_INDEX; do { @@ -430,7 +438,6 @@ void UpdateUsbReports(void) } while (status != kStatus_USB_Success); } - bool HasUsbMediaKeyboardReportChanged = memcmp(ActiveUsbMediaKeyboardReport, GetInactiveUsbMediaKeyboardReport(), sizeof(usb_media_keyboard_report_t)) != 0; if (HasUsbMediaKeyboardReportChanged) { UsbReportUpdateSemaphore |= 1 << USB_MEDIA_KEYBOARD_INTERFACE_INDEX; do { @@ -438,7 +445,6 @@ void UpdateUsbReports(void) } while (status != kStatus_USB_Success); } - bool HasUsbSystemKeyboardReportChanged = memcmp(ActiveUsbSystemKeyboardReport, GetInactiveUsbSystemKeyboardReport(), sizeof(usb_system_keyboard_report_t)) != 0; if (HasUsbSystemKeyboardReportChanged) { UsbReportUpdateSemaphore |= 1 << USB_SYSTEM_KEYBOARD_INTERFACE_INDEX; do { @@ -447,7 +453,6 @@ void UpdateUsbReports(void) } // Send out the mouse position and wheel values continuously if the report is not zeros, but only send the mouse button states when they change. - bool HasUsbMouseReportChanged = memcmp(ActiveUsbMouseReport, GetInactiveUsbMouseReport(), sizeof(usb_mouse_report_t)) != 0; if (HasUsbMouseReportChanged || ActiveUsbMouseReport->x || ActiveUsbMouseReport->y || ActiveUsbMouseReport->wheelX || ActiveUsbMouseReport->wheelY) { UsbReportUpdateSemaphore |= 1 << USB_MOUSE_INTERFACE_INDEX; @@ -455,8 +460,4 @@ void UpdateUsbReports(void) status = usbMouseAction(); } while (status != kStatus_USB_Success); } - - if (IsHostSleeping && (previousLayer != LayerId_Base || HasUsbBasicKeyboardReportChanged || HasUsbMediaKeyboardReportChanged || HasUsbSystemKeyboardReportChanged || HasUsbMouseReportChanged)) { - WakeUpHost(true); // Wake up the host if any key is pressed and the computer is sleeping. - } } From 39819e6058fa40da9b8a0f50385bbf163b40801e Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Fri, 29 Jun 2018 13:29:40 -0700 Subject: [PATCH 14/20] Type Backspace instead of b --- right/src/usb_report_updater.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 4594a72..97de319 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -330,7 +330,7 @@ static void updateActiveUsbReports(void) if (simulateKeypresses) { sendChar = !sendChar; - ActiveUsbBasicKeyboardReport->scancodes[basicScancodeIndex++] = sendChar ? HID_KEYBOARD_SC_A : HID_KEYBOARD_SC_B; + ActiveUsbBasicKeyboardReport->scancodes[basicScancodeIndex++] = sendChar ? HID_KEYBOARD_SC_A : HID_KEYBOARD_SC_BACKSPACE; } for (uint8_t slotId=0; slotId Date: Fri, 29 Jun 2018 17:23:15 -0700 Subject: [PATCH 15/20] Rename usbMouseAction to UsbMouseAction --- right/src/usb_interfaces/usb_interface_mouse.c | 2 +- right/src/usb_interfaces/usb_interface_mouse.h | 2 +- right/src/usb_report_updater.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/right/src/usb_interfaces/usb_interface_mouse.c b/right/src/usb_interfaces/usb_interface_mouse.c index 7f18f35..15fd1fe 100644 --- a/right/src/usb_interfaces/usb_interface_mouse.c +++ b/right/src/usb_interfaces/usb_interface_mouse.c @@ -20,7 +20,7 @@ void ResetActiveUsbMouseReport(void) bzero(ActiveUsbMouseReport, USB_MOUSE_REPORT_LENGTH); } -usb_status_t usbMouseAction(void) +usb_status_t UsbMouseAction(void) { usb_status_t usb_status = USB_DeviceHidSend( UsbCompositeDevice.mouseHandle, USB_MOUSE_ENDPOINT_INDEX, diff --git a/right/src/usb_interfaces/usb_interface_mouse.h b/right/src/usb_interfaces/usb_interface_mouse.h index b2258a1..3c3da99 100644 --- a/right/src/usb_interfaces/usb_interface_mouse.h +++ b/right/src/usb_interfaces/usb_interface_mouse.h @@ -42,6 +42,6 @@ void ResetActiveUsbMouseReport(void); usb_mouse_report_t* GetInactiveUsbMouseReport(void); - usb_status_t usbMouseAction(void); + usb_status_t UsbMouseAction(void); #endif diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 97de319..fa23530 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -457,7 +457,7 @@ void UpdateUsbReports(void) ActiveUsbMouseReport->wheelX || ActiveUsbMouseReport->wheelY) { UsbReportUpdateSemaphore |= 1 << USB_MOUSE_INTERFACE_INDEX; do { - status = usbMouseAction(); + status = UsbMouseAction(); } while (status != kStatus_USB_Success); } } From b93f2115025ff248cfb3666af2cbd4f421c31417 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Fri, 29 Jun 2018 22:44:42 -0700 Subject: [PATCH 16/20] Don't retry sending a report if it fails --- right/src/usb_report_updater.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index fa23530..c82c46f 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -407,8 +407,6 @@ uint32_t UsbReportUpdateCounter; void UpdateUsbReports(void) { - usb_status_t status; - if (UsbReportUpdateSemaphore) { return; } @@ -433,31 +431,23 @@ void UpdateUsbReports(void) if (HasUsbBasicKeyboardReportChanged) { UsbReportUpdateSemaphore |= 1 << USB_BASIC_KEYBOARD_INTERFACE_INDEX; - do { - status = UsbBasicKeyboardAction(); - } while (status != kStatus_USB_Success); + UsbBasicKeyboardAction(); } if (HasUsbMediaKeyboardReportChanged) { UsbReportUpdateSemaphore |= 1 << USB_MEDIA_KEYBOARD_INTERFACE_INDEX; - do { - status = UsbMediaKeyboardAction(); - } while (status != kStatus_USB_Success); + UsbMediaKeyboardAction(); } if (HasUsbSystemKeyboardReportChanged) { UsbReportUpdateSemaphore |= 1 << USB_SYSTEM_KEYBOARD_INTERFACE_INDEX; - do { - status = UsbSystemKeyboardAction(); - } while (status != kStatus_USB_Success); + UsbSystemKeyboardAction(); } // Send out the mouse position and wheel values continuously if the report is not zeros, but only send the mouse button states when they change. if (HasUsbMouseReportChanged || ActiveUsbMouseReport->x || ActiveUsbMouseReport->y || ActiveUsbMouseReport->wheelX || ActiveUsbMouseReport->wheelY) { UsbReportUpdateSemaphore |= 1 << USB_MOUSE_INTERFACE_INDEX; - do { - status = UsbMouseAction(); - } while (status != kStatus_USB_Success); + UsbMouseAction(); } } From 8f6251bc4dbbdf10819c40812c251deec58de718 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Fri, 29 Jun 2018 22:51:16 -0700 Subject: [PATCH 17/20] Only set the semaphore if the report is successfully requested --- right/src/usb_report_updater.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index c82c46f..efd0600 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -407,6 +407,8 @@ uint32_t UsbReportUpdateCounter; void UpdateUsbReports(void) { + usb_status_t status; + if (UsbReportUpdateSemaphore) { return; } @@ -430,24 +432,32 @@ void UpdateUsbReports(void) } if (HasUsbBasicKeyboardReportChanged) { - UsbReportUpdateSemaphore |= 1 << USB_BASIC_KEYBOARD_INTERFACE_INDEX; - UsbBasicKeyboardAction(); + status = UsbBasicKeyboardAction(); + if (status == kStatus_USB_Success) { + UsbReportUpdateSemaphore |= 1 << USB_BASIC_KEYBOARD_INTERFACE_INDEX; + } } if (HasUsbMediaKeyboardReportChanged) { - UsbReportUpdateSemaphore |= 1 << USB_MEDIA_KEYBOARD_INTERFACE_INDEX; - UsbMediaKeyboardAction(); + status = UsbMediaKeyboardAction(); + if (status == kStatus_USB_Success) { + UsbReportUpdateSemaphore |= 1 << USB_MEDIA_KEYBOARD_INTERFACE_INDEX; + } } if (HasUsbSystemKeyboardReportChanged) { - UsbReportUpdateSemaphore |= 1 << USB_SYSTEM_KEYBOARD_INTERFACE_INDEX; - UsbSystemKeyboardAction(); + status = UsbSystemKeyboardAction(); + if (status == kStatus_USB_Success) { + UsbReportUpdateSemaphore |= 1 << USB_SYSTEM_KEYBOARD_INTERFACE_INDEX; + } } // Send out the mouse position and wheel values continuously if the report is not zeros, but only send the mouse button states when they change. if (HasUsbMouseReportChanged || ActiveUsbMouseReport->x || ActiveUsbMouseReport->y || ActiveUsbMouseReport->wheelX || ActiveUsbMouseReport->wheelY) { - UsbReportUpdateSemaphore |= 1 << USB_MOUSE_INTERFACE_INDEX; - UsbMouseAction(); + status = UsbMouseAction(); + if (status == kStatus_USB_Success) { + UsbReportUpdateSemaphore |= 1 << USB_MOUSE_INTERFACE_INDEX; + } } } From d3dfc9bd2c00a0f2612c8bb33a3cc8587855b1e6 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Fri, 29 Jun 2018 22:53:27 -0700 Subject: [PATCH 18/20] Revert "Simplify logic" This reverts commit 994e2f6b79ce76f12e8f17c0c6d691caab7046b5. --- right/src/usb_interfaces/usb_interface_basic_keyboard.c | 8 +++++--- right/src/usb_interfaces/usb_interface_media_keyboard.c | 8 +++++--- right/src/usb_interfaces/usb_interface_mouse.c | 8 +++++--- right/src/usb_interfaces/usb_interface_system_keyboard.c | 8 +++++--- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/right/src/usb_interfaces/usb_interface_basic_keyboard.c b/right/src/usb_interfaces/usb_interface_basic_keyboard.c index 77146dd..df6fecb 100644 --- a/right/src/usb_interfaces/usb_interface_basic_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_basic_keyboard.c @@ -24,12 +24,14 @@ void ResetActiveUsbBasicKeyboardReport(void) usb_status_t UsbBasicKeyboardAction(void) { + SwitchActiveUsbBasicKeyboardReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( - UsbCompositeDevice.basicKeyboardHandle, USB_BASIC_KEYBOARD_ENDPOINT_INDEX, - (uint8_t *)ActiveUsbBasicKeyboardReport, USB_BASIC_KEYBOARD_REPORT_LENGTH); + UsbCompositeDevice.basicKeyboardHandle, USB_BASIC_KEYBOARD_ENDPOINT_INDEX, + (uint8_t*)GetInactiveUsbBasicKeyboardReport(), USB_BASIC_KEYBOARD_REPORT_LENGTH); if (usb_status == kStatus_USB_Success) { UsbBasicKeyboardActionCounter++; - SwitchActiveUsbBasicKeyboardReport(); + } else { + SwitchActiveUsbBasicKeyboardReport(); // Switch back, as the command failed } return usb_status; } diff --git a/right/src/usb_interfaces/usb_interface_media_keyboard.c b/right/src/usb_interfaces/usb_interface_media_keyboard.c index 186e230..d155f36 100644 --- a/right/src/usb_interfaces/usb_interface_media_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_media_keyboard.c @@ -22,12 +22,14 @@ void ResetActiveUsbMediaKeyboardReport(void) usb_status_t UsbMediaKeyboardAction(void) { + SwitchActiveUsbMediaKeyboardReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( - UsbCompositeDevice.mediaKeyboardHandle, USB_MEDIA_KEYBOARD_ENDPOINT_INDEX, - (uint8_t *)ActiveUsbMediaKeyboardReport, USB_MEDIA_KEYBOARD_REPORT_LENGTH); + UsbCompositeDevice.mediaKeyboardHandle, USB_MEDIA_KEYBOARD_ENDPOINT_INDEX, + (uint8_t*)GetInactiveUsbMediaKeyboardReport(), USB_MEDIA_KEYBOARD_REPORT_LENGTH); if (usb_status == kStatus_USB_Success) { UsbMediaKeyboardActionCounter++; - SwitchActiveUsbMediaKeyboardReport(); + } else { + SwitchActiveUsbMediaKeyboardReport(); // Switch back, as the command failed } return usb_status; } diff --git a/right/src/usb_interfaces/usb_interface_mouse.c b/right/src/usb_interfaces/usb_interface_mouse.c index 15fd1fe..ba77d84 100644 --- a/right/src/usb_interfaces/usb_interface_mouse.c +++ b/right/src/usb_interfaces/usb_interface_mouse.c @@ -22,12 +22,14 @@ void ResetActiveUsbMouseReport(void) usb_status_t UsbMouseAction(void) { + SwitchActiveUsbMouseReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( - UsbCompositeDevice.mouseHandle, USB_MOUSE_ENDPOINT_INDEX, - (uint8_t *)ActiveUsbMouseReport, USB_MOUSE_REPORT_LENGTH); + UsbCompositeDevice.mouseHandle, USB_MOUSE_ENDPOINT_INDEX, + (uint8_t*)GetInactiveUsbMouseReport(), USB_MOUSE_REPORT_LENGTH); if (usb_status == kStatus_USB_Success) { UsbMouseActionCounter++; - SwitchActiveUsbMouseReport(); + } else { + SwitchActiveUsbMouseReport(); // Switch back, as the command failed } return usb_status; } diff --git a/right/src/usb_interfaces/usb_interface_system_keyboard.c b/right/src/usb_interfaces/usb_interface_system_keyboard.c index 2304b56..3d10762 100644 --- a/right/src/usb_interfaces/usb_interface_system_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_system_keyboard.c @@ -22,12 +22,14 @@ void ResetActiveUsbSystemKeyboardReport(void) usb_status_t UsbSystemKeyboardAction(void) { + SwitchActiveUsbSystemKeyboardReport(); // Switch the active report usb_status_t usb_status = USB_DeviceHidSend( - UsbCompositeDevice.systemKeyboardHandle, USB_SYSTEM_KEYBOARD_ENDPOINT_INDEX, - (uint8_t *)ActiveUsbSystemKeyboardReport, USB_SYSTEM_KEYBOARD_REPORT_LENGTH); + UsbCompositeDevice.systemKeyboardHandle, USB_SYSTEM_KEYBOARD_ENDPOINT_INDEX, + (uint8_t*)GetInactiveUsbSystemKeyboardReport(), USB_SYSTEM_KEYBOARD_REPORT_LENGTH); if (usb_status == kStatus_USB_Success) { UsbSystemKeyboardActionCounter++; - SwitchActiveUsbSystemKeyboardReport(); + } else { + SwitchActiveUsbSystemKeyboardReport(); // Switch back, as the command failed } return usb_status; } From e5afa33b79c4cbd3bb713f34b17410939819c4dd Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Fri, 29 Jun 2018 23:06:31 -0700 Subject: [PATCH 19/20] Allow scanning to continue if the host is asleep --- right/src/usb_report_updater.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index efd0600..87f78ca 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -409,7 +409,7 @@ void UpdateUsbReports(void) { usb_status_t status; - if (UsbReportUpdateSemaphore) { + if (UsbReportUpdateSemaphore && !IsHostSleeping) { return; } From f16a004583e5aded66e9870205b5b101e4ea89a7 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Sat, 30 Jun 2018 13:06:23 -0700 Subject: [PATCH 20/20] Revert "Default to kStatus_USB_Success" This reverts commit 6eceb6ad30930848ae7ad8d4bfc5c5d2b7f68b99. --- .../usb_interfaces/usb_interface_basic_keyboard.c | 10 +++++++--- right/src/usb_interfaces/usb_interface_generic_hid.c | 12 ++++++++---- .../usb_interfaces/usb_interface_media_keyboard.c | 11 ++++++++--- right/src/usb_interfaces/usb_interface_mouse.c | 11 ++++++++--- .../usb_interfaces/usb_interface_system_keyboard.c | 11 ++++++++--- 5 files changed, 39 insertions(+), 16 deletions(-) diff --git a/right/src/usb_interfaces/usb_interface_basic_keyboard.c b/right/src/usb_interfaces/usb_interface_basic_keyboard.c index df6fecb..087e14a 100644 --- a/right/src/usb_interfaces/usb_interface_basic_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_basic_keyboard.c @@ -38,15 +38,17 @@ usb_status_t UsbBasicKeyboardAction(void) usb_status_t UsbBasicKeyboardCallback(class_handle_t handle, uint32_t event, void *param) { - usb_status_t error = kStatus_USB_Success; + usb_status_t error = kStatus_USB_Error; switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: UsbReportUpdateSemaphore &= ~(1 << USB_BASIC_KEYBOARD_INTERFACE_INDEX); + error = kStatus_USB_Success; break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: + error = kStatus_USB_InvalidRequest; break; case kUSB_DeviceHidEventSetReport: { usb_device_hid_report_struct_t *report = (usb_device_hid_report_struct_t*)param; @@ -72,18 +74,20 @@ usb_status_t UsbBasicKeyboardCallback(class_handle_t handle, uint32_t event, voi case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: + break; default: break; } + return error; } usb_status_t UsbBasicKeyboardSetConfiguration(class_handle_t handle, uint8_t configuration) { - return kStatus_USB_Success; + return kStatus_USB_Error; } usb_status_t UsbBasicKeyboardSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting) { - return kStatus_USB_Success; + return kStatus_USB_Error; } diff --git a/right/src/usb_interfaces/usb_interface_generic_hid.c b/right/src/usb_interfaces/usb_interface_generic_hid.c index 5bd4569..446821e 100644 --- a/right/src/usb_interfaces/usb_interface_generic_hid.c +++ b/right/src/usb_interfaces/usb_interface_generic_hid.c @@ -15,7 +15,7 @@ static usb_status_t UsbReceiveData(void) usb_status_t UsbGenericHidCallback(class_handle_t handle, uint32_t event, void *param) { - usb_status_t error = kStatus_USB_Success; + usb_status_t error = kStatus_USB_Error; switch (event) { case kUSB_DeviceHidEventSendResponse: @@ -28,18 +28,22 @@ usb_status_t UsbGenericHidCallback(class_handle_t handle, uint32_t event, void * GenericHidOutBuffer, USB_GENERIC_HID_OUT_BUFFER_LENGTH); UsbGenericHidActionCounter++; - error = UsbReceiveData(); + return UsbReceiveData(); break; case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: case kUSB_DeviceHidEventRequestReportBuffer: + error = kStatus_USB_InvalidRequest; + break; case kUSB_DeviceHidEventGetIdle: case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: + break; default: break; } + return error; } @@ -48,7 +52,7 @@ usb_status_t UsbGenericHidSetConfiguration(class_handle_t handle, uint8_t config if (USB_COMPOSITE_CONFIGURATION_INDEX == configuration) { return UsbReceiveData(); } - return kStatus_USB_Success; + return kStatus_USB_Error; } usb_status_t UsbGenericHidSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting) @@ -56,5 +60,5 @@ usb_status_t UsbGenericHidSetInterface(class_handle_t handle, uint8_t interface, if (USB_GENERIC_HID_INTERFACE_INDEX == interface) { return UsbReceiveData(); } - return kStatus_USB_Success; + return kStatus_USB_Error; } diff --git a/right/src/usb_interfaces/usb_interface_media_keyboard.c b/right/src/usb_interfaces/usb_interface_media_keyboard.c index d155f36..faf335e 100644 --- a/right/src/usb_interfaces/usb_interface_media_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_media_keyboard.c @@ -36,33 +36,38 @@ usb_status_t UsbMediaKeyboardAction(void) usb_status_t UsbMediaKeyboardCallback(class_handle_t handle, uint32_t event, void *param) { - usb_status_t error = kStatus_USB_Success; + usb_status_t error = kStatus_USB_Error; switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: UsbReportUpdateSemaphore &= ~(1 << USB_MEDIA_KEYBOARD_INTERFACE_INDEX); + error = kStatus_USB_Success; break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: case kUSB_DeviceHidEventRequestReportBuffer: + error = kStatus_USB_InvalidRequest; + break; case kUSB_DeviceHidEventGetIdle: case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: + break; default: break; } + return error; } usb_status_t UsbMediaKeyboardSetConfiguration(class_handle_t handle, uint8_t configuration) { - return kStatus_USB_Success; + return kStatus_USB_Error; } usb_status_t UsbMediaKeyboardSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting) { - return kStatus_USB_Success; + return kStatus_USB_Error; } diff --git a/right/src/usb_interfaces/usb_interface_mouse.c b/right/src/usb_interfaces/usb_interface_mouse.c index ba77d84..ba6824f 100644 --- a/right/src/usb_interfaces/usb_interface_mouse.c +++ b/right/src/usb_interfaces/usb_interface_mouse.c @@ -36,33 +36,38 @@ usb_status_t UsbMouseAction(void) usb_status_t UsbMouseCallback(class_handle_t handle, uint32_t event, void *param) { - usb_status_t error = kStatus_USB_Success; + usb_status_t error = kStatus_USB_Error; switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: UsbReportUpdateSemaphore &= ~(1 << USB_MOUSE_INTERFACE_INDEX); + error = kStatus_USB_Success; break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: case kUSB_DeviceHidEventRequestReportBuffer: + error = kStatus_USB_InvalidRequest; + break; case kUSB_DeviceHidEventGetIdle: case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: + break; default: break; } + return error; } usb_status_t UsbMouseSetConfiguration(class_handle_t handle, uint8_t configuration) { - return kStatus_USB_Success; + return kStatus_USB_Error; } usb_status_t UsbMouseSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting) { - return kStatus_USB_Success; + return kStatus_USB_Error; } diff --git a/right/src/usb_interfaces/usb_interface_system_keyboard.c b/right/src/usb_interfaces/usb_interface_system_keyboard.c index 3d10762..a432675 100644 --- a/right/src/usb_interfaces/usb_interface_system_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_system_keyboard.c @@ -36,33 +36,38 @@ usb_status_t UsbSystemKeyboardAction(void) usb_status_t UsbSystemKeyboardCallback(class_handle_t handle, uint32_t event, void *param) { - usb_status_t error = kStatus_USB_Success; + usb_status_t error = kStatus_USB_Error; switch (event) { // This report is received when the report has been sent case kUSB_DeviceHidEventSendResponse: UsbReportUpdateSemaphore &= ~(1 << USB_SYSTEM_KEYBOARD_INTERFACE_INDEX); + error = kStatus_USB_Success; break; case kUSB_DeviceHidEventRecvResponse: case kUSB_DeviceHidEventGetReport: case kUSB_DeviceHidEventSetReport: case kUSB_DeviceHidEventRequestReportBuffer: + error = kStatus_USB_InvalidRequest; + break; case kUSB_DeviceHidEventGetIdle: case kUSB_DeviceHidEventGetProtocol: case kUSB_DeviceHidEventSetIdle: case kUSB_DeviceHidEventSetProtocol: + break; default: break; } + return error; } usb_status_t UsbSystemKeyboardSetConfiguration(class_handle_t handle, uint8_t configuration) { - return kStatus_USB_Success; + return kStatus_USB_Error; } usb_status_t UsbSystemKeyboardSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting) { - return kStatus_USB_Success; + return kStatus_USB_Error; }