diff options
author | Paul Kocialkowski | 2024-07-21 17:23:05 +0200 |
---|---|---|
committer | Paul Kocialkowski | 2024-07-21 17:24:31 +0200 |
commit | 9fcd22973959147e3ff0b29f4d73c6776e614597 (patch) | |
tree | c8cf07c2585e6c97f483d8b73cebbe11edf249e4 /src/usb.c | |
parent | af8058cc56dbd362e1a74dc70aa93d1902ff1760 (diff) |
This is required to avoid pipe/timeout errors with xHCI controllers.
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
Diffstat (limited to 'src/usb.c')
-rw-r--r-- | src/usb.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -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"); |