]> sigrok.org Git - libsigrok.git/commitdiff
kingst-la2016: rephrase USB bulk transfer size padding constraint
authorGerhard Sittig <redacted>
Mon, 31 Jan 2022 21:08:41 +0000 (22:08 +0100)
committerGerhard Sittig <redacted>
Sun, 6 Feb 2022 17:53:54 +0000 (18:53 +0100)
Always round up capture data USB bulk transfer sizes to full EP 6 packet
sizes. The previous implementation suggested that it's only required for
smaller transfers, but it's just a coincidence that the upper limit of
256KiB happened to also be a multiple of the 512B packet size.

It's assumed that capping at the absolute size limit and always padding
is more readable and as reliable as the previous if-else logic was.

Rephrase the round up by means of integer multiplication instead of
bit twiddling. Compilers should get what is intended, humans may prefer
to read the former.

src/hardware/kingst-la2016/protocol.c

index a92c822ae128edac7313026561a535f63d5f5d34..6ab72df02ecc517992a758c798fe50a80b97d53b 100644 (file)
@@ -1018,8 +1018,9 @@ static int la2016_start_download(const struct sr_dev_inst *sdi,
        to_read = devc->n_bytes_to_read;
        if (to_read >= LA2016_USB_BUFSZ) /* Multiple transfers. */
                to_read = LA2016_USB_BUFSZ;
-       else /* One transfer. */
-               to_read = (to_read + (LA2016_EP6_PKTSZ-1)) & ~(LA2016_EP6_PKTSZ-1);
+       to_read += LA2016_EP6_PKTSZ - 1;
+       to_read /= LA2016_EP6_PKTSZ;
+       to_read *= LA2016_EP6_PKTSZ;
        buffer = g_try_malloc(to_read);
        if (!buffer) {
                sr_dbg("USB bulk transfer size %d bytes.", (int)to_read);
@@ -1144,8 +1145,9 @@ static void LIBUSB_CALL receive_transfer(struct libusb_transfer *transfer)
                 */
                if (to_read >= LA2016_USB_BUFSZ)
                        to_read = LA2016_USB_BUFSZ;
-               else
-                       to_read = (to_read + (LA2016_EP6_PKTSZ-1)) & ~(LA2016_EP6_PKTSZ-1);
+               to_read += LA2016_EP6_PKTSZ - 1;
+               to_read /= LA2016_EP6_PKTSZ;
+               to_read *= LA2016_EP6_PKTSZ;
                libusb_fill_bulk_transfer(transfer,
                        usb->devhdl, USB_EP_CAPTURE_DATA | LIBUSB_ENDPOINT_IN,
                        transfer->buffer, to_read,