scpi_usbtmc_libusb: set_configuration only if it is not already set
This avoids the issues described here: http://libusb.sourceforge.net/api-1.0/caveats.html#configsel
This commit is contained in:
parent
e40e9ca28d
commit
938bdc25b7
|
@ -299,7 +299,7 @@ static int scpi_usbtmc_libusb_open(struct sr_scpi_dev_inst *scpi)
|
||||||
struct libusb_config_descriptor *confdes;
|
struct libusb_config_descriptor *confdes;
|
||||||
const struct libusb_interface_descriptor *intfdes;
|
const struct libusb_interface_descriptor *intfdes;
|
||||||
const struct libusb_endpoint_descriptor *ep;
|
const struct libusb_endpoint_descriptor *ep;
|
||||||
int confidx, intfidx, epidx, config = 0;
|
int confidx, intfidx, epidx, config = 0, current_config;
|
||||||
uint8_t capabilities[24];
|
uint8_t capabilities[24];
|
||||||
int ret, found = 0;
|
int ret, found = 0;
|
||||||
|
|
||||||
|
@ -367,11 +367,14 @@ static int scpi_usbtmc_libusb_open(struct sr_scpi_dev_inst *scpi)
|
||||||
uscpi->detached_kernel_driver = 1;
|
uscpi->detached_kernel_driver = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (libusb_get_configuration(usb->devhdl, ¤t_config) == 0
|
||||||
|
&& current_config != config) {
|
||||||
if ((ret = libusb_set_configuration(usb->devhdl, config)) < 0) {
|
if ((ret = libusb_set_configuration(usb->devhdl, config)) < 0) {
|
||||||
sr_err("Failed to set configuration: %s.",
|
sr_err("Failed to set configuration: %s.",
|
||||||
libusb_error_name(ret));
|
libusb_error_name(ret));
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = libusb_claim_interface(usb->devhdl, uscpi->interface)) < 0) {
|
if ((ret = libusb_claim_interface(usb->devhdl, uscpi->interface)) < 0) {
|
||||||
sr_err("Failed to claim interface: %s.",
|
sr_err("Failed to claim interface: %s.",
|
||||||
|
|
Loading…
Reference in New Issue