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:
Aurelien Jacobs 2014-04-06 01:31:12 +02:00 committed by Bert Vermeulen
parent eb28f1b7b2
commit 50e6311a1b
1 changed files with 5 additions and 0 deletions

View File

@ -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));