]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/kingst-la2016/api.c
kingst-la2016: handle sdi==NULL in config_list
[libsigrok.git] / src / hardware / kingst-la2016 / api.c
index 32d67f61b81ae821bfef2a809d658f96e805c41c..216869ed8f222b29bb7599712a24e26ee72b01c4 100644 (file)
@@ -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;