From 9fcd22973959147e3ff0b29f4d73c6776e614597 Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Sun, 21 Jul 2024 17:23:05 +0200 Subject: usb: Add delays before transfers This is required to avoid pipe/timeout errors with xHCI controllers. Signed-off-by: Paul Kocialkowski --- src/usb.c | 6 ++++++ 1 file changed, 6 insertions(+) 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"); -- cgit v1.2.3