mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 16:47:31 -05:00
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:
@@ -6,8 +6,8 @@ import sample.complex.ComplexBuffer;
|
||||
|
||||
public abstract class ComplexSource extends Source implements Provider<ComplexBuffer>
|
||||
{
|
||||
public ComplexSource( String name )
|
||||
public ComplexSource()
|
||||
{
|
||||
super( name, SampleType.COMPLEX );
|
||||
super( SampleType.COMPLEX );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,14 +19,15 @@ package source;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
|
||||
import controller.channel.Channel;
|
||||
import controller.channel.ConfigurationValidationException;
|
||||
import source.config.SourceConfiguration;
|
||||
import controller.ResourceManager;
|
||||
|
||||
public class EmptySourceEditor extends SourceEditor
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public EmptySourceEditor( ResourceManager resourceManager,
|
||||
public EmptySourceEditor( SourceManager resourceManager,
|
||||
SourceConfiguration config )
|
||||
{
|
||||
super( resourceManager, config );
|
||||
@@ -43,4 +44,18 @@ public class EmptySourceEditor extends SourceEditor
|
||||
JLabel selectLabel = new JLabel( "Please select a source" );
|
||||
add( selectLabel );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfiguration( Channel channel )
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateConfiguration() throws ConfigurationValidationException
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
package source;
|
||||
|
||||
import sample.Provider;
|
||||
import sample.SampleType;
|
||||
|
||||
public abstract class FloatSource extends Source implements Provider<Float>
|
||||
{
|
||||
public FloatSource( String name )
|
||||
{
|
||||
super( name, SampleType.REAL );
|
||||
}
|
||||
}
|
||||
@@ -7,8 +7,8 @@ import sample.real.RealBuffer;
|
||||
|
||||
public abstract class RealSource extends Source implements Provider<RealBuffer>
|
||||
{
|
||||
public RealSource( String name )
|
||||
public RealSource()
|
||||
{
|
||||
super( name, SampleType.REAL );
|
||||
super( SampleType.REAL );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,27 +17,21 @@
|
||||
******************************************************************************/
|
||||
package source;
|
||||
|
||||
import module.Module;
|
||||
import sample.SampleType;
|
||||
|
||||
/**
|
||||
* Abstract class to define the minimum functionality of a sample data provider.
|
||||
*/
|
||||
public abstract class Source
|
||||
public abstract class Source extends Module
|
||||
{
|
||||
protected String mName;
|
||||
protected SampleType mSampleType;
|
||||
|
||||
public Source( String name, SampleType sampleType )
|
||||
public Source( SampleType sampleType )
|
||||
{
|
||||
mName = name;
|
||||
mSampleType = sampleType;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return mName;
|
||||
}
|
||||
|
||||
public abstract int getSampleRate() throws SourceException;
|
||||
|
||||
public abstract long getFrequency() throws SourceException;
|
||||
|
||||
@@ -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
|
||||
@@ -29,7 +29,8 @@ import net.miginfocom.swing.MigLayout;
|
||||
import source.config.SourceConfigFactory;
|
||||
import source.config.SourceConfiguration;
|
||||
import controller.channel.AbstractChannelEditor;
|
||||
import controller.channel.ChannelNode;
|
||||
import controller.channel.Channel;
|
||||
import controller.channel.ConfigurationValidationException;
|
||||
|
||||
public class SourceComponentEditor extends AbstractChannelEditor
|
||||
{
|
||||
@@ -37,10 +38,13 @@ public class SourceComponentEditor extends AbstractChannelEditor
|
||||
|
||||
private JComboBox<SourceType> mComboSources;
|
||||
private SourceEditor mEditor;
|
||||
private SourceManager mSourceManager;
|
||||
|
||||
public SourceComponentEditor( ChannelNode channelNode )
|
||||
public SourceComponentEditor( SourceManager sourceManager, Channel channel )
|
||||
{
|
||||
super( channelNode );
|
||||
super( channel );
|
||||
|
||||
mSourceManager = sourceManager;
|
||||
|
||||
setLayout( new MigLayout( "fill,wrap 2", "[right,grow][grow]", "[][][grow]" ) );
|
||||
|
||||
@@ -57,11 +61,9 @@ public class SourceComponentEditor extends AbstractChannelEditor
|
||||
{
|
||||
SourceConfiguration config;
|
||||
|
||||
if( selected == mChannelNode.getChannel()
|
||||
.getSourceConfiguration().getSourceType() )
|
||||
if( selected == mChannel.getSourceConfiguration().getSourceType() )
|
||||
{
|
||||
config = mChannelNode.getChannel()
|
||||
.getSourceConfiguration();
|
||||
config = mChannel.getSourceConfiguration();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -76,8 +78,7 @@ public class SourceComponentEditor extends AbstractChannelEditor
|
||||
}
|
||||
|
||||
//Change to the new one
|
||||
mEditor = SourceEditorFactory.getPanel(
|
||||
mChannelNode.getModel().getResourceManager(), config );
|
||||
mEditor = mSourceManager.getPanel( config );
|
||||
|
||||
//Add it to the jpanel
|
||||
add( mEditor, "span 2" );
|
||||
@@ -105,10 +106,10 @@ public class SourceComponentEditor extends AbstractChannelEditor
|
||||
{
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
public void run()
|
||||
{
|
||||
mComboSources.setSelectedItem(
|
||||
mChannelNode.getChannel()
|
||||
.getSourceConfiguration().getSourceType() );
|
||||
mChannel.getSourceConfiguration().getSourceType() );
|
||||
|
||||
mComboSources.requestFocus();
|
||||
|
||||
@@ -123,7 +124,20 @@ public class SourceComponentEditor extends AbstractChannelEditor
|
||||
mEditor.save();
|
||||
|
||||
//Let the calling save method send the config change event
|
||||
mChannelNode.getChannel()
|
||||
.setSourceConfiguration( mEditor.getConfig() );
|
||||
mChannel.setSourceConfiguration( mEditor.getConfig() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfiguration( Channel channel )
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateConfiguration() throws ConfigurationValidationException
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,19 +18,18 @@
|
||||
package source;
|
||||
|
||||
import source.config.SourceConfiguration;
|
||||
import controller.Editor;
|
||||
import controller.ResourceManager;
|
||||
import controller.channel.ChannelConfigurationEditor;
|
||||
|
||||
public abstract class SourceEditor extends Editor
|
||||
public abstract class SourceEditor extends ChannelConfigurationEditor
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
protected ResourceManager mResourceManager;
|
||||
protected SourceManager mSourceManager;
|
||||
protected SourceConfiguration mConfig;
|
||||
|
||||
public SourceEditor( ResourceManager resourceManager, SourceConfiguration config )
|
||||
public SourceEditor( SourceManager sourceManager, SourceConfiguration config )
|
||||
{
|
||||
mResourceManager = resourceManager;
|
||||
mSourceManager = sourceManager;
|
||||
mConfig = config;
|
||||
}
|
||||
|
||||
@@ -38,9 +37,9 @@ public abstract class SourceEditor extends Editor
|
||||
{
|
||||
return mConfig;
|
||||
}
|
||||
|
||||
public ResourceManager getResourceManager()
|
||||
|
||||
protected SourceManager getSourceManager()
|
||||
{
|
||||
return mResourceManager;
|
||||
return mSourceManager;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* SDR Trunk
|
||||
* Copyright (C) 2014 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/>
|
||||
******************************************************************************/
|
||||
package source;
|
||||
|
||||
import source.config.SourceConfiguration;
|
||||
import source.mixer.MixerEditor;
|
||||
import source.recording.RecordingEditor;
|
||||
import source.tuner.TunerEditor;
|
||||
import controller.ResourceManager;
|
||||
|
||||
public class SourceEditorFactory
|
||||
{
|
||||
public static SourceEditor getPanel( ResourceManager resourceManager,
|
||||
SourceConfiguration config )
|
||||
{
|
||||
SourceEditor configuredPanel;
|
||||
|
||||
switch( config.getSourceType() )
|
||||
{
|
||||
case MIXER:
|
||||
configuredPanel = new MixerEditor( resourceManager, config );
|
||||
break;
|
||||
case TUNER:
|
||||
configuredPanel = new TunerEditor( resourceManager, config );
|
||||
break;
|
||||
case RECORDING:
|
||||
configuredPanel = new RecordingEditor( resourceManager, config );
|
||||
break;
|
||||
case NONE:
|
||||
default:
|
||||
configuredPanel = new EmptySourceEditor( resourceManager, config );
|
||||
break;
|
||||
}
|
||||
|
||||
return configuredPanel;
|
||||
}
|
||||
}
|
||||
@@ -17,27 +17,43 @@
|
||||
******************************************************************************/
|
||||
package source;
|
||||
|
||||
import settings.SettingsManager;
|
||||
import source.config.SourceConfiguration;
|
||||
import source.mixer.MixerEditor;
|
||||
import source.mixer.MixerManager;
|
||||
import controller.ResourceManager;
|
||||
import source.recording.RecordingEditor;
|
||||
import source.recording.RecordingSourceManager;
|
||||
import source.tuner.TunerEditor;
|
||||
import source.tuner.TunerManager;
|
||||
import controller.ThreadPoolManager;
|
||||
|
||||
public class SourceManager {
|
||||
/**
|
||||
* NOTE: each source will auto-start once a listener registers on it to
|
||||
* receive samples and should auto-stop once a listener de-registers
|
||||
*
|
||||
* Each channel object will handle the starting and stopping of each channel
|
||||
* processing chain.
|
||||
*
|
||||
* Source Manager will reach out to the MixerManager or the TunerManager
|
||||
* to get source objects to pass off to the channel object, as requested.
|
||||
*/
|
||||
|
||||
private ResourceManager mResourceManager;
|
||||
public class SourceManager
|
||||
{
|
||||
private MixerManager mMixerManager;
|
||||
private RecordingSourceManager mRecordingSourceManager;
|
||||
private TunerManager mTunerManager;
|
||||
|
||||
public SourceManager( ResourceManager resourceManager )
|
||||
public SourceManager( SettingsManager settingsManager,
|
||||
ThreadPoolManager threadPoolManager )
|
||||
{
|
||||
mResourceManager = resourceManager;
|
||||
mMixerManager = new MixerManager();
|
||||
mRecordingSourceManager = new RecordingSourceManager( settingsManager, threadPoolManager );
|
||||
mTunerManager = new TunerManager( mMixerManager, settingsManager, threadPoolManager );
|
||||
}
|
||||
|
||||
public MixerManager getMixerManager()
|
||||
{
|
||||
return mMixerManager;
|
||||
}
|
||||
|
||||
public RecordingSourceManager getRecordingSourceManager()
|
||||
{
|
||||
return mRecordingSourceManager;
|
||||
}
|
||||
|
||||
public TunerManager getTunerManager()
|
||||
{
|
||||
return mTunerManager;
|
||||
}
|
||||
|
||||
public Source getSource( SourceConfiguration config, int bandwidth )
|
||||
@@ -48,14 +64,13 @@ public class SourceManager {
|
||||
switch( config.getSourceType() )
|
||||
{
|
||||
case MIXER:
|
||||
retVal = MixerManager.getInstance().getSource( config );
|
||||
retVal = mMixerManager.getSource( config );
|
||||
break;
|
||||
case TUNER:
|
||||
retVal = mResourceManager.getTunerManager().getSource( config, bandwidth );
|
||||
retVal = mTunerManager.getSource( config, bandwidth );
|
||||
break;
|
||||
case RECORDING:
|
||||
retVal = mResourceManager.getRecordingSourceManager()
|
||||
.getSource( config, bandwidth );
|
||||
retVal = mRecordingSourceManager.getSource( config, bandwidth );
|
||||
case NONE:
|
||||
default:
|
||||
break;
|
||||
@@ -63,4 +78,28 @@ public class SourceManager {
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
public SourceEditor getPanel( SourceConfiguration config )
|
||||
{
|
||||
SourceEditor configuredPanel;
|
||||
|
||||
switch( config.getSourceType() )
|
||||
{
|
||||
case MIXER:
|
||||
configuredPanel = new MixerEditor( this, config );
|
||||
break;
|
||||
case TUNER:
|
||||
configuredPanel = new TunerEditor( this, config );
|
||||
break;
|
||||
case RECORDING:
|
||||
configuredPanel = new RecordingEditor( this, config );
|
||||
break;
|
||||
case NONE:
|
||||
default:
|
||||
configuredPanel = new EmptySourceEditor( this, config );
|
||||
break;
|
||||
}
|
||||
|
||||
return configuredPanel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,11 +24,13 @@ import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JLabel;
|
||||
|
||||
import controller.channel.Channel;
|
||||
import controller.channel.ConfigurationValidationException;
|
||||
import source.SourceEditor;
|
||||
import source.SourceManager;
|
||||
import source.config.SourceConfigMixer;
|
||||
import source.config.SourceConfiguration;
|
||||
import source.mixer.MixerManager.InputMixerConfiguration;
|
||||
import controller.ResourceManager;
|
||||
|
||||
public class MixerEditor extends SourceEditor
|
||||
{
|
||||
@@ -38,10 +40,10 @@ public class MixerEditor extends SourceEditor
|
||||
protected Mixer.Info mSelectedMixer = null;
|
||||
|
||||
|
||||
public MixerEditor( ResourceManager resourceManager,
|
||||
public MixerEditor( SourceManager sourceManager,
|
||||
SourceConfiguration config )
|
||||
{
|
||||
super( resourceManager, config );
|
||||
super( sourceManager, config );
|
||||
|
||||
initGUI();
|
||||
}
|
||||
@@ -105,7 +107,8 @@ public class MixerEditor extends SourceEditor
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
InputMixerConfiguration[] mixers = MixerManager.getInstance().getInputMixers();
|
||||
InputMixerConfiguration[] mixers = mSourceManager
|
||||
.getMixerManager().getInputMixers();
|
||||
|
||||
mComboMixers.setModel(
|
||||
new DefaultComboBoxModel<InputMixerConfiguration>( mixers ) );
|
||||
@@ -155,4 +158,18 @@ public class MixerEditor extends SourceEditor
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfiguration( Channel channel )
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateConfiguration() throws ConfigurationValidationException
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,27 +49,15 @@ public class MixerManager
|
||||
private final static Logger mLog =
|
||||
LoggerFactory.getLogger( MixerManager.class );
|
||||
|
||||
private static MixerManager sInstance = null;
|
||||
|
||||
private List<InputMixerConfiguration> mInputMixers = new ArrayList<>();
|
||||
private List<MixerChannelConfiguration> mOutputMixers = new ArrayList<>();
|
||||
private HashMap<String,MixerTunerDataLine> mMixerTuners = new HashMap<>();
|
||||
|
||||
private MixerManager()
|
||||
public MixerManager()
|
||||
{
|
||||
loadMixers();
|
||||
}
|
||||
|
||||
public static MixerManager getInstance()
|
||||
{
|
||||
if( sInstance == null )
|
||||
{
|
||||
sInstance = new MixerManager();
|
||||
}
|
||||
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
public RealMixerSource getSource( SourceConfiguration config )
|
||||
{
|
||||
RealMixerSource retVal = null;
|
||||
@@ -108,7 +96,6 @@ public class MixerManager
|
||||
{
|
||||
return new RealMixerSource( dataLine,
|
||||
AudioFormats.PCM_SIGNED_48KHZ_16BITS_MONO,
|
||||
mixerName,
|
||||
new ShortAdapter() );
|
||||
}
|
||||
}
|
||||
@@ -137,7 +124,7 @@ public class MixerManager
|
||||
{
|
||||
return new RealMixerSource( dataLine,
|
||||
AudioFormats.PCM_SIGNED_48KHZ_16BITS_STEREO,
|
||||
mixerName, new ChannelShortAdapter(
|
||||
new ChannelShortAdapter(
|
||||
mixerConfig.getChannel() ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,18 +72,30 @@ public class RealMixerSource extends RealSource
|
||||
* the left/right stereo channels are inverted.
|
||||
*/
|
||||
public RealMixerSource( TargetDataLine targetDataLine,
|
||||
AudioFormat format,
|
||||
String name,
|
||||
ISampleAdapter sampleAdapter )
|
||||
AudioFormat format,
|
||||
ISampleAdapter sampleAdapter )
|
||||
{
|
||||
super( name );
|
||||
|
||||
mTargetDataLine = targetDataLine;
|
||||
mAudioFormat = format;
|
||||
mSampleAdapter = sampleAdapter;
|
||||
}
|
||||
|
||||
public void setListener( Listener<RealBuffer> listener )
|
||||
@Override
|
||||
public void reset()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop()
|
||||
{
|
||||
}
|
||||
|
||||
public void setListener( Listener<RealBuffer> listener )
|
||||
{
|
||||
mSampleListeners.add( listener );
|
||||
|
||||
@@ -92,7 +104,7 @@ public class RealMixerSource extends RealSource
|
||||
{
|
||||
Thread thread = new Thread( mBufferReader );
|
||||
thread.setDaemon( true );
|
||||
thread.setName( getName() + " Sample Reader" );
|
||||
thread.setName( "Sample Reader" );
|
||||
thread.start();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,21 +4,20 @@ import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.RejectedExecutionException;
|
||||
|
||||
import settings.SettingsManager;
|
||||
import source.SourceException;
|
||||
import source.tuner.TunerChannel;
|
||||
import source.tuner.TunerChannelProvider;
|
||||
import source.tuner.ITunerChannelProvider;
|
||||
import source.tuner.TunerChannelSource;
|
||||
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;
|
||||
|
||||
public class Recording implements Comparable<Recording>,
|
||||
FrequencyChangeListener,
|
||||
TunerChannelProvider
|
||||
IFrequencyChangeProcessor,
|
||||
ITunerChannelProvider
|
||||
{
|
||||
private ResourceManager mResourceManager;
|
||||
private RecordingConfiguration mConfiguration;
|
||||
|
||||
private ArrayList<TunerChannelSource> mTunerChannels =
|
||||
@@ -26,10 +25,12 @@ public class Recording implements Comparable<Recording>,
|
||||
|
||||
private long mCenterFrequency;
|
||||
|
||||
public Recording( ResourceManager resourceManager,
|
||||
private SettingsManager mSettingsManager;
|
||||
|
||||
public Recording( SettingsManager settingsManager,
|
||||
RecordingConfiguration configuration )
|
||||
{
|
||||
mResourceManager = resourceManager;
|
||||
mSettingsManager = settingsManager;
|
||||
mConfiguration = configuration;
|
||||
mCenterFrequency = mConfiguration.getCenterFrequency();
|
||||
}
|
||||
@@ -37,7 +38,7 @@ public class Recording implements Comparable<Recording>,
|
||||
public void setAlias( String alias )
|
||||
{
|
||||
mConfiguration.setAlias( alias );
|
||||
mResourceManager.getSettingsManager().save();
|
||||
mSettingsManager.save();
|
||||
}
|
||||
|
||||
public void setRecordingFile( File file ) throws SourceException
|
||||
@@ -50,7 +51,7 @@ public class Recording implements Comparable<Recording>,
|
||||
}
|
||||
|
||||
mConfiguration.setFilePath( file.getAbsolutePath() );
|
||||
mResourceManager.getSettingsManager().save();
|
||||
mSettingsManager.save();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -90,13 +91,13 @@ public class Recording implements Comparable<Recording>,
|
||||
@Override
|
||||
public void frequencyChanged( FrequencyChangeEvent event )
|
||||
{
|
||||
if( event.getEvent() == Event.FREQUENCY_CHANGE_NOTIFICATION )
|
||||
if( event.getEvent() == Event.NOTIFICATION_FREQUENCY_CHANGE )
|
||||
{
|
||||
long frequency = event.getValue().longValue();
|
||||
|
||||
mConfiguration.setCenterFrequency( frequency );
|
||||
|
||||
mResourceManager.getSettingsManager().save();
|
||||
mSettingsManager.save();
|
||||
|
||||
mCenterFrequency = frequency;
|
||||
|
||||
|
||||
@@ -26,11 +26,13 @@ import javax.swing.JComboBox;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import controller.channel.Channel;
|
||||
import controller.channel.ConfigurationValidationException;
|
||||
import source.SourceEditor;
|
||||
import source.SourceManager;
|
||||
import source.config.SourceConfigRecording;
|
||||
import source.config.SourceConfigTuner;
|
||||
import source.config.SourceConfiguration;
|
||||
import controller.ResourceManager;
|
||||
|
||||
public class RecordingEditor extends SourceEditor
|
||||
{
|
||||
@@ -38,10 +40,9 @@ public class RecordingEditor extends SourceEditor
|
||||
private JComboBox<Recording> mComboRecordings;
|
||||
private JFrequencyControl mFrequencyControl;
|
||||
|
||||
public RecordingEditor( ResourceManager resourceManager,
|
||||
SourceConfiguration config )
|
||||
public RecordingEditor( SourceManager sourceManager, SourceConfiguration config )
|
||||
{
|
||||
super( resourceManager, config );
|
||||
super( sourceManager, config );
|
||||
|
||||
initGUI();
|
||||
}
|
||||
@@ -92,7 +93,7 @@ public class RecordingEditor extends SourceEditor
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
List<Recording> recordings = getResourceManager()
|
||||
List<Recording> recordings = getSourceManager()
|
||||
.getRecordingSourceManager().getRecordings();
|
||||
|
||||
mComboRecordings.setModel(
|
||||
@@ -105,7 +106,7 @@ public class RecordingEditor extends SourceEditor
|
||||
|
||||
if( recordingAlias != null )
|
||||
{
|
||||
Recording selected = mResourceManager
|
||||
Recording selected = mSourceManager
|
||||
.getRecordingSourceManager()
|
||||
.getRecordingFromAlias( recordingAlias );
|
||||
|
||||
@@ -117,4 +118,18 @@ public class RecordingEditor extends SourceEditor
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfiguration( Channel channel )
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateConfiguration() throws ConfigurationValidationException
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,17 +24,28 @@ import java.util.List;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPopupMenu;
|
||||
|
||||
import settings.SettingsManager;
|
||||
import source.SourceManager;
|
||||
import controller.BaseNode;
|
||||
|
||||
public class RecordingGroupNode extends BaseNode
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public RecordingGroupNode()
|
||||
|
||||
private SettingsManager mSettingsManager;
|
||||
|
||||
public RecordingGroupNode( SourceManager sourceManager, SettingsManager settingsManager )
|
||||
{
|
||||
super( null );
|
||||
super( sourceManager );
|
||||
|
||||
mSettingsManager = settingsManager;
|
||||
}
|
||||
|
||||
private SourceManager getSourceManager()
|
||||
{
|
||||
return (SourceManager)getUserObject();
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return "Recordings [" + this.getChildCount() + "]";
|
||||
@@ -53,13 +64,12 @@ public class RecordingGroupNode extends BaseNode
|
||||
{
|
||||
RecordingConfiguration config = new RecordingConfiguration();
|
||||
|
||||
getModel().getResourceManager().getSettingsManager()
|
||||
.addRecordingConfiguration( config );
|
||||
mSettingsManager.addRecordingConfiguration( config );
|
||||
|
||||
Recording recording = getModel().getResourceManager()
|
||||
Recording recording = getSourceManager()
|
||||
.getRecordingSourceManager().addRecording( config );
|
||||
|
||||
RecordingNode node = new RecordingNode( recording );
|
||||
RecordingNode node = new RecordingNode( getSourceManager(), recording );
|
||||
|
||||
getModel().addNode( node, RecordingGroupNode.this, 0 );
|
||||
|
||||
@@ -76,12 +86,12 @@ public class RecordingGroupNode extends BaseNode
|
||||
|
||||
public void loadRecordings()
|
||||
{
|
||||
List<Recording> recordings = getModel().getResourceManager()
|
||||
List<Recording> recordings = getSourceManager()
|
||||
.getRecordingSourceManager().getRecordings();
|
||||
|
||||
for( Recording recording: recordings )
|
||||
{
|
||||
RecordingNode node = new RecordingNode( recording );
|
||||
RecordingNode node = new RecordingNode( getSourceManager(), recording );
|
||||
|
||||
getModel().addNode( node, this, 0 );
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPopupMenu;
|
||||
|
||||
import source.SourceManager;
|
||||
import controller.BaseNode;
|
||||
|
||||
public class RecordingNode extends BaseNode
|
||||
@@ -15,8 +16,10 @@ public class RecordingNode extends BaseNode
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private JPanel mEditor;
|
||||
|
||||
private SourceManager mSourceManager;
|
||||
|
||||
public RecordingNode( Recording recording )
|
||||
public RecordingNode( SourceManager sourceManager, Recording recording )
|
||||
{
|
||||
super( recording );
|
||||
}
|
||||
@@ -64,7 +67,7 @@ public class RecordingNode extends BaseNode
|
||||
}
|
||||
else
|
||||
{
|
||||
getModel().getResourceManager().getRecordingSourceManager()
|
||||
mSourceManager.getRecordingSourceManager()
|
||||
.removeRecording( getRecording() );
|
||||
|
||||
getModel().removeNodeFromParent( RecordingNode.this );
|
||||
|
||||
@@ -31,21 +31,23 @@ import source.config.SourceConfigRecording;
|
||||
import source.config.SourceConfiguration;
|
||||
import source.tuner.TunerChannel;
|
||||
import source.tuner.TunerChannelSource;
|
||||
import controller.ResourceManager;
|
||||
import controller.ThreadPoolManager;
|
||||
|
||||
public class RecordingSourceManager
|
||||
{
|
||||
private final static Logger mLog =
|
||||
LoggerFactory.getLogger( RecordingSourceManager.class );
|
||||
|
||||
private ResourceManager mResourceManager;
|
||||
|
||||
private ArrayList<Recording> mRecordings = new ArrayList<Recording>();
|
||||
|
||||
public RecordingSourceManager( ResourceManager resourceManager )
|
||||
private SettingsManager mSettingsManager;
|
||||
private ThreadPoolManager mThreadPoolManager;
|
||||
|
||||
public RecordingSourceManager( SettingsManager settingsManager,
|
||||
ThreadPoolManager threadPoolManager )
|
||||
{
|
||||
mResourceManager = resourceManager;
|
||||
|
||||
mSettingsManager = settingsManager;
|
||||
mThreadPoolManager = threadPoolManager;
|
||||
loadRecordings();
|
||||
}
|
||||
|
||||
@@ -71,9 +73,7 @@ public class RecordingSourceManager
|
||||
|
||||
if( recording != null )
|
||||
{
|
||||
retVal = recording.getChannel(
|
||||
mResourceManager.getThreadPoolManager(),
|
||||
tunerChannel );
|
||||
retVal = recording.getChannel( mThreadPoolManager, tunerChannel );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -116,7 +116,7 @@ public class RecordingSourceManager
|
||||
|
||||
public Recording addRecording( RecordingConfiguration config )
|
||||
{
|
||||
Recording recording = new Recording( mResourceManager, config );
|
||||
Recording recording = new Recording( mSettingsManager, config );
|
||||
|
||||
mRecordings.add( recording );
|
||||
|
||||
@@ -126,7 +126,7 @@ public class RecordingSourceManager
|
||||
public void removeRecording( Recording recording )
|
||||
{
|
||||
/* Remove the config from the settings manager */
|
||||
mResourceManager.getSettingsManager().removeRecordingConfiguration(
|
||||
mSettingsManager.removeRecordingConfiguration(
|
||||
recording.getRecordingConfiguration() );
|
||||
|
||||
mRecordings.remove( recording );
|
||||
@@ -134,24 +134,17 @@ public class RecordingSourceManager
|
||||
|
||||
private void loadRecordings()
|
||||
{
|
||||
if( mResourceManager != null )
|
||||
{
|
||||
SettingsManager settingsManager = mResourceManager.getSettingsManager();
|
||||
|
||||
if( settingsManager != null )
|
||||
{
|
||||
ArrayList<RecordingConfiguration> recordingConfigurations =
|
||||
settingsManager.getRecordingConfigurations();
|
||||
ArrayList<RecordingConfiguration> recordingConfigurations =
|
||||
mSettingsManager.getRecordingConfigurations();
|
||||
|
||||
mLog.info( "discovered [" + recordingConfigurations.size() + "] recording configurations" );
|
||||
|
||||
for( RecordingConfiguration config: recordingConfigurations )
|
||||
{
|
||||
Recording recording = new Recording( mResourceManager, config );
|
||||
|
||||
mRecordings.add( recording );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mLog.info( "RecordingSourceManager - discovered [" +
|
||||
recordingConfigurations.size() + "] recording configurations" );
|
||||
|
||||
for( RecordingConfiguration config: recordingConfigurations )
|
||||
{
|
||||
Recording recording = new Recording( mSettingsManager, config );
|
||||
|
||||
mRecordings.add( recording );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
135
src/source/tuner/frequency/DCTrackingFrequencyControl.java
Normal file
135
src/source/tuner/frequency/DCTrackingFrequencyControl.java
Normal 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 );
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package source.tuner.frequency;
|
||||
|
||||
public interface IFrequencyChangeProcessor
|
||||
{
|
||||
public void frequencyChanged( FrequencyChangeEvent event );
|
||||
}
|
||||
9
src/source/tuner/frequency/IFrequencyChangeProvider.java
Normal file
9
src/source/tuner/frequency/IFrequencyChangeProvider.java
Normal file
@@ -0,0 +1,9 @@
|
||||
package source.tuner.frequency;
|
||||
|
||||
import sample.Listener;
|
||||
|
||||
public interface IFrequencyChangeProvider
|
||||
{
|
||||
public void setFrequencyChangeListener( Listener<FrequencyChangeEvent> listener );
|
||||
public void removeFrequencyChangeListener();
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package source.tuner.frequency;
|
||||
|
||||
|
||||
public interface IFrequencyCorrectionController
|
||||
{
|
||||
public boolean hasFrequencyCorrectionControl();
|
||||
public FrequencyCorrectionControl getFrequencyCorrectionControl();
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -51,11 +51,42 @@ public class ComplexWaveSource extends ComplexSource implements IControllableFil
|
||||
|
||||
public ComplexWaveSource( File file ) throws IOException
|
||||
{
|
||||
super( file.getAbsolutePath() );
|
||||
|
||||
mFile = file;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset()
|
||||
{
|
||||
stop();
|
||||
start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start()
|
||||
{
|
||||
try
|
||||
{
|
||||
open();
|
||||
}
|
||||
catch ( IOException | UnsupportedAudioFileException e )
|
||||
{
|
||||
mLog.error( "Error starting complex wave source" );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop()
|
||||
{
|
||||
try
|
||||
{
|
||||
close();
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
mLog.error( "Error stopping complex wave source" );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getFrameCount() throws IOException
|
||||
{
|
||||
|
||||
@@ -52,11 +52,46 @@ public class RealWaveSource extends RealSource
|
||||
|
||||
public RealWaveSource( File file ) throws IOException
|
||||
{
|
||||
super( file.getAbsolutePath() );
|
||||
|
||||
mFile = file;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void reset()
|
||||
{
|
||||
stop();
|
||||
start();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void start()
|
||||
{
|
||||
try
|
||||
{
|
||||
open();
|
||||
}
|
||||
catch ( IOException | UnsupportedAudioFileException e )
|
||||
{
|
||||
mLog.error( "Error starting real wave source", e );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void stop()
|
||||
{
|
||||
try
|
||||
{
|
||||
close();
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
mLog.error( "Error stopping real wave source", e );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public long getFrameCount() throws IOException
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user