scpi_usbtmc_libusb: disable bulk_out clear_halt for Rigol DS1000
fix hangup issue with Rigol firmware version 00.02.02.02.00
This commit is contained in:
parent
eb28f1b7b2
commit
50e6311a1b
|
@ -43,6 +43,7 @@ struct scpi_usbtmc_libusb {
|
||||||
int response_length;
|
int response_length;
|
||||||
int response_bytes_read;
|
int response_bytes_read;
|
||||||
int remaining_length;
|
int remaining_length;
|
||||||
|
int rigol_ds1000;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Some USBTMC-specific enums, as defined in the USBTMC standard. */
|
/* Some USBTMC-specific enums, as defined in the USBTMC standard. */
|
||||||
|
@ -234,6 +235,8 @@ static int scpi_usbtmc_libusb_open(void *priv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
found = 1;
|
found = 1;
|
||||||
|
uscpi->rigol_ds1000 = des.idVendor == 0x1ab1 &&
|
||||||
|
des.idProduct == 0x0588;
|
||||||
}
|
}
|
||||||
libusb_free_config_descriptor(confdes);
|
libusb_free_config_descriptor(confdes);
|
||||||
if (found)
|
if (found)
|
||||||
|
@ -272,6 +275,7 @@ static int scpi_usbtmc_libusb_open(void *priv)
|
||||||
uscpi->bulk_in_ep, libusb_error_name(ret));
|
uscpi->bulk_in_ep, libusb_error_name(ret));
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
|
if (!uscpi->rigol_ds1000)
|
||||||
if ((ret = libusb_clear_halt(usb->devhdl, uscpi->bulk_out_ep)) < 0) {
|
if ((ret = libusb_clear_halt(usb->devhdl, uscpi->bulk_out_ep)) < 0) {
|
||||||
sr_err("Failed to clear halt/stall condition for EP %d: %s.",
|
sr_err("Failed to clear halt/stall condition for EP %d: %s.",
|
||||||
uscpi->bulk_out_ep, libusb_error_name(ret));
|
uscpi->bulk_out_ep, libusb_error_name(ret));
|
||||||
|
@ -527,6 +531,7 @@ static int scpi_usbtmc_libusb_close(void *priv)
|
||||||
if ((ret = libusb_clear_halt(usb->devhdl, uscpi->bulk_in_ep)) < 0)
|
if ((ret = libusb_clear_halt(usb->devhdl, uscpi->bulk_in_ep)) < 0)
|
||||||
sr_err("Failed to clear halt/stall condition for EP %d: %s.",
|
sr_err("Failed to clear halt/stall condition for EP %d: %s.",
|
||||||
uscpi->bulk_in_ep, libusb_error_name(ret));
|
uscpi->bulk_in_ep, libusb_error_name(ret));
|
||||||
|
if (!uscpi->rigol_ds1000)
|
||||||
if ((ret = libusb_clear_halt(usb->devhdl, uscpi->bulk_out_ep)) < 0)
|
if ((ret = libusb_clear_halt(usb->devhdl, uscpi->bulk_out_ep)) < 0)
|
||||||
sr_err("Failed to clear halt/stall condition for EP %d: %s.",
|
sr_err("Failed to clear halt/stall condition for EP %d: %s.",
|
||||||
uscpi->bulk_out_ep, libusb_error_name(ret));
|
uscpi->bulk_out_ep, libusb_error_name(ret));
|
||||||
|
|
Loading…
Reference in New Issue