]> sigrok.org Git - libsigrok.git/blobdiff - hardware/hantek-dso/api.c
Drop some lines that are no longer needed.
[libsigrok.git] / hardware / hantek-dso / api.c
index fd4f61575247a6c2febe28b98645f0ce53b7dc96..2fca660ea34dda454129af7985a2617a5b1c48b6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file is part of the sigrok project.
+ * This file is part of the libsigrok project.
  *
  * Copyright (C) 2012 Bert Vermeulen <bert@biot.com>
  *
@@ -251,36 +251,61 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
+       return std_hw_init(sr_ctx, di, LOG_PREFIX);
 }
 
 static GSList *hw_scan(GSList *options)
 {
-       struct sr_dev_inst *sdi;
-       const struct dso_profile *prof;
        struct drv_context *drvc;
        struct dev_context *devc;
-       GSList *devices;
+       struct sr_dev_inst *sdi;
+       struct sr_usb_dev_inst *usb;
+       struct sr_config *src;
+       const struct dso_profile *prof;
+       GSList *l, *devices, *conn_devices;
        struct libusb_device_descriptor des;
        libusb_device **devlist;
        int devcnt, ret, i, j;
-
-       (void)options;
+       const char *conn;
 
        drvc = di->priv;
-       drvc->instances = NULL;
 
        devcnt = 0;
        devices = 0;
 
-       clear_instances();
+       conn = NULL;
+       for (l = options; l; l = l->next) {
+               src = l->data;
+               if (src->key == SR_CONF_CONN) {
+                       conn = g_variant_get_string(src->data, NULL);
+                       break;
+               }
+       }
+       if (conn)
+               conn_devices = sr_usb_find(drvc->sr_ctx->libusb_ctx, conn);
+       else
+               conn_devices = NULL;
 
        /* Find all Hantek DSO devices and upload firmware to all of them. */
        libusb_get_device_list(drvc->sr_ctx->libusb_ctx, &devlist);
        for (i = 0; devlist[i]; i++) {
+               if (conn) {
+                       usb = NULL;
+                       for (l = conn_devices; l; l = l->next) {
+                               usb = l->data;
+                               if (usb->bus == libusb_get_bus_number(devlist[i])
+                                       && usb->address == libusb_get_device_address(devlist[i]))
+                                       break;
+                       }
+                       if (!l)
+                               /* This device matched none of the ones that
+                                * matched the conn specification. */
+                               continue;
+               }
+
                if ((ret = libusb_get_device_descriptor(devlist[i], &des))) {
                        sr_err("Failed to get device descriptor: %s.",
-                              libusb_error_name(ret));
+                                       libusb_error_name(ret));
                        continue;
                }
 
@@ -300,7 +325,7 @@ static GSList *hw_scan(GSList *options)
                                        devc->fw_updated = g_get_monotonic_time();
                                else
                                        sr_err("Firmware upload failed for "
-                                              "device %d.", devcnt);
+                                               "device %d.", devcnt);
                                /* Dummy USB address of 0xff will get overwritten later. */
                                sdi->conn = sr_usb_dev_inst_new(
                                                libusb_get_bus_number(devlist[i]), 0xff, NULL);
@@ -378,7 +403,7 @@ static int hw_dev_open(struct sr_dev_inst *sdi)
        err = libusb_claim_interface(usb->devhdl, USB_INTERFACE);
        if (err != 0) {
                sr_err("Unable to claim interface: %s.",
-                      libusb_error_name(err));
+                          libusb_error_name(err));
                return SR_ERR;
        }
 
@@ -445,7 +470,7 @@ static int config_set(int id, GVariant *data, const struct sr_dev_inst *sdi)
        char **targets;
 
        if (sdi->status != SR_ST_ACTIVE)
-               return SR_ERR;
+               return SR_ERR_DEV_CLOSED;
 
        ret = SR_OK;
        devc = sdi->priv;
@@ -568,8 +593,6 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi)
        GVariantBuilder gvb;
        unsigned int i;
 
-       (void)sdi;
-
        if (!sdi)
                return SR_ERR_ARG;
 
@@ -693,7 +716,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
        sdi = transfer->user_data;
        devc = sdi->priv;
        sr_spew("receive_transfer(): status %d received %d bytes.",
-              transfer->status, transfer->actual_length);
+                  transfer->status, transfer->actual_length);
 
        if (transfer->actual_length == 0)
                /* Nothing to send to the bus. */
@@ -702,7 +725,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
        num_samples = transfer->actual_length / 2;
 
        sr_spew("Got %d-%d/%d samples in frame.", devc->samp_received + 1,
-              devc->samp_received + num_samples, devc->framesize);
+                  devc->samp_received + num_samples, devc->framesize);
 
        /*
         * The device always sends a full frame, but the beginning of the frame
@@ -733,7 +756,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
 
                        /* The rest of this chunk starts with the trigger point. */
                        sr_dbg("Reached trigger point, %d samples buffered.",
-                              devc->samp_buffered);
+                                  devc->samp_buffered);
 
                        /* Avoid the corner case where the chunk ended at
                         * exactly the trigger point. */
@@ -758,7 +781,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
                /* That was the last chunk in this frame. Send the buffered
                 * pre-trigger samples out now, in one big chunk. */
                sr_dbg("End of frame, sending %d pre-trigger buffered samples.",
-                      devc->samp_buffered);
+                          devc->samp_buffered);
                send_chunk(sdi, devc->framebuf, devc->samp_buffered);
 
                /* Mark the end of this frame. */
@@ -890,7 +913,7 @@ static int handle_event(int fd, int revents, void *cb_data)
 }
 
 static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi,
-                                   void *cb_data)
+                                       void *cb_data)
 {
        const struct libusb_pollfd **lupfd;
        struct dev_context *devc;
@@ -898,7 +921,7 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi,
        int i;
 
        if (sdi->status != SR_ST_ACTIVE)
-               return SR_ERR;
+               return SR_ERR_DEV_CLOSED;
 
        devc = sdi->priv;
        devc->cb_data = cb_data;
@@ -918,11 +941,11 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi,
        lupfd = libusb_get_pollfds(drvc->sr_ctx->libusb_ctx);
        for (i = 0; lupfd[i]; i++)
                sr_source_add(lupfd[i]->fd, lupfd[i]->events, TICK,
-                             handle_event, (void *)sdi);
+                               handle_event, (void *)sdi);
        free(lupfd);
 
        /* Send header packet to the session bus. */
-       std_session_send_df_header(cb_data, DRIVER_LOG_DOMAIN);
+       std_session_send_df_header(cb_data, LOG_PREFIX);
 
        return SR_OK;
 }