X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fdevice.c;fp=src%2Fdevice.c;h=e7be567d20ad705ffdd3da315198e37494d2684b;hb=8107a9a650f4db08423c3fc79c1b7e7d826ffd7f;hp=34d80a9dadf45771b3751c1ba1a5917aba034900;hpb=9618fde4226a7cf1ab891be6d5581b41e071a0af;p=libsigrok.git diff --git a/src/device.c b/src/device.c index 34d80a9d..e7be567d 100644 --- a/src/device.c +++ b/src/device.c @@ -23,6 +23,7 @@ #include #include #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; }