scpi-dmm: return MQ table entry to "get MQ" routine callers
The "get MQ" helper routine communicates SCPI responses and translates them to internal "MQ and flag" values. Optionally return the MQ table entry reference to callers, so they don't have to repeat the table lookup when the function's default precision is required, or should future "start acquisition" requests need to refer to the meter's current function.
This commit is contained in:
parent
64d03de1c2
commit
08f3b427b6
|
@ -191,7 +191,7 @@ static int config_get(uint32_t key, GVariant **data,
|
|||
case SR_CONF_LIMIT_MSEC:
|
||||
return sr_sw_limits_config_get(&devc->limits, key, data);
|
||||
case SR_CONF_MEASURED_QUANTITY:
|
||||
ret = scpi_dmm_get_mq(sdi, &mq, &mqflag, NULL);
|
||||
ret = scpi_dmm_get_mq(sdi, &mq, &mqflag, NULL, NULL);
|
||||
if (ret != SR_OK)
|
||||
return ret;
|
||||
arr[0] = g_variant_new_uint32(mq);
|
||||
|
@ -276,13 +276,14 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
|||
struct sr_scpi_dev_inst *scpi;
|
||||
struct dev_context *devc;
|
||||
int ret;
|
||||
const struct mqopt_item *item;
|
||||
const char *command;
|
||||
|
||||
scpi = sdi->conn;
|
||||
devc = sdi->priv;
|
||||
|
||||
ret = scpi_dmm_get_mq(sdi, &devc->start_acq_mq.curr_mq,
|
||||
&devc->start_acq_mq.curr_mqflag, NULL);
|
||||
&devc->start_acq_mq.curr_mqflag, NULL, &item);
|
||||
if (ret != SR_OK)
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -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,6 +87,8 @@ SR_PRIV int scpi_dmm_get_mq(const struct sr_dev_inst *sdi,
|
|||
*flag = 0;
|
||||
if (rsp)
|
||||
*rsp = NULL;
|
||||
if (mqitem)
|
||||
*mqitem = NULL;
|
||||
|
||||
command = sr_scpi_cmd_get(devc->cmdset, DMM_CMD_QUERY_FUNC);
|
||||
if (!command || !*command)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -173,7 +178,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 +205,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);
|
||||
|
||||
|
|
|
@ -90,7 +90,8 @@ SR_PRIV const struct mqopt_item *scpi_dmm_lookup_mq_number(
|
|||
SR_PRIV const struct mqopt_item *scpi_dmm_lookup_mq_text(
|
||||
const struct sr_dev_inst *sdi, const char *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);
|
||||
SR_PRIV int scpi_dmm_set_mq(const struct sr_dev_inst *sdi,
|
||||
enum sr_mq mq, enum sr_mqflag flag);
|
||||
SR_PRIV int scpi_dmm_get_meas_agilent(const struct sr_dev_inst *sdi, size_t ch);
|
||||
|
|
Loading…
Reference in New Issue