diff --git a/src/controller/channel/NameConfigurationEditor.java b/src/controller/channel/NameConfigurationEditor.java index fe30282b..3101e12e 100644 --- a/src/controller/channel/NameConfigurationEditor.java +++ b/src/controller/channel/NameConfigurationEditor.java @@ -243,7 +243,6 @@ public class NameConfigurationEditor extends ChannelConfigurationEditor mChannelName.setText( DEFAULT_NAME ); mSystemNameCombo.setModel( EMPTY_MODEL ); mSiteNameCombo.setModel( EMPTY_MODEL ); - mAliasListCombo.setSelectedIndex( 0 ); } } } diff --git a/src/module/ProcessingChain.java b/src/module/ProcessingChain.java index 5cdc154a..046d8c51 100644 --- a/src/module/ProcessingChain.java +++ b/src/module/ProcessingChain.java @@ -495,6 +495,11 @@ public class ProcessingChain implements IChannelEventListener tcs.start(); } + + for( Listener listener: mUnFilteredRealBufferBroadcaster.getListeners() ) + { + mLog.debug( "*** Listener:" + listener.getClass() ); + } } else { diff --git a/src/sample/Broadcaster.java b/src/sample/Broadcaster.java index 35fcefa4..b779bc41 100644 --- a/src/sample/Broadcaster.java +++ b/src/sample/Broadcaster.java @@ -17,10 +17,9 @@ ******************************************************************************/ package sample; +import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; -import module.decode.state.ChannelState; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,11 +28,7 @@ import org.slf4j.LoggerFactory; */ public class Broadcaster implements Listener { - private final static Logger mLog = - LoggerFactory.getLogger( Broadcaster.class ); - - private CopyOnWriteArrayList> mListeners = - new CopyOnWriteArrayList>(); + private List> mListeners = new CopyOnWriteArrayList<>(); @Override public void receive( T t ) @@ -59,6 +54,11 @@ public class Broadcaster implements Listener return mListeners.size(); } + public List> getListeners() + { + return mListeners; + } + public void addListener( Listener listener ) { mListeners.add( listener ); diff --git a/src/source/SourceManager.java b/src/source/SourceManager.java index 9fab09f4..c4a06e19 100644 --- a/src/source/SourceManager.java +++ b/src/source/SourceManager.java @@ -37,7 +37,7 @@ public class SourceManager ThreadPoolManager threadPoolManager ) { mMixerManager = new MixerManager(); - mRecordingSourceManager = new RecordingSourceManager( settingsManager, threadPoolManager ); + mRecordingSourceManager = new RecordingSourceManager( settingsManager ); mTunerManager = new TunerManager( mMixerManager, settingsManager, threadPoolManager ); } diff --git a/src/source/recording/Recording.java b/src/source/recording/Recording.java index a3b1aba7..bfbe790e 100644 --- a/src/source/recording/Recording.java +++ b/src/source/recording/Recording.java @@ -64,9 +64,8 @@ public class Recording implements Comparable, } @Override - public TunerChannelSource getChannel( ThreadPoolManager threadPoolManager, - TunerChannel channel ) throws RejectedExecutionException, - SourceException + public TunerChannelSource getChannel( TunerChannel channel ) + throws RejectedExecutionException, SourceException { // TODO Auto-generated method stub return null; diff --git a/src/source/recording/RecordingSourceManager.java b/src/source/recording/RecordingSourceManager.java index 8c2f444f..a047b170 100644 --- a/src/source/recording/RecordingSourceManager.java +++ b/src/source/recording/RecordingSourceManager.java @@ -41,13 +41,10 @@ public class RecordingSourceManager private ArrayList mRecordings = new ArrayList(); private SettingsManager mSettingsManager; - private ThreadPoolManager mThreadPoolManager; - public RecordingSourceManager( SettingsManager settingsManager, - ThreadPoolManager threadPoolManager ) + public RecordingSourceManager( SettingsManager settingsManager ) { mSettingsManager = settingsManager; - mThreadPoolManager = threadPoolManager; loadRecordings(); } @@ -73,7 +70,7 @@ public class RecordingSourceManager if( recording != null ) { - retVal = recording.getChannel( mThreadPoolManager, tunerChannel ); + retVal = recording.getChannel( tunerChannel ); } else { diff --git a/src/source/tuner/ITunerChannelProvider.java b/src/source/tuner/ITunerChannelProvider.java index 06f7b2fa..b3a69a63 100644 --- a/src/source/tuner/ITunerChannelProvider.java +++ b/src/source/tuner/ITunerChannelProvider.java @@ -20,7 +20,6 @@ package source.tuner; import java.util.concurrent.RejectedExecutionException; import source.SourceException; -import controller.ThreadPoolManager; public interface ITunerChannelProvider { @@ -31,8 +30,8 @@ public interface ITunerChannelProvider * * @return - source for 48k sample rate */ - public abstract TunerChannelSource getChannel( ThreadPoolManager threadPoolManager, - TunerChannel channel ) throws RejectedExecutionException, SourceException; + public abstract TunerChannelSource getChannel( TunerChannel channel ) + throws RejectedExecutionException, SourceException; /** * Releases the tuned channel resources diff --git a/src/source/tuner/Tuner.java b/src/source/tuner/Tuner.java index 805a3cb5..e5769b54 100644 --- a/src/source/tuner/Tuner.java +++ b/src/source/tuner/Tuner.java @@ -145,8 +145,8 @@ public abstract class Tuner implements IFrequencyChangeProcessor, * * @return - source for 48k sample rate */ - public abstract TunerChannelSource getChannel( ThreadPoolManager threadPoolManager, - TunerChannel channel ) throws RejectedExecutionException, SourceException; + public abstract TunerChannelSource getChannel( TunerChannel channel ) + throws RejectedExecutionException, SourceException; /** * Releases the tuned channel resources diff --git a/src/source/tuner/TunerChannelSource.java b/src/source/tuner/TunerChannelSource.java index 010a6f7b..f75e95e7 100644 --- a/src/source/tuner/TunerChannelSource.java +++ b/src/source/tuner/TunerChannelSource.java @@ -19,8 +19,10 @@ package source.tuner; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Executors; import java.util.concurrent.LinkedTransferQueue; import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -37,7 +39,7 @@ import source.SourceException; import source.tuner.frequency.FrequencyChangeEvent; import source.tuner.frequency.FrequencyChangeEvent.Event; import source.tuner.frequency.IFrequencyChangeProcessor; -import controller.ThreadPoolManager; +import controller.NamingThreadFactory; import controller.ThreadPoolManager.ThreadType; import dsp.filter.FilterFactory; import dsp.filter.Window.WindowType; @@ -61,7 +63,7 @@ public class TunerChannelSource extends ComplexSource private ComplexPrimeCICDecimate mDecimationFilter; private Listener mListener; private IFrequencyChangeProcessor mFrequencyChangeProcessor; - private ThreadPoolManager mThreadPoolManager; + private ScheduledExecutorService mScheduledExecutorService; private ScheduledFuture mTaskHandle; private long mTunerFrequency = 0; @@ -91,12 +93,9 @@ public class TunerChannelSource extends ComplexSource * accept the decimation processing task * @throws SourceException if the tuner has an issue providing IQ samples */ - public TunerChannelSource( ThreadPoolManager threadPoolManager, Tuner tuner, - TunerChannel tunerChannel ) + public TunerChannelSource( Tuner tuner, TunerChannel tunerChannel ) throws RejectedExecutionException, SourceException { - mThreadPoolManager = threadPoolManager; - mTuner = tuner; mTuner.addListener( this ); @@ -133,9 +132,12 @@ public class TunerChannelSource extends ComplexSource if( mRunning.compareAndSet( false, true )) { - /* Schedule the decimation task to run every 20 ms (50 iterations/second) */ - mTaskHandle = mThreadPoolManager.scheduleFixedRate( ThreadType.DECIMATION, - mDecimationProcessor, 20, TimeUnit.MILLISECONDS ); + mScheduledExecutorService = Executors.newScheduledThreadPool( 1, + new NamingThreadFactory( "tuner channel source" ) ); + + /* Schedule the decimation task to run every 10 ms (100 iterations/second) */ + mTaskHandle = mScheduledExecutorService.scheduleAtFixedRate( + mDecimationProcessor, 0, 10, TimeUnit.MILLISECONDS ); /* Finally, register to receive samples from the tuner */ mTuner.addListener( (Listener)this ); @@ -156,10 +158,15 @@ public class TunerChannelSource extends ComplexSource mTuner.releaseChannel( this ); mDecimationProcessor.shutdown(); - if( mThreadPoolManager != null && mTaskHandle != null ) + if( mScheduledExecutorService != null && mTaskHandle != null ) { - mThreadPoolManager.cancel( mTaskHandle ); - mTaskHandle = null; + if( mTaskHandle != null ) + { + mTaskHandle.cancel( true ); + mTaskHandle = null; + } + + mScheduledExecutorService.shutdownNow(); } mBuffer.clear(); @@ -340,7 +347,9 @@ public class TunerChannelSource extends ComplexSource { if( mBuffer != null ) { - mBuffer.drainTo( mSampleBuffers, 4 ); + long start = System.currentTimeMillis(); + + mBuffer.drainTo( mSampleBuffers ); for( Buffer buffer: mSampleBuffers ) { @@ -378,6 +387,8 @@ public class TunerChannelSource extends ComplexSource } } + mLog.debug( "Processed [" + mSampleBuffers.size() + "] in " + ( System.currentTimeMillis() - start ) ); + mSampleBuffers.clear(); } } diff --git a/src/source/tuner/TunerController.java b/src/source/tuner/TunerController.java index faf36961..93c22339 100644 --- a/src/source/tuner/TunerController.java +++ b/src/source/tuner/TunerController.java @@ -194,8 +194,8 @@ public abstract class TunerController implements Tunable * * @throws RejectedExecutionException if the decimation processor has an error */ - public TunerChannelSource getChannel( ThreadPoolManager threadPoolManager, - Tuner tuner, TunerChannel channel ) throws RejectedExecutionException + public TunerChannelSource getChannel( Tuner tuner, TunerChannel channel ) + throws RejectedExecutionException { TunerChannelSource source = null; @@ -210,8 +210,7 @@ public abstract class TunerController implements Tunable updateLOFrequency(); } - source = new TunerChannelSource( threadPoolManager, - tuner, channel ); + source = new TunerChannelSource( tuner, channel ); } catch( SourceException se ) { diff --git a/src/source/tuner/TunerManager.java b/src/source/tuner/TunerManager.java index 3d6f351c..29b87fb8 100644 --- a/src/source/tuner/TunerManager.java +++ b/src/source/tuner/TunerManager.java @@ -104,7 +104,7 @@ public class TunerManager try { - retVal = tuner.getChannel( mThreadPoolManager, tunerChannel ); + retVal = tuner.getChannel( tunerChannel ); } catch ( RejectedExecutionException ree ) { diff --git a/src/source/tuner/airspy/AirspyTuner.java b/src/source/tuner/airspy/AirspyTuner.java index 345b3456..72fe4506 100644 --- a/src/source/tuner/airspy/AirspyTuner.java +++ b/src/source/tuner/airspy/AirspyTuner.java @@ -35,7 +35,6 @@ import source.tuner.TunerClass; import source.tuner.TunerConfiguration; import source.tuner.TunerType; import source.tuner.airspy.AirspyTunerController.BoardID; -import controller.ThreadPoolManager; public class AirspyTuner extends Tuner { @@ -128,8 +127,8 @@ public class AirspyTuner extends Tuner } @Override - public TunerChannelSource getChannel( ThreadPoolManager threadPoolManager, - TunerChannel channel ) throws RejectedExecutionException, SourceException + public TunerChannelSource getChannel( TunerChannel channel ) + throws RejectedExecutionException, SourceException { //TODO: this channel has a decimated sample rate of: // 10.0 MSps = 10,000,000 / 208 = 48076.923 @@ -138,7 +137,7 @@ public class AirspyTuner extends Tuner //Consider implementing a fractional resampler to get a correct 48 kHz //output sample rate - return mController.getChannel( threadPoolManager, this, channel ); + return mController.getChannel( this, channel ); } @Override diff --git a/src/source/tuner/ettus/B100Tuner.java b/src/source/tuner/ettus/B100Tuner.java index 11cbc94f..51cc2ba3 100644 --- a/src/source/tuner/ettus/B100Tuner.java +++ b/src/source/tuner/ettus/B100Tuner.java @@ -99,8 +99,8 @@ public class B100Tuner extends Tuner } @Override - public TunerChannelSource getChannel( ThreadPoolManager threadPoolManager, - TunerChannel channel ) throws RejectedExecutionException, SourceException + public TunerChannelSource getChannel( TunerChannel channel ) + throws RejectedExecutionException, SourceException { //TODO: pass this call to the tuner controller return null; diff --git a/src/source/tuner/fcd/FCDTuner.java b/src/source/tuner/fcd/FCDTuner.java index e3d680a5..7c304c61 100644 --- a/src/source/tuner/fcd/FCDTuner.java +++ b/src/source/tuner/fcd/FCDTuner.java @@ -33,7 +33,6 @@ import source.tuner.TunerChannelSource; import source.tuner.TunerClass; import source.tuner.TunerConfiguration; import source.tuner.TunerType; -import controller.ThreadPoolManager; public class FCDTuner extends MixerTuner { @@ -111,11 +110,10 @@ public class FCDTuner extends MixerTuner } @Override - public TunerChannelSource getChannel( ThreadPoolManager threadPoolManager, - TunerChannel tunerChannel ) throws RejectedExecutionException, - SourceException + public TunerChannelSource getChannel( TunerChannel tunerChannel ) + throws RejectedExecutionException, SourceException { - return mController.getChannel( threadPoolManager, this, tunerChannel ); + return mController.getChannel( this, tunerChannel ); } /** diff --git a/src/source/tuner/hackrf/HackRFTuner.java b/src/source/tuner/hackrf/HackRFTuner.java index 154c55bc..308e67c4 100644 --- a/src/source/tuner/hackrf/HackRFTuner.java +++ b/src/source/tuner/hackrf/HackRFTuner.java @@ -35,7 +35,6 @@ import source.tuner.TunerClass; import source.tuner.TunerConfiguration; import source.tuner.TunerType; import source.tuner.hackrf.HackRFTunerController.BoardID; -import controller.ThreadPoolManager; public class HackRFTuner extends Tuner { @@ -106,10 +105,10 @@ public class HackRFTuner extends Tuner } @Override - public TunerChannelSource getChannel( ThreadPoolManager threadPoolManager, - TunerChannel channel ) throws RejectedExecutionException, SourceException + public TunerChannelSource getChannel( TunerChannel channel ) + throws RejectedExecutionException, SourceException { - return mController.getChannel( threadPoolManager, this, channel ); + return mController.getChannel( this, channel ); } @Override diff --git a/src/source/tuner/rtl/RTL2832Tuner.java b/src/source/tuner/rtl/RTL2832Tuner.java index 4af1a8d7..39b6f0f1 100644 --- a/src/source/tuner/rtl/RTL2832Tuner.java +++ b/src/source/tuner/rtl/RTL2832Tuner.java @@ -148,8 +148,7 @@ public class RTL2832Tuner extends Tuner } @Override - public TunerChannelSource getChannel( ThreadPoolManager threadPoolManager, - TunerChannel channel ) + public TunerChannelSource getChannel( TunerChannel channel ) throws RejectedExecutionException, SourceException { @@ -157,7 +156,7 @@ public class RTL2832Tuner extends Tuner try { - source = mController.getChannel( threadPoolManager, this, channel ); + source = mController.getChannel( this, channel ); } catch( Exception e ) {