X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Ffx2lafw%2Ffx2lafw.c;h=7142a35de7037f9070bc651f0798b1935bf50d76;hb=c9166745f23889e1c5abb010513733c829c00d1b;hp=28866133962ec6d3eb5e3b7883d34b770068e95f;hpb=0caa1ef0cb0b2231e232a7d1681e4e13fe838035;p=libsigrok.git diff --git a/hardware/fx2lafw/fx2lafw.c b/hardware/fx2lafw/fx2lafw.c index 28866133..7142a35d 100644 --- a/hardware/fx2lafw/fx2lafw.c +++ b/hardware/fx2lafw/fx2lafw.c @@ -24,12 +24,19 @@ #include #include #include "config.h" -#include "sigrok.h" -#include "sigrok-internal.h" +#include "libsigrok.h" +#include "libsigrok-internal.h" #include "fx2lafw.h" #include "command.h" static const struct fx2lafw_profile supported_fx2[] = { + /* + * CWAV USBee DX + * XZL Studio DX + */ + { 0x08a9, 0x0015, "CWAV", "USBee DX", NULL, + FIRMWARE_DIR "/fx2lafw-cwav-usbeedx.fw", + 0 }, /* * CWAV USBee AX * EE Electronics ESLA201A @@ -662,11 +669,11 @@ static int receive_data(int fd, int revents, void *cb_data) static void abort_acquisition(struct context *ctx) { - unsigned int i; + int i; ctx->num_samples = -1; - for (i = 0; i < ctx->num_transfers; i++) { + for (i = ctx->num_transfers - 1; i >= 0; i--) { if (ctx->transfers[i]) libusb_cancel_transfer(ctx->transfers[i]); } @@ -918,6 +925,10 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data) if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) return SR_ERR; ctx = sdi->priv; + + if (ctx->submitted_transfers != 0) + return SR_ERR; + ctx->session_dev_id = cb_data; ctx->num_samples = 0; ctx->empty_transfer_count = 0; @@ -942,9 +953,9 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data) 2 | LIBUSB_ENDPOINT_IN, buf, size, receive_transfer, ctx, timeout); if (libusb_submit_transfer(transfer) != 0) { - /* TODO: Free them all. */ libusb_free_transfer(transfer); g_free(buf); + abort_acquisition(ctx); return SR_ERR; } ctx->transfers[i] = transfer; @@ -972,6 +983,7 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data) if ((ret = command_start_acquisition (ctx->usb->devhdl, ctx->cur_samplerate, ctx->sample_wide)) != SR_OK) { + abort_acquisition(ctx); return ret; }