aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Kocialkowski2024-07-21 17:23:05 +0200
committerPaul Kocialkowski2024-07-21 17:24:31 +0200
commit9fcd22973959147e3ff0b29f4d73c6776e614597 (patch)
treec8cf07c2585e6c97f483d8b73cebbe11edf249e4
parentaf8058cc56dbd362e1a74dc70aa93d1902ff1760 (diff)
usb: Add delays before transfersHEADmaster
This is required to avoid pipe/timeout errors with xHCI controllers. Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
-rw-r--r--src/usb.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/usb.c b/src/usb.c
index 0871868..847dab4 100644
--- a/src/usb.c
+++ b/src/usb.c
@@ -181,6 +181,8 @@ int usb_send(struct context *context, const void *data, size_t size)
while (count < size) {
chunk = (size - count) < USB_SEND_CHUNK ? (size - count) : USB_SEND_CHUNK;
+ usleep(1000);
+
rc = libusb_bulk_transfer(context->usb_handle, USB_ENDPOINT_OUT, p, chunk, &transferred, USB_TIMEOUT);
if (rc < 0 || transferred <= 0) {
fprintf(stderr, "Bulk USB transfer failed\n");
@@ -211,6 +213,8 @@ int usb_recv(struct context *context, void *data, size_t size)
while (count < size) {
chunk = (size - count) < USB_RECV_CHUNK ? (size - count) : USB_RECV_CHUNK;
+ usleep(1000);
+
rc = libusb_bulk_transfer(context->usb_handle, USB_ENDPOINT_IN, p, chunk, &transferred, USB_TIMEOUT);
if (rc < 0 || transferred <= 0) {
fprintf(stderr, "Bulk USB transfer failed\n");
@@ -235,6 +239,8 @@ int usb_recv_available(struct context *context, void *data, size_t size)
chunk = size < USB_RECV_CHUNK ? size : USB_RECV_CHUNK;
+ usleep(1000);
+
rc = libusb_bulk_transfer(context->usb_handle, USB_ENDPOINT_IN, data, chunk, &transferred, USB_TIMEOUT);
if (rc < 0 || transferred <= 0) {
fprintf(stderr, "Bulk USB transfer failed\n");