]> sigrok.org Git - libsigrok.git/blobdiff - hardware/common/scpi_usbtmc_libusb.c
Don't define names ending with _t (POSIX reserved).
[libsigrok.git] / hardware / common / scpi_usbtmc_libusb.c
index 933ce83c084e720ead9b002fc369ee1c3d0299a9..653a0d8c9f4f79f99f76490d7d9ae5ce0131222f 100644 (file)
@@ -43,6 +43,7 @@ struct scpi_usbtmc_libusb {
        int response_length;
        int response_bytes_read;
        int remaining_length;
+       int rigol_ds1000;
 };
 
 /* Some USBTMC-specific enums, as defined in the USBTMC standard. */
@@ -234,6 +235,8 @@ static int scpi_usbtmc_libusb_open(void *priv)
                                }
                        }
                        found = 1;
+                       uscpi->rigol_ds1000 = des.idVendor  == 0x1ab1 &&
+                                             des.idProduct == 0x0588;
                }
                libusb_free_config_descriptor(confdes);
                if (found)
@@ -267,6 +270,7 @@ static int scpi_usbtmc_libusb_open(void *priv)
                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));
@@ -282,6 +286,7 @@ static int scpi_usbtmc_libusb_open(void *priv)
                       uscpi->interrupt_ep, libusb_error_name(ret));
                return SR_ERR;
        }
+       }
 
        /* Get capabilities. */
        ret = libusb_control_transfer(usb->devhdl,
@@ -312,7 +317,7 @@ static int scpi_usbtmc_libusb_open(void *priv)
 }
 
 static int scpi_usbtmc_libusb_source_add(void *priv, int events, int timeout,
-                       sr_receive_data_callback_t cb, void *cb_data)
+                       sr_receive_data_callback cb, void *cb_data)
 {
        struct scpi_usbtmc_libusb *uscpi = priv;
        (void)events;
@@ -524,6 +529,7 @@ static int scpi_usbtmc_libusb_close(void *priv)
        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));
@@ -533,6 +539,7 @@ static int scpi_usbtmc_libusb_close(void *priv)
        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.",