X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=src%2Fhardware%2Fscpi-dmm%2Fprotocol.c;h=884ba6dcca2a77a337fb96a58d27cbd33473debf;hp=d8d07957f3f5ac3926cacba121d764fa207106eb;hb=2111d1574b7bc715bc60ca5626f126369553f3f8;hpb=33aa8117e3640ab5d7663d5e974ae2de2b3d0239 diff --git a/src/hardware/scpi-dmm/protocol.c b/src/hardware/scpi-dmm/protocol.c index d8d07957..884ba6dc 100644 --- a/src/hardware/scpi-dmm/protocol.c +++ b/src/hardware/scpi-dmm/protocol.c @@ -28,7 +28,9 @@ SR_PRIV void scpi_dmm_cmd_delay(struct sr_scpi_dev_inst *scpi) { if (WITH_CMD_DELAY) g_usleep(WITH_CMD_DELAY * 1000); - sr_scpi_get_opc(scpi); + + if (!scpi->no_opc_command) + sr_scpi_get_opc(scpi); } SR_PRIV const struct mqopt_item *scpi_dmm_lookup_mq_number( @@ -114,6 +116,8 @@ SR_PRIV int scpi_dmm_get_mq(const struct sr_dev_inst *sdi, if (mqitem) *mqitem = item; ret = SR_OK; + } else { + sr_warn("Unknown measurement quantity: %s", have); } if (rsp) { @@ -170,6 +174,7 @@ SR_PRIV int scpi_dmm_get_meas_agilent(const struct sr_dev_inst *sdi, size_t ch) int sig_digits, val_exp; int digits; enum sr_unit unit; + double limit; scpi = sdi->conn; devc = sdi->priv; @@ -282,9 +287,10 @@ SR_PRIV int scpi_dmm_get_meas_agilent(const struct sr_dev_inst *sdi, size_t ch) } if (!response) return SR_ERR; - if (info->d_value > +9e37) { + limit = 9e37; + if (info->d_value > +limit) { info->d_value = +INFINITY; - } else if (info->d_value < -9e37) { + } else if (info->d_value < -limit) { info->d_value = -INFINITY; } else { p = response; @@ -456,9 +462,12 @@ SR_PRIV int scpi_dmm_get_meas_gwinstek(const struct sr_dev_inst *sdi, size_t ch) } if (!response) return SR_ERR; - if (info->d_value > +9e37) { + limit = 9e37; + if (devc->model->infinity_limit != 0.0) + limit = devc->model->infinity_limit; + if (info->d_value >= +limit) { info->d_value = +INFINITY; - } else if (info->d_value < -9e37) { + } else if (info->d_value <= -limit) { info->d_value = -INFINITY; } else { p = response; @@ -494,10 +503,9 @@ SR_PRIV int scpi_dmm_get_meas_gwinstek(const struct sr_dev_inst *sdi, size_t ch) case 7: case 16: /* In resitance modes 0L reads as 1.20000E8 or 1.99999E8. */ + limit = 1.2e8; if (strcmp(devc->model->model, "GDM8255A") == 0) limit = 1.99999e8; - else - limit = 1.2e8; if (info->d_value >= limit) info->d_value = +INFINITY; break;