]> sigrok.org Git - libsigrok.git/blobdiff - hardware/fx2lafw/fx2lafw.c
allow for intermediate stage in stopping acquisition
[libsigrok.git] / hardware / fx2lafw / fx2lafw.c
index d519db6f4099a1fd6d47b74933e65bfeb7f62137..89eb01ee85dc10443b5d5a8020ccddace0993c12 100644 (file)
@@ -23,7 +23,6 @@
 #include <string.h>
 #include <inttypes.h>
 #include <libusb.h>
-#include "config.h"
 #include "libsigrok.h"
 #include "libsigrok-internal.h"
 #include "fx2lafw.h"
@@ -144,8 +143,7 @@ static struct sr_dev_driver *fdi = &fx2lafw_driver_info;
 static int hw_dev_close(struct sr_dev_inst *sdi);
 static int hw_dev_config_set(const struct sr_dev_inst *sdi, int hwcap,
                const void *value);
-static int hw_dev_acquisition_stop(const struct sr_dev_inst *sdi,
-               void *cb_data);
+static int hw_dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data);
 
 /**
  * Check the USB configuration to determine if this is an fx2lafw device.
@@ -195,13 +193,11 @@ static int fx2lafw_dev_open(struct sr_dev_inst *sdi)
 {
        libusb_device **devlist;
        struct libusb_device_descriptor des;
-       struct drv_context *drvc;
        struct dev_context *devc;
        struct version_info vi;
        int ret, skip, i;
        uint8_t revid;
 
-       drvc = fdi->priv;
        devc = sdi->priv;
 
        if (sdi->status == SR_ST_ACTIVE)
@@ -209,7 +205,7 @@ static int fx2lafw_dev_open(struct sr_dev_inst *sdi)
                return SR_ERR;
 
        skip = 0;
-       const int device_count = libusb_get_device_list(drvc->usb_context, &devlist);
+       const int device_count = libusb_get_device_list(NULL, &devlist);
        if (device_count < 0) {
                sr_err("fx2lafw: Failed to retrieve device list (%d)",
                        device_count);
@@ -409,10 +405,10 @@ static int hw_init(void)
 
        if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
                sr_err("fx2lafw: driver context malloc failed.");
-               return SR_ERR;
+               return SR_ERR_MALLOC;
        }
 
-       if (libusb_init(&drvc->usb_context) != 0) {
+       if (libusb_init(NULL) != 0) {
                g_free(drvc);
                sr_warn("fx2lafw: Failed to initialize libusb.");
                return SR_ERR;
@@ -444,7 +440,7 @@ static GSList *hw_scan(GSList *options)
 
        /* Find all fx2lafw compatible devices and upload firmware to them. */
        devices = NULL;
-       libusb_get_device_list(drvc->usb_context, &devlist);
+       libusb_get_device_list(NULL, &devlist);
        for (i = 0; devlist[i]; i++) {
 
                if ((ret = libusb_get_device_descriptor(
@@ -616,9 +612,7 @@ static int hw_cleanup(void)
 
        ret = clear_instances();
 
-       if (drvc->usb_context)
-               libusb_exit(drvc->usb_context);
-       drvc->usb_context = NULL;
+       libusb_exit(NULL);
 
        g_free(drvc);
        fdi->priv = NULL;
@@ -690,7 +684,6 @@ static int hw_dev_config_set(const struct sr_dev_inst *sdi, int hwcap,
 
 static int receive_data(int fd, int revents, void *cb_data)
 {
-       struct drv_context *drvc;
        struct timeval tv;
 
        /* Avoid compiler warnings. */
@@ -698,9 +691,8 @@ static int receive_data(int fd, int revents, void *cb_data)
        (void)revents;
        (void)cb_data;
 
-       drvc = fdi->priv;
        tv.tv_sec = tv.tv_usec = 0;
-       libusb_handle_events_timeout(drvc->usb_context, &tv);
+       libusb_handle_events_timeout(NULL, &tv);
 
        return TRUE;
 }
@@ -719,11 +711,9 @@ static void abort_acquisition(struct dev_context *devc)
 
 static void finish_acquisition(struct dev_context *devc)
 {
-       struct drv_context *drvc;
        struct sr_datafeed_packet packet;
        int i;
 
-       drvc = fdi->priv;
 
        /* Terminate session */
        packet.type = SR_DF_END;
@@ -731,7 +721,7 @@ static void finish_acquisition(struct dev_context *devc)
 
        /* Remove fds from polling */
        const struct libusb_pollfd **const lupfd =
-               libusb_get_pollfds(drvc->usb_context);
+               libusb_get_pollfds(NULL);
        for (i = 0; lupfd[i]; i++)
                sr_source_remove(lupfd[i]->fd);
        free(lupfd); /* NOT g_free()! */
@@ -956,7 +946,6 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi,
        struct sr_datafeed_packet packet;
        struct sr_datafeed_header header;
        struct sr_datafeed_meta_logic meta;
-       struct drv_context *drvc;
        struct dev_context *devc;
        struct libusb_transfer *transfer;
        const struct libusb_pollfd **lupfd;
@@ -964,7 +953,6 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi,
        int ret;
        unsigned char *buf;
 
-       drvc = fdi->priv;
        devc = sdi->priv;
        if (devc->submitted_transfers != 0)
                return SR_ERR;
@@ -983,8 +971,10 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi,
        const size_t size = get_buffer_size(devc);
 
        devc->transfers = g_try_malloc0(sizeof(*devc->transfers) * num_transfers);
-       if (!devc->transfers)
-               return SR_ERR;
+       if (!devc->transfers) {
+               sr_err("fx2lafw: USB transfers malloc failed.");
+               return SR_ERR_MALLOC;
+       }
 
        devc->num_transfers = num_transfers;
 
@@ -1007,7 +997,7 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi,
                devc->submitted_transfers++;
        }
 
-       lupfd = libusb_get_pollfds(drvc->usb_context);
+       lupfd = libusb_get_pollfds(NULL);
        for (i = 0; lupfd[i]; i++)
                sr_source_add(lupfd[i]->fd, lupfd[i]->events,
                              timeout, receive_data, NULL);
@@ -1036,8 +1026,7 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi,
 }
 
 /* TODO: This stops acquisition on ALL devices, ignoring dev_index. */
-static int hw_dev_acquisition_stop(const struct sr_dev_inst *sdi,
-               void *cb_data)
+static int hw_dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data)
 {
 
        /* Avoid compiler warnings. */