diff --git a/right/src/usb_interfaces/usb_interface_basic_keyboard.c b/right/src/usb_interfaces/usb_interface_basic_keyboard.c index 9d4a892..c3e6fdd 100644 --- a/right/src/usb_interfaces/usb_interface_basic_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_basic_keyboard.c @@ -5,7 +5,6 @@ static usb_basic_keyboard_report_t usbBasicKeyboardReports[2]; uint32_t UsbBasicKeyboardActionCounter; usb_basic_keyboard_report_t* ActiveUsbBasicKeyboardReport = usbBasicKeyboardReports; static uint8_t usbBasicKeyboardInBuffer[USB_BASIC_KEYBOARD_REPORT_LENGTH]; -static volatile bool sendUsbBasicKeyboardReportCompleted = true; usb_basic_keyboard_report_t* GetInactiveUsbBasicKeyboardReport(void) { @@ -24,7 +23,7 @@ void ResetActiveUsbBasicKeyboardReport(void) usb_status_t UsbBasicKeyboardAction(void) { - if (!sendUsbBasicKeyboardReportCompleted) + if (((usb_device_hid_struct_t *)UsbCompositeDevice.basicKeyboardHandle)->interruptInPipeBusy) return kStatus_USB_Busy; // The previous report has not been sent yet UsbBasicKeyboardActionCounter++; @@ -32,8 +31,8 @@ usb_status_t UsbBasicKeyboardAction(void) 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) { - sendUsbBasicKeyboardReportCompleted = false; + if (usb_status != kStatus_USB_Success) { + SwitchActiveUsbBasicKeyboardReport(); // Switch back, as the command failed } return usb_status; } @@ -45,7 +44,6 @@ 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: - sendUsbBasicKeyboardReportCompleted = true; error = kStatus_USB_Success; break; case kUSB_DeviceHidEventRecvResponse: diff --git a/right/src/usb_interfaces/usb_interface_media_keyboard.c b/right/src/usb_interfaces/usb_interface_media_keyboard.c index c8aae80..b5e3cab 100644 --- a/right/src/usb_interfaces/usb_interface_media_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_media_keyboard.c @@ -3,7 +3,6 @@ uint32_t UsbMediaKeyboardActionCounter; static usb_media_keyboard_report_t usbMediaKeyboardReports[2]; usb_media_keyboard_report_t* ActiveUsbMediaKeyboardReport = usbMediaKeyboardReports; -static volatile bool sendUsbMediaKeyboardReportCompleted = true; usb_media_keyboard_report_t* GetInactiveUsbMediaKeyboardReport(void) { @@ -22,7 +21,7 @@ void ResetActiveUsbMediaKeyboardReport(void) usb_status_t UsbMediaKeyboardAction() { - if (!sendUsbMediaKeyboardReportCompleted) + if (((usb_device_hid_struct_t *)UsbCompositeDevice.mediaKeyboardHandle)->interruptInPipeBusy) return kStatus_USB_Busy; // The previous report has not been sent yet UsbMediaKeyboardActionCounter++; @@ -30,8 +29,8 @@ usb_status_t UsbMediaKeyboardAction() 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) { - sendUsbMediaKeyboardReportCompleted = false; + if (usb_status != kStatus_USB_Success) { + SwitchActiveUsbMediaKeyboardReport(); // Switch back, as the command failed } return usb_status; } @@ -43,7 +42,6 @@ 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: - sendUsbMediaKeyboardReportCompleted = true; error = kStatus_USB_Success; break; case kUSB_DeviceHidEventRecvResponse: diff --git a/right/src/usb_interfaces/usb_interface_mouse.c b/right/src/usb_interfaces/usb_interface_mouse.c index f1da8b5..7b39c4f 100644 --- a/right/src/usb_interfaces/usb_interface_mouse.c +++ b/right/src/usb_interfaces/usb_interface_mouse.c @@ -3,7 +3,6 @@ uint32_t UsbMouseActionCounter; static usb_mouse_report_t usbMouseReports[2]; usb_mouse_report_t* ActiveUsbMouseReport = usbMouseReports; -volatile bool sendUsbMouseReportCompleted = true; usb_mouse_report_t* GetInactiveUsbMouseReport(void) { @@ -22,7 +21,7 @@ void ResetActiveUsbMouseReport(void) usb_status_t usbMouseAction(void) { - if (!sendUsbMouseReportCompleted) + if (((usb_device_hid_struct_t *)UsbCompositeDevice.mouseHandle)->interruptInPipeBusy) return kStatus_USB_Busy; // The previous report has not been sent yet UsbMouseActionCounter++; @@ -30,8 +29,8 @@ usb_status_t usbMouseAction(void) 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) { - sendUsbMouseReportCompleted = false; + if (usb_status != kStatus_USB_Success) { + SwitchActiveUsbMouseReport(); // Switch back, as the command failed } return usb_status; } @@ -43,7 +42,6 @@ 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: - sendUsbMouseReportCompleted = true; error = kStatus_USB_Success; break; case kUSB_DeviceHidEventRecvResponse: diff --git a/right/src/usb_interfaces/usb_interface_system_keyboard.c b/right/src/usb_interfaces/usb_interface_system_keyboard.c index a051843..33c19b4 100644 --- a/right/src/usb_interfaces/usb_interface_system_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_system_keyboard.c @@ -3,7 +3,6 @@ uint32_t UsbSystemKeyboardActionCounter; static usb_system_keyboard_report_t usbSystemKeyboardReports[2]; usb_system_keyboard_report_t* ActiveUsbSystemKeyboardReport = usbSystemKeyboardReports; -static volatile bool sendUsbSystemKeyboardReportCompleted = true; usb_system_keyboard_report_t* GetInactiveUsbSystemKeyboardReport() { @@ -22,7 +21,7 @@ void ResetActiveUsbSystemKeyboardReport(void) usb_status_t UsbSystemKeyboardAction(void) { - if (!sendUsbSystemKeyboardReportCompleted) + if (((usb_device_hid_struct_t *)UsbCompositeDevice.systemKeyboardHandle)->interruptInPipeBusy) return kStatus_USB_Busy; // The previous report has not been sent yet UsbSystemKeyboardActionCounter++; @@ -30,8 +29,8 @@ usb_status_t UsbSystemKeyboardAction(void) 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) { - sendUsbSystemKeyboardReportCompleted = false; + if (usb_status != kStatus_USB_Success) { + SwitchActiveUsbSystemKeyboardReport(); // Switch back, as the command failed } return usb_status; } @@ -43,7 +42,6 @@ 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: - sendUsbSystemKeyboardReportCompleted = true; error = kStatus_USB_Success; break; case kUSB_DeviceHidEventRecvResponse: