uint16_t pid;
};
+/* Devices that publish RL1 support, but don't support it. */
static struct usbtmc_blacklist blacklist_remote[] = {
- /* Rigol DS1000 series publishes RL1 support, but doesn't support it. */
- { 0x1ab1, 0x0588 },
- /* Agilent DSO1000 series are rebadged versions of the Rigol DS1000. */
- { 0x0957, 0x0588 },
+ { 0x1ab1, 0x0588 }, /* Rigol DS1000 series */
+ { 0x1ab1, 0x04b0 }, /* Rigol DS2000 series */
+ { 0x0957, 0x0588 }, /* Agilent DSO1000 series (rebadged Rigol DS1000) */
ALL_ZERO
};
struct libusb_config_descriptor *confdes;
const struct libusb_interface_descriptor *intfdes;
const struct libusb_endpoint_descriptor *ep;
- int confidx, intfidx, epidx, config = 0;
+ int confidx, intfidx, epidx, config = 0, current_config;
uint8_t capabilities[24];
int ret, found = 0;
uscpi->detached_kernel_driver = 1;
}
- if ((ret = libusb_set_configuration(usb->devhdl, config)) < 0) {
- sr_err("Failed to set configuration: %s.",
- libusb_error_name(ret));
- return SR_ERR;
+ if (libusb_get_configuration(usb->devhdl, ¤t_config) == 0
+ && current_config != config) {
+ if ((ret = libusb_set_configuration(usb->devhdl, config)) < 0) {
+ sr_err("Failed to set configuration: %s.",
+ libusb_error_name(ret));
+ return SR_ERR;
+ }
}
if ((ret = libusb_claim_interface(usb->devhdl, uscpi->interface)) < 0) {
{
struct scpi_usbtmc_libusb *uscpi = scpi->priv;
struct sr_usb_dev_inst *usb = uscpi->usb;
- struct libusb_device *dev;
- struct libusb_device_descriptor des;
int ret;
if (!usb->devhdl)
return SR_ERR;
- dev = libusb_get_device(usb->devhdl);
- libusb_get_device_descriptor(dev, &des);
- if (des.idVendor == 0x1ab1 && des.idProduct == 0x0588
- && scpi->firmware_version >= 24) {
- /* Rigol DS1000 with firmware > 0.2.4 needs this. */
- if ((ret = libusb_clear_halt(usb->devhdl, uscpi->bulk_in_ep)) < 0)
- sr_err("Failed to clear halt/stall condition for EP %d: %s.",
- uscpi->bulk_out_ep, libusb_error_name(ret));
- if ((ret = libusb_clear_halt(usb->devhdl, uscpi->bulk_out_ep)) < 0)
- sr_err("Failed to clear halt/stall condition for EP %d: %s.",
- uscpi->bulk_out_ep, libusb_error_name(ret));
- }
-
scpi_usbtmc_local(uscpi);
if ((ret = libusb_release_interface(usb->devhdl, uscpi->interface)) < 0)