diff --git a/src/gui/control/JFrequencyControl.java b/src/gui/control/JFrequencyControl.java index 95b88249..cbc2c5b0 100644 --- a/src/gui/control/JFrequencyControl.java +++ b/src/gui/control/JFrequencyControl.java @@ -180,8 +180,8 @@ public class JFrequencyControl extends JPanel implements IFrequencyChangeProcess Iterator it = mProcessors.iterator(); - FrequencyChangeEvent event = - new FrequencyChangeEvent( Event.NOTIFICATION_FREQUENCY_CHANGE, mFrequency ); + FrequencyChangeEvent event = new FrequencyChangeEvent( + Event.REQUEST_FREQUENCY_CHANGE, mFrequency ); while( it.hasNext() ) { diff --git a/src/source/tuner/MixerTuner.java b/src/source/tuner/MixerTuner.java index 42786ca8..37f79bed 100644 --- a/src/source/tuner/MixerTuner.java +++ b/src/source/tuner/MixerTuner.java @@ -46,11 +46,12 @@ public abstract class MixerTuner extends Tuner implements Listener)this ); } - public MixerTuner( String name, + public MixerTuner( String name, + TunerController tunerController, MixerTunerDataLine mixerTuner, ISampleAdapter sampleAdapter ) { this( name, + tunerController, mixerTuner.getMixerTunerType(), mixerTuner.getTargetDataLine(), sampleAdapter ); diff --git a/src/source/tuner/Tuner.java b/src/source/tuner/Tuner.java index 0a0215f2..498d32f5 100644 --- a/src/source/tuner/Tuner.java +++ b/src/source/tuner/Tuner.java @@ -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 @@ -22,30 +22,25 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.RejectedExecutionException; -import javax.swing.JPanel; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sample.Listener; import sample.complex.ComplexBuffer; -import settings.SettingsManager; import source.SourceException; import source.tuner.configuration.TunerConfiguration; import source.tuner.frequency.FrequencyChangeEvent; -import source.tuner.frequency.FrequencyChangeEvent.Event; import source.tuner.frequency.IFrequencyChangeProcessor; /** * Tuner - provides tuner channel sources, representing a channel frequency */ -public abstract class Tuner implements IFrequencyChangeProcessor, - ITunerChannelProvider +public abstract class Tuner implements ITunerChannelProvider { private final static Logger mLog = LoggerFactory.getLogger( Tuner.class ); private String mName; - + private TunerController mTunerController; /** * Sample Listeners - these will typically be the DFT processor for spectral * display, or it will be one or more tuner channel sources @@ -53,15 +48,40 @@ public abstract class Tuner implements IFrequencyChangeProcessor, protected List> mSampleListeners = new CopyOnWriteArrayList<>(); - protected List mFrequencyChangeProcessors = - new CopyOnWriteArrayList<>(); - protected List> mTunerChangeListeners = new ArrayList<>(); - public Tuner( String name ) + public Tuner( String name, TunerController tunerController ) { mName = name; + mTunerController = tunerController; + + //Rebroadcast frequency and sample rate change events as tuner events + mTunerController.addListener( new IFrequencyChangeProcessor() + { + @Override + public void frequencyChanged( FrequencyChangeEvent event ) + { + switch( event.getEvent() ) + { + case NOTIFICATION_FREQUENCY_CHANGE: + broadcast( new TunerEvent( Tuner.this, + source.tuner.TunerEvent.Event.FREQUENCY )); + break; + case NOTIFICATION_SAMPLE_RATE_CHANGE: + broadcast( new TunerEvent( Tuner.this, + source.tuner.TunerEvent.Event.SAMPLE_RATE )); + break; + default: + break; + } + } + } ); + } + + public TunerController getTunerController() + { + return mTunerController; } public String toString() @@ -72,7 +92,6 @@ public abstract class Tuner implements IFrequencyChangeProcessor, public void dispose() { mSampleListeners.clear(); - mFrequencyChangeProcessors.clear(); } public void setName( String name ) @@ -189,32 +208,6 @@ public abstract class Tuner implements IFrequencyChangeProcessor, } } - /** - * Adds the frequency change listener to receive frequency and/or bandwidth - * change events - */ - public void addFrequencyChangeProcessor( IFrequencyChangeProcessor processor ) - { - mFrequencyChangeProcessors.add( processor ); - } - - /** - * Removes the frequency change listener - */ - public void removeFrequencyChangeProcessor( IFrequencyChangeProcessor processor ) - { - mFrequencyChangeProcessors.remove( processor ); - } - - /** - * Broadcasts a frequency change event to all registered listeners - */ - public void broadcastFrequencyChange( long frequency ) - { - broadcastFrequencyChangeEvent( - new FrequencyChangeEvent( Event.NOTIFICATION_FREQUENCY_CHANGE, frequency ) ); - } - /** * Registers the listener */ @@ -241,51 +234,4 @@ public abstract class Tuner implements IFrequencyChangeProcessor, listener.receive( event ); } } - - /** - * Broadcasts a sample rate change event to all registered listeners - */ - public void broadcastSampleRateChange( int sampleRate ) - { - broadcastFrequencyChangeEvent( - new FrequencyChangeEvent( Event.NOTIFICATION_SAMPLE_RATE_CHANGE, sampleRate ) ); - } - - /** - * Broadcasts actual sample rate change event to all registered listeners - */ - public void broadcastActualSampleRateChange( int actualSampleRate ) - { - broadcastFrequencyChangeEvent( - new FrequencyChangeEvent( Event.NOTIFICATION_SAMPLE_RATE_CHANGE, actualSampleRate ) ); - } - - /** - * Broadcasts a frequency change event to all registered listeners - */ - public void broadcastFrequencyChangeEvent( FrequencyChangeEvent event ) - { - for( IFrequencyChangeProcessor processor: mFrequencyChangeProcessors ) - { - processor.frequencyChanged( event ); - } - - if( event.getEvent() == Event.NOTIFICATION_FREQUENCY_CHANGE ) - { - broadcast( new TunerEvent( this, TunerEvent.Event.FREQUENCY ) ); - } - else if( event.getEvent() == Event.NOTIFICATION_SAMPLE_RATE_CHANGE ) - { - broadcast( new TunerEvent( this, TunerEvent.Event.SAMPLE_RATE ) ); - } - } - - /** - * Frequency change listener method. We receive change events from the - * controller and rebroadcast them to all registered listeners. - */ - public void frequencyChanged( FrequencyChangeEvent event ) - { - broadcastFrequencyChangeEvent( event ); - } } diff --git a/src/source/tuner/TunerChannelSource.java b/src/source/tuner/TunerChannelSource.java index fada5575..748a42fd 100644 --- a/src/source/tuner/TunerChannelSource.java +++ b/src/source/tuner/TunerChannelSource.java @@ -93,7 +93,7 @@ public class TunerChannelSource extends ComplexSource throws RejectedExecutionException, SourceException { mTuner = tuner; - mTuner.addListener( this ); + mTuner.getTunerController().addListener( (IFrequencyChangeProcessor)this ); mTunerChannel = tunerChannel; @@ -172,7 +172,7 @@ public class TunerChannelSource extends ComplexSource if( !mRunning.get() ) { /* Tell the tuner to release/unregister our resources */ - mTuner.removeFrequencyChangeProcessor( this ); + mTuner.getTunerController().removeListener( this ); mTuner = null; mTunerChannel = null; mBuffer = null; diff --git a/src/source/tuner/TunerController.java b/src/source/tuner/TunerController.java index 832b4b2f..21061552 100644 --- a/src/source/tuner/TunerController.java +++ b/src/source/tuner/TunerController.java @@ -26,12 +26,13 @@ import org.slf4j.LoggerFactory; import source.SourceException; import source.tuner.configuration.TunerConfiguration; +import source.tuner.frequency.FrequencyChangeEvent; +import source.tuner.frequency.FrequencyChangeEvent.Event; import source.tuner.frequency.FrequencyController; import source.tuner.frequency.FrequencyController.Tunable; import source.tuner.frequency.IFrequencyChangeProcessor; -import controller.ThreadPoolManager; -public abstract class TunerController implements Tunable +public abstract class TunerController implements Tunable, IFrequencyChangeProcessor { private final static Logger mLog = LoggerFactory.getLogger( TunerController.class ); @@ -73,8 +74,27 @@ public abstract class TunerController implements Tunable */ public abstract void apply( TunerConfiguration config ) throws SourceException; - - public int getBandwidth() + + /** + * Responds to requests to set the frequency + */ + @Override + public void frequencyChanged( FrequencyChangeEvent event ) + { + if( event.getEvent() == Event.REQUEST_FREQUENCY_CHANGE ) + { + try + { + setFrequency( event.getValue().longValue() ); + } + catch ( SourceException e ) + { + mLog.error( "Error setting frequency from external controller", e ); + } + } + } + + public int getBandwidth() { return mFrequencyController.getBandwidth(); } diff --git a/src/source/tuner/TunerEditor.java b/src/source/tuner/TunerEditor.java index 18799074..0b7f9514 100644 --- a/src/source/tuner/TunerEditor.java +++ b/src/source/tuner/TunerEditor.java @@ -19,6 +19,7 @@ import net.miginfocom.swing.MigLayout; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import source.SourceException; import source.tuner.configuration.TunerConfiguration; import source.tuner.configuration.TunerConfigurationModel; @@ -33,7 +34,6 @@ public class TunerEditor extends Editor private TunerConfigurationModel mTunerConfigurationModel; private JTable mTunerConfigurationTable; private TableRowSorter mRowSorter; - private ConfigurationRowFilter mRowFilter = new ConfigurationRowFilter(); private JFrequencyControl mFrequencyControl = new JFrequencyControl(); public TunerEditor( TunerConfigurationModel tunerConfigurationModel ) @@ -51,14 +51,8 @@ public class TunerEditor extends Editor "[grow,fill]", "[][][grow,fill][]" ) ); listPanel.add( mFrequencyControl ); -// mFrequencyControl.addListener( this ); -// /* Add frequency control as frequency change listener. */ -// mController.addListener( mFrequencyControl ); -// mFrequencyControl.setFrequency( mController.getFrequency(), false ); - mTunerConfigurationTable = new JTable( mTunerConfigurationModel ); mRowSorter = new TableRowSorter<>( mTunerConfigurationModel ); - mRowSorter.setRowFilter( mRowFilter ); mTunerConfigurationTable.setRowSorter( mRowSorter ); listPanel.add( new JLabel( "Tuner Configurations" ) ); @@ -95,16 +89,25 @@ public class TunerEditor extends Editor @Override public void save() { + //Unused } @Override public void setItem( Tuner tuner ) { + //Cleanup previously selected tuner + if( hasItem() ) + { + Tuner previous = getItem(); + previous.getTunerController().removeListener( mFrequencyControl ); + mFrequencyControl.removeListener( previous.getTunerController() ); + } + super.setItem( tuner ); if( hasItem() ) { - mRowFilter.setTunerType( tuner.getTunerType() ); + mRowSorter.setRowFilter( new ConfigurationRowFilter( tuner.getTunerType() ) ); TunerConfiguration assigned = mTunerConfigurationModel .getTunerConfiguration( tuner.getTunerType(), tuner.getUniqueID() ); @@ -113,31 +116,43 @@ public class TunerEditor extends Editor if( modelIndex >= 0 ) { - int viewIndex = mTunerConfigurationTable.convertRowIndexToView( modelIndex ); + int viewIndex = mTunerConfigurationTable + .convertRowIndexToView( modelIndex ); if( viewIndex >= 0 ) { - mTunerConfigurationTable.setRowSelectionInterval( viewIndex, viewIndex ); + mTunerConfigurationTable + .setRowSelectionInterval( viewIndex, viewIndex ); } } + + //Link frequency control to the tuner + mFrequencyControl.addListener( tuner.getTunerController() ); + + //Link tuner to frequency control + tuner.getTunerController().addListener( mFrequencyControl ); + + //Set the displayed frequency without adjusting the tuner's frequency + try + { + mFrequencyControl.setFrequency( tuner.getFrequency(), false ); + } + catch( SourceException e ) + { + mLog.debug( "Couldn't get frequency from tuner: " + tuner.getUniqueID() ); + } } else { - mRowFilter.setTunerType( null ); + mRowSorter.setRowFilter( null ); } - - mRowSorter.setRowFilter( mRowFilter ); } public class ConfigurationRowFilter extends RowFilter { private TunerType mTunerType; - public ConfigurationRowFilter() - { - } - - public void setTunerType( TunerType type ) + public ConfigurationRowFilter( TunerType type ) { mTunerType = type; } @@ -146,22 +161,10 @@ public class TunerEditor extends Editor public boolean include( javax.swing.RowFilter.Entry entry ) { - if( mTunerType == null ) - { - return true; - } - else - { - TunerConfigurationModel model = entry.getModel(); - TunerConfiguration config = model.getTunerConfiguration( entry.getIdentifier() ); - - if( config != null ) - { - return config.getTunerType() == mTunerType; - } - } - - return false; + TunerConfiguration config = entry.getModel() + .getTunerConfiguration( entry.getIdentifier() ); + + return config != null && config.getTunerType() == mTunerType; } } diff --git a/src/source/tuner/TunerEvent.java b/src/source/tuner/TunerEvent.java index cccdc8fa..f34a1fd4 100644 --- a/src/source/tuner/TunerEvent.java +++ b/src/source/tuner/TunerEvent.java @@ -29,6 +29,6 @@ public class TunerEvent FREQUENCY, SAMPLE_RATE, REQUEST_MAIN_SPECTRAL_DISPLAY, - REQUEST_SECONDARY_SPECTRAL_DISPLAY; + REQUEST_NEW_SPECTRAL_DISPLAY; } } diff --git a/src/source/tuner/TunerModel.java b/src/source/tuner/TunerModel.java index 14ca0a3d..a4505c61 100644 --- a/src/source/tuner/TunerModel.java +++ b/src/source/tuner/TunerModel.java @@ -6,6 +6,8 @@ import java.util.Iterator; import java.util.List; import java.util.concurrent.RejectedExecutionException; +import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.table.AbstractTableModel; import org.slf4j.Logger; @@ -25,16 +27,17 @@ public class TunerModel extends AbstractTableModel implements Listener mTuners = new ArrayList<>(); private List> mTunerEventListeners = new ArrayList<>(); @@ -183,7 +186,7 @@ public class TunerModel extends AbstractTableModel implements Listener case REQUEST_MAIN_SPECTRAL_DISPLAY: mSpectralDisplayPanel.showTuner( event.getTuner() ); break; - case REQUEST_SECONDARY_SPECTRAL_DISPLAY: + case REQUEST_NEW_SPECTRAL_DISPLAY: final SpectrumFrame frame = new SpectrumFrame( mChannelModel, mChannelProcessingManager, mSettingsManager, event.getTuner() ); diff --git a/src/source/tuner/TunerViewPanel.java b/src/source/tuner/TunerViewPanel.java index c6a5879d..3bedee68 100644 --- a/src/source/tuner/TunerViewPanel.java +++ b/src/source/tuner/TunerViewPanel.java @@ -1,19 +1,28 @@ package source.tuner; +import java.awt.Color; +import java.awt.Component; import java.awt.Dimension; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellRenderer; import net.miginfocom.swing.MigLayout; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import source.tuner.TunerEvent.Event; + import com.jidesoft.swing.JideSplitPane; public class TunerViewPanel extends JPanel @@ -23,7 +32,6 @@ public class TunerViewPanel extends JPanel private TunerModel mTunerModel; private JTable mTunerTable; - private JideSplitPane mSplitPane; private TunerEditor mTunerEditor; @@ -55,6 +63,46 @@ public class TunerViewPanel extends JPanel } } } ); + mTunerTable.addMouseListener( new MouseAdapter() + { + @Override + public void mouseClicked( MouseEvent e ) + { + int column = mTunerTable.columnAtPoint( e.getPoint() ); + + if( column == TunerModel.SPECTRAL_DISPLAY_MAIN ) + { + int tableRow = mTunerTable.rowAtPoint( e.getPoint() ); + int modelRow = mTunerTable.convertRowIndexToModel( tableRow ); + + Tuner tuner = mTunerModel.getTuner( modelRow ); + + if( tuner != null ) + { + mTunerModel.broadcast( new TunerEvent( tuner, + Event.REQUEST_MAIN_SPECTRAL_DISPLAY ) ); + } + } + else if( column == TunerModel.SPECTRAL_DISPLAY_NEW ) + { + int tableRow = mTunerTable.rowAtPoint( e.getPoint() ); + int modelRow = mTunerTable.convertRowIndexToModel( tableRow ); + + Tuner tuner = mTunerModel.getTuner( modelRow ); + + if( tuner != null ) + { + mTunerModel.broadcast( new TunerEvent( tuner, + Event.REQUEST_NEW_SPECTRAL_DISPLAY ) ); + } + } + } + } ); + + TableCellRenderer renderer = new LinkCellRenderer(); + + mTunerTable.getColumnModel().getColumn( 5 ).setCellRenderer( renderer ); + mTunerTable.getColumnModel().getColumn( 6 ).setCellRenderer( renderer ); JScrollPane listScroller = new JScrollPane( mTunerTable ); listScroller.setPreferredSize( new Dimension( 400, 20 ) ); @@ -70,5 +118,30 @@ public class TunerViewPanel extends JPanel add( mSplitPane ); } - + public class LinkCellRenderer extends DefaultTableCellRenderer + { + private static final long serialVersionUID = 1L; + + @Override + public Component getTableCellRendererComponent( JTable table, + Object value, boolean isSelected, boolean hasFocus, int row, + int column ) + { + JLabel label = (JLabel)super.getTableCellRendererComponent( table, + value, isSelected, hasFocus, row, column ); + + label.setForeground( Color.BLUE.brighter() ); + + if( column == TunerModel.SPECTRAL_DISPLAY_MAIN ) + { + label.setToolTipText( "Show this tuner in the main spectral display" ); + } + else if( column == TunerModel.SPECTRAL_DISPLAY_NEW ) + { + label.setToolTipText( "Show this tuner in a new spectral display" ); + } + + return label; + } + } } diff --git a/src/source/tuner/airspy/AirspyTuner.java b/src/source/tuner/airspy/AirspyTuner.java index 3d1406f3..01a52201 100644 --- a/src/source/tuner/airspy/AirspyTuner.java +++ b/src/source/tuner/airspy/AirspyTuner.java @@ -19,20 +19,17 @@ package source.tuner.airspy; import java.util.concurrent.RejectedExecutionException; -import javax.swing.JPanel; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sample.Listener; import sample.complex.ComplexBuffer; -import settings.SettingsManager; import source.SourceException; import source.tuner.Tuner; -import source.tuner.TunerEvent; import source.tuner.TunerChannel; import source.tuner.TunerChannelSource; import source.tuner.TunerClass; +import source.tuner.TunerEvent; import source.tuner.TunerType; import source.tuner.airspy.AirspyTunerController.BoardID; import source.tuner.configuration.TunerConfiguration; @@ -41,28 +38,20 @@ public class AirspyTuner extends Tuner { private final static Logger mLog = LoggerFactory.getLogger( AirspyTuner.class ); - AirspyTunerController mController; - public AirspyTuner( AirspyTunerController controller ) { - super( "Airspy" ); - - mController = controller; - - /* Register for frequency/sample rate changes so that we can rebroadcast - * to any registered listeners */ - mController.addListener( this ); + super( "Airspy", controller ); } public AirspyTunerController getController() { - return mController; + return (AirspyTunerController)getTunerController(); } @Override public void apply( TunerConfiguration config ) throws SourceException { - mController.apply( config ); + getController().apply( config ); } @Override @@ -70,7 +59,7 @@ public class AirspyTuner extends Tuner { try { - return mController.getDeviceInfo().getSerialNumber(); + return getController().getDeviceInfo().getSerialNumber(); } catch( Exception e ) { @@ -99,7 +88,7 @@ public class AirspyTuner extends Tuner try { - rate = mController.getCurrentSampleRate(); + rate = getController().getCurrentSampleRate(); } catch ( SourceException e ) { @@ -118,7 +107,7 @@ public class AirspyTuner extends Tuner @Override public long getFrequency() throws SourceException { - return mController.getFrequency(); + return getController().getFrequency(); } @Override @@ -132,7 +121,7 @@ public class AirspyTuner extends Tuner //Consider implementing a fractional resampler to get a correct 48 kHz //output sample rate - TunerChannelSource source = mController.getChannel( this, channel ); + TunerChannelSource source = getController().getChannel( this, channel ); if( source != null ) { @@ -147,7 +136,7 @@ public class AirspyTuner extends Tuner @Override public int getChannelCount() { - return mController.getChannelCount(); + return getController().getChannelCount(); } @Override @@ -159,19 +148,19 @@ public class AirspyTuner extends Tuner /* Tell the controller to release the channel and cleanup */ if( source != null ) { - mController.releaseChannel( source ); + getController().releaseChannel( source ); } } @Override public void addListener( Listener listener ) { - mController.addListener( listener ); + getController().addListener( listener ); } @Override public void removeListener( Listener listener ) { - mController.removeListener( listener ); + getController().removeListener( listener ); } } diff --git a/src/source/tuner/airspy/AirspyTunerEditorPanel.java b/src/source/tuner/airspy/AirspyTunerEditorPanel.java index 7305fce4..3cc93d89 100644 --- a/src/source/tuner/airspy/AirspyTunerEditorPanel.java +++ b/src/source/tuner/airspy/AirspyTunerEditorPanel.java @@ -75,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.addFrequencyChangeProcessor( mFrequencyControl ); + mTuner.getTunerController().addListener( mFrequencyControl ); mFrequencyControl.setFrequency( mController.getFrequency(), false ); diff --git a/src/source/tuner/ettus/B100Tuner.java b/src/source/tuner/ettus/B100Tuner.java index 40e4c6b8..b836722a 100644 --- a/src/source/tuner/ettus/B100Tuner.java +++ b/src/source/tuner/ettus/B100Tuner.java @@ -46,7 +46,7 @@ public class B100Tuner extends Tuner //TODO: this should extend a USBTuner class, so that we can push the //complex sample listener and the frequency change listener up to that class - super( "Ettus B100 with WBX Tuner" ); + super( "Ettus B100 with WBX Tuner", null ); mDevice = device; } diff --git a/src/source/tuner/fcd/FCDTuner.java b/src/source/tuner/fcd/FCDTuner.java index 9ce5087b..f051ce7f 100644 --- a/src/source/tuner/fcd/FCDTuner.java +++ b/src/source/tuner/fcd/FCDTuner.java @@ -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 @@ -19,71 +19,64 @@ package source.tuner.fcd; import java.util.concurrent.RejectedExecutionException; -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; -import source.tuner.TunerEvent; import source.tuner.TunerChannel; import source.tuner.TunerChannelSource; import source.tuner.TunerClass; +import source.tuner.TunerEvent; import source.tuner.TunerType; import source.tuner.configuration.TunerConfiguration; public class FCDTuner extends MixerTuner { - private FCDTunerController mController; - public FCDTuner( MixerTunerDataLine mixerTDL, FCDTunerController controller ) { - super( controller.getConfiguration().toString(), + super( controller.getConfiguration().toString(), + controller, mixerTDL, new ShortAdapter() ); - - mController = controller; - mController.addListener( this ); } public void dispose() { //TODO: release the mixer tuner data line as well - mController.dispose(); + getController().dispose(); } public FCDTunerController getController() { - return mController; + return (FCDTunerController)getTunerController(); } @Override public TunerClass getTunerClass() { - return mController.getTunerClass(); + return getController().getTunerClass(); } @Override public TunerType getTunerType() { - return mController.getTunerType(); + return getController().getTunerType(); } @Override public String getUniqueID() { - return mController.getUSBAddress(); + return getController().getUSBAddress(); } @Override public void apply( TunerConfiguration config )throws SourceException { - mController.apply( config ); + getController().apply( config ); } @Override @@ -101,14 +94,14 @@ public class FCDTuner extends MixerTuner @Override public long getFrequency() throws SourceException { - return mController.getFrequency(); + return getController().getFrequency(); } @Override public TunerChannelSource getChannel( TunerChannel tunerChannel ) throws RejectedExecutionException, SourceException { - TunerChannelSource source = mController.getChannel( this, tunerChannel ); + TunerChannelSource source = getController().getChannel( this, tunerChannel ); if( source != null ) { @@ -121,7 +114,7 @@ public class FCDTuner extends MixerTuner @Override public int getChannelCount() { - return mController.getChannelCount(); + return getController().getChannelCount(); } /** @@ -138,7 +131,7 @@ public class FCDTuner extends MixerTuner /* Tell the controller to release the channel and cleanup */ /* This will release the channel as a frequency change listener */ - mController.releaseChannel( source ); + getController().releaseChannel( source ); } } } diff --git a/src/source/tuner/fcd/proV1/FCD1TunerEditorPanel.java b/src/source/tuner/fcd/proV1/FCD1TunerEditorPanel.java index 83512616..ff8321fd 100644 --- a/src/source/tuner/fcd/proV1/FCD1TunerEditorPanel.java +++ b/src/source/tuner/fcd/proV1/FCD1TunerEditorPanel.java @@ -73,7 +73,7 @@ public class FCD1TunerEditorPanel extends JPanel implements IFrequencyChangeProc /* 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.addFrequencyChangeProcessor( mFrequencyControl ); + mTuner.getController().addListener( mFrequencyControl ); mFrequencyControl.setFrequency( mController.getFrequency(), false ); diff --git a/src/source/tuner/fcd/proplusV2/FCD2TunerEditorPanel.java b/src/source/tuner/fcd/proplusV2/FCD2TunerEditorPanel.java index 6f49b4dc..8bda26c0 100644 --- a/src/source/tuner/fcd/proplusV2/FCD2TunerEditorPanel.java +++ b/src/source/tuner/fcd/proplusV2/FCD2TunerEditorPanel.java @@ -72,7 +72,7 @@ public class FCD2TunerEditorPanel extends JPanel implements IFrequencyChangeProc /* Add frequency control as frequency change listener. This creates a * feedback loop, so the control does not rebroadcast the event */ - mTuner.addFrequencyChangeProcessor( mFrequencyControl ); + mTuner.getController().addListener( mFrequencyControl ); mFrequencyControl.setFrequency( mController.getFrequency(), false ); diff --git a/src/source/tuner/frequency/FrequencyChangeEvent.java b/src/source/tuner/frequency/FrequencyChangeEvent.java index afadd058..9ceb3685 100644 --- a/src/source/tuner/frequency/FrequencyChangeEvent.java +++ b/src/source/tuner/frequency/FrequencyChangeEvent.java @@ -8,7 +8,8 @@ public class FrequencyChangeEvent NOTIFICATION_FREQUENCY_CORRECTION_CHANGE, NOTIFICATION_CHANNEL_FREQUENCY_CORRECTION_CHANGE, NOTIFICATION_SAMPLE_RATE_CHANGE, - + + REQUEST_FREQUENCY_CHANGE, REQUEST_CHANNEL_FREQUENCY_CORRECTION_CHANGE; } diff --git a/src/source/tuner/hackrf/HackRFTuner.java b/src/source/tuner/hackrf/HackRFTuner.java index a0a52613..6f00e4bc 100644 --- a/src/source/tuner/hackrf/HackRFTuner.java +++ b/src/source/tuner/hackrf/HackRFTuner.java @@ -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 @@ -19,20 +19,17 @@ package source.tuner.hackrf; import java.util.concurrent.RejectedExecutionException; -import javax.swing.JPanel; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sample.Listener; import sample.complex.ComplexBuffer; -import settings.SettingsManager; import source.SourceException; import source.tuner.Tuner; -import source.tuner.TunerEvent; import source.tuner.TunerChannel; import source.tuner.TunerChannelSource; import source.tuner.TunerClass; +import source.tuner.TunerEvent; import source.tuner.TunerType; import source.tuner.configuration.TunerConfiguration; import source.tuner.hackrf.HackRFTunerController.BoardID; @@ -41,16 +38,14 @@ public class HackRFTuner extends Tuner { private final static Logger mLog = LoggerFactory.getLogger( HackRFTuner.class ); - private HackRFTunerController mController; - public HackRFTuner( HackRFTunerController controller ) throws SourceException { - super( "HackRF" ); - - mController = controller; - - /* Register for frequency/sample rate changes */ - mController.addListener( this ); + super( "HackRF", controller ); + } + + public HackRFTunerController getController() + { + return (HackRFTunerController)getTunerController(); } public void dispose() @@ -58,11 +53,6 @@ public class HackRFTuner extends Tuner //TODO: dispose of something here } - public HackRFTunerController getController() - { - return mController; - } - @Override public TunerClass getTunerClass() { @@ -78,13 +68,13 @@ public class HackRFTuner extends Tuner @Override public void apply( TunerConfiguration config ) throws SourceException { - mController.apply( config ); + getController().apply( config ); } @Override public int getSampleRate() { - return mController.getSampleRate(); + return getController().getSampleRate(); } @Override @@ -96,14 +86,14 @@ public class HackRFTuner extends Tuner @Override public long getFrequency() throws SourceException { - return mController.getFrequency(); + return getController().getFrequency(); } @Override public TunerChannelSource getChannel( TunerChannel channel ) throws RejectedExecutionException, SourceException { - TunerChannelSource source = mController.getChannel( this, channel ); + TunerChannelSource source = getController().getChannel( this, channel ); if( source != null ) { @@ -116,7 +106,7 @@ public class HackRFTuner extends Tuner @Override public int getChannelCount() { - return mController.getChannelCount(); + return getController().getChannelCount(); } @Override @@ -128,7 +118,7 @@ public class HackRFTuner extends Tuner /* Tell the controller to release the channel and cleanup */ if( source != null ) { - mController.releaseChannel( source ); + getController().releaseChannel( source ); } } @@ -137,7 +127,7 @@ public class HackRFTuner extends Tuner { try { - return mController.getSerial().getSerialNumber(); + return getController().getSerial().getSerialNumber(); } catch( Exception e ) { @@ -150,12 +140,12 @@ public class HackRFTuner extends Tuner @Override public void addListener( Listener listener ) { - mController.addListener( listener ); + getController().addListener( listener ); } @Override public void removeListener( Listener listener ) { - mController.removeListener( listener ); + getController().removeListener( listener ); } } diff --git a/src/source/tuner/hackrf/HackRFTunerEditorPanel.java b/src/source/tuner/hackrf/HackRFTunerEditorPanel.java index fe32f16a..c0666bb0 100644 --- a/src/source/tuner/hackrf/HackRFTunerEditorPanel.java +++ b/src/source/tuner/hackrf/HackRFTunerEditorPanel.java @@ -87,7 +87,7 @@ public class HackRFTunerEditorPanel extends JPanel implements IFrequencyChangePr /* Add frequency control as frequency change listener. This creates a * feedback loop, so the control does not rebroadcast the event */ - mTuner.addFrequencyChangeProcessor( mFrequencyControl ); + mTuner.getController().addListener( mFrequencyControl ); mFrequencyControl.setFrequency( mController.getFrequency(), false ); diff --git a/src/source/tuner/rtl/RTL2832Tuner.java b/src/source/tuner/rtl/RTL2832Tuner.java index 1cbbd6ce..ee994ba7 100644 --- a/src/source/tuner/rtl/RTL2832Tuner.java +++ b/src/source/tuner/rtl/RTL2832Tuner.java @@ -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 @@ -19,26 +19,21 @@ package source.tuner.rtl; import java.util.concurrent.RejectedExecutionException; -import javax.swing.JPanel; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.usb4java.LibUsbException; import sample.Listener; import sample.complex.ComplexBuffer; -import settings.SettingsManager; import source.SourceException; import source.tuner.Tuner; -import source.tuner.TunerEvent; import source.tuner.TunerChannel; import source.tuner.TunerChannelSource; import source.tuner.TunerClass; +import source.tuner.TunerEvent; import source.tuner.TunerType; import source.tuner.configuration.TunerConfiguration; -import source.tuner.frequency.IFrequencyChangeListener; import source.tuner.rtl.RTL2832TunerController.SampleRate; -import controller.ThreadPoolManager; public class RTL2832Tuner extends Tuner { @@ -46,7 +41,6 @@ public class RTL2832Tuner extends Tuner LoggerFactory.getLogger( RTL2832Tuner.class ); private TunerClass mTunerClass; - protected RTL2832TunerController mController; public RTL2832Tuner( TunerClass tunerClass, RTL2832TunerController controller ) @@ -54,11 +48,9 @@ public class RTL2832Tuner extends Tuner { super( tunerClass.getVendorDeviceLabel() + "/" + controller.getTunerType().getLabel() + " #" + - controller.getUniqueID() ); + controller.getUniqueID(), controller ); mTunerClass = tunerClass; - mController = controller; - mController.addListener( this ); } public void dispose() @@ -68,13 +60,13 @@ public class RTL2832Tuner extends Tuner public RTL2832TunerController getController() { - return mController; + return (RTL2832TunerController)getTunerController(); } @Override public String getUniqueID() { - return mController.getUniqueID(); + return getController().getUniqueID(); } @Override @@ -86,13 +78,13 @@ public class RTL2832Tuner extends Tuner @Override public TunerType getTunerType() { - return mController.getTunerType(); + return getController().getTunerType(); } @Override public void apply( TunerConfiguration config ) throws SourceException { - mController.apply( config ); + getController().apply( config ); } @Override @@ -100,7 +92,7 @@ public class RTL2832Tuner extends Tuner { try { - return mController.getCurrentSampleRate(); + return getController().getCurrentSampleRate(); } catch( SourceException e ) { @@ -114,7 +106,7 @@ public class RTL2832Tuner extends Tuner { try { - mController.setSampleRate( sampleRate ); + getController().setSampleRate( sampleRate ); } catch( LibUsbException e ) { @@ -134,12 +126,12 @@ public class RTL2832Tuner extends Tuner @Override public long getFrequency() throws SourceException { - return mController.getFrequency(); + return getController().getFrequency(); } public void setFrequency( int frequency ) throws SourceException { - mController.setFrequency( frequency ); + getController().setFrequency( frequency ); } @Override @@ -151,7 +143,7 @@ public class RTL2832Tuner extends Tuner try { - source = mController.getChannel( this, channel ); + source = getController().getChannel( this, channel ); if( source != null ) { @@ -169,7 +161,7 @@ public class RTL2832Tuner extends Tuner @Override public int getChannelCount() { - return mController.getChannelCount(); + return getController().getChannelCount(); } /** @@ -185,19 +177,19 @@ public class RTL2832Tuner extends Tuner /* Tell the controller to release the channel and cleanup */ if( source != null ) { - mController.releaseChannel( source ); + getController().releaseChannel( source ); } } @Override public void addListener( Listener listener ) { - mController.addListener( listener ); + getController().addListener( listener ); } @Override public void removeListener( Listener listener ) { - mController.removeListener( listener ); + getController().removeListener( listener ); } } diff --git a/src/spectrum/SpectralDisplayPanel.java b/src/spectrum/SpectralDisplayPanel.java index 1c095bcd..8af9c603 100644 --- a/src/spectrum/SpectralDisplayPanel.java +++ b/src/spectrum/SpectralDisplayPanel.java @@ -438,7 +438,7 @@ public class SpectralDisplayPanel extends JPanel if( mTuner != null ) { //Register to receive frequency change events - mTuner.addFrequencyChangeProcessor( this ); + mTuner.getTunerController().addListener( this ); //Register the dft processor to receive samples from the tuner mTuner.addListener( (Listener)mDFTProcessor ); @@ -471,7 +471,7 @@ public class SpectralDisplayPanel extends JPanel if( mTuner != null ) { //Deregister for frequency change events from the tuner - mTuner.removeFrequencyChangeProcessor( this ); + mTuner.getTunerController().removeListener( this ); //Deregister the dft processor from receiving samples mTuner.removeListener( (Listener)mDFTProcessor );