diff --git a/src/main/java/io/github/dsheirer/source/SourceEvent.java b/src/main/java/io/github/dsheirer/source/SourceEvent.java index 3fcacd89..41a761c4 100644 --- a/src/main/java/io/github/dsheirer/source/SourceEvent.java +++ b/src/main/java/io/github/dsheirer/source/SourceEvent.java @@ -18,11 +18,10 @@ */ package io.github.dsheirer.source; +import java.util.EnumSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.EnumSet; - public class SourceEvent { private final static Logger mLog = LoggerFactory.getLogger(SourceEvent.class); @@ -195,15 +194,6 @@ public class SourceEvent return new SourceEvent(Event.NOTIFICATION_ERROR_STATE, source, errorDescription); } - /** - * Notification that a tuner is shutting down and the source is therefore shutting down. - * @param source that is shutting down - */ - public static SourceEvent tunerShutdown(Source source) - { - return new SourceEvent(Event.NOTIFICATION_TUNER_SHUTDOWN, source); - } - /** * Creates a new locked state change event */ diff --git a/src/main/java/io/github/dsheirer/source/tuner/usb/USBTunerController.java b/src/main/java/io/github/dsheirer/source/tuner/usb/USBTunerController.java index 76d57580..e77122a3 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/usb/USBTunerController.java +++ b/src/main/java/io/github/dsheirer/source/tuner/usb/USBTunerController.java @@ -26,6 +26,12 @@ import io.github.dsheirer.source.tuner.ITunerErrorListener; import io.github.dsheirer.source.tuner.TunerController; import io.github.dsheirer.source.tuner.TunerType; import io.github.dsheirer.source.tuner.manager.TunerManager; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.LinkedTransferQueue; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.ReentrantLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.usb4java.Context; @@ -37,13 +43,6 @@ import org.usb4java.LibUsb; import org.usb4java.Transfer; import org.usb4java.TransferCallback; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.LinkedTransferQueue; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.locks.ReentrantLock; - /** * Tuner controller implementation for USB tuners. Manages general USB operations and incorporates threaded USB * Transfer processing. @@ -544,7 +543,7 @@ public abstract class USBTunerController extends TunerController { for(Transfer transfer: transfers) { - submitTransfer(transfer); + submitTransfer(transfer, LibUsb.SUCCESS, 0); } } @@ -552,7 +551,7 @@ public abstract class USBTunerController extends TunerController * (Re)Submits the transfer for stream processing * @param transfer to (re)submit */ - private void submitTransfer(Transfer transfer) + private void submitTransfer(Transfer transfer, int previousStatus, int previousBytesTransferred) { int status = LibUsb.submitTransfer(transfer); @@ -562,7 +561,8 @@ public abstract class USBTunerController extends TunerController } else { - mLog.error("Error submitting USB transfer - " + LibUsb.errorName(status)); + mLog.error("Error submitting USB transfer - status [" + status + "] " + LibUsb.errorName(status) + + " - previous status [" + previousStatus + "] and transferred [" + previousBytesTransferred + "]"); setErrorMessage("Usb I/O Error - Can't submit buffers to tuner - stopping tuner"); } } @@ -593,7 +593,9 @@ public abstract class USBTunerController extends TunerController case LibUsb.TRANSFER_STALL: case LibUsb.TRANSFER_TIMED_OUT: case LibUsb.TRANSFER_ERROR: - if(transfer.actualLength() > 0) + int transferLength = transfer.actualLength(); + + if(transferLength > 0) { dispatchTransfer(transfer); } @@ -602,35 +604,22 @@ public abstract class USBTunerController extends TunerController if(mAutoResubmitTransfers) { - submitTransfer(transfer); + submitTransfer(transfer, transfer.status(), transferLength); } break; case LibUsb.TRANSFER_CANCELLED: - //Reset the transfer but don't do anything else + //Reset the transfer but don't do anything else since we're shutting down transfer.buffer().rewind(); break; default: //Unexpected transfer error - need to reset the bulk transfer interface transfer.buffer().rewind(); - //TODO: usually the device is in a bad state at this point ... need to raise the error flag + setErrorMessage("LibUsb Transfer Error - stopping device - status [" + transfer.status() + "] - " + + LibUsb.errorName(transfer.status())); return; } } - /** - * Disposes of the transfer and dereferences the native byte buffer so that it can be garbage collected. - */ - private void disposeTransfers() - { - for(Transfer transfer: mAvailableTransfers) - { - transfer.setBuffer(null); - } - - mAvailableTransfers.clear(); - mAvailableTransfers = null; - } - /** * Makes a copy of the transfer's native memory byte array payload so that the transfer can be reused. * Dispatches the native buffer to registered listeners.