scpi-dmm: Add infinity limit to model-specific config.

Owon multimeters seem otherwise compatible with gwinstek reader,
except infinity is only 1e9.
This commit is contained in:
Petteri Aimonen 2021-02-28 15:28:55 +02:00 committed by Gerhard Sittig
parent 5433907ed9
commit 33306b13ac
3 changed files with 13 additions and 10 deletions

View File

@ -168,42 +168,42 @@ SR_PRIV const struct scpi_dmm_model models[] = {
1, 5, cmdset_agilent, ARRAY_AND_SIZE(mqopts_agilent_34405a), 1, 5, cmdset_agilent, ARRAY_AND_SIZE(mqopts_agilent_34405a),
scpi_dmm_get_meas_agilent, scpi_dmm_get_meas_agilent,
ARRAY_AND_SIZE(devopts_generic), ARRAY_AND_SIZE(devopts_generic),
0, 0, 0,
}, },
{ {
"Agilent", "34410A", "Agilent", "34410A",
1, 6, cmdset_hp, ARRAY_AND_SIZE(mqopts_agilent_34405a), 1, 6, cmdset_hp, ARRAY_AND_SIZE(mqopts_agilent_34405a),
scpi_dmm_get_meas_agilent, scpi_dmm_get_meas_agilent,
ARRAY_AND_SIZE(devopts_generic), ARRAY_AND_SIZE(devopts_generic),
0, 0, 0,
}, },
{ {
"GW", "GDM8251A", "GW", "GDM8251A",
1, 6, cmdset_gwinstek, ARRAY_AND_SIZE(mqopts_gwinstek_gdm8200a), 1, 6, cmdset_gwinstek, ARRAY_AND_SIZE(mqopts_gwinstek_gdm8200a),
scpi_dmm_get_meas_gwinstek, scpi_dmm_get_meas_gwinstek,
ARRAY_AND_SIZE(devopts_generic), ARRAY_AND_SIZE(devopts_generic),
1000 * 2500, 1000 * 2500, 0,
}, },
{ {
"GW", "GDM8255A", "GW", "GDM8255A",
1, 6, cmdset_gwinstek, ARRAY_AND_SIZE(mqopts_gwinstek_gdm8200a), 1, 6, cmdset_gwinstek, ARRAY_AND_SIZE(mqopts_gwinstek_gdm8200a),
scpi_dmm_get_meas_gwinstek, scpi_dmm_get_meas_gwinstek,
ARRAY_AND_SIZE(devopts_generic), ARRAY_AND_SIZE(devopts_generic),
1000 * 2500, 1000 * 2500, 0,
}, },
{ {
"GWInstek", "GDM9060", "GWInstek", "GDM9060",
1, 6, cmdset_gwinstek_906x, ARRAY_AND_SIZE(mqopts_gwinstek_gdm906x), 1, 6, cmdset_gwinstek_906x, ARRAY_AND_SIZE(mqopts_gwinstek_gdm906x),
scpi_dmm_get_meas_agilent, scpi_dmm_get_meas_agilent,
ARRAY_AND_SIZE(devopts_generic), ARRAY_AND_SIZE(devopts_generic),
0, 0, 0,
}, },
{ {
"GWInstek", "GDM9061", "GWInstek", "GDM9061",
1, 6, cmdset_gwinstek_906x, ARRAY_AND_SIZE(mqopts_gwinstek_gdm906x), 1, 6, cmdset_gwinstek_906x, ARRAY_AND_SIZE(mqopts_gwinstek_gdm906x),
scpi_dmm_get_meas_agilent, scpi_dmm_get_meas_agilent,
ARRAY_AND_SIZE(devopts_generic), ARRAY_AND_SIZE(devopts_generic),
0, 0, 0,
}, },
{ {
"HP", "34401A", "HP", "34401A",
@ -211,14 +211,14 @@ SR_PRIV const struct scpi_dmm_model models[] = {
scpi_dmm_get_meas_agilent, scpi_dmm_get_meas_agilent,
ARRAY_AND_SIZE(devopts_generic), ARRAY_AND_SIZE(devopts_generic),
/* 34401A: typ. 1020ms for AC readings (default is 1000ms). */ /* 34401A: typ. 1020ms for AC readings (default is 1000ms). */
1000 * 1500, 1000 * 1500, 0,
}, },
{ {
"Keysight", "34465A", "Keysight", "34465A",
1, 5, cmdset_agilent, ARRAY_AND_SIZE(mqopts_agilent_34405a), 1, 5, cmdset_agilent, ARRAY_AND_SIZE(mqopts_agilent_34405a),
scpi_dmm_get_meas_agilent, scpi_dmm_get_meas_agilent,
ARRAY_AND_SIZE(devopts_generic), ARRAY_AND_SIZE(devopts_generic),
0, 0, 0,
}, },
}; };

View File

@ -459,9 +459,11 @@ SR_PRIV int scpi_dmm_get_meas_gwinstek(const struct sr_dev_inst *sdi, size_t ch)
if (!response) if (!response)
return SR_ERR; return SR_ERR;
limit = 9e37; limit = 9e37;
if (info->d_value > +limit) { if (devc->model->infinity_limit != 0.0)
limit = devc->model->infinity_limit;
if (info->d_value >= +limit) {
info->d_value = +INFINITY; info->d_value = +INFINITY;
} else if (info->d_value < -limit) { } else if (info->d_value <= -limit) {
info->d_value = -INFINITY; info->d_value = -INFINITY;
} else { } else {
p = response; p = response;

View File

@ -64,6 +64,7 @@ struct scpi_dmm_model {
const uint32_t *devopts; const uint32_t *devopts;
size_t devopts_size; size_t devopts_size;
unsigned int read_timeout_us; /* If zero, use default from src/scpi/scpi.c. */ unsigned int read_timeout_us; /* If zero, use default from src/scpi/scpi.c. */
float infinity_limit; /* If zero, use default from protocol.c */
}; };
struct dev_context { struct dev_context {