hp-3478a: Only match when conn= is given to avoid false probe positives.

The HP 3478A device would not reliably identify by means of SCPI queries. The
previous scan() implementation would have matched any connected SCPI device,
then upset these devices by emitting non-SCPI requests.

Tighten the scope of the hp-3478a probe, only scan for devices when a conn=
spec was provided. This avoids false positives and malfunction of other
devices, and still lets users address the problematic device. This is similar
to serial-dmm and unspecific cables and has proven to work there.
This commit is contained in:
Frank Stettner 2021-05-24 12:56:52 +02:00 committed by Gerhard Sittig
parent 0e3c3c80b8
commit 8ef4fb3347
1 changed files with 16 additions and 0 deletions

View File

@ -129,6 +129,14 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi)
struct sr_dev_inst *sdi;
struct dev_context *devc;
/*
* The device cannot get identified by means of SCPI queries.
* Neither shall non-SCPI requests get emitted before reliable
* identification of the device. Assume that we only get here
* when user specs led us to believe it's safe to communicate
* to the expected kind of device.
*/
sdi = g_malloc0(sizeof(struct sr_dev_inst));
sdi->vendor = g_strdup("Hewlett-Packard");
sdi->model = g_strdup("3478A");
@ -152,6 +160,14 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi)
static GSList *scan(struct sr_dev_driver *di, GSList *options)
{
const char *conn;
/* Only scan for a device when conn= was specified. */
conn = NULL;
(void)sr_serial_extract_options(options, &conn, NULL);
if (!conn)
return NULL;
return sr_scpi_scan(di->context, options, probe_device);
}