X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fscpi-dmm%2Fprotocol.c;h=d0cafd829f05d82463e1a91b8f388f65e76b3af8;hb=2142a79b53e7fb2d9d050c382b624820601c1bd6;hp=08c79b4a19be39bcffaf619b5e10c8c2e8ed5dbf;hpb=3cdad416e4231796e3b31380116404796622c6f5;p=libsigrok.git diff --git a/src/hardware/scpi-dmm/protocol.c b/src/hardware/scpi-dmm/protocol.c index 08c79b4a..d0cafd82 100644 --- a/src/hardware/scpi-dmm/protocol.c +++ b/src/hardware/scpi-dmm/protocol.c @@ -70,7 +70,8 @@ SR_PRIV const struct mqopt_item *scpi_dmm_lookup_mq_text( } SR_PRIV int scpi_dmm_get_mq(const struct sr_dev_inst *sdi, - enum sr_mq *mq, enum sr_mqflag *flag, char **rsp) + enum sr_mq *mq, enum sr_mqflag *flag, char **rsp, + const struct mqopt_item **mqitem) { struct dev_context *devc; const char *command; @@ -86,13 +87,15 @@ SR_PRIV int scpi_dmm_get_mq(const struct sr_dev_inst *sdi, *flag = 0; if (rsp) *rsp = NULL; + 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) @@ -108,6 +111,8 @@ SR_PRIV int scpi_dmm_get_mq(const struct sr_dev_inst *sdi, *mq = item->mq; if (flag) *flag = item->mqflag; + if (mqitem) + *mqitem = item; ret = SR_OK; } @@ -135,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) @@ -173,7 +180,7 @@ SR_PRIV int scpi_dmm_get_meas_agilent(const struct sr_dev_inst *sdi, size_t ch) * Get the meter's current mode, keep the response around. * Skip the measurement if the mode is uncertain. */ - ret = scpi_dmm_get_mq(sdi, &mq, &mqflag, &mode_response); + ret = scpi_dmm_get_mq(sdi, &mq, &mqflag, &mode_response, &item); if (ret != SR_OK) { g_free(mode_response); return ret; @@ -200,17 +207,14 @@ SR_PRIV int scpi_dmm_get_meas_agilent(const struct sr_dev_inst *sdi, size_t ch) snprintf(prec_text, sizeof(prec_text), "%s", fields[count - 1]); p = prec_text; + } else if (!item) { + p = NULL; + } else if (item->default_precision == NO_DFLT_PREC) { + p = NULL; } else { - item = scpi_dmm_lookup_mq_number(sdi, mq, mqflag); - if (!item) { - p = NULL; - } else if (item->default_precision == NO_DFLT_PREC) { - p = NULL; - } else { - snprintf(prec_text, sizeof(prec_text), - "1e%d", item->default_precision); - p = prec_text; - } + snprintf(prec_text, sizeof(prec_text), + "1e%d", item->default_precision); + p = prec_text; } g_strfreev(fields); @@ -265,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); @@ -382,6 +386,9 @@ SR_PRIV int scpi_dmm_get_meas_agilent(const struct sr_dev_inst *sdi, size_t ch) case SR_MQ_FREQUENCY: unit = SR_UNIT_HERTZ; break; + case SR_MQ_TIME: + unit = SR_UNIT_SECOND; + break; default: return SR_ERR_NA; }