scpi-dmm: move OPC availability check to after IDN device identification
Assume that *IDN? requests don't involve expensive processing, and thus don't require *OPC? before their execution. This makes scpi-dmm follow the good tradition to only use non-standard or model dependent features after the device was successfully identified. Which avoids confusion on unrelated devices. Exclusively check for *OPC? availability on Owon devices, because these motivated the introduction of the test in the first place. This avoids confusion on other devices where short timeouts result in errors because the response is not retrieved although the command is supported (observed on Agilent meters connected via USBTMC).
This commit is contained in:
parent
73816a8d8c
commit
cae328b54c
|
@ -191,42 +191,42 @@ SR_PRIV const struct scpi_dmm_model models[] = {
|
|||
1, 5, cmdset_agilent, ARRAY_AND_SIZE(mqopts_agilent_34405a),
|
||||
scpi_dmm_get_meas_agilent,
|
||||
ARRAY_AND_SIZE(devopts_generic),
|
||||
0, 0,
|
||||
0, 0, FALSE,
|
||||
},
|
||||
{
|
||||
"Agilent", "34410A",
|
||||
1, 6, cmdset_hp, ARRAY_AND_SIZE(mqopts_agilent_34405a),
|
||||
scpi_dmm_get_meas_agilent,
|
||||
ARRAY_AND_SIZE(devopts_generic),
|
||||
0, 0,
|
||||
0, 0, FALSE,
|
||||
},
|
||||
{
|
||||
"GW", "GDM8251A",
|
||||
1, 6, cmdset_gwinstek, ARRAY_AND_SIZE(mqopts_gwinstek_gdm8200a),
|
||||
scpi_dmm_get_meas_gwinstek,
|
||||
ARRAY_AND_SIZE(devopts_generic),
|
||||
1000 * 2500, 0,
|
||||
1000 * 2500, 0, FALSE,
|
||||
},
|
||||
{
|
||||
"GW", "GDM8255A",
|
||||
1, 6, cmdset_gwinstek, ARRAY_AND_SIZE(mqopts_gwinstek_gdm8200a),
|
||||
scpi_dmm_get_meas_gwinstek,
|
||||
ARRAY_AND_SIZE(devopts_generic),
|
||||
1000 * 2500, 0,
|
||||
1000 * 2500, 0, FALSE,
|
||||
},
|
||||
{
|
||||
"GWInstek", "GDM9060",
|
||||
1, 6, cmdset_gwinstek_906x, ARRAY_AND_SIZE(mqopts_gwinstek_gdm906x),
|
||||
scpi_dmm_get_meas_agilent,
|
||||
ARRAY_AND_SIZE(devopts_generic),
|
||||
0, 0,
|
||||
0, 0, FALSE,
|
||||
},
|
||||
{
|
||||
"GWInstek", "GDM9061",
|
||||
1, 6, cmdset_gwinstek_906x, ARRAY_AND_SIZE(mqopts_gwinstek_gdm906x),
|
||||
scpi_dmm_get_meas_agilent,
|
||||
ARRAY_AND_SIZE(devopts_generic),
|
||||
0, 0,
|
||||
0, 0, FALSE,
|
||||
},
|
||||
{
|
||||
"HP", "34401A",
|
||||
|
@ -234,21 +234,21 @@ SR_PRIV const struct scpi_dmm_model models[] = {
|
|||
scpi_dmm_get_meas_agilent,
|
||||
ARRAY_AND_SIZE(devopts_generic),
|
||||
/* 34401A: typ. 1020ms for AC readings (default is 1000ms). */
|
||||
1000 * 1500, 0,
|
||||
1000 * 1500, 0, FALSE,
|
||||
},
|
||||
{
|
||||
"Keysight", "34465A",
|
||||
1, 5, cmdset_agilent, ARRAY_AND_SIZE(mqopts_agilent_34405a),
|
||||
scpi_dmm_get_meas_agilent,
|
||||
ARRAY_AND_SIZE(devopts_generic),
|
||||
0, 0,
|
||||
0, 0, FALSE,
|
||||
},
|
||||
{
|
||||
"OWON", "XDM2041",
|
||||
1, 5, cmdset_owon, ARRAY_AND_SIZE(mqopts_owon_xdm2041),
|
||||
scpi_dmm_get_meas_gwinstek,
|
||||
ARRAY_AND_SIZE(devopts_generic),
|
||||
0, 1e9,
|
||||
0, 1e9, TRUE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -302,10 +302,6 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi)
|
|||
gchar *channel_name;
|
||||
const char *command;
|
||||
|
||||
if (!probe_opc_support(scpi))
|
||||
scpi->no_opc_command = TRUE;
|
||||
|
||||
scpi_dmm_cmd_delay(scpi);
|
||||
ret = sr_scpi_get_hw_id(scpi, &hw_info);
|
||||
if (ret != SR_OK) {
|
||||
sr_info("Could not get IDN response.");
|
||||
|
@ -318,6 +314,9 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (model->check_opc && !probe_opc_support(scpi))
|
||||
scpi->no_opc_command = TRUE;
|
||||
|
||||
sdi = g_malloc0(sizeof(*sdi));
|
||||
sdi->vendor = g_strdup(hw_info->manufacturer);
|
||||
sdi->model = g_strdup(hw_info->model);
|
||||
|
|
|
@ -65,6 +65,7 @@ struct scpi_dmm_model {
|
|||
size_t devopts_size;
|
||||
unsigned int read_timeout_us; /* If zero, use default from src/scpi/scpi.c. */
|
||||
float infinity_limit; /* If zero, use default from protocol.c */
|
||||
gboolean check_opc;
|
||||
};
|
||||
|
||||
struct dev_context {
|
||||
|
|
Loading…
Reference in New Issue