#include "command.h"
static const struct fx2lafw_profile supported_fx2[] = {
- /* CWAV USBee AX
+ /*
+ * CWAV USBee AX
* EE Electronics ESLA201A
*/
{ 0x08a9, 0x0014, "CWAV", "USBee AX", NULL,
FIRMWARE_DIR "/fx2lafw-cwav-usbeeax.fw", 8 },
- /* CWAV USBee SX
+ /*
+ * CWAV USBee SX
*/
{ 0x08a9, 0x0009, "CWAV", "USBee SX", NULL,
FIRMWARE_DIR "/fx2lafw-cwav-usbeesx.fw", 8 },
- /* Saleae Logic
+ /*
+ * Saleae Logic
* EE Electronics ESLA100
* Robomotic MiniLogic
*/
};
static const char *fx2lafw_probe_names[] = {
- "D0",
- "D1",
- "D2",
- "D3",
- "D4",
- "D5",
- "D6",
- "D7",
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
NULL,
};
-static uint64_t fx2lafw_supported_samplerates[] = {
+static uint64_t supported_samplerates[] = {
SR_MHZ(1),
SR_MHZ(2),
SR_MHZ(3),
SR_MHZ(24),
};
-static struct sr_samplerates fx2lafw_samplerates = {
- SR_MHZ(1),
- SR_MHZ(24),
- SR_HZ(0),
- fx2lafw_supported_samplerates,
+static struct sr_samplerates samplerates = {
+ 0,
+ 0,
+ 0,
+ supported_samplerates,
};
static GSList *dev_insts = NULL;
libusb_get_device_list(usb_context, &devlist);
for (i = 0; devlist[i]; i++) {
if ((ret = libusb_get_device_descriptor(devlist[i], &des))) {
- sr_err("fx2lafw: failed to get device descriptor: %d", ret);
+ sr_err("fx2lafw: Failed to get device descriptor: %d.",
+ ret);
continue;
}
ctx->usb->address = libusb_get_device_address(devlist[i]);
sdi->status = SR_ST_ACTIVE;
- sr_info("fx2lafw: opened device %d on %d.%d interface %d",
- sdi->index, ctx->usb->bus,
+ sr_info("fx2lafw: Opened device %d on %d.%d "
+ "interface %d.", sdi->index, ctx->usb->bus,
ctx->usb->address, USB_INTERFACE);
} else {
- sr_err("fx2lafw: failed to open device: %d", ret);
+ sr_err("fx2lafw: Failed to open device: %d.", ret);
}
/* if we made it here, we handled the device one way or another */
if (ctx->usb->devhdl == NULL)
return;
- sr_info("fx2lafw: closing device %d on %d.%d interface %d", sdi->index,
- ctx->usb->bus, ctx->usb->address, USB_INTERFACE);
+ sr_info("fx2lafw: Closing device %d on %d.%d interface %d.",
+ sdi->index, ctx->usb->bus, ctx->usb->address, USB_INTERFACE);
libusb_release_interface(ctx->usb->devhdl, USB_INTERFACE);
libusb_close(ctx->usb->devhdl);
ctx->usb->devhdl = NULL;
struct context *ctx;
if (!(ctx = g_try_malloc0(sizeof(struct context)))) {
- sr_err("fx2lafw: %s: ctx malloc failed", __func__);
+ sr_err("fx2lafw: %s: ctx malloc failed.", __func__);
return NULL;
}
(void)deviceinfo;
if (libusb_init(&usb_context) != 0) {
- sr_warn("Failed to initialize USB.");
+ sr_warn("fx2lafw: Failed to initialize libusb.");
return 0;
}
- /* Find all fx2lafw compatible devices and upload firware to all of them. */
+ /* Find all fx2lafw compatible devices and upload firware to them. */
libusb_get_device_list(usb_context, &devlist);
for (i = 0; devlist[i]; i++) {
if ((ret = libusb_get_device_descriptor(
- devlist[i], &des)) != 0) {
- sr_warn("failed to get device descriptor: %d", ret);
+ devlist[i], &des)) != 0) {
+ sr_warn("fx2lafw: Failed to get device descriptor: %d.", ret);
continue;
}
}
/* Skip if the device was not found */
- if(!fx2lafw_prof)
+ if (!fx2lafw_prof)
continue;
sdi = sr_dev_inst_new(devcnt, SR_ST_INITIALIZING,
fx2lafw_prof->vendor, fx2lafw_prof->model,
fx2lafw_prof->model_version);
- if(!sdi)
+ if (!sdi)
return 0;
ctx = fx2lafw_device_new();
if (check_conf_profile(devlist[i])) {
/* Already has the firmware, so fix the new address. */
- sr_dbg("fx2lafw: Found a fx2lafw device.");
+ sr_dbg("fx2lafw: Found an fx2lafw device.");
sdi->status = SR_ST_INACTIVE;
ctx->usb = sr_usb_dev_inst_new
(libusb_get_bus_number(devlist[i]),
/* Remember when the firmware on this device was updated */
g_get_current_time(&ctx->fw_updated);
else
- sr_err("fx2lafw: firmware upload failed for "
- "device %d", devcnt);
+ sr_err("fx2lafw: Firmware upload failed for "
+ "device %d.", devcnt);
ctx->usb = sr_usb_dev_inst_new
(libusb_get_bus_number(devlist[i]), 0xff, NULL);
}
*/
ret = 0;
if (GTV_TO_MSEC(ctx->fw_updated) > 0) {
- sr_info("fx2lafw: waiting for device to reset");
+ sr_info("fx2lafw: Waiting for device to reset.");
/* takes at least 300ms for the FX2 to be gone from the USB bus */
g_usleep(300 * 1000);
timediff = 0;
g_get_current_time(&cur_time);
timediff = GTV_TO_MSEC(cur_time) - GTV_TO_MSEC(ctx->fw_updated);
}
- sr_info("fx2lafw: device came back after %d ms", timediff);
+ sr_info("fx2lafw: Device came back after %d ms.", timediff);
} else {
ret = fx2lafw_open_dev(dev_index);
}
if (ret != SR_OK) {
- sr_err("fx2lafw: unable to open device");
+ sr_err("fx2lafw: Unable to open device.");
return SR_ERR;
}
ctx = sdi->priv;
ret = libusb_claim_interface(ctx->usb->devhdl, USB_INTERFACE);
if (ret != 0) {
- sr_err("fx2lafw: Unable to claim interface: %d", ret);
+ sr_err("fx2lafw: Unable to claim interface: %d.", ret);
return SR_ERR;
}
if (ctx->cur_samplerate == 0) {
/* Samplerate hasn't been set; default to the slowest one. */
if (hw_dev_config_set(dev_index, SR_HWCAP_SAMPLERATE,
- &fx2lafw_supported_samplerates[0]) == SR_ERR)
+ &supported_samplerates[0]) == SR_ERR)
return SR_ERR;
}
struct sr_dev_inst *sdi;
if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
- sr_err("fx2lafw: %s: sdi was NULL", __func__);
+ sr_err("fx2lafw: %s: sdi was NULL.", __func__);
return SR_ERR_BUG;
}
struct context *ctx;
int ret = SR_OK;
- for(l = dev_insts; l; l = l->next) {
+ for (l = dev_insts; l; l = l->next) {
if (!(sdi = l->data)) {
/* Log error, but continue cleaning up the rest. */
- sr_err("fx2lafw: %s: sdi was NULL, continuing", __func__);
+ sr_err("fx2lafw: %s: sdi was NULL, continuing.",
+ __func__);
ret = SR_ERR_BUG;
continue;
}
g_slist_free(dev_insts);
dev_insts = NULL;
- if(usb_context)
+ if (usb_context)
libusb_exit(usb_context);
usb_context = NULL;
case SR_DI_PROBE_NAMES:
return fx2lafw_probe_names;
case SR_DI_SAMPLERATES:
- return &fx2lafw_samplerates;
+ return &samplerates;
case SR_DI_TRIGGER_TYPES:
return TRIGGER_TYPES;
case SR_DI_CUR_SAMPLERATE:
}
static void abort_acquisition(struct context *ctx)
+{
+ ctx->num_samples = -1;
+}
+
+static void finish_acquisition(struct context *ctx)
{
struct sr_datafeed_packet packet;
+ int i;
+ /* Terminate session */
packet.type = SR_DF_END;
sr_session_send(ctx->session_dev_id, &packet);
- ctx->num_samples = -1;
-
- /* TODO: Need to cancel and free any queued up transfers. */
+ /* Remove fds from polling */
+ const struct libusb_pollfd **const lupfd =
+ libusb_get_pollfds(usb_context);
+ for (i = 0; lupfd[i]; i++)
+ sr_source_remove(lupfd[i]->fd);
+ free(lupfd); /* NOT g_free()! */
}
static void receive_transfer(struct libusb_transfer *transfer)
if (ctx->num_samples == -1) {
if (transfer)
libusb_free_transfer(transfer);
+
+ ctx->submitted_transfers--;
+ if (ctx->submitted_transfers == 0)
+ finish_acquisition(ctx);
+
return;
}
- sr_info("fx2lafw: receive_transfer(): status %d received %d bytes",
+ sr_info("fx2lafw: receive_transfer(): status %d received %d bytes.",
transfer->status, transfer->actual_length);
/* Save incoming transfer before reusing the transfer struct. */
cur_buf = transfer->buffer;
cur_buflen = transfer->actual_length;
- ctx = transfer->user_data;
/* Fire off a new request. */
if (!(new_buf = g_try_malloc(4096))) {
- sr_err("fx2lafw: %s: new_buf malloc failed", __func__);
+ sr_err("fx2lafw: %s: new_buf malloc failed.", __func__);
return; /* TODO: SR_ERR_MALLOC */
}
if (libusb_submit_transfer(transfer) != 0) {
/* TODO: Stop session? */
/* TODO: Better error message. */
- sr_err("fx2lafw: %s: libusb_submit_transfer error", __func__);
+ sr_err("fx2lafw: %s: libusb_submit_transfer error.", __func__);
}
if (cur_buflen == 0) {
ctx->num_samples = 0;
if (!(packet = g_try_malloc(sizeof(struct sr_datafeed_packet)))) {
- sr_err("fx2lafw: %s: packet malloc failed", __func__);
+ sr_err("fx2lafw: %s: packet malloc failed.", __func__);
return SR_ERR_MALLOC;
}
if (!(header = g_try_malloc(sizeof(struct sr_datafeed_header)))) {
- sr_err("fx2lafw: %s: header malloc failed", __func__);
+ sr_err("fx2lafw: %s: header malloc failed.", __func__);
return SR_ERR_MALLOC;
}
size = 2048;
for (i = 0; i < NUM_SIMUL_TRANSFERS; i++) {
if (!(buf = g_try_malloc(size))) {
- sr_err("fx2lafw: %s: buf malloc failed", __func__);
+ sr_err("fx2lafw: %s: buf malloc failed.", __func__);
return SR_ERR_MALLOC;
}
transfer = libusb_alloc_transfer(0);
g_free(buf);
return SR_ERR;
}
+
+ ctx->submitted_transfers++;
size = 4096;
}
{
struct sr_dev_inst *sdi;
- /* unused parameter */
+ /* Avoid compiler warnings. */
(void)cb_data;
if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))