From: Karl Palsson Date: Tue, 22 Nov 2016 13:12:55 +0000 (+0000) Subject: fx2lafw: warn on fail to open plausible devices X-Git-Tag: libsigrok-0.5.0~169 X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=7087a8b0fa24ac9e579ce68452f025a73d115dcb fx2lafw: warn on fail to open plausible devices Instead of silently ignoring all devices that fail to open. This fixes bug #867. Signed-off-by: Karl Palsson --- diff --git a/src/hardware/fx2lafw/api.c b/src/hardware/fx2lafw/api.c index dd82729e..0f9cadb6 100644 --- a/src/hardware/fx2lafw/api.c +++ b/src/hardware/fx2lafw/api.c @@ -214,6 +214,20 @@ static const uint64_t dslogic_samplerates[] = { SR_MHZ(400), }; +static gboolean is_plausible(const struct libusb_device_descriptor *des) +{ + int i; + + for (i = 0; supported_fx2[i].vid; i++) { + if (des->idVendor != supported_fx2[i].vid) + continue; + if (des->idProduct == supported_fx2[i].pid) + return TRUE; + } + + return FALSE; +} + static GSList *scan(struct sr_dev_driver *di, GSList *options) { struct drv_context *drvc; @@ -271,9 +285,16 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) libusb_get_device_descriptor( devlist[i], &des); - if ((ret = libusb_open(devlist[i], &hdl)) < 0) + if (!is_plausible(&des)) continue; + if ((ret = libusb_open(devlist[i], &hdl)) < 0) { + sr_warn("Failed to open potential device with " + "VID:PID %04x:%04x: %s.", des.idVendor, + des.idProduct, libusb_error_name(ret)); + continue; + } + if (des.iManufacturer == 0) { manufacturer[0] = '\0'; } else if ((ret = libusb_get_string_descriptor_ascii(hdl,