X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fscpi%2Fscpi.c;h=9f5dba43ae493a5b4558b1970186c07ddd69b417;hb=ffa5f177f15dd8c75612d65b20459e7cdccc68b9;hp=2ec22ad51f0dc7fa69364b8262009211a95ea4b4;hpb=c0d257790a7ad0ddc8e83736fa2ade0bf57f3661;p=libsigrok.git
diff --git a/src/scpi/scpi.c b/src/scpi/scpi.c
index 2ec22ad5..9f5dba43 100644
--- a/src/scpi/scpi.c
+++ b/src/scpi/scpi.c
@@ -17,6 +17,7 @@
* along with this program. If not, see .
*/
+#include
#include
#include
#include
@@ -109,12 +110,16 @@ static struct sr_dev_inst *sr_scpi_scan_resource(struct drv_context *drvc,
return NULL;
};
- if ((sdi = probe_device(scpi)))
- return sdi;
+ sdi = probe_device(scpi);
sr_scpi_close(scpi);
- sr_scpi_free(scpi);
- return NULL;
+
+ if (sdi)
+ sdi->status = SR_ST_INACTIVE;
+ else
+ sr_scpi_free(scpi);
+
+ return sdi;
}
SR_PRIV GSList *sr_scpi_scan(struct drv_context *drvc, GSList *options,
@@ -209,7 +214,7 @@ SR_PRIV struct sr_scpi_dev_inst *scpi_dev_inst_new(struct drv_context *drvc,
*/
SR_PRIV int sr_scpi_open(struct sr_scpi_dev_inst *scpi)
{
- return scpi->open(scpi->priv);
+ return scpi->open(scpi);
}
/**
@@ -291,8 +296,10 @@ SR_PRIV int sr_scpi_send_variadic(struct sr_scpi_dev_inst *scpi,
va_end(args_copy);
/* Allocate buffer and write out command. */
- buf = g_malloc(len + 1);
+ buf = g_malloc0(len + 2);
vsprintf(buf, format, args);
+ if (buf[len - 1] != '\n')
+ buf[len] = '\n';
/* Send command. */
ret = scpi->send(scpi->priv, buf);
@@ -351,7 +358,7 @@ SR_PRIV int sr_scpi_read_complete(struct sr_scpi_dev_inst *scpi)
*/
SR_PRIV int sr_scpi_close(struct sr_scpi_dev_inst *scpi)
{
- return scpi->close(scpi->priv);
+ return scpi->close(scpi);
}
/**
@@ -425,10 +432,10 @@ SR_PRIV int sr_scpi_get_string(struct sr_scpi_dev_inst *scpi,
if (response->len >= 1 && response->str[response->len - 1] == '\r')
g_string_truncate(response, response->len - 1);
- *scpi_response = response->str;
- g_string_free(response, FALSE);
+ sr_spew("Got response: '%.70s', length %" G_GSIZE_FORMAT ".",
+ response->str, response->len);
- sr_spew("Got response: '%.70s', length %d.", *scpi_response, strlen(*scpi_response));
+ *scpi_response = g_string_free(response, FALSE);
return SR_OK;
}
@@ -574,7 +581,7 @@ SR_PRIV int sr_scpi_get_opc(struct sr_scpi_dev_inst *scpi)
unsigned int i;
gboolean opc;
- for (i = 0; i < SCPI_READ_RETRIES; ++i) {
+ for (i = 0; i < SCPI_READ_RETRIES; i++) {
sr_scpi_get_bool(scpi, SCPI_CMD_OPC, &opc);
if (opc)
return SR_OK;
@@ -606,7 +613,6 @@ SR_PRIV int sr_scpi_get_floatv(struct sr_scpi_dev_inst *scpi,
gchar **ptr, **tokens;
GArray *response_array;
- ret = SR_OK;
response = NULL;
tokens = NULL;
@@ -663,7 +669,6 @@ SR_PRIV int sr_scpi_get_uint8v(struct sr_scpi_dev_inst *scpi,
gchar **ptr, **tokens;
GArray *response_array;
- ret = SR_OK;
response = NULL;
tokens = NULL;
@@ -745,10 +750,10 @@ SR_PRIV int sr_scpi_get_hw_id(struct sr_scpi_dev_inst *scpi,
g_free(response);
hw_info = g_malloc0(sizeof(struct sr_scpi_hw_info));
- hw_info->manufacturer = g_strdup(tokens[0]);
- hw_info->model = g_strdup(tokens[1]);
- hw_info->serial_number = g_strdup(tokens[2]);
- hw_info->firmware_version = g_strdup(tokens[3]);
+ hw_info->manufacturer = g_strstrip(g_strdup(tokens[0]));
+ hw_info->model = g_strstrip(g_strdup(tokens[1]));
+ hw_info->serial_number = g_strstrip(g_strdup(tokens[2]));
+ hw_info->firmware_version = g_strstrip(g_strdup(tokens[3]));
g_strfreev(tokens);