diff --git a/right/src/usb_interfaces/usb_interface_basic_keyboard.c b/right/src/usb_interfaces/usb_interface_basic_keyboard.c index 2bf39e8..058ccd7 100644 --- a/right/src/usb_interfaces/usb_interface_basic_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_basic_keyboard.c @@ -23,8 +23,12 @@ 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 + if (((usb_device_hid_struct_t *)UsbCompositeDevice.basicKeyboardHandle)->interruptInPipeBusy) { + ((usb_device_hid_struct_t *)UsbCompositeDevice.basicKeyboardHandle)->interruptInPipeBusy = 0; + return USB_DeviceCancel(((usb_device_hid_struct_t *)UsbCompositeDevice.basicKeyboardHandle)->handle, + (USB_BASIC_KEYBOARD_ENDPOINT_INDEX & USB_ENDPOINT_NUMBER_MASK) | + USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN); + } UsbBasicKeyboardActionCounter++; SwitchActiveUsbBasicKeyboardReport(); // Switch the active report diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 7710b85..877f235 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -402,20 +402,20 @@ static void updateActiveUsbReports(void) } uint32_t UsbReportUpdateCounter; -static uint32_t lastMouseUpdateTimeMicros; +static uint32_t lastMouseUpdateTime; void UpdateUsbReports(void) { UsbReportUpdateCounter++; - if (((usb_device_hid_struct_t *)UsbCompositeDevice.basicKeyboardHandle)->interruptInPipeBusy || + /*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) { + } else */if (Timer_GetElapsedTime(&lastMouseUpdateTime) < USB_BASIC_KEYBOARD_INTERRUPT_IN_INTERVAL) { return; } - Timer_SetCurrentTimeMicros(&lastMouseUpdateTimeMicros); + Timer_SetCurrentTime(&lastMouseUpdateTime); ResetActiveUsbBasicKeyboardReport(); ResetActiveUsbMediaKeyboardReport();