]> sigrok.org Git - libsigrok.git/commitdiff
scpi-dmm: run OPC queries immediately before essential commands
authorGerhard Sittig <redacted>
Sat, 17 Nov 2018 18:51:31 +0000 (19:51 +0100)
committerGerhard Sittig <redacted>
Sat, 17 Nov 2018 19:19:13 +0000 (20:19 +0100)
The current implementation of the SCPI DMM driver is conservative about
checking the device's being operational, but the *OPC? queries are found
in unfortunate locations. Run the OPC query right before running the
next "actual" command, not afterwards. And certainly not between sending
requests and potentially gathering responses in subsequent calls.

This commit does not change current behaviour, but improves maintenance
before pending commits.

src/hardware/scpi-dmm/api.c
src/hardware/scpi-dmm/protocol.c

index 0bb5bcba6418eda8ac9bcdfd451e7cde33974ab0..fcaa1e69bafcb9a6da335a7eb7cca425cf5eec38 100644 (file)
@@ -101,8 +101,8 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi)
        size_t i;
        gchar *channel_name;
 
-       ret = sr_scpi_get_hw_id(scpi, &hw_info);
        scpi_dmm_cmd_delay(scpi);
+       ret = sr_scpi_get_hw_id(scpi, &hw_info);
        if (ret != SR_OK) {
                sr_info("Could not get IDN response.");
                return NULL;
@@ -289,8 +289,8 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi)
 
        command = sr_scpi_cmd_get(devc->cmdset, DMM_CMD_START_ACQ);
        if (command && *command) {
-               ret = sr_scpi_send(scpi, command);
                scpi_dmm_cmd_delay(scpi);
+               ret = sr_scpi_send(scpi, command);
                if (ret != SR_OK)
                        return ret;
        }
@@ -319,8 +319,8 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi)
 
        command = sr_scpi_cmd_get(devc->cmdset, DMM_CMD_STOP_ACQ);
        if (command && *command) {
-               (void)sr_scpi_send(scpi, command);
                scpi_dmm_cmd_delay(scpi);
+               (void)sr_scpi_send(scpi, command);
        }
        sr_scpi_source_remove(sdi->session, scpi);
 
index 954e6c98feaf983be9c269508bfba88d6c291135..717c30daaaf688fd67638e9cf8e02736c5073760 100644 (file)
@@ -90,12 +90,12 @@ SR_PRIV int scpi_dmm_get_mq(const struct sr_dev_inst *sdi,
        if (mqitem)
                *mqitem = NULL;
 
+       scpi_dmm_cmd_delay(sdi->conn);
        command = sr_scpi_cmd_get(devc->cmdset, DMM_CMD_QUERY_FUNC);
        if (!command || !*command)
                return SR_ERR_NA;
        response = NULL;
        ret = sr_scpi_get_string(sdi->conn, command, &response);
-       scpi_dmm_cmd_delay(sdi->conn);
        if (ret != SR_OK)
                return ret;
        if (!response || !*response)
@@ -140,10 +140,12 @@ SR_PRIV int scpi_dmm_set_mq(const struct sr_dev_inst *sdi,
 
        mode = item->scpi_func_setup;
        command = sr_scpi_cmd_get(devc->cmdset, DMM_CMD_SETUP_FUNC);
-       ret = sr_scpi_send(sdi->conn, command, mode);
        scpi_dmm_cmd_delay(sdi->conn);
+       ret = sr_scpi_send(sdi->conn, command, mode);
+       if (ret != SR_OK)
+               return ret;
 
-       return ret;
+       return SR_OK;
 }
 
 SR_PRIV int scpi_dmm_get_meas_agilent(const struct sr_dev_inst *sdi, size_t ch)
@@ -267,8 +269,8 @@ SR_PRIV int scpi_dmm_get_meas_agilent(const struct sr_dev_inst *sdi, size_t ch)
        command = sr_scpi_cmd_get(devc->cmdset, DMM_CMD_QUERY_VALUE);
        if (!command || !*command)
                return SR_ERR_NA;
-       ret = sr_scpi_get_string(scpi, command, &response);
        scpi_dmm_cmd_delay(scpi);
+       ret = sr_scpi_get_string(scpi, command, &response);
        if (ret != SR_OK)
                return ret;
        g_strstrip(response);