Adds debug logging to USB tuner controller.

This commit is contained in:
Dennis Sheirer
2022-05-15 06:37:25 -04:00
parent 8bfb1d5470
commit 670ec3a097
2 changed files with 18 additions and 39 deletions

View File

@@ -18,11 +18,10 @@
*/ */
package io.github.dsheirer.source; package io.github.dsheirer.source;
import java.util.EnumSet;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.EnumSet;
public class SourceEvent public class SourceEvent
{ {
private final static Logger mLog = LoggerFactory.getLogger(SourceEvent.class); 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); 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 * Creates a new locked state change event
*/ */

View File

@@ -26,6 +26,12 @@ import io.github.dsheirer.source.tuner.ITunerErrorListener;
import io.github.dsheirer.source.tuner.TunerController; import io.github.dsheirer.source.tuner.TunerController;
import io.github.dsheirer.source.tuner.TunerType; import io.github.dsheirer.source.tuner.TunerType;
import io.github.dsheirer.source.tuner.manager.TunerManager; 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.usb4java.Context; import org.usb4java.Context;
@@ -37,13 +43,6 @@ import org.usb4java.LibUsb;
import org.usb4java.Transfer; import org.usb4java.Transfer;
import org.usb4java.TransferCallback; 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 * Tuner controller implementation for USB tuners. Manages general USB operations and incorporates threaded USB
* Transfer processing. * Transfer processing.
@@ -544,7 +543,7 @@ public abstract class USBTunerController extends TunerController
{ {
for(Transfer transfer: transfers) 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 * (Re)Submits the transfer for stream processing
* @param transfer to (re)submit * @param transfer to (re)submit
*/ */
private void submitTransfer(Transfer transfer) private void submitTransfer(Transfer transfer, int previousStatus, int previousBytesTransferred)
{ {
int status = LibUsb.submitTransfer(transfer); int status = LibUsb.submitTransfer(transfer);
@@ -562,7 +561,8 @@ public abstract class USBTunerController extends TunerController
} }
else 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"); 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_STALL:
case LibUsb.TRANSFER_TIMED_OUT: case LibUsb.TRANSFER_TIMED_OUT:
case LibUsb.TRANSFER_ERROR: case LibUsb.TRANSFER_ERROR:
if(transfer.actualLength() > 0) int transferLength = transfer.actualLength();
if(transferLength > 0)
{ {
dispatchTransfer(transfer); dispatchTransfer(transfer);
} }
@@ -602,35 +604,22 @@ public abstract class USBTunerController extends TunerController
if(mAutoResubmitTransfers) if(mAutoResubmitTransfers)
{ {
submitTransfer(transfer); submitTransfer(transfer, transfer.status(), transferLength);
} }
break; break;
case LibUsb.TRANSFER_CANCELLED: 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(); transfer.buffer().rewind();
break; break;
default: default:
//Unexpected transfer error - need to reset the bulk transfer interface //Unexpected transfer error - need to reset the bulk transfer interface
transfer.buffer().rewind(); 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; 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. * 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. * Dispatches the native buffer to registered listeners.