Work in progress.

-Started work on new channel editor channel viewer/controller
-Removed a number of unused buffer package classes
-Moved automatic frequency control to be a module and removed special
handling
-Added IUnfilteredRealBufferListener & Provider interfaces
-Completely removed the ResourceManager class
This commit is contained in:
denny
2016-01-10 18:02:04 -05:00
parent c405ddad96
commit 4be63d4b95
197 changed files with 4181 additions and 4439 deletions

View File

@@ -1,6 +1,6 @@
/*******************************************************************************
* SDR Trunk
* Copyright (C) 2014 Dennis Sheirer
* Copyright (C) 2014-2016 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,12 +15,31 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
package source.tuner.frequency;
package source.tuner;
import java.util.concurrent.RejectedExecutionException;
public interface FrequencyChangeBroadcaster
import source.SourceException;
import controller.ThreadPoolManager;
public interface ITunerChannelProvider
{
public abstract void addListener( FrequencyChangeListener listener );
/**
* Returns a tuner frequency channel source, tuned to the correct frequency
*
* @param frequency - desired frequency
*
* @return - source for 48k sample rate
*/
public abstract TunerChannelSource getChannel( ThreadPoolManager threadPoolManager,
TunerChannel channel ) throws RejectedExecutionException, SourceException;
/**
* Releases the tuned channel resources
*
* @param channel - previously obtained tuner channel
*/
public abstract void releaseChannel( TunerChannelSource source );
public abstract void removeListener( FrequencyChangeListener listener );
}

View File

