#include <config.h>
#include "protocol.h"
+#define CHRONOVU_VENDOR (0x0403)
+
static const uint32_t scanopts[] = {
SR_CONF_CONN,
};
libusb_get_device_descriptor(devlist[i], &des);
+ /* See https://sigrok.org/bugzilla/show_bug.cgi?id=1115 and
+ * https://github.com/sigrokproject/libsigrok/pull/166 */
+ if (des.idVendor != CHRONOVU_VENDOR)
+ continue;
+
if ((ret = libusb_open(devlist[i], &hdl)) < 0)
continue;
continue;
}
- usb_get_port_path(devlist[i], connection_id, sizeof(connection_id));
-
libusb_close(hdl);
+ if (usb_get_port_path(devlist[i], connection_id, sizeof(connection_id)) < 0)
+ continue;
+
if (!strcmp(product, "ChronoVu LA8"))
model = 0;
else if (!strcmp(product, "ChronoVu LA16"))
goto err_ftdi_free;
}
- if ((ret = ftdi_usb_purge_buffers(devc->ftdic)) < 0) {
+ if ((ret = PURGE_FTDI_BOTH(devc->ftdic)) < 0) {
sr_err("Failed to purge FTDI buffers (%d): %s.",
ret, ftdi_get_error_string(devc->ftdic));
goto err_ftdi_free;
*data = std_gvar_samplerates(ARRAY_AND_SIZE(devc->samplerates));
break;
case SR_CONF_LIMIT_SAMPLES:
- if (!devc->prof)
+ if (!devc || !devc->prof)
return SR_ERR_BUG;
*data = std_gvar_tuple_u64(0, (devc->prof->model == CHRONOVU_LA8) ? MAX_NUM_SAMPLES : MAX_NUM_SAMPLES / 2);
break;
case SR_CONF_TRIGGER_MATCH:
- if (!devc->prof)
+ if (!devc || !devc->prof)
return SR_ERR_BUG;
*data = std_gvar_array_i32(trigger_matches, devc->prof->num_trigger_matches);
break;