Add a configurable read timeout to blocking SCPI reads, default 1s.
This commit is contained in:
parent
57d355a7bd
commit
9092e66888
|
@ -734,6 +734,7 @@ struct sr_scpi_dev_inst {
|
||||||
int (*read_complete)(void *priv);
|
int (*read_complete)(void *priv);
|
||||||
int (*close)(void *priv);
|
int (*close)(void *priv);
|
||||||
void (*free)(void *priv);
|
void (*free)(void *priv);
|
||||||
|
unsigned int read_timeout_ms;
|
||||||
void *priv;
|
void *priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -183,6 +183,7 @@ SR_PRIV struct sr_scpi_dev_inst *scpi_dev_inst_new(struct drv_context *drvc,
|
||||||
scpi = g_malloc(sizeof(*scpi));
|
scpi = g_malloc(sizeof(*scpi));
|
||||||
*scpi = *scpi_dev;
|
*scpi = *scpi_dev;
|
||||||
scpi->priv = g_malloc0(scpi->priv_size);
|
scpi->priv = g_malloc0(scpi->priv_size);
|
||||||
|
scpi->read_timeout_ms = 1000;
|
||||||
params = g_strsplit(resource, "/", 0);
|
params = g_strsplit(resource, "/", 0);
|
||||||
if (scpi->dev_inst_new(scpi->priv, drvc, resource,
|
if (scpi->dev_inst_new(scpi->priv, drvc, resource,
|
||||||
params, serialcomm) != SR_OK) {
|
params, serialcomm) != SR_OK) {
|
||||||
|
@ -380,6 +381,8 @@ SR_PRIV int sr_scpi_get_string(struct sr_scpi_dev_inst *scpi,
|
||||||
char buf[256];
|
char buf[256];
|
||||||
int len;
|
int len;
|
||||||
GString *response;
|
GString *response;
|
||||||
|
gint64 start;
|
||||||
|
unsigned int elapsed_ms;
|
||||||
|
|
||||||
if (command)
|
if (command)
|
||||||
if (sr_scpi_send(scpi, command) != SR_OK)
|
if (sr_scpi_send(scpi, command) != SR_OK)
|
||||||
|
@ -388,6 +391,8 @@ SR_PRIV int sr_scpi_get_string(struct sr_scpi_dev_inst *scpi,
|
||||||
if (sr_scpi_read_begin(scpi) != SR_OK)
|
if (sr_scpi_read_begin(scpi) != SR_OK)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
|
|
||||||
|
start = g_get_monotonic_time();
|
||||||
|
|
||||||
response = g_string_new("");
|
response = g_string_new("");
|
||||||
|
|
||||||
*scpi_response = NULL;
|
*scpi_response = NULL;
|
||||||
|
@ -399,6 +404,13 @@ SR_PRIV int sr_scpi_get_string(struct sr_scpi_dev_inst *scpi,
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
g_string_append_len(response, buf, len);
|
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 */
|
/* Get rid of trailing linefeed if present */
|
||||||
|
|
Loading…
Reference in New Issue