@@ -27,20 +27,18 @@ import org.slf4j.LoggerFactory;
import sample.Listener;
import sample.complex.ComplexBuffer;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.frequency.FrequencyChangeBroadcaster;
import source.tuner.frequency.FrequencyChangeEvent;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import controller.ResourceManager;
import source.tuner.frequency.IFrequencyChangeProcessor;
import controller.ThreadPoolManager;
/**
* Tuner - provides tuner channel sources, representing a channel frequency
*/
public abstract class Tuner implements FrequencyChangeBroadcaster,
FrequencyChangeListener,
TunerChannelProvider
public abstract class Tuner implements IFrequencyChangeProcessor,
ITunerChannelProvider
{
private final static Logger mLog = LoggerFactory.getLogger( Tuner.class );
@@ -53,8 +51,8 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
protected CopyOnWriteArrayList<Listener<ComplexBuffer>>
mSampleListeners = new CopyOnWriteArrayList<Listener<ComplexBuffer>>();
protected CopyOnWriteArrayList<FrequencyChangeListener>
mFrequencyChangeListeners = new CopyOnWriteArrayList<FrequencyChangeListener>();
protected CopyOnWriteArrayList<IFrequencyChangeProcessor>
mFrequencyChangeProcessors = new CopyOnWriteArrayList<IFrequencyChangeProcessor>();
public Tuner( String name )
{
@@ -69,7 +67,7 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
public void dispose()
{
mSampleListeners.clear();
mFrequencyChangeListeners.clear();
mFrequencyChangeProcessors.clear();
}
public void setName( String name )
@@ -80,7 +78,7 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
/**
* Return an editor panel for the tuner
*/
public abstract JPanel getEditor( ResourceManager resourceManager );
public abstract JPanel getEditor( SettingsManager settingsManager );
/**
@@ -191,17 +189,17 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
* Adds the frequency change listener to receive frequency and/or bandwidth
* change events
*/
public void addListener( FrequencyChangeListener listener )
public void addFrequencyChangeProcessor( IFrequencyChangeProcessor processor )
{
mFrequencyChangeListeners.add( listener );
mFrequencyChangeProcessors.add( processor );
}
/**
* Removes the frequency change listener
*/
public void removeListener( FrequencyChangeListener listener )
public void removeFrequencyChangeProcessor( IFrequencyChangeProcessor processor )
{
mFrequencyChangeListeners.remove( listener );
mFrequencyChangeProcessors.remove( processor );
}
/**
@@ -210,7 +208,7 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
public void broadcastFrequencyChange( long frequency )
{
broadcastFrequencyChangeEvent(
new FrequencyChangeEvent( Event.FREQUENCY_CHANGE_NOTIFICATION, frequency ) );
new FrequencyChangeEvent( Event.NOTIFICATION_FREQUENCY_CHANGE, frequency ) );
}
/**
@@ -219,7 +217,7 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
public void broadcastSampleRateChange( int sampleRate )
{
broadcastFrequencyChangeEvent(
new FrequencyChangeEvent( Event.SAMPLE_RATE_CHANGE_NOTIFICATION, sampleRate ) );
new FrequencyChangeEvent( Event.NOTIFICATION_SAMPLE_RATE_CHANGE, sampleRate ) );
}
/**
@@ -228,7 +226,7 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
public void broadcastActualSampleRateChange( int actualSampleRate )
{
broadcastFrequencyChangeEvent(
new FrequencyChangeEvent( Event.SAMPLE_RATE_CHANGE_NOTIFICATION, actualSampleRate ) );
new FrequencyChangeEvent( Event.NOTIFICATION_SAMPLE_RATE_CHANGE, actualSampleRate ) );
}
/**
@@ -236,9 +234,9 @@ public abstract class Tuner implements FrequencyChangeBroadcaster,
*/
public void broadcastFrequencyChangeEvent( FrequencyChangeEvent event )
{
for( FrequencyChangeListener listener: mFrequencyChangeListeners )
for( IFrequencyChangeProcessor processor: mFrequencyChangeProcessors )
{
listener.frequencyChanged( event );
processor.frequencyChanged( event );
}
}

View File

@@ -1,28 +0,0 @@
package source.tuner;
import java.util.concurrent.RejectedExecutionException;
import source.SourceException;
import controller.ThreadPoolManager;
public interface TunerChannelProvider
{
/**
* Returns a tuner frequency channel source, tuned to the correct frequency
*
* @param frequency - desired frequency
*
* @return - source for 48k sample rate
*/
public abstract TunerChannelSource getChannel( ThreadPoolManager threadPoolManager,
TunerChannel channel ) throws RejectedExecutionException, SourceException;
/**
* Releases the tuned channel resources
*
* @param channel - previously obtained tuner channel
*/
public abstract void releaseChannel( TunerChannelSource source );
}

View File

@@ -1,6 +1,6 @@
/*******************************************************************************
* SDR Trunk
* Copyright (C) 2014,2015 Dennis Sheirer
* Copyright (C) 2014-2016 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@ import source.ComplexSource;
import source.SourceException;
import source.tuner.frequency.FrequencyChangeEvent;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.IFrequencyChangeProcessor;
import controller.ThreadPoolManager;
import controller.ThreadPoolManager.ThreadType;
import dsp.filter.FilterFactory;
@@ -45,8 +45,7 @@ import dsp.filter.cic.ComplexPrimeCICDecimate;
import dsp.mixer.Oscillator;
public class TunerChannelSource extends ComplexSource
implements FrequencyChangeListener,
Listener<ComplexBuffer>
implements IFrequencyChangeProcessor, Listener<ComplexBuffer>
{
private final static Logger mLog =
LoggerFactory.getLogger( TunerChannelSource.class );
@@ -61,7 +60,7 @@ public class TunerChannelSource extends ComplexSource
private Oscillator mMixer;
private ComplexPrimeCICDecimate mDecimationFilter;
private Listener<ComplexBuffer> mListener;
private FrequencyChangeListener mFrequencyChangeListener;
private IFrequencyChangeProcessor mFrequencyChangeProcessor;
private ThreadPoolManager mThreadPoolManager;
private ScheduledFuture<?> mTaskHandle;
@@ -71,17 +70,35 @@ public class TunerChannelSource extends ComplexSource
private DecimationProcessor mDecimationProcessor = new DecimationProcessor();
public TunerChannelSource( ThreadPoolManager threadPoolManager,
Tuner tuner,
private AtomicBoolean mRunning = new AtomicBoolean();
private boolean mExpended = false;
/**
* Provides a Digital Drop Channel (DDC) to decimate the IQ output from a
* tuner down to a 48 kHz IQ channel rate.
*
* Note: this class can only be used once (started and stopped) and a new
* tuner channel source must be requested from the tuner once this object
* has been stopped. This is because channels are managed dynamically and
* center tuned frequency may have changed since this source was obtained
* and thus the tuner might no longer be able to source this channel once it
* has been stopped.
*
* @param threadPoolManager to use for decimation processing task
* @param tuner to obtain wideband IQ samples from
* @param tunerChannel specifying the center frequency for the DDC
* @throws RejectedExecutionException if the thread pool manager cannot
* accept the decimation processing task
* @throws SourceException if the tuner has an issue providing IQ samples
*/
public TunerChannelSource( ThreadPoolManager threadPoolManager, Tuner tuner,
TunerChannel tunerChannel )
throws RejectedExecutionException, SourceException
{
super( "Tuner Channel Source" );
mThreadPoolManager = threadPoolManager;
mTuner = tuner;
mTuner.addListener( (FrequencyChangeListener)this );
mTuner.addListener( this );
mTunerChannel = tunerChannel;
@@ -94,59 +111,87 @@ public class TunerChannelSource extends ComplexSource
/* Fire a sample rate change event to setup the decimation chain */
frequencyChanged( new FrequencyChangeEvent(
Event.SAMPLE_RATE_CHANGE_NOTIFICATION, mTuner.getSampleRate() ) );
/* Schedule the decimation task to run every 20 ms (50 iterations/second) */
mTaskHandle = mThreadPoolManager.scheduleFixedRate( ThreadType.DECIMATION,
mDecimationProcessor, 20, TimeUnit.MILLISECONDS );
/* Finally, register to receive samples from the tuner */
mTuner.addListener( (Listener<ComplexBuffer>)this );
Event.NOTIFICATION_SAMPLE_RATE_CHANGE, mTuner.getSampleRate() ) );
}
@Override
public void reset()
{
}
@Override
public void start()
{
if( mExpended )
{
throw new IllegalStateException( "Attempt to re-start an expended "
+ "tuner channel source. TunerChannelSource objects can only "
+ "be used once. " );
}
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 );
/* Finally, register to receive samples from the tuner */
mTuner.addListener( (Listener<ComplexBuffer>)this );
}
else
{
mLog.warn( "Attempt to start() and already running tuner channel "
+ "source was ignored" );
}
}
@Override
public void stop()
{
if( mRunning.compareAndSet( true, false ))
{
mTuner.releaseChannel( this );
mDecimationProcessor.shutdown();
if( mThreadPoolManager != null && mTaskHandle != null )
{
mThreadPoolManager.cancel( mTaskHandle );
mTaskHandle = null;
}
mBuffer.clear();
mExpended = true;
}
else
{
mLog.warn( "Attempt to stop() and already stopped tuner channel "
+ "source was ignored" );
}
}
@Override
public void dispose()
{
/* Tell the tuner to release/unregister our resources */
mTuner.removeListener( (FrequencyChangeListener)this );
mTuner.releaseChannel( this );
mTuner = null;
mTunerChannel = null;
/* Flag the decimation processor to shutdown */
if( mDecimationProcessor != null )
{
mDecimationProcessor.dispose();
}
if( !mRunning.get() )
{
/* Tell the tuner to release/unregister our resources */
mTuner.removeFrequencyChangeProcessor( this );
mTuner = null;
mTunerChannel = null;
mBuffer = null;
mFrequencyChangeProcessor = null;
mListener = null;
mMixer = null;
mDecimationFilter.dispose();
mDecimationFilter = null;
}
}
/**
* Cleanup method to allow the decimation processor to perform final cleanup
* once it gracefully shuts itself down
*/
private void cleanup()
{
if( mTaskHandle != null )
{
mThreadPoolManager.cancel( mTaskHandle );
mThreadPoolManager = null;
mTaskHandle = null;
}
mBuffer.clear();
mBuffer = null;
mFrequencyChangeListener = null;
mListener = null;
mMixer = null;
mDecimationFilter.dispose();
mDecimationFilter = null;
}
public Tuner getTuner()
{
return mTuner;
@@ -160,18 +205,21 @@ public class TunerChannelSource extends ComplexSource
@Override
public void receive( ComplexBuffer buffer )
{
mBuffer.add( buffer );
if( mRunning.get() )
{
mBuffer.add( buffer );
}
}
public void setFrequencyChangeListener( FrequencyChangeListener listener )
public void setFrequencyChangeListener( IFrequencyChangeProcessor processor )
{
mFrequencyChangeListener = listener;
mFrequencyChangeProcessor = processor;
}
@Override
public void setListener( Listener<ComplexBuffer> listener )
{
/* Get a pointer to the listener so that if we have to change the
/* Save a pointer to the listener so that if we have to change the
* decimation filter, we can re-add the listener */
mListener = listener;
@@ -192,31 +240,31 @@ public class TunerChannelSource extends ComplexSource
public void frequencyChanged( FrequencyChangeEvent event )
{
// Echo the event to the registered event listener
if( mFrequencyChangeListener != null )
if( mFrequencyChangeProcessor != null )
{
mFrequencyChangeListener.frequencyChanged( event );
mFrequencyChangeProcessor.frequencyChanged( event );
}
switch( event.getEvent() )
{
case FREQUENCY_CHANGE_NOTIFICATION:
case NOTIFICATION_FREQUENCY_CHANGE:
mTunerFrequency = event.getValue().longValue();
updateMixerFrequencyOffset();
break;
case CHANNEL_FREQUENCY_CORRECTION_CHANGE_REQUEST:
case REQUEST_CHANNEL_FREQUENCY_CORRECTION_CHANGE:
mChannelFrequencyCorrection = event.getValue().intValue();
updateMixerFrequencyOffset();
if( mFrequencyChangeListener != null )
if( mFrequencyChangeProcessor != null )
{
mFrequencyChangeListener.frequencyChanged(
mFrequencyChangeProcessor.frequencyChanged(
new FrequencyChangeEvent(
Event.CHANNEL_FREQUENCY_CORRECTION_CHANGE_NOTIFICATION,
Event.NOTIFICATION_CHANNEL_FREQUENCY_CORRECTION_CHANGE,
mChannelFrequencyCorrection ) );
}
break;
case SAMPLE_RATE_CHANGE_NOTIFICATION:
case NOTIFICATION_SAMPLE_RATE_CHANGE:
int sampleRate = event.getValue().intValue();
if( mTunerSampleRate != sampleRate )
@@ -272,12 +320,12 @@ public class TunerChannelSource extends ComplexSource
*/
public class DecimationProcessor implements Runnable
{
private AtomicBoolean mDispose = new AtomicBoolean( false );
private boolean mProcessing = true;
private List<ComplexBuffer> mSampleBuffers = new ArrayList<ComplexBuffer>();
public void dispose()
public void shutdown()
{
mDispose.set( true );
mProcessing = false;
}
@Override
@@ -288,64 +336,66 @@ public class TunerChannelSource extends ComplexSource
* run the program out of memory */
try
{
if( mBuffer != null )
if( mProcessing )
{
mBuffer.drainTo( mSampleBuffers, 4 );
for( Buffer buffer: mSampleBuffers )
if( mBuffer != null )
{
/* Check to see if we've been shutdown */
if( mDispose.get() )
mBuffer.drainTo( mSampleBuffers, 4 );
for( Buffer buffer: mSampleBuffers )
{
cleanup();
return;
}
else
{
float[] samples = buffer.getSamples();
/* We make a copy of the buffer so that we don't affect
* anyone else that is using the same buffer, like other
* channels or the spectral display */
float[] translated = new float[ samples.length ];
/* Perform frequency translation */
for( int x = 0; x < samples.length; x += 2 )
/* Check to see if we've been shutdown */
if( !mProcessing )
{
mMixer.rotate();
mBuffer.clear();
return;
}
else
{
float[] samples = buffer.getSamples();
/* We make a copy of the buffer so that we don't affect
* anyone else that is using the same buffer, like other
* channels or the spectral display */
float[] translated = new float[ samples.length ];
translated[ x ] = Complex.multiplyInphase(
samples[ x ], samples[ x + 1 ], mMixer.inphase(), mMixer.quadrature() );
translated[ x + 1 ] = Complex.multiplyQuadrature(
/* Perform frequency translation */
for( int x = 0; x < samples.length; x += 2 )
{
mMixer.rotate();
translated[ x ] = Complex.multiplyInphase(
samples[ x ], samples[ x + 1 ], mMixer.inphase(), mMixer.quadrature() );
}
if( mDecimationFilter != null )
{
mDecimationFilter.receive( new ComplexBuffer( translated ) );
translated[ x + 1 ] = Complex.multiplyQuadrature(
samples[ x ], samples[ x + 1 ], mMixer.inphase(), mMixer.quadrature() );
}
if( mProcessing && mDecimationFilter != null )
{
mDecimationFilter.receive( new ComplexBuffer( translated ) );
}
}
}
mSampleBuffers.clear();
}
mSampleBuffers.clear();
}
}
catch( Exception e )
{
/* Only log the stack trace if we've haven't been shutdown and
* this is a true error */
if( !mDispose.get() )
/* Only log the stack trace if we're still processing */
if( mProcessing )
{
mLog.error( "Error encountered during decimation process", e );
}
}
/* Check to see if we've been shutdown */
if( mDispose.get() )
if( !mProcessing )
{
mBuffer.clear();
mSampleBuffers.clear();
cleanup();
}
}
}

View File

@@ -25,9 +25,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import source.SourceException;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.FrequencyController;
import source.tuner.frequency.FrequencyController.Tunable;
import source.tuner.frequency.IFrequencyChangeProcessor;
import source.tuner.frequency.IFrequencyChangeListener;
import controller.ThreadPoolManager;
public abstract class TunerController implements Tunable
@@ -36,7 +37,11 @@ public abstract class TunerController implements Tunable
LoggerFactory.getLogger( TunerController.class );
/* List of currently tuned channels being served to demod channels */
<<<<<<< Upstream, based on origin/master
private SortedSet<TunerChannel> mTunedChannels = new ConcurrentSkipListSet<>();
=======
protected ArrayList<TunerChannel> mTunedChannels = new ArrayList<>();
>>>>>>> 20e3bee Work in progress. -Started work on new channel editor channel viewer/controller -Removed a number of unused buffer package classes -Moved automatic frequency control to be a module and removed special handling -Added IUnfilteredRealBufferListener & Provider interfaces -Completely removed the ResourceManager class
protected FrequencyController mFrequencyController;
private int mMiddleUnusable;
private double mUsableBandwidthPercentage;
@@ -359,16 +364,16 @@ public abstract class TunerController implements Tunable
* Note: this is normally used by the Tuner. Any additional listeners can
* be registered on the tuner.
*/
public void addListener( FrequencyChangeListener listener )
public void addListener( IFrequencyChangeProcessor processor )
{
mFrequencyController.addListener( listener );
mFrequencyController.addListener( processor );
}
/**
* Removes the frequency change listener
*/
public void removeListener( FrequencyChangeListener listener )
public void removeListener( IFrequencyChangeProcessor processor )
{
mFrequencyController.removeListener( listener );
mFrequencyController.removeFrequencyChangeProcessor( processor );
}
}

View File

@@ -17,21 +17,23 @@
******************************************************************************/
package source.tuner;
import controller.channel.Channel;
import controller.channel.ConfigurationValidationException;
import gui.control.JFrequencyControl;
import source.SourceEditor;
import source.SourceManager;
import source.config.SourceConfigTuner;
import source.config.SourceConfiguration;
import controller.ResourceManager;
public class TunerEditor extends SourceEditor
{
private static final long serialVersionUID = 1L;
private JFrequencyControl mFrequencyControl;
public TunerEditor( ResourceManager resourceManager,
public TunerEditor( SourceManager sourceManager,
SourceConfiguration config )
{
super( resourceManager, config );
super( sourceManager, config );
initGUI();
}
@@ -56,4 +58,18 @@ public class TunerEditor extends SourceEditor
add( mFrequencyControl );
}
@Override
public void setConfiguration( Channel channel )
{
// TODO Auto-generated method stub
}
@Override
public void validateConfiguration() throws ConfigurationValidationException
{
// TODO Auto-generated method stub
}
}

View File

@@ -30,6 +30,7 @@ import org.usb4java.DeviceDescriptor;
import org.usb4java.DeviceList;
import org.usb4java.LibUsb;
import settings.SettingsManager;
import source.Source;
import source.SourceException;
import source.config.SourceConfigTuner;
@@ -46,22 +47,25 @@ import source.tuner.rtl.RTL2832Tuner;
import source.tuner.rtl.RTL2832TunerController;
import source.tuner.rtl.e4k.E4KTunerController;
import source.tuner.rtl.r820t.R820TTunerController;
import controller.ResourceManager;
import controller.ThreadPoolManager;
public class TunerManager
{
private final static Logger mLog =
LoggerFactory.getLogger( TunerManager.class );
private ResourceManager mResourceManager;
private ArrayList<Tuner> mTuners = new ArrayList<Tuner>();
private MixerManager mMixerManager;
private SettingsManager mSettingsManager;
private ThreadPoolManager mThreadPoolManager;
public TunerManager( ResourceManager resourceManager )
public TunerManager( MixerManager mixerManager,
SettingsManager settingsManager,
ThreadPoolManager threadPoolManager )
{
mResourceManager = resourceManager;
/* initialize mixers */
MixerManager.getInstance();
mSettingsManager = settingsManager;
mThreadPoolManager = threadPoolManager;
initTuners();
}
@@ -100,8 +104,7 @@ public class TunerManager
try
{
retVal = tuner.getChannel(
mResourceManager.getThreadPoolManager(), tunerChannel );
retVal = tuner.getChannel( mThreadPoolManager, tunerChannel );
}
catch ( RejectedExecutionException ree )
{
@@ -261,7 +264,7 @@ public class TunerManager
try
{
AirspyTunerController airspyController =
new AirspyTunerController( device, mResourceManager.getThreadPoolManager() );
new AirspyTunerController( device, mThreadPoolManager );
airspyController.init();
@@ -397,7 +400,7 @@ public class TunerManager
{
HackRFTunerController hackRFController =
new HackRFTunerController( device, descriptor,
mResourceManager.getThreadPoolManager() );
mThreadPoolManager );
hackRFController.init();
@@ -449,7 +452,7 @@ public class TunerManager
{
E4KTunerController controller =
new E4KTunerController( device, deviceDescriptor,
mResourceManager.getThreadPoolManager() );
mThreadPoolManager );
controller.init();
@@ -476,7 +479,7 @@ public class TunerManager
{
R820TTunerController controller =
new R820TTunerController( device, deviceDescriptor,
mResourceManager.getThreadPoolManager() );
mThreadPoolManager );
controller.init();
@@ -526,12 +529,11 @@ public class TunerManager
*/
private TunerConfiguration getTunerConfiguration( Tuner tuner )
{
TunerConfigurationAssignment selected = mResourceManager
.getSettingsManager().getSelectedTunerConfiguration(
tuner.getTunerType(), tuner.getUniqueID() );
TunerConfigurationAssignment selected = mSettingsManager
.getSelectedTunerConfiguration( tuner.getTunerType(), tuner.getUniqueID() );
ArrayList<TunerConfiguration> configs = mResourceManager
.getSettingsManager().getTunerConfigurations( tuner.getTunerType() );
ArrayList<TunerConfiguration> configs = mSettingsManager
.getTunerConfigurations( tuner.getTunerType() );
TunerConfiguration config = null;
@@ -553,13 +555,13 @@ public class TunerManager
//If we're still null at this point, create a default config
if( config == null )
{
config = mResourceManager.getSettingsManager()
.addNewTunerConfiguration( tuner.getTunerType(), "Default" );
config = mSettingsManager.addNewTunerConfiguration(
tuner.getTunerType(), "Default" );
}
//Persist the config as the selected tuner configuration. The method
//auto-saves the setting
mResourceManager.getSettingsManager().setSelectedTunerConfiguration(
mSettingsManager.setSelectedTunerConfiguration(
tuner.getTunerType(), tuner.getUniqueID(), config );
return config;
@@ -579,7 +581,7 @@ public class TunerManager
private MixerTunerDataLine getMixerTunerDataLine( TunerType tunerClass )
{
Collection<MixerTunerDataLine> datalines =
MixerManager.getInstance().getMixerTunerDataLines();
mMixerManager.getMixerTunerDataLines();
for( MixerTunerDataLine mixerTDL: datalines )
{

View File

@@ -28,15 +28,17 @@ import javax.swing.JPopupMenu;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import playlist.PlaylistManager;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.frequency.FrequencyChangeEvent;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.IFrequencyChangeProcessor;
import spectrum.SpectrumFrame;
import controller.BaseNode;
import controller.ResourceManager;
import controller.channel.ChannelModel;
import controller.channel.ChannelProcessingManager;
public class TunerNode extends BaseNode implements FrequencyChangeListener
public class TunerNode extends BaseNode implements IFrequencyChangeProcessor
{
private final static Logger mLog =
LoggerFactory.getLogger( TunerNode.class );
@@ -48,14 +50,24 @@ public class TunerNode extends BaseNode implements FrequencyChangeListener
private long mFrequency;
private int mSampleRate;
private ChannelModel mChannelModel;
private ChannelProcessingManager mChannelProcessingManager;
private PlaylistManager mPlaylistManager;
private SettingsManager mSettingsManager;
public TunerNode( ChannelModel channelModel, Tuner tuner )
public TunerNode( ChannelModel channelModel,
ChannelProcessingManager channelProcessingManager,
PlaylistManager playlistManager,
SettingsManager settingsManager,
Tuner tuner )
{
super( tuner ); //does this make it a super tuner?
mChannelModel = channelModel;
mChannelProcessingManager = channelProcessingManager;
mPlaylistManager = playlistManager;
mSettingsManager = settingsManager;
tuner.addListener( this );
tuner.addFrequencyChangeProcessor( this );
try
{
@@ -72,7 +84,7 @@ public class TunerNode extends BaseNode implements FrequencyChangeListener
@Override
public JPanel getEditor()
{
return getTuner().getEditor( getModel().getResourceManager() );
return getTuner().getEditor( mSettingsManager );
}
public Tuner getTuner()
@@ -117,11 +129,9 @@ public class TunerNode extends BaseNode implements FrequencyChangeListener
@Override
public void actionPerformed( ActionEvent e )
{
ResourceManager rm = getModel().getResourceManager();
SpectrumFrame frame = new SpectrumFrame( mChannelModel,
rm.getController(), rm.getPlaylistManager(),
rm.getSettingsManager(), getTuner() );
SpectrumFrame frame = new SpectrumFrame( getModel(), mChannelModel,
mChannelProcessingManager, mPlaylistManager,
mSettingsManager, getTuner() );
}
} );
@@ -135,7 +145,7 @@ public class TunerNode extends BaseNode implements FrequencyChangeListener
{
switch( event.getEvent() )
{
case FREQUENCY_CHANGE_NOTIFICATION:
case NOTIFICATION_FREQUENCY_CHANGE:
long frequency = event.getValue().longValue();
if( mFrequency != frequency )
@@ -144,7 +154,7 @@ public class TunerNode extends BaseNode implements FrequencyChangeListener
getModel().nodeChanged( TunerNode.this );
}
break;
case SAMPLE_RATE_CHANGE_NOTIFICATION:
case NOTIFICATION_SAMPLE_RATE_CHANGE:
int sampleRate = event.getValue().intValue();
if( mSampleRate != sampleRate )

View File

@@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory;
import sample.Listener;
import sample.complex.ComplexBuffer;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.Tuner;
import source.tuner.TunerChannel;
@@ -34,7 +35,6 @@ import source.tuner.TunerClass;
import source.tuner.TunerConfiguration;
import source.tuner.TunerType;
import source.tuner.airspy.AirspyTunerController.BoardID;
import controller.ResourceManager;
import controller.ThreadPoolManager;
public class AirspyTuner extends Tuner
@@ -55,9 +55,9 @@ public class AirspyTuner extends Tuner
}
@Override
public JPanel getEditor( ResourceManager resourceManager )
public JPanel getEditor( SettingsManager settingsManager )
{
return new AirspyTunerEditorPanel( this, resourceManager );
return new AirspyTunerEditorPanel( this, settingsManager );
}
public AirspyTunerController getController()

View File

@@ -45,13 +45,13 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.usb4java.LibUsbException;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerConfiguration;
import source.tuner.TunerConfigurationAssignment;
import source.tuner.TunerType;
import source.tuner.airspy.AirspyTunerController.Gain;
import source.tuner.airspy.AirspyTunerController.GainMode;
import controller.ResourceManager;
public class AirspyTunerConfigurationPanel extends JPanel
{
@@ -60,7 +60,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
private static final long serialVersionUID = 1L;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
private AirspyTunerController mController;
private AirspyTunerConfiguration mSelectedConfig;
@@ -94,10 +94,10 @@ public class AirspyTunerConfigurationPanel extends JPanel
private JSlider mMixerGain;
public AirspyTunerConfigurationPanel( ResourceManager resourceManager,
public AirspyTunerConfigurationPanel( SettingsManager settingsManager,
AirspyTunerController controller )
{
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
mController = controller;
init();
@@ -126,8 +126,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
if( serial != null )
{
savedConfig = mResourceManager
.getSettingsManager().getSelectedTunerConfiguration(
savedConfig = mSettingsManager.getSelectedTunerConfiguration(
TunerType.AIRSPY_R820T, serial );
}
@@ -146,8 +145,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
if( serial != null )
{
mResourceManager.getSettingsManager()
.setSelectedTunerConfiguration( TunerType.AIRSPY_R820T,
mSettingsManager.setSelectedTunerConfiguration( TunerType.AIRSPY_R820T,
serial, mSelectedConfig );
}
}
@@ -518,8 +516,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
public void actionPerformed( ActionEvent e )
{
TunerConfiguration config =
mResourceManager.getSettingsManager()
.addNewTunerConfiguration(
mSettingsManager.addNewTunerConfiguration(
TunerType.AIRSPY_R820T,
"New Configuration" );
@@ -558,8 +555,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
if( n == JOptionPane.YES_OPTION )
{
mResourceManager.getSettingsManager()
.deleteTunerConfiguration( selected );
mSettingsManager.deleteTunerConfiguration( selected );
mComboConfigurations.setModel( getModel() );
@@ -635,7 +631,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
mGainModeCombo.setSelectedItem( Gain.getGainMode( gain ) );
mGain.setValue( gain.getValue() );
mResourceManager.getSettingsManager().setSelectedTunerConfiguration(
mSettingsManager.setSelectedTunerConfiguration(
TunerType.AIRSPY_R820T, mController.getDeviceInfo().getSerialNumber(), config );
save();
@@ -661,8 +657,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
private ComboBoxModel<AirspyTunerConfiguration> getModel()
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
.getTunerConfigurations( TunerType.AIRSPY_R820T );
mSettingsManager.getTunerConfigurations( TunerType.AIRSPY_R820T );
DefaultComboBoxModel<AirspyTunerConfiguration> model =
new DefaultComboBoxModel<AirspyTunerConfiguration>();
@@ -681,8 +676,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
private AirspyTunerConfiguration getNamedConfiguration( String name )
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
.getTunerConfigurations( TunerType.AIRSPY_R820T );
mSettingsManager.getTunerConfigurations( TunerType.AIRSPY_R820T );
for( TunerConfiguration config: configs )
{
@@ -700,6 +694,6 @@ public class AirspyTunerConfigurationPanel extends JPanel
*/
private void save()
{
mResourceManager.getSettingsManager().save();
mSettingsManager.save();
}
}

View File

@@ -29,17 +29,16 @@ import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.frequency.FrequencyChangeEvent;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.IFrequencyChangeProcessor;
import com.jidesoft.swing.JideTabbedPane;
import controller.ResourceManager;
public class AirspyTunerEditorPanel extends JPanel
implements FrequencyChangeListener
implements IFrequencyChangeProcessor
{
private static final long serialVersionUID = 1L;
@@ -50,14 +49,14 @@ public class AirspyTunerEditorPanel extends JPanel
private AirspyTuner mTuner;
private AirspyTunerController mController;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
public AirspyTunerEditorPanel( AirspyTuner tuner,
ResourceManager resourceManager )
SettingsManager settingsManager )
{
mTuner = tuner;
mController = mTuner.getController();
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
initGUI();
}
@@ -76,7 +75,7 @@ public class AirspyTunerEditorPanel extends JPanel
/* Add frequency control as frequency change listener. This creates a
* feedback loop, so the control does not rebroadcast the event */
mTuner.addListener( mFrequencyControl );
mTuner.addFrequencyChangeProcessor( mFrequencyControl );
mFrequencyControl.setFrequency( mController.getFrequency(), false );
@@ -89,7 +88,7 @@ public class AirspyTunerEditorPanel extends JPanel
add( tabs, "span,grow,push" );
tabs.add( "Config", new AirspyTunerConfigurationPanel(
mResourceManager, mTuner.getController() ) );
mSettingsManager, mTuner.getController() ) );
tabs.add( "Info", new AirspyInformationPanel( mTuner.getController() ) );
}
@@ -97,7 +96,7 @@ public class AirspyTunerEditorPanel extends JPanel
@Override
public void frequencyChanged( FrequencyChangeEvent event )
{
if( event.getEvent() == Event.FREQUENCY_CHANGE_NOTIFICATION )
if( event.getEvent() == Event.NOTIFICATION_FREQUENCY_CHANGE )
{
try
{

View File

@@ -24,6 +24,7 @@ import javax.swing.JPanel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.Tuner;
import source.tuner.TunerChannel;
@@ -32,7 +33,6 @@ import source.tuner.TunerClass;
import source.tuner.TunerConfiguration;
import source.tuner.TunerType;
import source.tuner.usb.USBTunerDevice;
import controller.ResourceManager;
import controller.ThreadPoolManager;
public class B100Tuner extends Tuner
@@ -69,9 +69,9 @@ public class B100Tuner extends Tuner
}
@Override
public JPanel getEditor( ResourceManager resourceManager )
public JPanel getEditor( SettingsManager settingsManager )
{
return new B100TunerEditorPanel( this, resourceManager );
return new B100TunerEditorPanel( this, settingsManager );
}
@Override

View File

@@ -22,19 +22,19 @@ import javax.swing.JLabel;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import controller.ResourceManager;
import settings.SettingsManager;
public class B100TunerEditorPanel extends JPanel
{
private static final long serialVersionUID = 1L;
private B100Tuner mTuner;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
public B100TunerEditorPanel( B100Tuner tuner, ResourceManager resourceManager )
public B100TunerEditorPanel( B100Tuner tuner, SettingsManager settingsManager )
{
mTuner = tuner;
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
init();
}

View File

@@ -24,6 +24,7 @@ import javax.swing.JPanel;
import sample.Listener;
import sample.adapter.ShortAdapter;
import sample.complex.ComplexBuffer;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.MixerTuner;
import source.tuner.MixerTunerDataLine;
@@ -32,8 +33,6 @@ import source.tuner.TunerChannelSource;
import source.tuner.TunerClass;
import source.tuner.TunerConfiguration;
import source.tuner.TunerType;
import source.tuner.frequency.FrequencyChangeListener;
import controller.ResourceManager;
import controller.ThreadPoolManager;
public class FCDTuner extends MixerTuner
@@ -48,7 +47,7 @@ public class FCDTuner extends MixerTuner
new ShortAdapter() );
mController = controller;
mController.addListener( (FrequencyChangeListener)this );
mController.addListener( this );
}
public void dispose()
@@ -82,9 +81,9 @@ public class FCDTuner extends MixerTuner
}
@Override
public JPanel getEditor( ResourceManager resourceManager )
public JPanel getEditor( SettingsManager settingsManager )
{
return mController.getEditor( this, resourceManager );
return mController.getEditor( this, settingsManager );
}
@Override

View File

@@ -33,13 +33,13 @@ import org.usb4java.DeviceHandle;
import org.usb4java.LibUsb;
import org.usb4java.LibUsbException;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerClass;
import source.tuner.TunerConfiguration;
import source.tuner.TunerController;
import source.tuner.TunerType;
import source.tuner.fcd.proV1.FCD1TunerController.Block;
import controller.ResourceManager;
public abstract class FCDTunerController extends TunerController
{
@@ -150,7 +150,7 @@ public abstract class FCDTunerController extends TunerController
* Editor panel (GUI) component.
*/
public abstract JPanel getEditor( FCDTuner tuner,
ResourceManager resourceManager );
SettingsManager settingsManager );
/**
* Applies the settings in the tuner configuration

View File

@@ -47,6 +47,7 @@ import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerConfiguration;
import source.tuner.TunerType;
@@ -56,15 +57,13 @@ import source.tuner.fcd.proV1.FCD1TunerController.MixerGain;
import com.jidesoft.swing.JideTabbedPane;
import controller.ResourceManager;
public class FCD1TunerConfigurationPanel extends JPanel
{
private final static Logger mLog =
LoggerFactory.getLogger( FCD1TunerConfigurationPanel.class );
private static final long serialVersionUID = 1L;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
private FCD1TunerController mController;
private FCD1TunerConfiguration mSelectedConfig;
@@ -81,10 +80,10 @@ public class FCD1TunerConfigurationPanel extends JPanel
private CorrectionSpinner mCorrectionGain;
private CorrectionSpinner mCorrectionPhase;
public FCD1TunerConfigurationPanel( ResourceManager resourceManager,
public FCD1TunerConfigurationPanel( SettingsManager settingsManager,
FCD1TunerController controller )
{
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
mController = controller;
mSelectedConfig = controller.getTunerConfiguration();
@@ -428,8 +427,7 @@ public class FCD1TunerConfigurationPanel extends JPanel
public void actionPerformed( ActionEvent e )
{
TunerConfiguration config =
mResourceManager.getSettingsManager()
.addNewTunerConfiguration(
mSettingsManager.addNewTunerConfiguration(
TunerType.FUNCUBE_DONGLE_PRO,
"New Configuration" );
@@ -472,8 +470,7 @@ public class FCD1TunerConfigurationPanel extends JPanel
if( n == JOptionPane.YES_OPTION )
{
mResourceManager.getSettingsManager()
.deleteTunerConfiguration( selected );
mSettingsManager.deleteTunerConfiguration( selected );
mComboConfigurations.setModel( getModel() );
@@ -508,8 +505,7 @@ public class FCD1TunerConfigurationPanel extends JPanel
mCorrectionGain.setValue( config.getGainCorrection() );
mCorrectionPhase.setValue( config.getPhaseCorrection() );
mResourceManager.getSettingsManager()
.setSelectedTunerConfiguration(
mSettingsManager.setSelectedTunerConfiguration(
TunerType.FUNCUBE_DONGLE_PRO,
mController.getUSBAddress(), config );
}
@@ -529,8 +525,7 @@ public class FCD1TunerConfigurationPanel extends JPanel
private ComboBoxModel<FCD1TunerConfiguration> getModel()
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
.getTunerConfigurations( TunerType.FUNCUBE_DONGLE_PRO );
mSettingsManager.getTunerConfigurations( TunerType.FUNCUBE_DONGLE_PRO );
DefaultComboBoxModel<FCD1TunerConfiguration> model =
new DefaultComboBoxModel<FCD1TunerConfiguration>();
@@ -547,8 +542,7 @@ public class FCD1TunerConfigurationPanel extends JPanel
private FCD1TunerConfiguration getNamedConfiguration( String name )
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
.getTunerConfigurations( TunerType.FUNCUBE_DONGLE_PRO );
mSettingsManager.getTunerConfigurations( TunerType.FUNCUBE_DONGLE_PRO );
for( TunerConfiguration config: configs )
{
@@ -563,7 +557,7 @@ public class FCD1TunerConfigurationPanel extends JPanel
private void save()
{
mResourceManager.getSettingsManager().save();
mSettingsManager.save();
}
public enum Correction { GAIN, PHASE, DC_INPHASE, DC_QUADRATURE };

View File

@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
import org.usb4java.Device;
import org.usb4java.DeviceDescriptor;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerClass;
import source.tuner.TunerConfiguration;
@@ -36,7 +37,6 @@ import source.tuner.TunerType;
import source.tuner.fcd.FCDCommand;
import source.tuner.fcd.FCDTuner;
import source.tuner.fcd.FCDTunerController;
import controller.ResourceManager;
public class FCD1TunerController extends FCDTunerController
{
@@ -148,11 +148,11 @@ public class FCD1TunerController extends FCDTunerController
}
@Override
public JPanel getEditor( FCDTuner tuner, ResourceManager resourceManager )
public JPanel getEditor( FCDTuner tuner, SettingsManager settingsManager )
{
if( mEditor == null )
{
mEditor = new FCD1TunerEditorPanel( tuner, resourceManager );
mEditor = new FCD1TunerEditorPanel( tuner, settingsManager );
}
return mEditor;

View File

@@ -29,18 +29,17 @@ import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.fcd.FCDTuner;
import source.tuner.fcd.FCDTunerDetailsPanel;
import source.tuner.frequency.FrequencyChangeEvent;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import source.tuner.frequency.IFrequencyChangeProcessor;
import com.jidesoft.swing.JideTabbedPane;
import controller.ResourceManager;
public class FCD1TunerEditorPanel extends JPanel implements FrequencyChangeListener
public class FCD1TunerEditorPanel extends JPanel implements IFrequencyChangeProcessor
{
private static final long serialVersionUID = 1L;
private final static Logger mLog =
@@ -48,15 +47,15 @@ public class FCD1TunerEditorPanel extends JPanel implements FrequencyChangeListe
private FCDTuner mTuner;
private FCD1TunerController mController;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
private JFrequencyControl mFrequencyControl;
public FCD1TunerEditorPanel( FCDTuner tuner, ResourceManager resourceManager )
public FCD1TunerEditorPanel( FCDTuner tuner, SettingsManager settingsManager )
{
mTuner = tuner;
mController = (FCD1TunerController)mTuner.getController();
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
initGUI();
}
@@ -74,7 +73,7 @@ public class FCD1TunerEditorPanel extends JPanel implements FrequencyChangeListe
/* Add frequency control as listener to tuner to get frequency changes
* that are invoked elsewhere, to keep the control in sync with the
* frequency */
mTuner.addListener( mFrequencyControl );
mTuner.addFrequencyChangeProcessor( mFrequencyControl );
mFrequencyControl.setFrequency( mController.getFrequency(), false );
@@ -85,7 +84,7 @@ public class FCD1TunerEditorPanel extends JPanel implements FrequencyChangeListe
tabs.setForeground( Color.BLACK );
tabs.add( "Configuration", new FCD1TunerConfigurationPanel(
mResourceManager, mController ) );
mSettingsManager, mController ) );
tabs.add( "Info", new FCDTunerDetailsPanel( mController ) );
@@ -95,7 +94,7 @@ public class FCD1TunerEditorPanel extends JPanel implements FrequencyChangeListe
@Override
public void frequencyChanged( FrequencyChangeEvent event )
{
if( event.getEvent() == Event.FREQUENCY_CHANGE_NOTIFICATION )
if( event.getEvent() == Event.NOTIFICATION_FREQUENCY_CHANGE )
{
try
{

View File

@@ -46,11 +46,11 @@ import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerConfiguration;
import source.tuner.TunerConfigurationAssignment;
import source.tuner.TunerType;
import controller.ResourceManager;
public class FCD2TunerConfigurationPanel extends JPanel
{
@@ -58,7 +58,7 @@ public class FCD2TunerConfigurationPanel extends JPanel
LoggerFactory.getLogger( FCD2TunerConfigurationPanel.class );
private static final long serialVersionUID = 1L;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
private FCD2TunerController mController;
private FCD2TunerConfiguration mSelectedConfig;
private JButton mNewConfiguration;
@@ -69,10 +69,10 @@ public class FCD2TunerConfigurationPanel extends JPanel
private JCheckBox mMixerGain;
private JSpinner mFrequencyCorrection;
public FCD2TunerConfigurationPanel( ResourceManager resourceManager,
public FCD2TunerConfigurationPanel( SettingsManager settingsManager,
FCD2TunerController controller )
{
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
mController = controller;
init();
@@ -218,8 +218,8 @@ public class FCD2TunerConfigurationPanel extends JPanel
* Lookup the save config and apply that config to update all of the
* controls
*/
TunerConfigurationAssignment savedConfig = mResourceManager
.getSettingsManager().getSelectedTunerConfiguration(
TunerConfigurationAssignment savedConfig = mSettingsManager
.getSelectedTunerConfiguration(
TunerType.FUNCUBE_DONGLE_PRO_PLUS,
mController.getUSBAddress() );
@@ -234,7 +234,7 @@ public class FCD2TunerConfigurationPanel extends JPanel
mSelectedConfig = mComboConfigurations.getItemAt( 0 );
//Store this config as the default for this tuner at this address
mResourceManager.getSettingsManager()
mSettingsManager
.setSelectedTunerConfiguration(
TunerType.FUNCUBE_DONGLE_PRO_PLUS,
mController.getUSBAddress(), mSelectedConfig );
@@ -253,7 +253,7 @@ public class FCD2TunerConfigurationPanel extends JPanel
public void actionPerformed( ActionEvent e )
{
TunerConfiguration config =
mResourceManager.getSettingsManager()
mSettingsManager
.addNewTunerConfiguration(
TunerType.FUNCUBE_DONGLE_PRO_PLUS,
"New Configuration" );
@@ -293,7 +293,7 @@ public class FCD2TunerConfigurationPanel extends JPanel
if( n == JOptionPane.YES_OPTION )
{
mResourceManager.getSettingsManager()
mSettingsManager
.deleteTunerConfiguration( selected );
mComboConfigurations.setModel( getModel() );
@@ -322,7 +322,7 @@ public class FCD2TunerConfigurationPanel extends JPanel
mMixerGain.setSelected( config.getGainMixer() );
mFrequencyCorrection.setValue( config.getFrequencyCorrection() );
mResourceManager.getSettingsManager().setSelectedTunerConfiguration(
mSettingsManager.setSelectedTunerConfiguration(
TunerType.FUNCUBE_DONGLE_PRO_PLUS,
mController.getUSBAddress(), config );
}
@@ -342,7 +342,7 @@ public class FCD2TunerConfigurationPanel extends JPanel
private ComboBoxModel<FCD2TunerConfiguration> getModel()
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
mSettingsManager
.getTunerConfigurations( TunerType.FUNCUBE_DONGLE_PRO_PLUS );
DefaultComboBoxModel<FCD2TunerConfiguration> model =
@@ -359,7 +359,7 @@ public class FCD2TunerConfigurationPanel extends JPanel
private FCD2TunerConfiguration getNamedConfiguration( String name )
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
mSettingsManager
.getTunerConfigurations( TunerType.FUNCUBE_DONGLE_PRO_PLUS );
for( TunerConfiguration config: configs )
@@ -375,6 +375,6 @@ public class FCD2TunerConfigurationPanel extends JPanel
private void save()
{
mResourceManager.getSettingsManager().save();
mSettingsManager.save();
}
}

View File

@@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory;
import org.usb4java.Device;
import org.usb4java.DeviceDescriptor;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerClass;
import source.tuner.TunerConfiguration;
@@ -34,7 +35,6 @@ import source.tuner.TunerType;
import source.tuner.fcd.FCDCommand;
import source.tuner.fcd.FCDTuner;
import source.tuner.fcd.FCDTunerController;
import controller.ResourceManager;
public class FCD2TunerController extends FCDTunerController
{
@@ -89,11 +89,11 @@ public class FCD2TunerController extends FCDTunerController
return TunerType.FUNCUBE_DONGLE_PRO_PLUS;
}
public JPanel getEditor( FCDTuner tuner, ResourceManager resourceManager )
public JPanel getEditor( FCDTuner tuner, SettingsManager settingsManager )
{
if( mEditor == null )
{
mEditor = new FCD2TunerEditorPanel( tuner, resourceManager );
mEditor = new FCD2TunerEditorPanel( tuner, settingsManager );
}
return mEditor;

View File

@@ -29,18 +29,17 @@ import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.fcd.FCDTuner;
import source.tuner.fcd.FCDTunerDetailsPanel;
import source.tuner.frequency.FrequencyChangeEvent;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import source.tuner.frequency.IFrequencyChangeProcessor;
import com.jidesoft.swing.JideTabbedPane;
import controller.ResourceManager;
public class FCD2TunerEditorPanel extends JPanel implements FrequencyChangeListener
public class FCD2TunerEditorPanel extends JPanel implements IFrequencyChangeProcessor
{
private final static Logger mLog =
LoggerFactory.getLogger( FCD2TunerEditorPanel.class );
@@ -48,15 +47,15 @@ public class FCD2TunerEditorPanel extends JPanel implements FrequencyChangeListe
private FCDTuner mTuner;
private FCD2TunerController mController;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
private JFrequencyControl mFrequencyControl;
public FCD2TunerEditorPanel( FCDTuner tuner, ResourceManager resourceManager )
public FCD2TunerEditorPanel( FCDTuner tuner, SettingsManager settingsManager )
{
mTuner = tuner;
mController = (FCD2TunerController)mTuner.getController();
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
initGUI();
}
@@ -73,7 +72,7 @@ public class FCD2TunerEditorPanel extends JPanel implements FrequencyChangeListe
/* Add frequency control as frequency change listener. This creates a
* feedback loop, so the control does not rebroadcast the event */
mTuner.addListener( mFrequencyControl );
mTuner.addFrequencyChangeProcessor( mFrequencyControl );
mFrequencyControl.setFrequency( mController.getFrequency(), false );
@@ -84,7 +83,7 @@ public class FCD2TunerEditorPanel extends JPanel implements FrequencyChangeListe
tabs.setForeground( Color.BLACK );
tabs.add( "Configuration", new FCD2TunerConfigurationPanel(
mResourceManager, mController ) );
mSettingsManager, mController ) );
tabs.add( "Info", new FCDTunerDetailsPanel( mController ) );
@@ -94,7 +93,7 @@ public class FCD2TunerEditorPanel extends JPanel implements FrequencyChangeListe
@Override
public void frequencyChanged( FrequencyChangeEvent event )
{
if( event.getEvent() == Event.FREQUENCY_CHANGE_NOTIFICATION )
if( event.getEvent() == Event.NOTIFICATION_FREQUENCY_CHANGE )
{
//Disregard the bandwidth, which shouldn't be changing
try

View File

@@ -1,181 +0,0 @@
package source.tuner.frequency;
/*******************************************************************************
* SDR Trunk
* Copyright (C) 2015 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sample.real.RealSampleListener;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import buffer.FloatAveragingBuffer;
public class AutomaticFrequencyControl_R extends FrequencyCorrectionControl
implements RealSampleListener
{
private final static Logger mLog =
LoggerFactory.getLogger( AutomaticFrequencyControl_R.class );
private static float LARGE_ERROR = 0.300f;
private static float MEDIUM_ERROR = 0.150f;
private static float SMALL_ERROR = 0.030f;
private static float FINE_ERROR = 0.015f;
private static int LARGE_FREQUENCY_CORRECTION = 1500; //Hertz
private static int MEDIUM_FREQUENCY_CORRECTION = 500;
private static int SMALL_FREQUENCY_CORRECTION = 100;
private static int FINE_FREQUENCY_CORRECTION = 50;
private static int SAMPLE_THRESHOLD = 15000;
private Mode mMode = Mode.FAST;
private FloatAveragingBuffer mBuffer =
new FloatAveragingBuffer( SAMPLE_THRESHOLD );
private int mSampleCounter = 0;
private int mSkipCounter = 0;
private int mSkipThreshold = 4;
private int mErrorCorrection = 0;
public enum Mode
{
NORMAL,FAST;
}
/**
* Automatic Frequency Control. Monitors DC bias present in an FM
* demodulated audio stream and issues automatic frequency corrections to
* maintain the DC bias close to zero.
*
* @param maximum - maximum allowable (+/-) frequency correction value.
*/
public AutomaticFrequencyControl_R( int maximum )
{
super( maximum );
}
public void dispose()
{
super.dispose();
mBuffer = null;
}
/**
* Resets the error correction value to zero and broadcasts a change event
*/
public void reset()
{
mErrorCorrection = 0;
mMode = Mode.FAST;
dispatch();
}
/**
* Broadcasts a frequency correction change event to the registered listener
*/
private void dispatch()
{
if( mListener != null )
{
mListener.frequencyChanged(
new FrequencyChangeEvent( Event.CHANNEL_FREQUENCY_CORRECTION_CHANGE_NOTIFICATION,
mErrorCorrection ) );
}
}
@Override
public void receive( float sample )
{
if( mMode == Mode.FAST )
{
float average = mBuffer.get( sample );
mSampleCounter++;
if( mSampleCounter >= SAMPLE_THRESHOLD )
{
mSampleCounter = 0;
update( average );
}
}
else
{
mSkipCounter++;
if( mSkipCounter >= mSkipThreshold )
{
mSkipCounter = 0;
float average = mBuffer.get( sample );
mSampleCounter++;
if( mSampleCounter >= SAMPLE_THRESHOLD )
{
mSampleCounter = 0;
update( average );
}
}
}
}
private void update( float average )
{
mMode = Mode.NORMAL;
if( average > LARGE_ERROR )
{
adjust( -LARGE_FREQUENCY_CORRECTION );
mMode = Mode.FAST;
}
else if( average > MEDIUM_ERROR )
{
adjust( -MEDIUM_FREQUENCY_CORRECTION );
mMode = Mode.FAST;
}
else if( average > SMALL_ERROR )
{
adjust( -SMALL_FREQUENCY_CORRECTION );
}
else if( average > FINE_ERROR )
{
adjust( -FINE_FREQUENCY_CORRECTION );
}
else if( average < -LARGE_ERROR )
{
adjust( LARGE_FREQUENCY_CORRECTION );
mMode = Mode.FAST;
}
else if( average < -MEDIUM_ERROR )
{
adjust( MEDIUM_FREQUENCY_CORRECTION );
mMode = Mode.FAST;
}
else if( average < -SMALL_ERROR )
{
adjust( SMALL_FREQUENCY_CORRECTION );
}
else if( average < -FINE_ERROR )
{
adjust( FINE_FREQUENCY_CORRECTION );
}
}
}

View File

@@ -1,197 +0,0 @@
package source.tuner.frequency;
/*******************************************************************************
* SDR Trunk
* Copyright (C) 2015 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sample.Listener;
import sample.real.RealBuffer;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import buffer.FloatAveragingBuffer;
public class AutomaticFrequencyControl_RB extends FrequencyCorrectionControl
implements Listener<RealBuffer>
{
private final static Logger mLog =
LoggerFactory.getLogger( AutomaticFrequencyControl_RB.class );
private static float LARGE_ERROR = 0.300f;
private static float MEDIUM_ERROR = 0.150f;
private static float SMALL_ERROR = 0.030f;
private static float FINE_ERROR = 0.015f;
private static int LARGE_FREQUENCY_CORRECTION = 1500; //Hertz
private static int MEDIUM_FREQUENCY_CORRECTION = 500;
private static int SMALL_FREQUENCY_CORRECTION = 100;
private static int FINE_FREQUENCY_CORRECTION = 50;
private static int SAMPLE_THRESHOLD = 15000;
private Mode mMode = Mode.FAST;
private FloatAveragingBuffer mBuffer =
new FloatAveragingBuffer( SAMPLE_THRESHOLD );
private int mSampleCounter = 0;
private int mSkipCounter = 0;
private int mSkipThreshold = 4;
private int mErrorCorrection = 0;
public enum Mode
{
NORMAL,FAST;
}
/**
* Automatic Frequency Control. Monitors DC bias present in an FM
* demodulated audio stream and issues automatic frequency corrections to
* maintain the DC bias close to zero.
*
* @param maximum - maximum allowable (+/-) frequency correction value.
*/
public AutomaticFrequencyControl_RB( int maximum )
{
super( maximum );
}
public void dispose()
{
super.dispose();
mBuffer = null;
}
/**
* Resets the error correction value to zero and broadcasts a change event
*/
public void reset()
{
super.reset();
mMode = Mode.FAST;
dispatch();
}
/**
* Broadcasts a frequency correction change event to the registered listener
*/
private void dispatch()
{
if( mListener != null )
{
mListener.frequencyChanged(
new FrequencyChangeEvent( Event.CHANNEL_FREQUENCY_CORRECTION_CHANGE_NOTIFICATION,
mErrorCorrection ) );
}
}
@Override
public void receive( RealBuffer t )
{
float average = 0.0f;
for( float sample: t.getSamples() )
{
average = mBuffer.get( sample );
}
//TODO: fix this
// update( average );
}
public void receive( float sample )
{
if( mMode == Mode.FAST )
{
float average = mBuffer.get( sample );
mSampleCounter++;
if( mSampleCounter >= SAMPLE_THRESHOLD )
{
mSampleCounter = 0;
update( average );
}
}
else
{
mSkipCounter++;
if( mSkipCounter >= mSkipThreshold )
{
mSkipCounter = 0;
float average = mBuffer.get( sample );
mSampleCounter++;
if( mSampleCounter >= SAMPLE_THRESHOLD )
{
mSampleCounter = 0;
update( average );
}
}
}
}
private void update( float average )
{
mMode = Mode.NORMAL;
if( average > LARGE_ERROR )
{
adjust( -LARGE_FREQUENCY_CORRECTION );
mMode = Mode.FAST;
}
else if( average > MEDIUM_ERROR )
{
adjust( -MEDIUM_FREQUENCY_CORRECTION );
mMode = Mode.FAST;
}
else if( average > SMALL_ERROR )
{
adjust( -SMALL_FREQUENCY_CORRECTION );
}
else if( average > FINE_ERROR )
{
adjust( -FINE_FREQUENCY_CORRECTION );
}
else if( average < -LARGE_ERROR )
{
adjust( LARGE_FREQUENCY_CORRECTION );
mMode = Mode.FAST;
}
else if( average < -MEDIUM_ERROR )
{
adjust( MEDIUM_FREQUENCY_CORRECTION );
mMode = Mode.FAST;
}
else if( average < -SMALL_ERROR )
{
adjust( SMALL_FREQUENCY_CORRECTION );
}
else if( average < -FINE_ERROR )
{
adjust( FINE_FREQUENCY_CORRECTION );
}
}
}

View File

@@ -0,0 +1,135 @@
package source.tuner.frequency;
/*******************************************************************************
* SDR Trunk
* Copyright (C) 2016 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
import module.Module;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sample.Listener;
import sample.real.RealBuffer;
import source.tuner.frequency.FrequencyChangeEvent.Event;
public class DCTrackingFrequencyControl extends Module
implements Listener<RealBuffer>, IFrequencyChangeProvider
{
private final static Logger mLog =
LoggerFactory.getLogger( DCTrackingFrequencyControl.class );
private static float COARSE_THRESHOLD = 0.1f;
private static float LOOP_GAIN = 0.1f;
private static float COARSE_GAIN = 1000.0f;
private static float FINE_GAIN = 100.0f;
private int mErrorCorrection = 0;
private int mMaximumFrequencyCorrection = 0;
private Listener<FrequencyChangeEvent> mListener;
/**
* DC offset Automatic Frequency Control. Monitors DC bias present in an FM
* demodulated audio stream and issues automatic frequency corrections to
* maintain the DC bias close to zero.
*
* @param maximum - maximum allowable (+/-) frequency correction value.
*/
public DCTrackingFrequencyControl( int maximum )
{
mMaximumFrequencyCorrection = maximum;
}
public void dispose()
{
mListener = null;
}
@Override
public void receive( RealBuffer buffer )
{
double sum = 0.0d;
for( float sample: buffer.getSamples() )
{
sum += sample;
}
float mean = (float)( sum / (double)buffer.getSamples().length );
float adjustment = 0.0f;
if( mean > COARSE_THRESHOLD || mean < - COARSE_THRESHOLD )
{
adjustment = mean * COARSE_GAIN;
}
else
{
adjustment = mean * FINE_GAIN;
}
setErrorCorrection( mErrorCorrection + (int)( (float)adjustment * LOOP_GAIN ) );
}
private void setErrorCorrection( int correction )
{
if( mListener != null )
{
if( correction > mMaximumFrequencyCorrection )
{
correction = mMaximumFrequencyCorrection;
}
else if( correction < -mMaximumFrequencyCorrection )
{
correction = -mMaximumFrequencyCorrection;
}
if( correction != mErrorCorrection )
{
mListener.receive( new FrequencyChangeEvent(
Event.REQUEST_CHANNEL_FREQUENCY_CORRECTION_CHANGE, correction ) );
}
}
}
@Override
public void setFrequencyChangeListener( Listener<FrequencyChangeEvent> listener )
{
mListener = listener;
}
@Override
public void removeFrequencyChangeListener()
{
mListener = null;
}
@Override
public void start()
{
}
@Override
public void stop()
{
}
@Override
public void reset()
{
setErrorCorrection( 0 );
}
}

View File

@@ -4,11 +4,12 @@ public class FrequencyChangeEvent
{
public enum Event
{
FREQUENCY_CHANGE_NOTIFICATION,
FREQUENCY_CORRECTION_CHANGE_NOTIFICATION,
CHANNEL_FREQUENCY_CORRECTION_CHANGE_NOTIFICATION,
CHANNEL_FREQUENCY_CORRECTION_CHANGE_REQUEST,
SAMPLE_RATE_CHANGE_NOTIFICATION;
NOTIFICATION_FREQUENCY_CHANGE,
NOTIFICATION_FREQUENCY_CORRECTION_CHANGE,
NOTIFICATION_CHANNEL_FREQUENCY_CORRECTION_CHANGE,
NOTIFICATION_SAMPLE_RATE_CHANGE,
REQUEST_CHANNEL_FREQUENCY_CORRECTION_CHANGE;
}
private Event mEvent;

View File

@@ -0,0 +1,32 @@
package source.tuner.frequency;
import sample.Listener;
public class FrequencyChangeProcessorWrapper
implements IFrequencyChangeListener, Listener<FrequencyChangeEvent>
{
private IFrequencyChangeProcessor mProcessor;
/**
* Provides IFrequencyChangeListener wrapper for an IFrequencyChangeProcessor
*/
public FrequencyChangeProcessorWrapper( IFrequencyChangeProcessor handler )
{
mProcessor = handler;
}
@Override
public Listener<FrequencyChangeEvent> getFrequencyChangeListener()
{
return this;
}
@Override
public void receive( FrequencyChangeEvent event )
{
if( mProcessor != null )
{
mProcessor.frequencyChanged( event );
}
}
}

View File

@@ -37,8 +37,7 @@ public class FrequencyController
private double mFrequencyCorrection = 0d;
private int mSampleRate = 0;
private ArrayList<FrequencyChangeListener> mListeners =
new ArrayList<FrequencyChangeListener>();
private ArrayList<IFrequencyChangeProcessor> mProcessors = new ArrayList<>();
public FrequencyController( Tunable tunable,
long minFrequency,
@@ -181,20 +180,21 @@ public class FrequencyController
/**
* Adds listener to receive frequency change events
*/
public void addListener( FrequencyChangeListener listener )
//TODO: rename this to addFrequencyChangeProcessor()
public void addListener( IFrequencyChangeProcessor processor )
{
if( !mListeners.contains( listener ) )
if( !mProcessors.contains( processor ) )
{
mListeners.add( listener );
mProcessors.add( processor );
}
}
/**
* Removes listener from receiving frequency change events
*/
public void removeListener( FrequencyChangeListener listener )
public void removeFrequencyChangeProcessor( IFrequencyChangeProcessor processor )
{
mListeners.remove( listener );
mProcessors.remove( processor );
}
@@ -205,7 +205,7 @@ public class FrequencyController
protected void broadcastFrequencyChange()
{
broadcastFrequencyChangeEvent(
new FrequencyChangeEvent( Event.FREQUENCY_CHANGE_NOTIFICATION, mFrequency ) );
new FrequencyChangeEvent( Event.NOTIFICATION_FREQUENCY_CHANGE, mFrequency ) );
}
/**
@@ -214,7 +214,7 @@ public class FrequencyController
protected void broadcastFrequencyErrorChange()
{
broadcastFrequencyChangeEvent(
new FrequencyChangeEvent( Event.FREQUENCY_CORRECTION_CHANGE_NOTIFICATION, mFrequencyCorrection ) );
new FrequencyChangeEvent( Event.NOTIFICATION_FREQUENCY_CORRECTION_CHANGE, mFrequencyCorrection ) );
}
/**
@@ -223,14 +223,14 @@ public class FrequencyController
protected void broadcastSampleRateChange()
{
broadcastFrequencyChangeEvent(
new FrequencyChangeEvent( Event.SAMPLE_RATE_CHANGE_NOTIFICATION, mSampleRate ) );
new FrequencyChangeEvent( Event.NOTIFICATION_SAMPLE_RATE_CHANGE, mSampleRate ) );
}
public void broadcastFrequencyChangeEvent( FrequencyChangeEvent event )
{
for( FrequencyChangeListener listener: mListeners )
for( IFrequencyChangeProcessor processor: mProcessors )
{
listener.frequencyChanged( event );
processor.frequencyChanged( event );
}
}

View File

@@ -1,161 +0,0 @@
package source.tuner.frequency;
/*******************************************************************************
* SDR Trunk
* Copyright (C) 2015 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import source.tuner.frequency.FrequencyChangeEvent.Event;
/**
* Frequency control for providing frequency error correction to a tuned channel
*/
public class FrequencyCorrectionControl implements FrequencyChangeListener
{
private final static Logger mLog =
LoggerFactory.getLogger( FrequencyCorrectionControl.class );
protected FrequencyChangeListener mListener;
protected FrequencyCorrectionResetListener mResetListener;
protected int mChannelFrequencyCorrection = 0;
private int mMaximumCorrection = 3000;
/**
* Frequency correction controller.
*
* @param maximum - defines the maximum +/- allowable frequency correction
* value
*/
public FrequencyCorrectionControl( int maximum )
{
mMaximumCorrection = maximum;
}
/**
* Cleanup
*/
public void dispose()
{
mListener = null;
mResetListener = null;
}
/**
* Registers a listener to receive frequency correction events
*/
public void setFrequencyChangeListener( FrequencyChangeListener listener )
{
mListener = listener;
}
/**
* Registers a listener to receive frequency correction resets
*/
public void setListener( FrequencyCorrectionResetListener listener )
{
mResetListener = listener;
}
/**
* Listener for source frequency or frequency offset value changes to
* reset this frequency controller value to zero.
*/
@Override
public void frequencyChanged( FrequencyChangeEvent event )
{
Event attribute = event.getEvent();
switch( attribute )
{
//Direct the listener to reset when frequency correction (PPM) or
//sample rate changes
case FREQUENCY_CORRECTION_CHANGE_NOTIFICATION:
case SAMPLE_RATE_CHANGE_NOTIFICATION:
reset();
break;
default:
break;
}
}
/**
* Resets frequency correction value to zero and notifies any reset
* listeners
*/
public void reset()
{
if( mResetListener != null )
{
mResetListener.resetFrequencyCorrection();
}
}
/**
* Sets frequency correction to the specified value and broadcasts a change
* request
*/
public void setFrequencyCorrection( int correction )
{
mChannelFrequencyCorrection = correction;
/* Limit frequency correction to +/- max correction value */
if( mChannelFrequencyCorrection > mMaximumCorrection )
{
mChannelFrequencyCorrection = mMaximumCorrection;
}
else if( mChannelFrequencyCorrection < -mMaximumCorrection )
{
mChannelFrequencyCorrection = -mMaximumCorrection;
}
/* Broadcast a change request */
if( mListener != null )
{
mListener.frequencyChanged( new FrequencyChangeEvent(
Event.CHANNEL_FREQUENCY_CORRECTION_CHANGE_REQUEST,
mChannelFrequencyCorrection ) );
}
}
/**
* Increments the frequency error correction value by the specified adjustment
*/
public void adjust( int adjustment )
{
setFrequencyCorrection( getErrorCorrection() + adjustment );
}
/**
* Current frequency error correction value
* @return
*/
public int getErrorCorrection()
{
return mChannelFrequencyCorrection;
}
/**
* Listener interface to be notified when this control is reset to a zero
* frequency correction value
*/
public interface FrequencyCorrectionResetListener
{
public void resetFrequencyCorrection();
}
}

View File

@@ -17,6 +17,8 @@
******************************************************************************/
package source.tuner.frequency;
import sample.Listener;
/**
* Interface for broadcasting changes to frequency, bandwidth, sample rate,
@@ -26,7 +28,7 @@ package source.tuner.frequency;
* frequency value. All frequency correction aspects should be handled within
* the device that implements the tuning of the frequency.
*/
public interface FrequencyChangeListener
public interface IFrequencyChangeListener
{
public void frequencyChanged( FrequencyChangeEvent event );
public Listener<FrequencyChangeEvent> getFrequencyChangeListener();
}

View File

@@ -0,0 +1,6 @@
package source.tuner.frequency;
public interface IFrequencyChangeProcessor
{
public void frequencyChanged( FrequencyChangeEvent event );
}

View File

@@ -0,0 +1,9 @@
package source.tuner.frequency;
import sample.Listener;
public interface IFrequencyChangeProvider
{
public void setFrequencyChangeListener( Listener<FrequencyChangeEvent> listener );
public void removeFrequencyChangeListener();
}

View File

@@ -1,8 +0,0 @@
package source.tuner.frequency;
public interface IFrequencyCorrectionController
{
public boolean hasFrequencyCorrectionControl();
public FrequencyCorrectionControl getFrequencyCorrectionControl();
}

View File

@@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory;
import sample.Listener;
import sample.complex.ComplexBuffer;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.Tuner;
import source.tuner.TunerChannel;
@@ -34,7 +35,6 @@ import source.tuner.TunerClass;
import source.tuner.TunerConfiguration;
import source.tuner.TunerType;
import source.tuner.hackrf.HackRFTunerController.BoardID;
import controller.ResourceManager;
import controller.ThreadPoolManager;
public class HackRFTuner extends Tuner
@@ -76,9 +76,9 @@ public class HackRFTuner extends Tuner
}
@Override
public JPanel getEditor( ResourceManager resourceManager )
public JPanel getEditor( SettingsManager settingsManager )
{
return new HackRFTunerEditorPanel( this, resourceManager );
return new HackRFTunerEditorPanel( this, settingsManager );
}
@Override

View File

@@ -48,6 +48,7 @@ import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerConfiguration;
import source.tuner.TunerConfigurationAssignment;
@@ -55,7 +56,6 @@ import source.tuner.TunerType;
import source.tuner.hackrf.HackRFTunerController.HackRFLNAGain;
import source.tuner.hackrf.HackRFTunerController.HackRFSampleRate;
import source.tuner.hackrf.HackRFTunerController.HackRFVGAGain;
import controller.ResourceManager;
public class HackRFTunerConfigurationPanel extends JPanel
{
@@ -64,7 +64,7 @@ public class HackRFTunerConfigurationPanel extends JPanel
private static final long serialVersionUID = 1L;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
private HackRFTunerController mController;
private HackRFTunerConfiguration mSelectedConfig;
@@ -81,10 +81,10 @@ public class HackRFTunerConfigurationPanel extends JPanel
private JComboBox<HackRFSampleRate> mComboSampleRate;
public HackRFTunerConfigurationPanel( ResourceManager resourceManager,
public HackRFTunerConfigurationPanel( SettingsManager settingsManager,
HackRFTunerController controller )
{
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
mController = controller;
init();
@@ -119,8 +119,7 @@ public class HackRFTunerConfigurationPanel extends JPanel
if( serial != null )
{
savedConfig = mResourceManager
.getSettingsManager().getSelectedTunerConfiguration(
savedConfig = mSettingsManager.getSelectedTunerConfiguration(
TunerType.HACKRF, serial );
}
@@ -139,7 +138,7 @@ public class HackRFTunerConfigurationPanel extends JPanel
if( serial != null )
{
mResourceManager.getSettingsManager()
mSettingsManager
.setSelectedTunerConfiguration( TunerType.HACKRF,
serial, mSelectedConfig );
}
@@ -418,7 +417,7 @@ public class HackRFTunerConfigurationPanel extends JPanel
public void actionPerformed( ActionEvent e )
{
TunerConfiguration config =
mResourceManager.getSettingsManager()
mSettingsManager
.addNewTunerConfiguration(
TunerType.HACKRF,
"New Configuration" );
@@ -458,7 +457,7 @@ public class HackRFTunerConfigurationPanel extends JPanel
if( n == JOptionPane.YES_OPTION )
{
mResourceManager.getSettingsManager()
mSettingsManager
.deleteTunerConfiguration( selected );
mComboConfigurations.setModel( getModel() );
@@ -494,7 +493,7 @@ public class HackRFTunerConfigurationPanel extends JPanel
mComboSampleRate.setSelectedItem( mSelectedConfig.getSampleRate() );
mResourceManager.getSettingsManager().setSelectedTunerConfiguration(
mSettingsManager.setSelectedTunerConfiguration(
TunerType.HACKRF, mController.getSerial().getSerialNumber(), config );
}
catch ( UsbException | SourceException e1 )
@@ -518,7 +517,7 @@ public class HackRFTunerConfigurationPanel extends JPanel
private ComboBoxModel<HackRFTunerConfiguration> getModel()
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
mSettingsManager
.getTunerConfigurations( TunerType.HACKRF );
DefaultComboBoxModel<HackRFTunerConfiguration> model =
@@ -538,7 +537,7 @@ public class HackRFTunerConfigurationPanel extends JPanel
private HackRFTunerConfiguration getNamedConfiguration( String name )
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
mSettingsManager
.getTunerConfigurations( TunerType.HACKRF );
for( TunerConfiguration config: configs )
@@ -557,6 +556,6 @@ public class HackRFTunerConfigurationPanel extends JPanel
*/
private void save()
{
mResourceManager.getSettingsManager().save();
mSettingsManager.save();
}
}

View File

@@ -30,18 +30,16 @@ import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.frequency.FrequencyChangeEvent;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import source.tuner.frequency.IFrequencyChangeProcessor;
import source.tuner.hackrf.HackRFTunerController.BoardID;
import com.jidesoft.swing.JideTabbedPane;
import controller.ResourceManager;
public class HackRFTunerEditorPanel extends JPanel
implements FrequencyChangeListener
public class HackRFTunerEditorPanel extends JPanel implements IFrequencyChangeProcessor
{
private static final long serialVersionUID = 1L;
@@ -52,14 +50,14 @@ public class HackRFTunerEditorPanel extends JPanel
private HackRFTuner mTuner;
private HackRFTunerController mController;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
public HackRFTunerEditorPanel( HackRFTuner tuner,
ResourceManager resourceManager )
SettingsManager resourceManager )
{
mTuner = tuner;
mController = mTuner.getController();
mResourceManager = resourceManager;
mSettingsManager = resourceManager;
initGUI();
}
@@ -89,7 +87,7 @@ public class HackRFTunerEditorPanel extends JPanel
/* Add frequency control as frequency change listener. This creates a
* feedback loop, so the control does not rebroadcast the event */
mTuner.addListener( mFrequencyControl );
mTuner.addFrequencyChangeProcessor( mFrequencyControl );
mFrequencyControl.setFrequency( mController.getFrequency(), false );
@@ -102,7 +100,7 @@ public class HackRFTunerEditorPanel extends JPanel
add( tabs, "span,grow,push" );
tabs.add( "Config", new HackRFTunerConfigurationPanel(
mResourceManager, mTuner.getController() ) );
mSettingsManager, mTuner.getController() ) );
tabs.add( "Info", new HackRFInformationPanel( mTuner.getController() ) );
}
@@ -110,7 +108,7 @@ public class HackRFTunerEditorPanel extends JPanel
@Override
public void frequencyChanged( FrequencyChangeEvent event )
{
if( event.getEvent() == Event.FREQUENCY_CHANGE_NOTIFICATION )
if( event.getEvent() == Event.NOTIFICATION_FREQUENCY_CHANGE )
{
try
{

View File

@@ -27,6 +27,7 @@ import org.usb4java.LibUsbException;
import sample.Listener;
import sample.complex.ComplexBuffer;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.Tuner;
import source.tuner.TunerChannel;
@@ -34,9 +35,8 @@ import source.tuner.TunerChannelSource;
import source.tuner.TunerClass;
import source.tuner.TunerConfiguration;
import source.tuner.TunerType;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.IFrequencyChangeListener;
import source.tuner.rtl.RTL2832TunerController.SampleRate;
import controller.ResourceManager;
import controller.ThreadPoolManager;
public class RTL2832Tuner extends Tuner
@@ -57,7 +57,7 @@ public class RTL2832Tuner extends Tuner
mTunerClass = tunerClass;
mController = controller;
mController.addListener( (FrequencyChangeListener)this );
mController.addListener( this );
}
public void dispose()
@@ -89,9 +89,9 @@ public class RTL2832Tuner extends Tuner
}
@Override
public JPanel getEditor( ResourceManager resourceManager )
public JPanel getEditor( SettingsManager settingsManager )
{
return mController.getEditor( resourceManager );
return mController.getEditor( settingsManager );
}
@Override

View File

@@ -52,13 +52,11 @@ import sample.Broadcaster;
import sample.Listener;
import sample.adapter.ByteSampleAdapter;
import sample.complex.ComplexBuffer;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerController;
import source.tuner.TunerType;
import source.tuner.frequency.FrequencyChangeEvent;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import buffer.FloatAveragingBuffer;
import controller.ResourceManager;
import controller.ThreadPoolManager;
import controller.ThreadPoolManager.ThreadType;
@@ -364,7 +362,7 @@ public abstract class RTL2832TunerController extends TunerController
}
}
public abstract JPanel getEditor( ResourceManager resourceManager );
public abstract JPanel getEditor( SettingsManager settingsManager );
public abstract void setSampleRateFilters( int sampleRate )
throws SourceException;

View File

@@ -48,6 +48,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.usb4java.LibUsbException;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerConfiguration;
import source.tuner.TunerConfigurationAssignment;
@@ -57,7 +58,6 @@ import source.tuner.rtl.e4k.E4KTunerController.E4KEnhanceGain;
import source.tuner.rtl.e4k.E4KTunerController.E4KGain;
import source.tuner.rtl.e4k.E4KTunerController.E4KLNAGain;
import source.tuner.rtl.e4k.E4KTunerController.E4KMixerGain;
import controller.ResourceManager;
public class E4KTunerConfigurationPanel extends JPanel
{
@@ -65,7 +65,7 @@ public class E4KTunerConfigurationPanel extends JPanel
private final static Logger mLog =
LoggerFactory.getLogger( E4KTunerConfigurationPanel.class );
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
private E4KTunerController mController;
private E4KTunerConfiguration mSelectedConfig;
@@ -84,10 +84,10 @@ public class E4KTunerConfigurationPanel extends JPanel
private JComboBox<SampleRate> mComboSampleRate;
public E4KTunerConfigurationPanel( ResourceManager resourceManager,
public E4KTunerConfigurationPanel( SettingsManager settingsManager,
E4KTunerController controller )
{
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
mController = controller;
init();
@@ -108,8 +108,8 @@ public class E4KTunerConfigurationPanel extends JPanel
mComboConfigurations.setModel( getModel() );
/* Determine which tuner configuration should be selected/displayed */
TunerConfigurationAssignment savedConfig = mResourceManager
.getSettingsManager().getSelectedTunerConfiguration(
TunerConfigurationAssignment savedConfig = mSettingsManager
.getSelectedTunerConfiguration(
TunerType.ELONICS_E4000, mController.getUniqueID() );
if( savedConfig != null )
@@ -124,7 +124,7 @@ public class E4KTunerConfigurationPanel extends JPanel
mSelectedConfig = mComboConfigurations.getItemAt( 0 );
//Store this config as the default for this tuner at this address
mResourceManager.getSettingsManager()
mSettingsManager
.setSelectedTunerConfiguration(
TunerType.ELONICS_E4000,
mController.getUniqueID(), mSelectedConfig );
@@ -168,7 +168,7 @@ public class E4KTunerConfigurationPanel extends JPanel
/* Reset this named config as the assigned config for this
* tuner */
mResourceManager.getSettingsManager()
mSettingsManager
.setSelectedTunerConfiguration(
TunerType.ELONICS_E4000,
mController.getUniqueID(), mSelectedConfig );
@@ -542,7 +542,7 @@ public class E4KTunerConfigurationPanel extends JPanel
public void actionPerformed( ActionEvent e )
{
TunerConfiguration config =
mResourceManager.getSettingsManager()
mSettingsManager
.addNewTunerConfiguration(
TunerType.ELONICS_E4000,
"New Configuration" );
@@ -582,7 +582,7 @@ public class E4KTunerConfigurationPanel extends JPanel
if( n == JOptionPane.YES_OPTION )
{
mResourceManager.getSettingsManager()
mSettingsManager
.deleteTunerConfiguration( selected );
mComboConfigurations.setModel( getModel() );
@@ -623,7 +623,7 @@ public class E4KTunerConfigurationPanel extends JPanel
mComboSampleRate.setSelectedItem( mSelectedConfig.getSampleRate() );
mResourceManager.getSettingsManager().setSelectedTunerConfiguration(
mSettingsManager.setSelectedTunerConfiguration(
TunerType.ELONICS_E4000, mController.getUniqueID(), config );
}
catch ( SourceException e1 )
@@ -647,7 +647,7 @@ public class E4KTunerConfigurationPanel extends JPanel
private ComboBoxModel<E4KTunerConfiguration> getModel()
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
mSettingsManager
.getTunerConfigurations( TunerType.ELONICS_E4000 );
DefaultComboBoxModel<E4KTunerConfiguration> model =
@@ -667,7 +667,7 @@ public class E4KTunerConfigurationPanel extends JPanel
private E4KTunerConfiguration getNamedConfiguration( String name )
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
mSettingsManager
.getTunerConfigurations( TunerType.ELONICS_E4000 );
for( TunerConfiguration config: configs )
@@ -686,6 +686,6 @@ public class E4KTunerConfigurationPanel extends JPanel
*/
private void save()
{
mResourceManager.getSettingsManager().save();
mSettingsManager.save();
}
}

View File

@@ -30,11 +30,11 @@ import org.usb4java.DeviceHandle;
import org.usb4java.LibUsb;
import org.usb4java.LibUsbException;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerConfiguration;
import source.tuner.TunerType;
import source.tuner.rtl.RTL2832TunerController;
import controller.ResourceManager;
import controller.ThreadPoolManager;
public class E4KTunerController extends RTL2832TunerController
@@ -252,11 +252,11 @@ public class E4KTunerController extends RTL2832TunerController
}
}
public JPanel getEditor( ResourceManager resourceManager )
public JPanel getEditor( SettingsManager settingsManager )
{
if( mEditor == null )
{
mEditor = new E4KTunerEditorPanel( this, resourceManager );
mEditor = new E4KTunerEditorPanel( this, settingsManager );
}
return mEditor;

View File

@@ -30,17 +30,16 @@ import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.frequency.FrequencyChangeEvent;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import source.tuner.frequency.IFrequencyChangeProcessor;
import source.tuner.rtl.RTL2832InfoPanel;
import com.jidesoft.swing.JideTabbedPane;
import controller.ResourceManager;
public class E4KTunerEditorPanel extends JPanel implements FrequencyChangeListener
public class E4KTunerEditorPanel extends JPanel implements IFrequencyChangeProcessor
{
private final static Logger mLog =
LoggerFactory.getLogger( E4KTunerEditorPanel.class );
@@ -48,15 +47,15 @@ public class E4KTunerEditorPanel extends JPanel implements FrequencyChangeListen
private static final long serialVersionUID = 1L;
private E4KTunerController mController;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
private JFrequencyControl mFrequencyControl;
public E4KTunerEditorPanel( E4KTunerController controller,
ResourceManager resourceManager )
SettingsManager settingsManager )
{
mController = controller;
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
initGUI();
}
@@ -84,7 +83,7 @@ public class E4KTunerEditorPanel extends JPanel implements FrequencyChangeListen
tabs.setForeground( Color.BLACK );
tabs.addTab( "Configuration",
new E4KTunerConfigurationPanel( mResourceManager, mController ) );
new E4KTunerConfigurationPanel( mSettingsManager, mController ) );
tabs.addTab( "Info", new RTL2832InfoPanel( mController ) );
@@ -98,7 +97,7 @@ public class E4KTunerEditorPanel extends JPanel implements FrequencyChangeListen
@Override
public void frequencyChanged( FrequencyChangeEvent event )
{
if( event.getEvent() == Event.FREQUENCY_CHANGE_NOTIFICATION )
if( event.getEvent() == Event.NOTIFICATION_FREQUENCY_CHANGE )
{
final long frequency = event.getValue().longValue();

View File

@@ -48,6 +48,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.usb4java.LibUsbException;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerConfiguration;
import source.tuner.TunerConfigurationAssignment;
@@ -57,7 +58,6 @@ import source.tuner.rtl.r820t.R820TTunerController.R820TGain;
import source.tuner.rtl.r820t.R820TTunerController.R820TLNAGain;
import source.tuner.rtl.r820t.R820TTunerController.R820TMixerGain;
import source.tuner.rtl.r820t.R820TTunerController.R820TVGAGain;
import controller.ResourceManager;
public class R820TTunerConfigurationPanel extends JPanel
{
@@ -67,7 +67,7 @@ public class R820TTunerConfigurationPanel extends JPanel
private static final long serialVersionUID = 1L;
private static final R820TGain DEFAULT_GAIN = R820TGain.GAIN_279;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
private R820TTunerController mController;
private R820TTunerConfiguration mSelectedConfig;
@@ -86,10 +86,10 @@ public class R820TTunerConfigurationPanel extends JPanel
private JComboBox<SampleRate> mComboSampleRate;
public R820TTunerConfigurationPanel( ResourceManager resourceManager,
public R820TTunerConfigurationPanel( SettingsManager settingsManager,
R820TTunerController controller )
{
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
mController = controller;
init();
@@ -110,8 +110,8 @@ public class R820TTunerConfigurationPanel extends JPanel
mComboConfigurations.setModel( getModel() );
/* Determine which tuner configuration should be selected/displayed */
TunerConfigurationAssignment savedConfig = mResourceManager
.getSettingsManager().getSelectedTunerConfiguration(
TunerConfigurationAssignment savedConfig = mSettingsManager
.getSelectedTunerConfiguration(
TunerType.RAFAELMICRO_R820T, mController.getUniqueID() );
if( savedConfig != null )
@@ -126,7 +126,7 @@ public class R820TTunerConfigurationPanel extends JPanel
mSelectedConfig = mComboConfigurations.getItemAt( 0 );
//Store this config as the default for this tuner at this address
mResourceManager.getSettingsManager()
mSettingsManager
.setSelectedTunerConfiguration(
TunerType.RAFAELMICRO_R820T,
mController.getUniqueID(), mSelectedConfig );
@@ -549,7 +549,7 @@ public class R820TTunerConfigurationPanel extends JPanel
public void actionPerformed( ActionEvent e )
{
TunerConfiguration config =
mResourceManager.getSettingsManager()
mSettingsManager
.addNewTunerConfiguration(
TunerType.RAFAELMICRO_R820T,
"New Configuration" );
@@ -589,7 +589,7 @@ public class R820TTunerConfigurationPanel extends JPanel
if( n == JOptionPane.YES_OPTION )
{
mResourceManager.getSettingsManager()
mSettingsManager
.deleteTunerConfiguration( selected );
mComboConfigurations.setModel( getModel() );
@@ -630,7 +630,7 @@ public class R820TTunerConfigurationPanel extends JPanel
mComboSampleRate.setSelectedItem( mSelectedConfig.getSampleRate() );
mResourceManager.getSettingsManager().setSelectedTunerConfiguration(
mSettingsManager.setSelectedTunerConfiguration(
TunerType.RAFAELMICRO_R820T, mController.getUniqueID(), config );
}
catch ( SourceException e1 )
@@ -654,7 +654,7 @@ public class R820TTunerConfigurationPanel extends JPanel
private ComboBoxModel<R820TTunerConfiguration> getModel()
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
mSettingsManager
.getTunerConfigurations( TunerType.RAFAELMICRO_R820T );
DefaultComboBoxModel<R820TTunerConfiguration> model =
@@ -674,7 +674,7 @@ public class R820TTunerConfigurationPanel extends JPanel
private R820TTunerConfiguration getNamedConfiguration( String name )
{
ArrayList<TunerConfiguration> configs =
mResourceManager.getSettingsManager()
mSettingsManager
.getTunerConfigurations( TunerType.RAFAELMICRO_R820T );
for( TunerConfiguration config: configs )
@@ -693,6 +693,6 @@ public class R820TTunerConfigurationPanel extends JPanel
*/
private void save()
{
mResourceManager.getSettingsManager().save();
mSettingsManager.save();
}
}

View File

@@ -33,11 +33,11 @@ import org.usb4java.Device;
import org.usb4java.DeviceDescriptor;
import org.usb4java.LibUsbException;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.TunerConfiguration;
import source.tuner.TunerType;
import source.tuner.rtl.RTL2832TunerController;
import controller.ResourceManager;
import controller.ThreadPoolManager;
public class R820TTunerController extends RTL2832TunerController
@@ -139,11 +139,11 @@ public class R820TTunerController extends RTL2832TunerController
/**
* Controller gui editor component for this tuner
*/
public JPanel getEditor( ResourceManager resourceManager )
public JPanel getEditor( SettingsManager settingsManager )
{
if( mEditor == null )
{
mEditor = new R820TTunerEditorPanel( this, resourceManager );
mEditor = new R820TTunerEditorPanel( this, settingsManager );
}
return mEditor;

View File

@@ -30,17 +30,16 @@ import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import source.SourceException;
import source.tuner.frequency.FrequencyChangeEvent;
import source.tuner.frequency.FrequencyChangeListener;
import source.tuner.frequency.FrequencyChangeEvent.Event;
import source.tuner.frequency.IFrequencyChangeProcessor;
import source.tuner.rtl.RTL2832InfoPanel;
import com.jidesoft.swing.JideTabbedPane;
import controller.ResourceManager;
public class R820TTunerEditorPanel extends JPanel implements FrequencyChangeListener
public class R820TTunerEditorPanel extends JPanel implements IFrequencyChangeProcessor
{
private final static Logger mLog =
LoggerFactory.getLogger( R820TTunerEditorPanel.class );
@@ -48,15 +47,15 @@ public class R820TTunerEditorPanel extends JPanel implements FrequencyChangeList
private static final long serialVersionUID = 1L;
private R820TTunerController mController;
private ResourceManager mResourceManager;
private SettingsManager mSettingsManager;
private JFrequencyControl mFrequencyControl;
public R820TTunerEditorPanel( R820TTunerController controller,
ResourceManager resourceManager )
SettingsManager settingsManager )
{
mController = controller;
mResourceManager = resourceManager;
mSettingsManager = settingsManager;
initGUI();
}
@@ -83,7 +82,7 @@ public class R820TTunerEditorPanel extends JPanel implements FrequencyChangeList
tabs.setForeground( Color.BLACK );
tabs.addTab( "Configuration",
new R820TTunerConfigurationPanel( mResourceManager, mController ) );
new R820TTunerConfigurationPanel( mSettingsManager, mController ) );
tabs.addTab( "Info", new RTL2832InfoPanel( mController ) );
@@ -97,7 +96,7 @@ public class R820TTunerEditorPanel extends JPanel implements FrequencyChangeList
@Override
public void frequencyChanged( FrequencyChangeEvent event )
{
if( event.getEvent() == Event.FREQUENCY_CHANGE_NOTIFICATION )
if( event.getEvent() == Event.NOTIFICATION_FREQUENCY_CHANGE )
{
final long frequency = event.getValue().longValue();