diff --git a/src/main/java/io/github/dsheirer/source/tuner/TunerClass.java b/src/main/java/io/github/dsheirer/source/tuner/TunerClass.java index 028754aa..3d8823f2 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/TunerClass.java +++ b/src/main/java/io/github/dsheirer/source/tuner/TunerClass.java @@ -54,6 +54,8 @@ public enum TunerClass public static final EnumSet SUPPORTED_USB_TUNERS = EnumSet.of(AIRSPY, HACKRF, RTL2832, FUNCUBE_DONGLE_PRO, FUNCUBE_DONGLE_PRO_PLUS); + public static final EnumSet FUNCUBE_TUNERS = EnumSet.of(FUNCUBE_DONGLE_PRO, FUNCUBE_DONGLE_PRO_PLUS); + /** * Indicates if this tuner class entry is a supported USB tuner class. */ @@ -62,6 +64,14 @@ public enum TunerClass return SUPPORTED_USB_TUNERS.contains(this); } + /** + * Indicates if the tuner class is a funcube dongle with a matching sound card interface + */ + public boolean isFuncubeTuner() + { + return FUNCUBE_TUNERS.contains(this); + } + /** * Lookup a USB tuner class from the USB vid and pid * @param vendor id diff --git a/src/main/java/io/github/dsheirer/source/tuner/airspy/AirspyTunerEditor.java b/src/main/java/io/github/dsheirer/source/tuner/airspy/AirspyTunerEditor.java index 491ee1ea..2ff20975 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/airspy/AirspyTunerEditor.java +++ b/src/main/java/io/github/dsheirer/source/tuner/airspy/AirspyTunerEditor.java @@ -104,7 +104,7 @@ public class AirspyTunerEditor extends TunerEditor addUsbTuner(bus, port, tunerClass), 2, TimeUnit.SECONDS); + } + else + { + addUsbTuner(bus, port, tunerClass); + } } } break; case LibUsb.HOTPLUG_EVENT_DEVICE_LEFT: - removeUsbTuner(bus, port); + DiscoveredTuner removed = removeUsbTuner(bus, port); + + if(removed != null) + { + mLog.info("Tuner Unplugged: " + removed.getId()); + } break; } diff --git a/src/main/java/io/github/dsheirer/source/tuner/ui/DiscoveredTunerModel.java b/src/main/java/io/github/dsheirer/source/tuner/ui/DiscoveredTunerModel.java index 32592427..7b942532 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/ui/DiscoveredTunerModel.java +++ b/src/main/java/io/github/dsheirer/source/tuner/ui/DiscoveredTunerModel.java @@ -246,8 +246,10 @@ public class DiscoveredTunerModel extends AbstractTableModel implements Listener * @param bus usb * @param port usb */ - public void removeUsbTuner(int bus, int port) + public DiscoveredTuner removeUsbTuner(int bus, int port) { + DiscoveredTuner removed = null; + mLock.lock(); try @@ -259,12 +261,15 @@ public class DiscoveredTunerModel extends AbstractTableModel implements Listener if(discoveredTuner != null) { removeDiscoveredTuner(discoveredTuner); + removed = discoveredTuner; } } finally { mLock.unlock(); } + + return removed; } /** diff --git a/src/main/java/io/github/dsheirer/source/tuner/ui/TunerEditor.java b/src/main/java/io/github/dsheirer/source/tuner/ui/TunerEditor.java index 118c69e6..9b3710af 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/ui/TunerEditor.java +++ b/src/main/java/io/github/dsheirer/source/tuner/ui/TunerEditor.java @@ -33,7 +33,6 @@ import io.github.dsheirer.source.tuner.manager.IDiscoveredTunerStatusListener; import io.github.dsheirer.source.tuner.manager.TunerManager; import io.github.dsheirer.source.tuner.manager.TunerStatus; import io.github.dsheirer.util.SwingUtils; -import io.github.dsheirer.util.ThreadPool; import net.miginfocom.swing.MigLayout; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -372,11 +371,7 @@ public abstract class TunerEditor if(!hasTuner() && getDiscoveredTuner().getTunerStatus() == TunerStatus.ERROR) { mLog.info("Restarting " + getDiscoveredTuner().getTunerClass() + " tuner"); - getDiscoveredTuner().reset(); - if(getDiscoveredTuner().isEnabled()) - { - ThreadPool.CACHED.submit(() -> getDiscoveredTuner().start()); - } + getDiscoveredTuner().restart(); } }); } @@ -469,15 +464,18 @@ public abstract class TunerEditor @Override public void tunerStatusUpdated(DiscoveredTuner discoveredTuner, TunerStatus previous, TunerStatus current) { - SwingUtils.run(() -> tunerStatusUpdated()); - - if(current == TunerStatus.ENABLED) + SwingUtils.run(() -> { - if(hasTuner()) + tunerStatusUpdated(); + + if(current == TunerStatus.ENABLED) { - getTuner().addTunerEventListener(this); + if(hasTuner()) + { + getTuner().addTunerEventListener(this); + } } - } + }); } @Override @@ -507,12 +505,7 @@ public abstract class TunerEditor { mDiscoveredTuner.getTuner().removeTunerEventListener(this); } - - mDiscoveredTuner = null; } - - mUserPreferences = null; - mTunerManager = null; } /**