int response_length;
int response_bytes_read;
int remaining_length;
+ int rigol_ds1000;
};
/* Some USBTMC-specific enums, as defined in the USBTMC standard. */
return NULL;
}
for (i = 0; devlist[i]; i++) {
- if ((ret = libusb_get_device_descriptor(devlist[i], &des))) {
+ if ((ret = libusb_get_device_descriptor(devlist[i], &des)) < 0) {
sr_err("Failed to get device descriptor: %s.",
libusb_error_name(ret));
continue;
}
for (confidx = 0; confidx < des.bNumConfigurations; confidx++) {
- if (libusb_get_config_descriptor(devlist[i], confidx, &confdes) != 0) {
- sr_err("Failed to get configuration descriptor: %s.",
- libusb_error_name(ret));
+ if ((ret = libusb_get_config_descriptor(devlist[i], confidx, &confdes)) < 0) {
+ sr_dbg("Failed to get configuration descriptor: %s, "
+ "ignoring device.", libusb_error_name(ret));
break;
}
for (intfidx = 0; intfidx < confdes->bNumInterfaces; intfidx++) {
return SR_ERR;
dev = libusb_get_device(usb->devhdl);
- if ((ret = libusb_get_device_descriptor(dev, &des))) {
+ if ((ret = libusb_get_device_descriptor(dev, &des)) < 0) {
sr_err("Failed to get device descriptor: %s.",
libusb_error_name(ret));
return SR_ERR;
}
for (confidx = 0; confidx < des.bNumConfigurations; confidx++) {
- if (libusb_get_config_descriptor(dev, confidx, &confdes) != 0) {
- sr_err("Failed to get configuration descriptor: %s.",
- libusb_error_name(ret));
+ if ((ret = libusb_get_config_descriptor(dev, confidx, &confdes)) < 0) {
+ sr_dbg("Failed to get configuration descriptor: %s, "
+ "ignoring device.", libusb_error_name(ret));
continue;
}
for (intfidx = 0; intfidx < confdes->bNumInterfaces; intfidx++) {
}
}
found = 1;
+ uscpi->rigol_ds1000 = des.idVendor == 0x1ab1 &&
+ des.idProduct == 0x0588;
}
libusb_free_config_descriptor(confdes);
if (found)
uscpi->detached_kernel_driver = 1;
}
- if ((ret = libusb_set_configuration(usb->devhdl, 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))) {
+ if ((ret = libusb_claim_interface(usb->devhdl, uscpi->interface)) < 0) {
sr_err("Failed to claim interface: %s.",
libusb_error_name(ret));
return SR_ERR;
}
+ if (!uscpi->rigol_ds1000) {
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_in_ep, libusb_error_name(ret));
uscpi->interrupt_ep, libusb_error_name(ret));
return SR_ERR;
}
+ }
/* Get capabilities. */
ret = libusb_control_transfer(usb->devhdl,
return SR_OK;
}
-static int scpi_usbtmc_libusb_source_add(void *priv, int events, int timeout,
- sr_receive_data_callback_t cb, void *cb_data)
+static int scpi_usbtmc_libusb_source_add(struct sr_session *session,
+ void *priv, int events, int timeout, sr_receive_data_callback cb,
+ void *cb_data)
{
struct scpi_usbtmc_libusb *uscpi = priv;
(void)events;
- return usb_source_add(uscpi->ctx, timeout, cb, cb_data);
+ return usb_source_add(session, uscpi->ctx, timeout, cb, cb_data);
}
-static int scpi_usbtmc_libusb_source_remove(void *priv)
+static int scpi_usbtmc_libusb_source_remove(struct sr_session *session,
+ void *priv)
{
struct scpi_usbtmc_libusb *uscpi = priv;
- return usb_source_remove(uscpi->ctx);
+ return usb_source_remove(session, uscpi->ctx);
}
static void usbtmc_bulk_out_header_write(void *header, uint8_t MsgID,
ret = libusb_bulk_transfer(usb->devhdl, uscpi->bulk_out_ep,
uscpi->buffer, padded_size, &transferred,
TRANSFER_TIMEOUT);
- if (ret) {
+ if (ret < 0) {
sr_err("USBTMC bulk out transfer error: %s.",
libusb_error_name(ret));
return SR_ERR;
ret = libusb_bulk_transfer(usb->devhdl, uscpi->bulk_in_ep, data, size,
&transferred, TRANSFER_TIMEOUT);
- if (ret) {
+ if (ret < 0) {
sr_err("USBTMC bulk in transfer error: %s.",
libusb_error_name(ret));
return SR_ERR;
ret = libusb_bulk_transfer(usb->devhdl, uscpi->bulk_in_ep, data, size,
&transferred, TRANSFER_TIMEOUT);
- if (ret) {
+ if (ret < 0) {
sr_err("USBTMC bulk in transfer error: %s.",
libusb_error_name(ret));
return SR_ERR;
if (!usb->devhdl)
return SR_ERR;
+ if (!uscpi->rigol_ds1000) {
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_in_ep, libusb_error_name(ret));
if ((ret = libusb_clear_halt(usb->devhdl, uscpi->interrupt_ep)) < 0)
sr_err("Failed to clear halt/stall condition for EP %d: %s.",
uscpi->interrupt_ep, libusb_error_name(ret));
+ }
if ((ret = libusb_release_interface(usb->devhdl, uscpi->interface)) < 0)
sr_err("Failed to release interface: %s.",