X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fsysclk-lwla%2Fapi.c;h=6cd38a13a05a41891401ff60d13dc3636585d0fa;hb=53279f13e4694fcf2aba314baade418941b0bc3e;hp=99c73282bc8dfd16c544c9608274a5fdbfc8bf55;hpb=c2fdcc25a47c4c8f25e3ea96ea36a674a151e839;p=libsigrok.git diff --git a/src/hardware/sysclk-lwla/api.c b/src/hardware/sysclk-lwla/api.c index 99c73282..6cd38a13 100644 --- a/src/hardware/sysclk-lwla/api.c +++ b/src/hardware/sysclk-lwla/api.c @@ -194,20 +194,16 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) continue; /* no match */ /* Register device instance with driver. */ - sdi->driver = di; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } libusb_free_device_list(devlist, 1); g_slist_free_full(conn_devices, (GDestroyNotify)&sr_usb_dev_inst_free); - return devices; + return std_scan_complete(di, devices); } -/* Destroy the private device context. - */ -static void clear_dev_context(void *priv) +static void clear_helper(void *priv) { struct dev_context *devc; @@ -217,16 +213,13 @@ static void clear_dev_context(void *priv) sr_err("Cannot clear device context during acquisition!"); return; /* Leak and pray. */ } - sr_dbg("Device context cleared."); g_free(devc); } -/* Destroy all device instances. - */ static int dev_clear(const struct sr_dev_driver *di) { - return std_dev_clear(di, &clear_dev_context); + return std_dev_clear_with_callback(di, clear_helper); } /* Drain any pending data from the USB transfer buffers on the device. @@ -275,11 +268,6 @@ static int dev_open(struct sr_dev_inst *sdi) devc = sdi->priv; usb = sdi->conn; - if (sdi->status != SR_ST_INACTIVE) { - sr_err("Device already open."); - return SR_ERR; - } - /* Try the whole shebang three times, fingers crossed. */ for (i = 0; i < 3; i++) { ret = sr_usb_open(drvc->sr_ctx->libusb_ctx, usb); @@ -310,8 +298,6 @@ static int dev_open(struct sr_dev_inst *sdi) /* This delay appears to be necessary for reliable operation. */ g_usleep(30 * 1000); - sdi->status = SR_ST_ACTIVE; - devc->active_fpga_config = FPGA_NOCONF; devc->short_transfer_quirk = FALSE; devc->state = STATE_IDLE; @@ -324,7 +310,6 @@ static int dev_open(struct sr_dev_inst *sdi) break; /* Rinse and repeat. */ - sdi->status = SR_ST_INACTIVE; sr_usb_close(usb); } @@ -334,8 +319,7 @@ static int dev_open(struct sr_dev_inst *sdi) return ret; } -/* Shutdown and close device. - */ +/* Shutdown and close device. */ static int dev_close(struct sr_dev_inst *sdi) { struct dev_context *devc; @@ -345,10 +329,6 @@ static int dev_close(struct sr_dev_inst *sdi) devc = sdi->priv; usb = sdi->conn; - if (sdi->status == SR_ST_INACTIVE) { - sr_dbg("Device already closed."); - return SR_OK; - } if (devc->acquisition) { sr_err("Cannot close device during acquisition!"); /* Request stop, leak handle, and prepare for the worst. */ @@ -356,17 +336,16 @@ static int dev_close(struct sr_dev_inst *sdi) return SR_ERR_BUG; } - sdi->status = SR_ST_INACTIVE; - /* Download of the shutdown bitstream, if any. */ ret = (*devc->model->apply_fpga_config)(sdi); if (ret != SR_OK) sr_warn("Unable to shut down device."); libusb_release_interface(usb->devhdl, USB_INTERFACE); + sr_usb_close(usb); - return ret; + return SR_OK; } /* Check whether the device options contain a specific key. @@ -647,9 +626,6 @@ static int config_commit(const struct sr_dev_inst *sdi) devc = sdi->priv; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - if (devc->acquisition) { sr_err("Acquisition still in progress?"); return SR_ERR; @@ -745,11 +721,6 @@ static int config_list(uint32_t key, GVariant **data, */ static int dev_acquisition_start(const struct sr_dev_inst *sdi) { - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - - sr_info("Starting acquisition."); - return lwla_start_acquisition(sdi); } @@ -761,12 +732,9 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi) devc = sdi->priv; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - if (devc->state != STATE_IDLE && !devc->cancel_requested) { devc->cancel_requested = TRUE; - sr_dbg("Stopping acquisition."); + sr_dbg("Requesting cancel."); } return SR_OK; @@ -774,7 +742,7 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi) /* SysClk LWLA driver descriptor. */ -SR_PRIV struct sr_dev_driver sysclk_lwla_driver_info = { +static struct sr_dev_driver sysclk_lwla_driver_info = { .name = "sysclk-lwla", .longname = "SysClk LWLA series", .api_version = 1, @@ -794,3 +762,4 @@ SR_PRIV struct sr_dev_driver sysclk_lwla_driver_info = { .dev_acquisition_stop = dev_acquisition_stop, .context = NULL, }; +SR_REGISTER_DEV_DRIVER(sysclk_lwla_driver_info);