diff --git a/src/hardware/agilent-dmm/api.c b/src/hardware/agilent-dmm/api.c index 78e7efe8..1165dc5a 100644 --- a/src/hardware/agilent-dmm/api.c +++ b/src/hardware/agilent-dmm/api.c @@ -73,7 +73,6 @@ static const struct agdmm_profile supported_agdmm[] = { static GSList *scan(struct sr_dev_driver *di, GSList *options) { struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; struct sr_config *src; struct sr_serial_dev_inst *serial; @@ -82,8 +81,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) const char *conn, *serialcomm; char *buf, **tokens; - drvc = di->context; - devices = NULL; conn = serialcomm = NULL; for (l = options; l; l = l->next) { @@ -136,9 +133,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); break; } @@ -150,7 +145,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) if (!devices) sr_serial_dev_inst_free(serial); - return devices; + return std_scan_complete(di, devices); } static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, diff --git a/src/hardware/appa-55ii/api.c b/src/hardware/appa-55ii/api.c index c5700011..d93644d5 100644 --- a/src/hardware/appa-55ii/api.c +++ b/src/hardware/appa-55ii/api.c @@ -99,18 +99,16 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "T1"); sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "T2"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); scan_cleanup: serial_close(serial); - return devices; + return std_scan_complete(di, devices); } static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, diff --git a/src/hardware/arachnid-labs-re-load-pro/api.c b/src/hardware/arachnid-labs-re-load-pro/api.c index 6deb6815..923f6b01 100644 --- a/src/hardware/arachnid-labs-re-load-pro/api.c +++ b/src/hardware/arachnid-labs-re-load-pro/api.c @@ -130,7 +130,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->vendor = g_strdup("Arachnid Labs"); sdi->model = g_strdup("Re:load Pro"); sdi->version = g_strdup(buf + 8); - sdi->driver = di; sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; @@ -146,14 +145,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) devc = g_malloc0(sizeof(struct dev_context)); sdi->priv = devc; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); serial_close(serial); if (!devices) sr_serial_dev_inst_free(serial); - return devices; + return std_scan_complete(di, devices); } static int config_list(uint32_t key, GVariant **data, diff --git a/src/hardware/asix-sigma/api.c b/src/hardware/asix-sigma/api.c index 255d3d54..8f04809e 100644 --- a/src/hardware/asix-sigma/api.c +++ b/src/hardware/asix-sigma/api.c @@ -64,7 +64,6 @@ static int dev_clear(const struct sr_dev_driver *di) static GSList *scan(struct sr_dev_driver *di, GSList *options) { struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; GSList *devices; struct ftdi_device_list *devlist; @@ -75,8 +74,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) (void)options; - drvc = di->context; - devices = NULL; devc = g_malloc0(sizeof(struct dev_context)); @@ -119,19 +116,17 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->status = SR_ST_INITIALIZING; sdi->vendor = g_strdup(USB_VENDOR_NAME); sdi->model = g_strdup(USB_MODEL_NAME); - sdi->driver = di; for (i = 0; i < ARRAY_SIZE(channel_names); i++) sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE, channel_names[i]); devices = g_slist_append(devices, sdi); - drvc->instances = g_slist_append(drvc->instances, sdi); sdi->priv = devc; /* We will open the device again when we need it. */ ftdi_list_free(&devlist); - return devices; + return std_scan_complete(di, devices); free: ftdi_deinit(&devc->ftdic); diff --git a/src/hardware/atten-pps3xxx/api.c b/src/hardware/atten-pps3xxx/api.c index 7fd3b678..3b9f1133 100644 --- a/src/hardware/atten-pps3xxx/api.c +++ b/src/hardware/atten-pps3xxx/api.c @@ -158,7 +158,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options, int modelid) sdi->status = SR_ST_INACTIVE; sdi->vendor = g_strdup("Atten"); sdi->model = g_strdup(model->name); - sdi->driver = di; sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; for (i = 0; i < MAX_CHANNELS; i++) { @@ -176,14 +175,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options, int modelid) devc->config = g_malloc0(sizeof(struct per_channel_config) * model->num_channels); devc->delay_ms = delay_ms; sdi->priv = devc; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); serial_close(serial); if (!devices) sr_serial_dev_inst_free(serial); - return devices; + return std_scan_complete(di, devices); } static GSList *scan_3203(struct sr_dev_driver *di, GSList *options) diff --git a/src/hardware/baylibre-acme/api.c b/src/hardware/baylibre-acme/api.c index 1d83228c..2072ccbd 100644 --- a/src/hardware/baylibre-acme/api.c +++ b/src/hardware/baylibre-acme/api.c @@ -53,7 +53,6 @@ static const uint64_t samplerates[] = { static GSList *scan(struct sr_dev_driver *di, GSList *options) { - struct drv_context *drvc; struct dev_context *devc; struct sr_dev_inst *sdi; GSList *devices; @@ -62,7 +61,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) (void)options; - drvc = di->context; devices = NULL; devc = g_malloc0(sizeof(struct dev_context)); @@ -72,7 +70,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->status = SR_ST_INACTIVE; sdi->vendor = g_strdup("BayLibre"); sdi->model = g_strdup("ACME"); - sdi->driver = di; sdi->priv = devc; status = bl_acme_is_sane(); @@ -124,9 +121,8 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) goto err_out; devices = g_slist_append(devices, sdi); - drvc->instances = g_slist_append(drvc->instances, sdi); - return devices; + return std_scan_complete(di, devices); err_out: g_free(devc); diff --git a/src/hardware/beaglelogic/api.c b/src/hardware/beaglelogic/api.c index 10f9a0fb..a94a917a 100644 --- a/src/hardware/beaglelogic/api.c +++ b/src/hardware/beaglelogic/api.c @@ -73,7 +73,6 @@ static struct dev_context *beaglelogic_devc_alloc(void) static GSList *scan(struct sr_dev_driver *di, GSList *options) { - struct drv_context *drvc; GSList *devices, *l; struct sr_config *src; struct sr_dev_inst *sdi; @@ -81,7 +80,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) int i, maxch; devices = NULL; - drvc = di->context; /* Probe for /dev/beaglelogic */ if (!g_file_test(BEAGLELOGIC_DEV_NODE, G_FILE_TEST_EXISTS)) @@ -91,7 +89,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->status = SR_ST_INACTIVE; sdi->model = g_strdup("BeagleLogic"); sdi->version = g_strdup("1.0"); - sdi->driver = di; /* Unless explicitly specified, keep max channels to 8 only */ maxch = 8; @@ -131,10 +128,9 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) channel_names[i]); sdi->priv = devc; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/brymen-bm86x/api.c b/src/hardware/brymen-bm86x/api.c index 64acf323..a9ac15b3 100644 --- a/src/hardware/brymen-bm86x/api.c +++ b/src/hardware/brymen-bm86x/api.c @@ -70,7 +70,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->model = g_strdup("BM869"); devc = g_malloc0(sizeof(struct dev_context)); sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P2"); @@ -79,11 +78,10 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sr_sw_limits_init(&devc->sw_limits); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/brymen-dmm/api.c b/src/hardware/brymen-dmm/api.c index 0e9034d3..54f15c51 100644 --- a/src/hardware/brymen-dmm/api.c +++ b/src/hardware/brymen-dmm/api.c @@ -37,7 +37,6 @@ static GSList *brymen_scan(struct sr_dev_driver *di, const char *conn, { struct sr_dev_inst *sdi; struct dev_context *devc; - struct drv_context *drvc; struct sr_serial_dev_inst *serial; GSList *devices; int ret; @@ -75,17 +74,14 @@ static GSList *brymen_scan(struct sr_dev_driver *di, const char *conn, sr_sw_limits_init(&devc->sw_limits); sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; - drvc = di->context; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); scan_cleanup: serial_close(serial); - return devices; + return std_scan_complete(di, devices); } static GSList *scan(struct sr_dev_driver *di, GSList *options) diff --git a/src/hardware/cem-dt-885x/api.c b/src/hardware/cem-dt-885x/api.c index af3626b2..9ee036b6 100644 --- a/src/hardware/cem-dt-885x/api.c +++ b/src/hardware/cem-dt-885x/api.c @@ -114,9 +114,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->conn = sr_serial_dev_inst_new(conn, SERIALCOMM); sdi->inst_type = SR_INST_SERIAL; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "SPL"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); break; } @@ -126,7 +124,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) serial_close(serial); - return devices; + return std_scan_complete(di, devices); } static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, diff --git a/src/hardware/center-3xx/api.c b/src/hardware/center-3xx/api.c index 27c8d7e6..6b9c0e39 100644 --- a/src/hardware/center-3xx/api.c +++ b/src/hardware/center-3xx/api.c @@ -60,7 +60,6 @@ static GSList *center_scan(const char *conn, const char *serialcomm, int idx) { int i; struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; struct sr_serial_dev_inst *serial; GSList *devices; @@ -70,7 +69,6 @@ static GSList *center_scan(const char *conn, const char *serialcomm, int idx) if (serial_open(serial, SERIAL_RDWR) != SR_OK) return NULL; - drvc = center_devs[idx].di->context; devices = NULL; serial_flush(serial); @@ -84,12 +82,10 @@ static GSList *center_scan(const char *conn, const char *serialcomm, int idx) sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; sdi->priv = devc; - sdi->driver = center_devs[idx].di; for (i = 0; i < center_devs[idx].num_channels; i++) sr_channel_new(sdi, i, SR_CHANNEL_ANALOG, TRUE, channel_names[i]); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); serial_close(serial); @@ -126,7 +122,7 @@ static GSList *scan(GSList *options, int idx) devices = center_scan(conn, center_devs[idx].conn, idx); } - return devices; + return std_scan_complete(center_devs[idx].di, devices); } static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, diff --git a/src/hardware/chronovu-la/api.c b/src/hardware/chronovu-la/api.c index d1a7ec71..ea247d42 100644 --- a/src/hardware/chronovu-la/api.c +++ b/src/hardware/chronovu-la/api.c @@ -61,20 +61,17 @@ static int dev_clear(const struct sr_dev_driver *di) return std_dev_clear(di, clear_helper); } -static int add_device(struct sr_dev_driver *di, int model, - struct libusb_device_descriptor *des, const char *serial_num, - const char *connection_id, libusb_device *usbdev, GSList **devices) +static int add_device(int model, struct libusb_device_descriptor *des, + const char *serial_num, const char *connection_id, libusb_device *usbdev, + GSList **devices) { int ret; unsigned int i; struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; ret = SR_OK; - drvc = di->context; - /* Allocate memory for our private device context. */ devc = g_malloc0(sizeof(struct dev_context)); @@ -116,7 +113,6 @@ static int add_device(struct sr_dev_driver *di, int model, sdi->connection_id = g_strdup(connection_id); sdi->conn = sr_usb_dev_inst_new(libusb_get_bus_number(usbdev), libusb_get_device_address(usbdev), NULL); - sdi->driver = di; sdi->priv = devc; for (i = 0; i < devc->prof->num_channels; i++) @@ -124,7 +120,6 @@ static int add_device(struct sr_dev_driver *di, int model, cv_channel_names[i]); *devices = g_slist_append(*devices, sdi); - drvc->instances = g_slist_append(drvc->instances, sdi); if (ret == SR_OK) return SR_OK; @@ -224,7 +219,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) libusb_get_bus_number(devlist[i]), libusb_get_device_address(devlist[i]), connection_id); - if ((ret = add_device(di, model, &des, serial_num, connection_id, + if ((ret = add_device(model, &des, serial_num, connection_id, devlist[i], &devices)) < 0) { sr_dbg("Failed to add device: %d.", ret); } @@ -233,7 +228,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) 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); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/colead-slm/api.c b/src/hardware/colead-slm/api.c index bc59fd63..ded82dd0 100644 --- a/src/hardware/colead-slm/api.c +++ b/src/hardware/colead-slm/api.c @@ -44,15 +44,12 @@ static const uint32_t devopts[] = { static GSList *scan(struct sr_dev_driver *di, GSList *options) { - struct drv_context *drvc; struct dev_context *devc; struct sr_dev_inst *sdi; struct sr_config *src; GSList *devices, *l; const char *conn, *serialcomm; - drvc = di->context; - devices = NULL; conn = serialcomm = NULL; @@ -81,12 +78,10 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->conn = sr_serial_dev_inst_new(conn, serialcomm); sdi->inst_type = SR_INST_SERIAL; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); - return devices; + return std_scan_complete(di, devices); } static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, diff --git a/src/hardware/conrad-digi-35-cpu/api.c b/src/hardware/conrad-digi-35-cpu/api.c index 44f9f266..442f6c78 100644 --- a/src/hardware/conrad-digi-35-cpu/api.c +++ b/src/hardware/conrad-digi-35-cpu/api.c @@ -90,12 +90,10 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->model = g_strdup("DIGI 35 CPU"); sdi->conn = serial; sdi->priv = NULL; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "CH1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); - return devices; + return std_scan_complete(di, devices); } static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, diff --git a/src/hardware/demo/demo.c b/src/hardware/demo/demo.c index 9fa744b1..083527c8 100644 --- a/src/hardware/demo/demo.c +++ b/src/hardware/demo/demo.c @@ -284,7 +284,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi = g_malloc0(sizeof(struct sr_dev_inst)); sdi->status = SR_ST_INACTIVE; sdi->model = g_strdup("Demo device"); - sdi->driver = di; devc = g_malloc0(sizeof(struct dev_context)); devc->cur_samplerate = SR_KHZ(200); @@ -346,9 +345,8 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->priv = devc; devices = g_slist_append(devices, sdi); - drvc->instances = g_slist_append(drvc->instances, sdi); - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/deree-de5000/api.c b/src/hardware/deree-de5000/api.c index 675b332e..2544b5e1 100644 --- a/src/hardware/deree-de5000/api.c +++ b/src/hardware/deree-de5000/api.c @@ -25,16 +25,6 @@ #include #include "libsigrok-internal.h" -static void std_dev_attach(struct sr_dev_driver *di, struct sr_dev_inst *sdi) -{ - struct drv_context *drvc; - - drvc = di->context; - - sdi->driver = di; - drvc->instances = g_slist_append(drvc->instances, sdi); -} - #define LOG_PREFIX "deree-de5000" static int dev_clear(const struct sr_dev_driver *di) @@ -49,9 +39,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) if (!(sdi = es51919_serial_scan(options, "DER EE", "DE-5000"))) return NULL; - std_dev_attach(di, sdi); - - return g_slist_append(NULL, sdi); + return std_scan_complete(di, g_slist_append(NULL, sdi)); } static struct sr_dev_driver deree_de5000_driver_info = { diff --git a/src/hardware/fluke-dmm/api.c b/src/hardware/fluke-dmm/api.c index de4efcd5..71bd79af 100644 --- a/src/hardware/fluke-dmm/api.c +++ b/src/hardware/fluke-dmm/api.c @@ -124,9 +124,7 @@ static GSList *fluke_scan(struct sr_dev_driver *di, const char *conn, sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); break; } @@ -140,7 +138,7 @@ static GSList *fluke_scan(struct sr_dev_driver *di, const char *conn, if (!devices) sr_serial_dev_inst_free(serial); - return devices; + return std_scan_complete(di, devices); } static GSList *scan(struct sr_dev_driver *di, GSList *options) diff --git a/src/hardware/ftdi-la/api.c b/src/hardware/ftdi-la/api.c index 5f5639f9..78dc23f7 100644 --- a/src/hardware/ftdi-la/api.c +++ b/src/hardware/ftdi-la/api.c @@ -82,7 +82,7 @@ static const struct ftdi_chip_desc *chip_descs[] = { &ft232r_desc, }; -static void scan_device(struct sr_dev_driver *di, struct ftdi_context *ftdic, +static void scan_device(struct ftdi_context *ftdic, struct libusb_device *dev, GSList **devices) { struct libusb_device_descriptor usb_desc; @@ -90,10 +90,8 @@ static void scan_device(struct sr_dev_driver *di, struct ftdi_context *ftdic, struct dev_context *devc; char *vendor, *model, *serial_num; struct sr_dev_inst *sdi; - struct drv_context *drvc; int rv; - drvc = di->context; libusb_get_device_descriptor(dev, &usb_desc); desc = NULL; @@ -143,7 +141,6 @@ static void scan_device(struct sr_dev_driver *di, struct ftdi_context *ftdic, sdi->vendor = vendor; sdi->model = model; sdi->serial_num = serial_num; - sdi->driver = di; sdi->priv = devc; sdi->connection_id = g_strdup_printf("d:%u/%u", libusb_get_bus_number(dev), libusb_get_device_address(dev)); @@ -153,7 +150,6 @@ static void scan_device(struct sr_dev_driver *di, struct ftdi_context *ftdic, SR_CHANNEL_LOGIC, TRUE, *chan); *devices = g_slist_append(*devices, sdi); - drvc->instances = g_slist_append(drvc->instances, sdi); return; err_free_strings: @@ -164,8 +160,7 @@ err_free_strings: g_free(devc); } -static GSList *scan_all(struct ftdi_context *ftdic, struct sr_dev_driver *di, - GSList *options) +static GSList *scan_all(struct ftdi_context *ftdic, GSList *options) { GSList *devices; struct ftdi_device_list *devlist = 0; @@ -187,7 +182,7 @@ static GSList *scan_all(struct ftdi_context *ftdic, struct sr_dev_driver *di, curdev = devlist; while (curdev) { - scan_device(di, ftdic, curdev->dev, &devices); + scan_device(ftdic, curdev->dev, &devices); curdev = curdev->next; } @@ -234,17 +229,17 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) usb = l->data; if (usb->bus == libusb_get_bus_number(devlist[i]) && usb->address == libusb_get_device_address(devlist[i])) { - scan_device(di, ftdic, devlist[i], &devices); + scan_device(ftdic, devlist[i], &devices); } } } libusb_free_device_list(devlist, 1); } else - devices = scan_all(ftdic, di, options); + devices = scan_all(ftdic, options); ftdi_free(ftdic); - return devices; + return std_scan_complete(di, devices); } static void clear_helper(void *priv) diff --git a/src/hardware/fx2lafw/api.c b/src/hardware/fx2lafw/api.c index 262f3cd6..46b9ee34 100644 --- a/src/hardware/fx2lafw/api.c +++ b/src/hardware/fx2lafw/api.c @@ -323,7 +323,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->vendor = g_strdup(prof->vendor); sdi->model = g_strdup(prof->model); sdi->version = g_strdup(prof->model_version); - sdi->driver = di; sdi->serial_num = g_strdup(serial_num); sdi->connection_id = g_strdup(connection_id); @@ -359,7 +358,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) if ((prof->dev_caps & DEV_CAPS_16BIT) || (prof->dev_caps & DEV_CAPS_AX_ANALOG)) devc->sample_wide = TRUE; sdi->priv = devc; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); if (!strcmp(prof->model, "DSLogic") @@ -403,7 +401,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) 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); } static void clear_dev_context(void *priv) diff --git a/src/hardware/gmc-mh-1x-2x/api.c b/src/hardware/gmc-mh-1x-2x/api.c index 7ba93e4e..3d18ebda 100644 --- a/src/hardware/gmc-mh-1x-2x/api.c +++ b/src/hardware/gmc-mh-1x-2x/api.c @@ -217,13 +217,11 @@ static GSList *scan_1x_2x_rs232(struct sr_dev_driver *di, GSList *options) devc->settings_ok = FALSE; sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } - return devices; + return std_scan_complete(di, devices); } /** @@ -310,9 +308,7 @@ static GSList *scan_2x_bd232(struct sr_dev_driver *di, GSList *options) sdi->version = g_strdup_printf("Firmware %d.%d", devc->fw_ver_maj, devc->fw_ver_min); sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); devc = g_malloc0(sizeof(struct dev_context)); sdi = g_malloc0(sizeof(struct sr_dev_inst)); @@ -327,7 +323,7 @@ static GSList *scan_2x_bd232(struct sr_dev_driver *di, GSList *options) sr_dev_inst_free(sdi); } - return devices; + return std_scan_complete(di, devices); exit_err: sr_info("scan_2x_bd232(): Error!"); diff --git a/src/hardware/hantek-6xxx/api.c b/src/hardware/hantek-6xxx/api.c index 65b5f04b..5c2a478a 100644 --- a/src/hardware/hantek-6xxx/api.c +++ b/src/hardware/hantek-6xxx/api.c @@ -78,13 +78,11 @@ static int read_channel(const struct sr_dev_inst *sdi, uint32_t amount); static int dev_acquisition_stop(struct sr_dev_inst *sdi); -static struct sr_dev_inst *hantek_6xxx_dev_new(struct sr_dev_driver *di, - const struct hantek_6xxx_profile *prof) +static struct sr_dev_inst *hantek_6xxx_dev_new(const struct hantek_6xxx_profile *prof) { struct sr_dev_inst *sdi; struct sr_channel *ch; struct sr_channel_group *cg; - struct drv_context *drvc; struct dev_context *devc; unsigned int i; @@ -92,7 +90,6 @@ static struct sr_dev_inst *hantek_6xxx_dev_new(struct sr_dev_driver *di, sdi->status = SR_ST_INITIALIZING; sdi->vendor = g_strdup(prof->vendor); sdi->model = g_strdup(prof->model); - sdi->driver = di; for (i = 0; i < ARRAY_SIZE(channel_names); i++) { ch = sr_channel_new(sdi, i, SR_CHANNEL_ANALOG, TRUE, channel_names[i]); @@ -119,8 +116,6 @@ static struct sr_dev_inst *hantek_6xxx_dev_new(struct sr_dev_driver *di, devc->samplerate = DEFAULT_SAMPLERATE; sdi->priv = devc; - drvc = sdi->driver->context; - drvc->instances = g_slist_append(drvc->instances, sdi); return sdi; } @@ -222,7 +217,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) /* Device matches the pre-firmware profile. */ prof = &dev_profiles[j]; sr_dbg("Found a %s %s.", prof->vendor, prof->model); - sdi = hantek_6xxx_dev_new(di, prof); + sdi = hantek_6xxx_dev_new(prof); sdi->connection_id = g_strdup(connection_id); devices = g_slist_append(devices, sdi); devc = sdi->priv; @@ -241,7 +236,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) /* Device matches the post-firmware profile. */ prof = &dev_profiles[j]; sr_dbg("Found a %s %s.", prof->vendor, prof->model); - sdi = hantek_6xxx_dev_new(di, prof); + sdi = hantek_6xxx_dev_new(prof); sdi->connection_id = g_strdup(connection_id); sdi->status = SR_ST_INACTIVE; devices = g_slist_append(devices, sdi); @@ -258,7 +253,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) } libusb_free_device_list(devlist, 1); - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/hantek-dso/api.c b/src/hardware/hantek-dso/api.c index 275bbf99..eb6c8b63 100644 --- a/src/hardware/hantek-dso/api.c +++ b/src/hardware/hantek-dso/api.c @@ -162,13 +162,11 @@ static const char *coupling[] = { static int dev_acquisition_stop(struct sr_dev_inst *sdi); -static struct sr_dev_inst *dso_dev_new(struct sr_dev_driver *di, - const struct dso_profile *prof) +static struct sr_dev_inst *dso_dev_new(const struct dso_profile *prof) { struct sr_dev_inst *sdi; struct sr_channel *ch; struct sr_channel_group *cg; - struct drv_context *drvc; struct dev_context *devc; unsigned int i; @@ -176,7 +174,6 @@ static struct sr_dev_inst *dso_dev_new(struct sr_dev_driver *di, sdi->status = SR_ST_INITIALIZING; sdi->vendor = g_strdup(prof->vendor); sdi->model = g_strdup(prof->model); - sdi->driver = di; /* * Add only the real channels -- EXT isn't a source of data, only @@ -208,8 +205,6 @@ static struct sr_dev_inst *dso_dev_new(struct sr_dev_driver *di, devc->triggersource = g_strdup(DEFAULT_TRIGGER_SOURCE); devc->triggerposition = DEFAULT_HORIZ_TRIGGERPOS; sdi->priv = devc; - drvc = di->context; - drvc->instances = g_slist_append(drvc->instances, sdi); return sdi; } @@ -313,7 +308,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) /* Device matches the pre-firmware profile. */ prof = &dev_profiles[j]; sr_dbg("Found a %s %s.", prof->vendor, prof->model); - sdi = dso_dev_new(di, prof); + sdi = dso_dev_new(prof); sdi->connection_id = g_strdup(connection_id); devices = g_slist_append(devices, sdi); devc = sdi->priv; @@ -332,7 +327,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) /* Device matches the post-firmware profile. */ prof = &dev_profiles[j]; sr_dbg("Found a %s %s.", prof->vendor, prof->model); - sdi = dso_dev_new(di, prof); + sdi = dso_dev_new(prof); sdi->connection_id = g_strdup(connection_id); sdi->status = SR_ST_INACTIVE; devices = g_slist_append(devices, sdi); @@ -349,7 +344,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) } libusb_free_device_list(devlist, 1); - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/hung-chang-dso-2100/api.c b/src/hardware/hung-chang-dso-2100/api.c index 039ba385..842bdc21 100644 --- a/src/hardware/hung-chang-dso-2100/api.c +++ b/src/hardware/hung-chang-dso-2100/api.c @@ -102,14 +102,12 @@ static const uint8_t coupling_map[] = { 0x00, 0x08, 0x04 }; -static GSList *scan_port(GSList *devices, struct sr_dev_driver *di, - struct parport *port) +static GSList *scan_port(GSList *devices, struct parport *port) { struct sr_dev_inst *sdi; struct sr_channel *ch; struct sr_channel_group *cg; struct dev_context *devc; - struct drv_context *drvc; int i; if (ieee1284_open(port, 0, &i) != E1284_OK) { @@ -135,8 +133,6 @@ static GSList *scan_port(GSList *devices, struct sr_dev_driver *di, sdi->status = SR_ST_INACTIVE; sdi->vendor = g_strdup("Hung-Chang"); sdi->model = g_strdup("DSO-2100"); - sdi->driver = di; - drvc = di->context; sdi->inst_type = 0; /* FIXME */ sdi->conn = port; ieee1284_ref(port); @@ -169,7 +165,6 @@ static GSList *scan_port(GSList *devices, struct sr_dev_driver *di, devc->last_step = 0; /* buffersize = 1000 */ sdi->priv = devc; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); fail3: @@ -209,7 +204,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) for (i = 0; i < ports.portc; i++) if (!strcmp(ports.portv[i]->name, conn)) { port_found = TRUE; - devices = scan_port(devices, di, ports.portv[i]); + devices = scan_port(devices, ports.portv[i]); } if (!port_found) { @@ -220,7 +215,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) ieee1284_free_ports(&ports); - return devices; + return std_scan_complete(di, devices); } static void clear_private(void *priv) diff --git a/src/hardware/ikalogic-scanalogic2/api.c b/src/hardware/ikalogic-scanalogic2/api.c index 0c6b8987..2d194abd 100644 --- a/src/hardware/ikalogic-scanalogic2/api.c +++ b/src/hardware/ikalogic-scanalogic2/api.c @@ -106,7 +106,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->version = g_strdup_printf("%u.%u", dev_info.fw_ver_major, dev_info.fw_ver_minor); sdi->serial_num = g_strdup_printf("%d", dev_info.serial); sdi->priv = devc; - sdi->driver = di; sdi->inst_type = SR_INST_USB; sdi->conn = usb; @@ -145,13 +144,12 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) devc->xfer_data_out = devc->xfer_buf_out + LIBUSB_CONTROL_SETUP_SIZE; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } g_slist_free(usb_devices); - return devices; + return std_scan_complete(di, devices); } static void clear_dev_context(void *priv) diff --git a/src/hardware/ikalogic-scanaplus/api.c b/src/hardware/ikalogic-scanaplus/api.c index 9b4af07d..30b62e3c 100644 --- a/src/hardware/ikalogic-scanaplus/api.c +++ b/src/hardware/ikalogic-scanaplus/api.c @@ -115,19 +115,17 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->status = SR_ST_INACTIVE; sdi->vendor = g_strdup(USB_VENDOR_NAME); sdi->model = g_strdup(USB_MODEL_NAME); - sdi->driver = di; sdi->priv = devc; for (i = 0; i < ARRAY_SIZE(channel_names); i++) sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE, channel_names[i]); devices = g_slist_append(devices, sdi); - drvc->instances = g_slist_append(drvc->instances, sdi); /* Close device. We'll reopen it again when we need it. */ scanaplus_close(devc); - return devices; + return std_scan_complete(di, devices); scanaplus_close(devc); err_free_ftdic: diff --git a/src/hardware/kecheng-kc-330b/api.c b/src/hardware/kecheng-kc-330b/api.c index fcd08eca..4dacfdc0 100644 --- a/src/hardware/kecheng-kc-330b/api.c +++ b/src/hardware/kecheng-kc-330b/api.c @@ -124,7 +124,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->status = SR_ST_INACTIVE; sdi->vendor = g_strdup(VENDOR); sdi->model = model; /* Already g_strndup()'d. */ - sdi->driver = di; sdi->inst_type = SR_INST_USB; sdi->conn = l->data; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "SPL"); @@ -142,14 +141,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) /* TODO: Set date/time? */ - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } g_slist_free(usb_devices); } else g_slist_free_full(usb_devices, g_free); - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/kern-scale/api.c b/src/hardware/kern-scale/api.c index 4d1d6bbc..7fa66bb3 100644 --- a/src/hardware/kern-scale/api.c +++ b/src/hardware/kern-scale/api.c @@ -43,7 +43,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) GSList *l, *devices; const char *conn, *serialcomm; struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; struct sr_serial_dev_inst *serial; int ret; @@ -77,7 +76,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sr_info("Probing serial port %s.", conn); - drvc = di->context; devices = NULL; serial_flush(serial); @@ -104,15 +102,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "Mass"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); scan_cleanup: serial_close(serial); - return devices; + return std_scan_complete(di, devices); } static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, diff --git a/src/hardware/korad-kaxxxxp/api.c b/src/hardware/korad-kaxxxxp/api.c index bd80b6e1..be472568 100644 --- a/src/hardware/korad-kaxxxxp/api.c +++ b/src/hardware/korad-kaxxxxp/api.c @@ -64,7 +64,6 @@ static const struct korad_kaxxxxp_model models[] = { static GSList *scan(struct sr_dev_driver *di, GSList *options) { - struct drv_context *drvc; struct dev_context *devc; GSList *devices, *l; struct sr_dev_inst *sdi; @@ -78,7 +77,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) devices = NULL; conn = NULL; serialcomm = NULL; - drvc = di->context; for (l = options; l; l = l->next) { src = l->data; @@ -140,7 +138,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->model = g_strdup(models[model_id].name); sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "CH1"); @@ -154,14 +151,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) /* Get current status of device. */ if (korad_kaxxxxp_get_all_values(serial, devc) < 0) goto exit_err; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); serial_close(serial); if (!devices) sr_serial_dev_inst_free(serial); - return devices; + return std_scan_complete(di, devices); exit_err: sr_dev_inst_free(sdi); diff --git a/src/hardware/lascar-el-usb/api.c b/src/hardware/lascar-el-usb/api.c index 1fd86b7e..32bb958b 100644 --- a/src/hardware/lascar-el-usb/api.c +++ b/src/hardware/lascar-el-usb/api.c @@ -72,14 +72,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) } sdi->inst_type = SR_INST_USB; sdi->conn = usb; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } g_slist_free(usb_devices); } else g_slist_free_full(usb_devices, g_free); - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/lascar-el-usb/protocol.c b/src/hardware/lascar-el-usb/protocol.c index ba9b84f9..ceaf9d72 100644 --- a/src/hardware/lascar-el-usb/protocol.c +++ b/src/hardware/lascar-el-usb/protocol.c @@ -327,7 +327,6 @@ static struct sr_dev_inst *lascar_identify(unsigned char *config) sdi->vendor = g_strdup(LASCAR_VENDOR); sdi->model = g_strdup(profile->modelname); sdi->version = g_strdup(firmware); - sdi->driver = di; if (profile->logformat == LOG_TEMP_RH) { /* Model this as two channels: temperature and humidity. */ diff --git a/src/hardware/lecroy-logicstudio/api.c b/src/hardware/lecroy-logicstudio/api.c index 69852b28..60325fe4 100644 --- a/src/hardware/lecroy-logicstudio/api.c +++ b/src/hardware/lecroy-logicstudio/api.c @@ -71,9 +71,8 @@ static const uint64_t samplerates[] = { SR_MHZ(500), }; -static struct sr_dev_inst *create_device(struct sr_dev_driver *di, - struct sr_usb_dev_inst *usb, enum sr_dev_inst_status status, - int64_t fw_updated) +static struct sr_dev_inst *create_device(struct sr_usb_dev_inst *usb, + enum sr_dev_inst_status status, int64_t fw_updated) { struct sr_dev_inst *sdi; struct dev_context *devc; @@ -84,7 +83,6 @@ static struct sr_dev_inst *create_device(struct sr_dev_driver *di, sdi->status = status; sdi->vendor = g_strdup("LeCroy"); sdi->model = g_strdup("LogicStudio16"); - sdi->driver = di; sdi->inst_type = SR_INST_USB; sdi->conn = usb; @@ -140,7 +138,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) usb = sr_usb_dev_inst_new(libusb_get_bus_number(devlist[i]), libusb_get_device_address(devlist[i]), NULL); - sdi = create_device(di, usb, SR_ST_INACTIVE, 0); + sdi = create_device(usb, SR_ST_INACTIVE, 0); break; case LOGICSTUDIO16_PID_LACK_FIRMWARE: r = ezusb_upload_firmware(drvc->sr_ctx, devlist[i], @@ -161,7 +159,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) usb = sr_usb_dev_inst_new(libusb_get_bus_number(devlist[i]), UNKNOWN_ADDRESS, NULL); - sdi = create_device(di, usb, SR_ST_INITIALIZING, + sdi = create_device(usb, SR_ST_INITIALIZING, g_get_monotonic_time()); break; default: @@ -174,13 +172,12 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->connection_id = g_strdup(connection_id); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } libusb_free_device_list(devlist, 1); - return devices; + return std_scan_complete(di, devices); } static int open_device(struct sr_dev_inst *sdi) diff --git a/src/hardware/link-mso19/api.c b/src/hardware/link-mso19/api.c index 99af8dc0..a3b00869 100644 --- a/src/hardware/link-mso19/api.c +++ b/src/hardware/link-mso19/api.c @@ -159,21 +159,15 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->vendor = g_strdup(manufacturer); sdi->model = g_strdup(product); sdi->version = g_strdup(hwrev); - sdi->driver = di; sdi->priv = devc; for (i = 0; i < ARRAY_SIZE(channel_names); i++) { chtype = (i == 0) ? SR_CHANNEL_ANALOG : SR_CHANNEL_LOGIC; sr_channel_new(sdi, i, chtype, TRUE, channel_names[i]); } - - //Add the driver - struct drv_context *drvc = di->context; - drvc->instances = g_slist_append(drvc->instances, sdi); - devices = g_slist_append(devices, sdi); } - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/manson-hcs-3xxx/api.c b/src/hardware/manson-hcs-3xxx/api.c index 0b0a053e..b6449cf6 100644 --- a/src/hardware/manson-hcs-3xxx/api.c +++ b/src/hardware/manson-hcs-3xxx/api.c @@ -76,7 +76,6 @@ static const struct hcs_model models[] = { static GSList *scan(struct sr_dev_driver *di, GSList *options) { int i, model_id; - struct drv_context *drvc; struct dev_context *devc; struct sr_dev_inst *sdi; struct sr_config *src; @@ -85,7 +84,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) struct sr_serial_dev_inst *serial; char reply[50], **tokens, *dummy; - drvc = di->context; devices = NULL; conn = NULL; serialcomm = NULL; @@ -146,7 +144,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->model = g_strdup(models[model_id].name); sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "CH1"); @@ -177,14 +174,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) devc->voltage_max_device = g_strtod(tokens[0], &dummy) * devc->model->voltage[2]; g_strfreev(tokens); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); serial_close(serial); if (!devices) sr_serial_dev_inst_free(serial); - return devices; + return std_scan_complete(di, devices); exit_err: sr_dev_inst_free(sdi); diff --git a/src/hardware/mic-985xx/api.c b/src/hardware/mic-985xx/api.c index 329a14b6..d29cc7ef 100644 --- a/src/hardware/mic-985xx/api.c +++ b/src/hardware/mic-985xx/api.c @@ -60,7 +60,6 @@ SR_PRIV const struct mic_dev_info mic_devs[] = { static GSList *mic_scan(const char *conn, const char *serialcomm, int idx) { struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; struct sr_serial_dev_inst *serial; GSList *devices; @@ -70,7 +69,6 @@ static GSList *mic_scan(const char *conn, const char *serialcomm, int idx) if (serial_open(serial, SERIAL_RDWR) != SR_OK) return NULL; - drvc = mic_devs[idx].di->context; devices = NULL; serial_flush(serial); @@ -89,19 +87,17 @@ static GSList *mic_scan(const char *conn, const char *serialcomm, int idx) sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; sdi->priv = devc; - sdi->driver = mic_devs[idx].di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "Temperature"); if (mic_devs[idx].has_humidity) sr_channel_new(sdi, 1, SR_CHANNEL_ANALOG, TRUE, "Humidity"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); serial_close(serial); - return devices; + return std_scan_complete(mic_devs[idx].di, devices); } static GSList *scan(GSList *options, int idx) diff --git a/src/hardware/motech-lps-30x/api.c b/src/hardware/motech-lps-30x/api.c index ce3294e9..ee1f4f7e 100644 --- a/src/hardware/motech-lps-30x/api.c +++ b/src/hardware/motech-lps-30x/api.c @@ -366,7 +366,6 @@ SR_PRIV int lps_read_reply(struct sr_serial_dev_inst *serial, char **buf, int *b static GSList *do_scan(lps_modelid modelid, struct sr_dev_driver *drv, GSList *options) { struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; struct sr_serial_dev_inst *serial; struct sr_channel *ch; @@ -383,8 +382,6 @@ static GSList *do_scan(lps_modelid modelid, struct sr_dev_driver *drv, GSList *o conn = serialcomm = NULL; devices = NULL; - drvc = drv->context; - sr_spew("scan() called!"); /* Process and check options. */ @@ -446,7 +443,6 @@ static GSList *do_scan(lps_modelid modelid, struct sr_dev_driver *drv, GSList *o sdi->vendor = g_strdup(VENDOR_MOTECH); sdi->model = g_strdup(models[modelid].modelstr); sdi->version = g_strdup(verstr); - sdi->driver = drv; sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; @@ -472,7 +468,6 @@ static GSList *do_scan(lps_modelid modelid, struct sr_dev_driver *drv, GSList *o sdi->channel_groups = g_slist_append(sdi->channel_groups, cg); } - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); /* Query status */ @@ -483,7 +478,7 @@ static GSList *do_scan(lps_modelid modelid, struct sr_dev_driver *drv, GSList *o if (!devices) sr_serial_dev_inst_free(serial); - return devices; + return std_scan_complete(drv, devices); exit_err: sr_info("%s: Error!", __func__); diff --git a/src/hardware/norma-dmm/api.c b/src/hardware/norma-dmm/api.c index 024bcaed..2d154a40 100644 --- a/src/hardware/norma-dmm/api.c +++ b/src/hardware/norma-dmm/api.c @@ -68,7 +68,6 @@ static const char *get_typestr(int type, struct sr_dev_driver *drv) static GSList *scan(struct sr_dev_driver *drv, GSList *options) { struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; struct sr_config *src; struct sr_serial_dev_inst *serial; @@ -79,7 +78,6 @@ static GSList *scan(struct sr_dev_driver *drv, GSList *options) char req[10]; devices = NULL; - drvc = drv->context; conn = serialcomm = NULL; for (l = options; l; l = l->next) { @@ -138,9 +136,7 @@ static GSList *scan(struct sr_dev_driver *drv, GSList *options) devc->version = g_strdup(&buf[9]); sdi->conn = serial; sdi->priv = devc; - sdi->driver = drv; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); break; } @@ -163,7 +159,7 @@ static GSList *scan(struct sr_dev_driver *drv, GSList *options) if (!devices) sr_serial_dev_inst_free(serial); - return devices; + return std_scan_complete(drv, devices); } static int dev_close(struct sr_dev_inst *sdi) diff --git a/src/hardware/openbench-logic-sniffer/api.c b/src/hardware/openbench-logic-sniffer/api.c index 56161c5b..ecd8a081 100644 --- a/src/hardware/openbench-logic-sniffer/api.c +++ b/src/hardware/openbench-logic-sniffer/api.c @@ -89,7 +89,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) { struct sr_config *src; struct sr_dev_inst *sdi; - struct drv_context *drvc; struct sr_serial_dev_inst *serial; GSList *l, *devices; int ret; @@ -97,8 +96,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) const char *conn, *serialcomm; char buf[8]; - drvc = di->context; - devices = NULL; conn = serialcomm = NULL; @@ -182,7 +179,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->vendor = g_strdup("Sump"); sdi->model = g_strdup("Logic Analyzer"); sdi->version = g_strdup("v1.0"); - sdi->driver = di; for (i = 0; i < ARRAY_SIZE(ols_channel_names); i++) sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE, ols_channel_names[i]); @@ -195,12 +191,11 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); serial_close(serial); - return devices; + return std_scan_complete(di, devices); } static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, @@ -570,7 +565,7 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi) return SR_OK; } -SR_PRIV struct sr_dev_driver ols_driver_info = { +static struct sr_dev_driver ols_driver_info = { .name = "ols", .longname = "Openbench Logic Sniffer", .api_version = 1, diff --git a/src/hardware/openbench-logic-sniffer/protocol.c b/src/hardware/openbench-logic-sniffer/protocol.c index 15f1b3c0..f88729d5 100644 --- a/src/hardware/openbench-logic-sniffer/protocol.c +++ b/src/hardware/openbench-logic-sniffer/protocol.c @@ -20,8 +20,6 @@ #include #include "protocol.h" -extern SR_PRIV struct sr_dev_driver ols_driver_info; - SR_PRIV int send_shortcommand(struct sr_serial_dev_inst *serial, uint8_t command) { @@ -149,7 +147,6 @@ SR_PRIV struct sr_dev_inst *get_metadata(struct sr_serial_dev_inst *serial) sdi = g_malloc0(sizeof(struct sr_dev_inst)); sdi->status = SR_ST_INACTIVE; - sdi->driver = &ols_driver_info; devc = ols_dev_new(); sdi->priv = devc; diff --git a/src/hardware/pce-322a/api.c b/src/hardware/pce-322a/api.c index 8e408c1a..25094470 100644 --- a/src/hardware/pce-322a/api.c +++ b/src/hardware/pce-322a/api.c @@ -59,7 +59,6 @@ static const uint64_t meas_ranges[][2] = { static GSList *scan(struct sr_dev_driver *di, GSList *options) { - struct drv_context *drvc; struct dev_context *devc; struct sr_config *src; struct sr_serial_dev_inst *serial; @@ -82,7 +81,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) return NULL; devices = NULL; - drvc = di->context; sdi = g_malloc0(sizeof(struct sr_dev_inst)); sdi->status = SR_ST_INACTIVE; @@ -93,14 +91,12 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->conn = sr_serial_dev_inst_new(conn, SERIALCOMM); sdi->inst_type = SR_INST_SERIAL; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "SPL"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); serial_close(serial); - return devices; + return std_scan_complete(di, devices); } static int dev_clear(const struct sr_dev_driver *di) diff --git a/src/hardware/pipistrello-ols/api.c b/src/hardware/pipistrello-ols/api.c index eb81c781..91c7dc2f 100644 --- a/src/hardware/pipistrello-ols/api.c +++ b/src/hardware/pipistrello-ols/api.c @@ -78,7 +78,6 @@ static const uint64_t samplerates[] = { static GSList *scan(struct sr_dev_driver *di, GSList *options) { struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; GSList *devices; int ret, i; @@ -87,8 +86,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) (void)options; - drvc = di->context; - devices = NULL; /* Allocate memory for our private device context. */ @@ -177,10 +174,9 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sr_dbg("Failed to set default samplerate (%"PRIu64").", DEFAULT_SAMPLERATE); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); - return devices; + return std_scan_complete(di, devices); err_close_ftdic: p_ols_close(devc); diff --git a/src/hardware/pipistrello-ols/protocol.c b/src/hardware/pipistrello-ols/protocol.c index d49d0e6a..421934b2 100644 --- a/src/hardware/pipistrello-ols/protocol.c +++ b/src/hardware/pipistrello-ols/protocol.c @@ -20,8 +20,6 @@ #include #include "protocol.h" -extern SR_PRIV struct sr_dev_driver p_ols_driver_info; - SR_PRIV int write_shortcommand(struct dev_context *devc, uint8_t command) { uint8_t buf[1]; @@ -227,7 +225,6 @@ SR_PRIV struct sr_dev_inst *p_ols_get_metadata(uint8_t *buf, int bytes_read, str sdi = g_malloc0(sizeof(struct sr_dev_inst)); sdi->status = SR_ST_INACTIVE; - sdi->driver = &p_ols_driver_info; sdi->priv = devc; devname = g_string_new(""); diff --git a/src/hardware/saleae-logic16/api.c b/src/hardware/saleae-logic16/api.c index 906313d6..3eb9f403 100644 --- a/src/hardware/saleae-logic16/api.c +++ b/src/hardware/saleae-logic16/api.c @@ -191,7 +191,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->status = SR_ST_INITIALIZING; sdi->vendor = g_strdup("Saleae"); sdi->model = g_strdup("Logic16"); - sdi->driver = di; sdi->connection_id = g_strdup(connection_id); for (j = 0; j < ARRAY_SIZE(channel_names); j++) @@ -201,7 +200,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) devc = g_malloc0(sizeof(struct dev_context)); devc->selected_voltage_range = VOLTAGE_RANGE_18_33_V; sdi->priv = devc; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); if (check_conf_profile(devlist[i])) { @@ -227,7 +225,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) 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); } static int logic16_dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/serial-dmm/api.c b/src/hardware/serial-dmm/api.c index 3ccce70c..af70fc30 100644 --- a/src/hardware/serial-dmm/api.c +++ b/src/hardware/serial-dmm/api.c @@ -48,7 +48,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) GSList *l, *devices; const char *conn, *serialcomm; struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; struct sr_serial_dev_inst *serial; int dropped, ret; @@ -82,7 +81,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sr_info("Probing serial port %s.", conn); - drvc = di->context; devices = NULL; serial_flush(serial); @@ -130,15 +128,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); scan_cleanup: serial_close(serial); - return devices; + return std_scan_complete(di, devices); } static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, diff --git a/src/hardware/sysclk-lwla/api.c b/src/hardware/sysclk-lwla/api.c index c66cbeb0..2b20db83 100644 --- a/src/hardware/sysclk-lwla/api.c +++ b/src/hardware/sysclk-lwla/api.c @@ -194,15 +194,13 @@ 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. diff --git a/src/hardware/teleinfo/api.c b/src/hardware/teleinfo/api.c index f5920c5b..89344337 100644 --- a/src/hardware/teleinfo/api.c +++ b/src/hardware/teleinfo/api.c @@ -38,7 +38,6 @@ static const uint32_t devopts[] = { static GSList *scan(struct sr_dev_driver *di, GSList *options) { - struct drv_context *drvc; struct dev_context *devc; struct sr_serial_dev_inst *serial; struct sr_dev_inst *sdi; @@ -73,7 +72,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sr_info("Probing serial port %s.", conn); - drvc = di->context; serial_flush(serial); /* Let's get a bit of data and see if we can find a packet. */ @@ -92,7 +90,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P"); @@ -116,13 +113,12 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "IINST"); sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "PAPP"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); scan_cleanup: serial_close(serial); - return devices; + return std_scan_complete(di, devices); } static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, diff --git a/src/hardware/testo/api.c b/src/hardware/testo/api.c index 505df675..4d9a7a42 100644 --- a/src/hardware/testo/api.c +++ b/src/hardware/testo/api.c @@ -128,13 +128,12 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->priv = devc; if (testo_probe_channels(sdi) != SR_OK) continue; - 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); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/tondaj-sl-814/api.c b/src/hardware/tondaj-sl-814/api.c index d79bc03d..cdb6f186 100644 --- a/src/hardware/tondaj-sl-814/api.c +++ b/src/hardware/tondaj-sl-814/api.c @@ -92,12 +92,10 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); - return devices; + return std_scan_complete(di, devices); } static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, diff --git a/src/hardware/uni-t-dmm/api.c b/src/hardware/uni-t-dmm/api.c index c708d879..02e301cc 100644 --- a/src/hardware/uni-t-dmm/api.c +++ b/src/hardware/uni-t-dmm/api.c @@ -87,15 +87,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->vendor = g_strdup(dmm->vendor); sdi->model = g_strdup(dmm->device); sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); sdi->inst_type = SR_INST_USB; sdi->conn = usb; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/uni-t-ut32x/api.c b/src/hardware/uni-t-ut32x/api.c index 147ac7df..bc4ad438 100644 --- a/src/hardware/uni-t-ut32x/api.c +++ b/src/hardware/uni-t-ut32x/api.c @@ -70,7 +70,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->status = SR_ST_INACTIVE; sdi->vendor = g_strdup(VENDOR); sdi->model = g_strdup(MODEL); - sdi->driver = di; sdi->inst_type = SR_INST_USB; sdi->conn = l->data; for (i = 0; i < ARRAY_SIZE(channel_names); i++) @@ -80,14 +79,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->priv = devc; devc->limit_samples = 0; devc->data_source = DEFAULT_DATA_SOURCE; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } g_slist_free(usb_devices); } else g_slist_free_full(usb_devices, g_free); - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/victor-dmm/api.c b/src/hardware/victor-dmm/api.c index 6a70b145..3a132a17 100644 --- a/src/hardware/victor-dmm/api.c +++ b/src/hardware/victor-dmm/api.c @@ -76,7 +76,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi = g_malloc0(sizeof(struct sr_dev_inst)); sdi->status = SR_ST_INACTIVE; sdi->vendor = g_strdup(VICTOR_VENDOR); - sdi->driver = di; sdi->connection_id = g_strdup(connection_id); devc = g_malloc0(sizeof(struct dev_context)); sr_sw_limits_init(&devc->limits); @@ -87,12 +86,11 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) libusb_get_device_address(devlist[i]), NULL); sdi->inst_type = SR_INST_USB; - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } libusb_free_device_list(devlist, 1); - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/hardware/zeroplus-logic-cube/api.c b/src/hardware/zeroplus-logic-cube/api.c index 2cbb5f61..547d8152 100644 --- a/src/hardware/zeroplus-logic-cube/api.c +++ b/src/hardware/zeroplus-logic-cube/api.c @@ -212,7 +212,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->status = SR_ST_INACTIVE; sdi->vendor = g_strdup(VENDOR_NAME); sdi->model = g_strdup(prof->model_name); - sdi->driver = di; sdi->serial_num = g_strdup(serial_num); sdi->connection_id = g_strdup(connection_id); @@ -238,7 +237,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) channel_names[j]); devices = g_slist_append(devices, sdi); - drvc->instances = g_slist_append(drvc->instances, sdi); sdi->inst_type = SR_INST_USB; sdi->conn = sr_usb_dev_inst_new( libusb_get_bus_number(devlist[i]), @@ -246,7 +244,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) } libusb_free_device_list(devlist, 1); - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index 68f0a296..ad578e98 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -938,6 +938,7 @@ SR_PRIV int std_dev_clear(const struct sr_dev_driver *driver, std_dev_clear_callback clear_private); SR_PRIV GSList *std_dev_list(const struct sr_dev_driver *di); SR_PRIV int std_serial_dev_close(struct sr_dev_inst *sdi); +SR_PRIV GSList *std_scan_complete(struct sr_dev_driver *di, GSList *devices); /*--- resource.c ------------------------------------------------------------*/ diff --git a/src/std.c b/src/std.c index a03e509c..4af3c681 100644 --- a/src/std.c +++ b/src/std.c @@ -349,3 +349,51 @@ SR_PRIV GSList *std_dev_list(const struct sr_dev_driver *di) return drvc->instances; } + +/** + * Standard scan() callback API helper. + * + * This function can be used to perform common tasks required by a driver's + * scan() callback. It will initialize the driver for each device on the list + * and add the devices on the list to the driver's device instance list. + * Usually it should be used as the last step in the scan() callback, right + * before returning. + * + * Note: This function can only be used if std_init() has been called + * previously by the driver. + * + * Example: + * @code{c} + * static GSList *scan(struct sr_dev_driver *di, GSList *options) + * { + * struct GSList *device; + * struct sr_dev_inst *sdi; + * + * sdi = g_new0(sr_dev_inst, 1); + * sdi->vendor = ...; + * ... + * devices = g_slist_append(devices, sdi); + * ... + * return std_scan_complete(di, devices); + * } + * @endcode + * + * @param di The driver instance to use. + * @param devices List of newly discovered devices (struct sr_dev_inst). + * + * @return The @p devices list. + */ +SR_PRIV GSList *std_scan_complete(struct sr_dev_driver *di, GSList *devices) +{ + struct drv_context *drvc = di->context; + GSList *l; + + for (l = devices; l; l = l->next) { + struct sr_dev_inst *sdi = l->data; + sdi->driver = di; + } + + drvc->instances = g_slist_concat(drvc->instances, g_slist_copy(devices)); + + return devices; +}