]> sigrok.org Git - libsigrok.git/blobdiff - src/device.c
scpi: Add connenction_id() function to all scpi drivers.
[libsigrok.git] / src / device.c
index 34d80a9dadf45771b3751c1ba1a5917aba034900..e7be567d20ad705ffdd3da315198e37494d2684b 100644 (file)
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <libsigrok/libsigrok.h>
 #include "libsigrok-internal.h"
+#include "scpi.h"
 
 /** @cond PRIVATE */
 #define LOG_PREFIX "device"
@@ -808,19 +809,24 @@ SR_API const char *sr_dev_inst_connid_get(const struct sr_dev_inst *sdi)
 #ifdef HAVE_LIBUSB_1_0
        struct drv_context *drvc;
        int cnt, i, a, b;
-       char connection_id[64];
+       char conn_id_usb[64];
        struct sr_usb_dev_inst *usb;
        struct libusb_device **devlist;
 #endif
 
+#ifdef HAVE_LIBSERIALPORT
+       struct sr_serial_dev_inst *serial;
+#endif
+
+       struct sr_scpi_dev_inst *scpi;
+       char *conn_id_scpi;
+
        if (!sdi)
                return NULL;
 
 #ifdef HAVE_LIBSERIALPORT
-       struct sr_serial_dev_inst *serial;
-
        if ((!sdi->connection_id) && (sdi->inst_type == SR_INST_SERIAL)) {
-               /* connection_id isn't populated, let's do that here. */
+               /* connection_id isn't populated, let's do that for serial devices. */
 
                serial = sdi->conn;
                ((struct sr_dev_inst *)sdi)->connection_id = g_strdup(serial->port);
@@ -829,7 +835,7 @@ SR_API const char *sr_dev_inst_connid_get(const struct sr_dev_inst *sdi)
 
 #ifdef HAVE_LIBUSB_1_0
        if ((!sdi->connection_id) && (sdi->inst_type == SR_INST_USB)) {
-               /* connection_id isn't populated, let's do that here. */
+               /* connection_id isn't populated, let's do that for USB devices. */
 
                drvc = sdi->driver->context;
                usb = sdi->conn;
@@ -847,10 +853,10 @@ SR_API const char *sr_dev_inst_connid_get(const struct sr_dev_inst *sdi)
                        if (b != usb->bus || a != usb->address)
                                continue;
 
-                       if (usb_get_port_path(devlist[i], connection_id, sizeof(connection_id)) < 0)
+                       if (usb_get_port_path(devlist[i], conn_id_usb, sizeof(conn_id_usb)) < 0)
                                continue;
 
-                       ((struct sr_dev_inst *)sdi)->connection_id = g_strdup(connection_id);
+                       ((struct sr_dev_inst *)sdi)->connection_id = g_strdup(conn_id_usb);
                        break;
                }
 
@@ -858,6 +864,15 @@ SR_API const char *sr_dev_inst_connid_get(const struct sr_dev_inst *sdi)
        }
 #endif
 
+       if ((!sdi->connection_id) && (sdi->inst_type == SR_INST_SCPI)) {
+               /* connection_id isn't populated, let's do that for SCPI devices. */
+
+               scpi = sdi->conn;
+               sr_scpi_connection_id(scpi, &conn_id_scpi);
+               ((struct sr_dev_inst *)sdi)->connection_id = g_strdup(conn_id_scpi);
+               g_free(conn_id_scpi);
+       }
+
        return sdi->connection_id;
 }