diff --git a/src/source/tuner/usb/USBTransferProcessor.java b/src/source/tuner/usb/USBTransferProcessor.java index 92636056..21133796 100644 --- a/src/source/tuner/usb/USBTransferProcessor.java +++ b/src/source/tuner/usb/USBTransferProcessor.java @@ -33,6 +33,7 @@ import sample.complex.ComplexBuffer; import source.tuner.TunerManager; import util.ThreadPool; +import javax.usb.UsbException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; @@ -140,6 +141,28 @@ public class USBTransferProcessor implements TransferCallback { mTransfersInProgress.add(transfer); } + else if(result == LibUsb.ERROR_PIPE) + { + int resetResult = LibUsb.clearHalt(mDeviceHandle, USB_BULK_TRANSFER_ENDPOINT); + + if(resetResult == LibUsb.SUCCESS) + { + int resubmitResult = LibUsb.submitTransfer(transfer); + + if(resubmitResult == LibUsb.SUCCESS) + { + mTransfersInProgress.add(transfer); + } + else + { + mLog.error(mDeviceName + " - error resubmitting transfer after endpoint clear halt"); + } + } + else + { + mLog.error(mDeviceName + " - unable to clear device endpoint halt"); + } + } else { //TODO: broadcast to each listener that this source has an error and is shutting down