]> sigrok.org Git - libsigrok.git/commitdiff
scpi-dmm: avoid get/set range calls for some of the Agilent DMM functions
authorGerhard Sittig <redacted>
Fri, 21 May 2021 16:37:05 +0000 (18:37 +0200)
committerGerhard Sittig <redacted>
Sat, 22 May 2021 06:35:11 +0000 (08:35 +0200)
While queries for the range are supported for voltage, current,
resistence, capacitance, the same queries in temperature, frequency,
diode, continuity modes not only fail but even lose the USB connection
to the device. This was consistently observed with 34405A and 34465A.

Suppress get and set range requests for the known problematic modes of
the Agilent protocol speaking meters.

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

index 0d3c6735de1824a2d64b638b2aa9d01dc85c863a..b13d8f6d49d712a5f2468865937e30b7cc33da08 100644 (file)
@@ -133,11 +133,11 @@ static const struct mqopt_item mqopts_agilent_34405a[] = {
        { SR_MQ_CURRENT, SR_MQFLAG_AC, "CURR:AC", "CURR:AC ", NO_DFLT_PREC, FLAGS_NONE, },
        { SR_MQ_RESISTANCE, 0, "RES", "RES ", NO_DFLT_PREC, FLAGS_NONE, },
        { SR_MQ_RESISTANCE, SR_MQFLAG_FOUR_WIRE, "FRES", "FRES ", NO_DFLT_PREC, FLAGS_NONE, },
-       { SR_MQ_CONTINUITY, 0, "CONT", "CONT", -1, FLAGS_NONE, },
+       { SR_MQ_CONTINUITY, 0, "CONT", "CONT", -1, FLAG_NO_RANGE, },
        { SR_MQ_CAPACITANCE, 0, "CAP", "CAP ", NO_DFLT_PREC, FLAGS_NONE, },
-       { SR_MQ_VOLTAGE, SR_MQFLAG_DC | SR_MQFLAG_DIODE, "DIOD", "DIOD", -4, FLAGS_NONE, },
-       { SR_MQ_TEMPERATURE, 0, "TEMP", "TEMP ", NO_DFLT_PREC, FLAGS_NONE, },
-       { SR_MQ_FREQUENCY, 0, "FREQ", "FREQ ", NO_DFLT_PREC, FLAGS_NONE, },
+       { SR_MQ_VOLTAGE, SR_MQFLAG_DC | SR_MQFLAG_DIODE, "DIOD", "DIOD", -4, FLAG_NO_RANGE, },
+       { SR_MQ_TEMPERATURE, 0, "TEMP", "TEMP ", NO_DFLT_PREC, FLAG_NO_RANGE, },
+       { SR_MQ_FREQUENCY, 0, "FREQ", "FREQ ", NO_DFLT_PREC, FLAG_NO_RANGE, },
 };
 
 static const struct mqopt_item mqopts_agilent_34401a[] = {
index 8c7b3373dc90f97143d1f473119e178dfae01e58..97a783fe387f4aec29157c5cb250beb08463b021 100644 (file)
@@ -171,6 +171,8 @@ SR_PRIV const char *scpi_dmm_get_range_text(const struct sr_dev_inst *sdi)
                return NULL;
        if (!mqitem || !mqitem->scpi_func_setup)
                return NULL;
+       if (mqitem->drv_flags & FLAG_NO_RANGE)
+               return NULL;
 
        scpi_dmm_cmd_delay(sdi->conn);
        ret = sr_scpi_cmd(sdi, devc->cmdset, 0, NULL,
@@ -230,6 +232,8 @@ SR_PRIV int scpi_dmm_set_range_from_text(const struct sr_dev_inst *sdi,
                return ret;
        if (!item || !item->scpi_func_setup)
                return SR_ERR_ARG;
+       if (item->drv_flags & FLAG_NO_RANGE)
+               return SR_ERR_NA;
 
        is_auto = g_ascii_strcasecmp(range, "auto") == 0;
        scpi_dmm_cmd_delay(sdi->conn);
index 5fa0ba6f84c91910aea089164f783e426b936fe6..04b8e683155bde2516d0113d58f63110f8a96419 100644 (file)
@@ -57,6 +57,7 @@ struct mqopt_item {
 };
 #define NO_DFLT_PREC   -99
 #define FLAGS_NONE     0
+#define FLAG_NO_RANGE  (1 << 0)
 
 struct scpi_dmm_model {
        const char *vendor;