]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/kingst-la2016/api.c
kingst-la2016: setup usb transfer sizes to be multiple of endpoint max packet size...
[libsigrok.git] / src / hardware / kingst-la2016 / api.c
index 9ab2e564f944435750e44afdd5ef344a5bb0f512..1b1b425a0204169440429807430067f4ac58064a 100644 (file)
@@ -641,8 +641,11 @@ static void LIBUSB_CALL receive_transfer(struct libusb_transfer *transfer)
        devc->n_bytes_to_read -= transfer->actual_length;
        if (devc->n_bytes_to_read) {
                uint32_t to_read = devc->n_bytes_to_read;
-               if (to_read > LA2016_BULK_MAX)
-                       to_read = LA2016_BULK_MAX;
+               /* determine read size for the next usb transfer */
+               if (to_read >= LA2016_USB_BUFSZ)
+                       to_read = LA2016_USB_BUFSZ;
+               else /* last transfer, make read size some multiple of LA2016_EP6_PKTSZ */
+                       to_read = (to_read + (LA2016_EP6_PKTSZ-1)) & ~(LA2016_EP6_PKTSZ-1);
                libusb_fill_bulk_transfer(
                        transfer, usb->devhdl,
                        0x86, transfer->buffer, to_read,