X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=src%2Fhardware%2Fkingst-la2016%2Fapi.c;h=216869ed8f222b29bb7599712a24e26ee72b01c4;hp=32d67f61b81ae821bfef2a809d658f96e805c41c;hb=fb28e72dfdea0d985e03795f1f058aa4621e7e55;hpb=8b172e78f6b9643cd62384df87459acb71f60d62 diff --git a/src/hardware/kingst-la2016/api.c b/src/hardware/kingst-la2016/api.c index 32d67f61..216869ed 100644 --- a/src/hardware/kingst-la2016/api.c +++ b/src/hardware/kingst-la2016/api.c @@ -504,13 +504,14 @@ static int config_list(uint32_t key, GVariant **data, { struct dev_context *devc; - devc = sdi->priv; - switch (key) { case SR_CONF_SCAN_OPTIONS: case SR_CONF_DEVICE_OPTIONS: return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts); case SR_CONF_SAMPLERATE: + if (!sdi) + return SR_ERR_ARG; + devc = sdi->priv; if (devc->max_samplerate == SR_MHZ(200)) { *data = std_gvar_samplerates(ARRAY_AND_SIZE(samplerates_la2016)); } @@ -641,8 +642,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, @@ -674,7 +678,7 @@ static int handle_event(int fd, int revents, void *cb_data) if (devc->have_trigger == 0) { if (la2016_has_triggered(sdi) == 0) { - /*sr_dbg("not yet ready for download...");*/ + /* not yet ready for download */ return TRUE; } devc->have_trigger = 1;