X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fscpi%2Fscpi_visa.c;h=c4f5553a275debbf2e2227773b2c31ea44cf2e37;hb=ed787682255cdecbb3ba8cefc87c20182b97ce7b;hp=cf34a55529aadfc7afe25f515df9c4a51c416807;hpb=155b680da482cea2381becb73c51cfb838bff31e;p=libsigrok.git diff --git a/src/scpi/scpi_visa.c b/src/scpi/scpi_visa.c index cf34a555..c4f5553a 100644 --- a/src/scpi/scpi_visa.c +++ b/src/scpi/scpi_visa.c @@ -17,11 +17,12 @@ * along with this program. If not, see . */ -#include "libsigrok.h" -#include "libsigrok-internal.h" - +#include #include #include +#include +#include "libsigrok-internal.h" +#include "scpi.h" #define LOG_PREFIX "scpi_visa" @@ -50,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."); @@ -67,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) { @@ -86,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; @@ -139,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); @@ -158,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, };