X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fdreamsourcelab-dslogic%2Fprotocol.c;h=77d1e0ef6aab6f10c058f0c69a5e5dc66d528c65;hb=91057d2fc24c0ca058aa08c8ea6ada4eadf05ffd;hp=cf6272b68b5e2bba30394a1ada9045b8a3d8f461;hpb=44b46d703612aa7dfc406043cf1b82bdae19179b;p=libsigrok.git diff --git a/src/hardware/dreamsourcelab-dslogic/protocol.c b/src/hardware/dreamsourcelab-dslogic/protocol.c index cf6272b6..77d1e0ef 100644 --- a/src/hardware/dreamsourcelab-dslogic/protocol.c +++ b/src/hardware/dreamsourcelab-dslogic/protocol.c @@ -19,7 +19,6 @@ */ #include -#include #include #include #include @@ -561,7 +560,7 @@ SR_PRIV int dslogic_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di) struct dev_context *devc; struct drv_context *drvc; struct version_info vi; - int ret, i, device_count; + int ret = SR_ERR, i, device_count; uint8_t revid; char connection_id[64]; @@ -569,10 +568,6 @@ SR_PRIV int dslogic_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di) devc = sdi->priv; usb = sdi->conn; - if (sdi->status == SR_ST_ACTIVE) - /* Device is already in use. */ - return SR_ERR; - device_count = libusb_get_device_list(drvc->sr_ctx->libusb_ctx, &devlist); if (device_count < 0) { sr_err("Failed to get device list: %s.", @@ -589,9 +584,7 @@ SR_PRIV int dslogic_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di) if ((sdi->status == SR_ST_INITIALIZING) || (sdi->status == SR_ST_INACTIVE)) { - /* - * Check device by its physical USB bus/port address. - */ + /* Check device by its physical USB bus/port address. */ usb_get_port_path(devlist[i], connection_id, sizeof(connection_id)); if (strcmp(sdi->connection_id, connection_id)) /* This is not the one. */ @@ -608,6 +601,7 @@ SR_PRIV int dslogic_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di) } else { sr_err("Failed to open device: %s.", libusb_error_name(ret)); + ret = SR_ERR; break; } @@ -616,7 +610,8 @@ SR_PRIV int dslogic_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di) if ((ret = libusb_detach_kernel_driver(usb->devhdl, USB_INTERFACE)) < 0) { sr_err("Failed to detach kernel driver: %s.", libusb_error_name(ret)); - return SR_ERR; + ret = SR_ERR; + break; } } } @@ -642,10 +637,10 @@ SR_PRIV int dslogic_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di) sr_err("Expected firmware version %d.x, " "got %d.%d.", DSLOGIC_REQUIRED_VERSION_MAJOR, vi.major, vi.minor); + ret = SR_ERR; break; } - sdi->status = SR_ST_ACTIVE; sr_info("Opened device on %d.%d (logical) / %s (physical), " "interface %d, firmware %d.%d.", usb->bus, usb->address, connection_id, @@ -654,14 +649,14 @@ SR_PRIV int dslogic_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di) sr_info("Detected REVID=%d, it's a Cypress CY7C68013%s.", revid, (revid != 1) ? " (FX2)" : "A (FX2LP)"); + ret = SR_OK; + break; } - libusb_free_device_list(devlist, 1); - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR; + libusb_free_device_list(devlist, 1); - return SR_OK; + return ret; } SR_PRIV struct dev_context *dslogic_dev_new(void) @@ -859,7 +854,8 @@ static void LIBUSB_CALL receive_transfer(struct libusb_transfer *transfer) * * Hopefully in future it will be possible to pass the data on as-is. */ - assert(transfer->actual_length % (DSLOGIC_ATOMIC_BYTES * channel_count) == 0); + if (transfer->actual_length % (DSLOGIC_ATOMIC_BYTES * channel_count) != 0) + sr_err("Invalid transfer length!"); deinterleave_buffer(transfer->buffer, transfer->actual_length, devc->deinterleave_buffer, channel_count, channel_mask); @@ -1056,9 +1052,6 @@ SR_PRIV int dslogic_acquisition_start(const struct sr_dev_inst *sdi) struct libusb_transfer *transfer; int ret; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - di = sdi->driver; drvc = di->context; devc = sdi->priv;