X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fscpi%2Fscpi_visa.c;h=c4f5553a275debbf2e2227773b2c31ea44cf2e37;hb=35280a96184cdf8781728a2a315e5d560aaf7654;hp=4b9056665b1579f0d5109a322b71534fd6ccf60b;hpb=c1aae90038456a61d0f9313d34e6107c3440d3e7;p=libsigrok.git
diff --git a/src/scpi/scpi_visa.c b/src/scpi/scpi_visa.c
index 4b905666..c4f5553a 100644
--- a/src/scpi/scpi_visa.c
+++ b/src/scpi/scpi_visa.c
@@ -17,10 +17,12 @@
* along with this program. If not, see .
*/
+#include
#include
#include
#include
#include "libsigrok-internal.h"
+#include "scpi.h"
#define LOG_PREFIX "scpi_visa"
@@ -49,9 +51,9 @@ static int scpi_visa_dev_inst_new(void *priv, struct drv_context *drvc,
return SR_OK;
}
-static int scpi_visa_open(void *priv)
+static int scpi_visa_open(struct sr_scpi_dev_inst *scpi)
{
- struct scpi_visa *vscpi = priv;
+ struct scpi_visa *vscpi = scpi->priv;
if (viOpenDefaultRM(&vscpi->rmgr) != VI_SUCCESS) {
sr_err("Cannot open default resource manager.");
@@ -66,6 +68,16 @@ static int scpi_visa_open(void *priv)
return SR_OK;
}
+static int scpi_visa_connection_id(struct sr_scpi_dev_inst *scpi,
+ char **connection_id)
+{
+ struct scpi_visa *vscpi = scpi->priv;
+
+ *connection_id = g_strdup_printf("%s/%s", scpi->prefix, vscpi->resource);
+
+ return SR_OK;
+}
+
static int scpi_visa_source_add(struct sr_session *session, void *priv,
int events, int timeout, sr_receive_data_callback cb, void *cb_data)
{
@@ -85,21 +97,16 @@ static int scpi_visa_source_remove(struct sr_session *session, void *priv)
static int scpi_visa_send(void *priv, const char *command)
{
struct scpi_visa *vscpi = priv;
- gchar *terminated_command;
ViUInt32 written = 0;
int len;
- terminated_command = g_strconcat(command, "\n", NULL);
- len = strlen(terminated_command);
- if (viWrite(vscpi->vi, (ViBuf) (terminated_command + written), len,
+ len = strlen(command);
+ if (viWrite(vscpi->vi, (ViBuf) (command + written), len,
&written) != VI_SUCCESS) {
sr_err("Error while sending SCPI command: '%s'.", command);
- g_free(terminated_command);
return SR_ERR;
}
- g_free(terminated_command);
-
sr_spew("Successfully sent SCPI command: '%s'.", command);
return SR_OK;
@@ -138,9 +145,9 @@ static int scpi_visa_read_complete(void *priv)
return !(status & 16);
}
-static int scpi_visa_close(void *priv)
+static int scpi_visa_close(struct sr_scpi_dev_inst *scpi)
{
- struct scpi_visa *vscpi = priv;
+ struct scpi_visa *vscpi = scpi->priv;
viClose(vscpi->vi);
viClose(vscpi->rmgr);
@@ -157,17 +164,19 @@ static void scpi_visa_free(void *priv)
}
SR_PRIV const struct sr_scpi_dev_inst scpi_visa_dev = {
- .name = "VISA",
- .prefix = "visa",
- .priv_size = sizeof(struct scpi_visa),
- .dev_inst_new = scpi_visa_dev_inst_new,
- .open = scpi_visa_open,
- .source_add = scpi_visa_source_add,
+ .name = "VISA",
+ .prefix = "visa",
+ .transport = SCPI_TRANSPORT_VISA,
+ .priv_size = sizeof(struct scpi_visa),
+ .dev_inst_new = scpi_visa_dev_inst_new,
+ .open = scpi_visa_open,
+ .connection_id = scpi_visa_connection_id,
+ .source_add = scpi_visa_source_add,
.source_remove = scpi_visa_source_remove,
- .send = scpi_visa_send,
- .read_begin = scpi_visa_read_begin,
- .read_data = scpi_visa_read_data,
+ .send = scpi_visa_send,
+ .read_begin = scpi_visa_read_begin,
+ .read_data = scpi_visa_read_data,
.read_complete = scpi_visa_read_complete,
- .close = scpi_visa_close,
- .free = scpi_visa_free,
+ .close = scpi_visa_close,
+ .free = scpi_visa_free,
};