scpi = g_malloc(sizeof(*scpi));
*scpi = *scpi_dev;
scpi->priv = g_malloc0(scpi->priv_size);
+ scpi->read_timeout_ms = 1000;
params = g_strsplit(resource, "/", 0);
if (scpi->dev_inst_new(scpi->priv, drvc, resource,
params, serialcomm) != SR_OK) {
char buf[256];
int len;
GString *response;
+ gint64 start;
+ unsigned int elapsed_ms;
if (command)
if (sr_scpi_send(scpi, command) != SR_OK)
if (sr_scpi_read_begin(scpi) != SR_OK)
return SR_ERR;
+ start = g_get_monotonic_time();
+
response = g_string_new("");
*scpi_response = NULL;
return SR_ERR;
}
g_string_append_len(response, buf, len);
+ elapsed_ms = (g_get_monotonic_time() - start) / 1000;
+ if (elapsed_ms >= scpi->read_timeout_ms)
+ {
+ sr_err("Timed out waiting for SCPI response.");
+ g_string_free(response, TRUE);
+ return SR_ERR;
+ }
}
/* Get rid of trailing linefeed if present */