mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-15 01:57:39 -05:00
Adds Lineary, Sensitivity and Custom mode options to airspy tuner.
This commit is contained in:
@@ -118,7 +118,7 @@ public class AirspyTuner extends Tuner
|
|||||||
@Override
|
@Override
|
||||||
public double getSampleSize()
|
public double getSampleSize()
|
||||||
{
|
{
|
||||||
return 12.0;
|
return 13.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -21,10 +21,12 @@ import javax.xml.bind.annotation.XmlAttribute;
|
|||||||
|
|
||||||
import source.tuner.TunerConfiguration;
|
import source.tuner.TunerConfiguration;
|
||||||
import source.tuner.TunerType;
|
import source.tuner.TunerType;
|
||||||
|
import source.tuner.airspy.AirspyTunerController.Gain;
|
||||||
|
|
||||||
public class AirspyTunerConfiguration extends TunerConfiguration
|
public class AirspyTunerConfiguration extends TunerConfiguration
|
||||||
{
|
{
|
||||||
private int mSampleRate = AirspyTunerController.DEFAULT_SAMPLE_RATE.getRate();
|
private int mSampleRate = AirspyTunerController.DEFAULT_SAMPLE_RATE.getRate();
|
||||||
|
private Gain mGain = AirspyTunerController.LINEARITY_GAIN_DEFAULT;
|
||||||
private int mIFGain = AirspyTunerController.IF_GAIN_DEFAULT;
|
private int mIFGain = AirspyTunerController.IF_GAIN_DEFAULT;
|
||||||
private int mMixerGain = AirspyTunerController.MIXER_GAIN_DEFAULT;
|
private int mMixerGain = AirspyTunerController.MIXER_GAIN_DEFAULT;
|
||||||
private int mLNAGain = AirspyTunerController.LNA_GAIN_DEFAULT;
|
private int mLNAGain = AirspyTunerController.LNA_GAIN_DEFAULT;
|
||||||
@@ -62,6 +64,17 @@ public class AirspyTunerConfiguration extends TunerConfiguration
|
|||||||
mSampleRate = sampleRate;
|
mSampleRate = sampleRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@XmlAttribute( name = "gain" )
|
||||||
|
public Gain getGain()
|
||||||
|
{
|
||||||
|
return mGain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGain( Gain gain )
|
||||||
|
{
|
||||||
|
mGain = gain;
|
||||||
|
}
|
||||||
|
|
||||||
@XmlAttribute( name = "if_gain" )
|
@XmlAttribute( name = "if_gain" )
|
||||||
public int getIFGain()
|
public int getIFGain()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ import source.SourceException;
|
|||||||
import source.tuner.TunerConfiguration;
|
import source.tuner.TunerConfiguration;
|
||||||
import source.tuner.TunerConfigurationAssignment;
|
import source.tuner.TunerConfigurationAssignment;
|
||||||
import source.tuner.TunerType;
|
import source.tuner.TunerType;
|
||||||
|
import source.tuner.airspy.AirspyTunerController.Gain;
|
||||||
|
import source.tuner.airspy.AirspyTunerController.GainMode;
|
||||||
import controller.ResourceManager;
|
import controller.ResourceManager;
|
||||||
|
|
||||||
public class AirspyTunerConfigurationPanel extends JPanel
|
public class AirspyTunerConfigurationPanel extends JPanel
|
||||||
@@ -69,18 +71,28 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
private JTextField mName;
|
private JTextField mName;
|
||||||
|
|
||||||
private JComboBox<AirspySampleRate> mSampleRateCombo;
|
private JComboBox<AirspySampleRate> mSampleRateCombo;
|
||||||
private JComboBox mDecimationCombo;
|
|
||||||
private JLabel mEffectiveRate;
|
|
||||||
|
|
||||||
|
private JComboBox<GainMode> mGainModeCombo;
|
||||||
|
private JLabel mGainLabel;
|
||||||
|
private JLabel mGainFillerLabel;
|
||||||
|
private JLabel mGainValueLabel;
|
||||||
|
private JSlider mGain;
|
||||||
|
|
||||||
private JLabel mIFGainLabel;
|
private JLabel mIFGainLabel;
|
||||||
|
private JLabel mIFGainFillerLabel;
|
||||||
|
private JLabel mIFGainValueLabel;
|
||||||
private JSlider mIFGain;
|
private JSlider mIFGain;
|
||||||
|
|
||||||
private JLabel mLNAGainLabel;
|
private JLabel mLNAGainLabel;
|
||||||
|
private JCheckBox mLNAAGC;
|
||||||
|
private JLabel mLNAGainValueLabel;
|
||||||
private JSlider mLNAGain;
|
private JSlider mLNAGain;
|
||||||
|
|
||||||
|
private JLabel mMixerGainValueLabel;
|
||||||
|
private JCheckBox mMixerAGC;
|
||||||
private JLabel mMixerGainLabel;
|
private JLabel mMixerGainLabel;
|
||||||
private JSlider mMixerGain;
|
private JSlider mMixerGain;
|
||||||
|
|
||||||
private JCheckBox mMixerAGC;
|
|
||||||
private JCheckBox mLNAAGC;
|
|
||||||
|
|
||||||
public AirspyTunerConfigurationPanel( ResourceManager resourceManager,
|
public AirspyTunerConfigurationPanel( ResourceManager resourceManager,
|
||||||
AirspyTunerController controller )
|
AirspyTunerController controller )
|
||||||
@@ -210,8 +222,6 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
mController.setSampleRate( rate );
|
mController.setSampleRate( rate );
|
||||||
mSelectedConfig.setSampleRate( rate.getRate() );
|
mSelectedConfig.setSampleRate( rate.getRate() );
|
||||||
save();
|
save();
|
||||||
|
|
||||||
mEffectiveRate.setText( rate.getLabel() );
|
|
||||||
}
|
}
|
||||||
catch ( LibUsbException | UsbException e1 )
|
catch ( LibUsbException | UsbException e1 )
|
||||||
{
|
{
|
||||||
@@ -225,31 +235,102 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
|
|
||||||
add( mSampleRateCombo, "span 3,growx" );
|
add( mSampleRateCombo, "span 3,growx" );
|
||||||
|
|
||||||
/**
|
|
||||||
* Decimation
|
|
||||||
*/
|
|
||||||
add( new JLabel( "Decimation:" ) );
|
|
||||||
mDecimationCombo = new JComboBox();
|
|
||||||
add( mDecimationCombo, "span 3,growx" );
|
|
||||||
mDecimationCombo.setEnabled( false );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Effective Rate
|
|
||||||
*/
|
|
||||||
add( new JLabel( "Effective Rate:" ) );
|
|
||||||
mEffectiveRate = new JLabel( "10,000,000" );
|
|
||||||
add( mEffectiveRate, "span 3,growx" );
|
|
||||||
|
|
||||||
add( new JSeparator(), "span,growx,push" );
|
add( new JSeparator(), "span,growx,push" );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gain Mode
|
||||||
|
*/
|
||||||
|
add( new JLabel( "Gain Mode:" ) );
|
||||||
|
mGainModeCombo = new JComboBox<AirspyTunerController.GainMode>( GainMode.values() );
|
||||||
|
mGainModeCombo.setSelectedItem( Gain.getGainMode( mSelectedConfig.getGain() ) );
|
||||||
|
mGainModeCombo.addActionListener( new ActionListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void actionPerformed( ActionEvent e )
|
||||||
|
{
|
||||||
|
GainMode mode = (GainMode)mGainModeCombo.getSelectedItem();
|
||||||
|
updateGainComponents( mode );
|
||||||
|
|
||||||
|
switch( mode )
|
||||||
|
{
|
||||||
|
case LINEARITY:
|
||||||
|
mGain.setValue( AirspyTunerController.LINEARITY_GAIN_DEFAULT.getValue() );
|
||||||
|
mSelectedConfig.setGain( AirspyTunerController.LINEARITY_GAIN_DEFAULT );
|
||||||
|
break;
|
||||||
|
case SENSITIVITY:
|
||||||
|
mGain.setValue( AirspyTunerController.SENSITIVITY_GAIN_DEFAULT.getValue() );
|
||||||
|
mSelectedConfig.setGain( AirspyTunerController.SENSITIVITY_GAIN_DEFAULT );
|
||||||
|
break;
|
||||||
|
case CUSTOM:
|
||||||
|
default:
|
||||||
|
mLNAGain.setValue( mSelectedConfig.getLNAGain() );
|
||||||
|
mMixerGain.setValue( mSelectedConfig.getMixerGain() );
|
||||||
|
mIFGain.setValue( mSelectedConfig.getIFGain() );
|
||||||
|
mSelectedConfig.setGain( Gain.CUSTOM );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
add( mGainModeCombo, "wrap" );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gain
|
||||||
|
*/
|
||||||
|
mGainLabel = new JLabel( "Gain" );
|
||||||
|
add( mGainLabel );
|
||||||
|
mGainFillerLabel = new JLabel( "" );
|
||||||
|
add( mGainFillerLabel, "span 2" );
|
||||||
|
mGainValueLabel = new JLabel( String.valueOf( mSelectedConfig.getGain().getValue() ) );
|
||||||
|
add( mGainValueLabel, "wrap" );
|
||||||
|
mGain = new JSlider( JSlider.HORIZONTAL,
|
||||||
|
AirspyTunerController.GAIN_MIN,
|
||||||
|
AirspyTunerController.GAIN_MAX,
|
||||||
|
mSelectedConfig.getGain().getValue() );
|
||||||
|
mGain.setMajorTickSpacing( 1 );
|
||||||
|
mGain.setPaintTicks( true );
|
||||||
|
|
||||||
|
mGain.addChangeListener( new ChangeListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void stateChanged( ChangeEvent event )
|
||||||
|
{
|
||||||
|
GainMode mode = (GainMode)mGainModeCombo.getSelectedItem();
|
||||||
|
int value = mGain.getValue();
|
||||||
|
Gain gain = Gain.getGain( mode, value );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
mController.setGain( gain );
|
||||||
|
mSelectedConfig.setGain( gain );
|
||||||
|
save();
|
||||||
|
mGainValueLabel.setText( String.valueOf( gain.getValue() ) );
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
mLog.error( "Couldn't set airspy gain to:" + gain.name(), e );
|
||||||
|
|
||||||
|
JOptionPane.showMessageDialog( mGain,
|
||||||
|
"Couldn't set gain value to " + gain.getValue() );
|
||||||
|
|
||||||
|
mGain.setValue( mSelectedConfig.getGain().getValue() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
add( mGain, "span,grow" );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* IF/VGA Gain
|
* IF/VGA Gain
|
||||||
*/
|
*/
|
||||||
add( new JLabel( "IF Gain" ) );
|
mIFGainLabel = new JLabel( "IF Gain" );
|
||||||
add( new JLabel( "" ), "span 2" );
|
add( mIFGainLabel );
|
||||||
|
mIFGainFillerLabel = new JLabel( "" );
|
||||||
mIFGainLabel = new JLabel( String.valueOf( mSelectedConfig.getIFGain() ) );
|
add( mIFGainFillerLabel, "span 2" );
|
||||||
add( mIFGainLabel, "wrap" );
|
mIFGainValueLabel = new JLabel( String.valueOf( mSelectedConfig.getIFGain() ) );
|
||||||
|
add( mIFGainValueLabel, "wrap" );
|
||||||
|
|
||||||
mIFGain = new JSlider( JSlider.HORIZONTAL,
|
mIFGain = new JSlider( JSlider.HORIZONTAL,
|
||||||
AirspyTunerController.IF_GAIN_MIN,
|
AirspyTunerController.IF_GAIN_MIN,
|
||||||
@@ -271,7 +352,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
mController.setIFGain( gain );
|
mController.setIFGain( gain );
|
||||||
mSelectedConfig.setIFGain( gain );
|
mSelectedConfig.setIFGain( gain );
|
||||||
save();
|
save();
|
||||||
mIFGainLabel.setText( String.valueOf( gain ) );
|
mIFGainValueLabel.setText( String.valueOf( gain ) );
|
||||||
}
|
}
|
||||||
catch ( Exception e )
|
catch ( Exception e )
|
||||||
{
|
{
|
||||||
@@ -287,12 +368,14 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
|
|
||||||
add( mIFGain, "span,grow" );
|
add( mIFGain, "span,grow" );
|
||||||
|
|
||||||
add( new JLabel( "Mixer Gain" ) );
|
/**
|
||||||
|
* Mixer Gain
|
||||||
|
*/
|
||||||
|
mMixerGainLabel = new JLabel( "Mixer Gain" );
|
||||||
|
add( mMixerGainLabel );
|
||||||
|
|
||||||
mMixerAGC = new JCheckBox( "AGC" );
|
mMixerAGC = new JCheckBox( "AGC" );
|
||||||
|
|
||||||
mMixerAGC.setSelected( mSelectedConfig.isMixerAGC() );
|
mMixerAGC.setSelected( mSelectedConfig.isMixerAGC() );
|
||||||
|
|
||||||
mMixerAGC.addActionListener( new ActionListener()
|
mMixerAGC.addActionListener( new ActionListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -315,8 +398,8 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
|
|
||||||
add( mMixerAGC, "span 2,center" );
|
add( mMixerAGC, "span 2,center" );
|
||||||
|
|
||||||
mMixerGainLabel = new JLabel( String.valueOf( mSelectedConfig.getMixerGain() ) );
|
mMixerGainValueLabel = new JLabel( String.valueOf( mSelectedConfig.getMixerGain() ) );
|
||||||
add( mMixerGainLabel, "wrap" );
|
add( mMixerGainValueLabel, "wrap" );
|
||||||
|
|
||||||
mMixerGain = new JSlider( JSlider.HORIZONTAL,
|
mMixerGain = new JSlider( JSlider.HORIZONTAL,
|
||||||
AirspyTunerController.MIXER_GAIN_MIN,
|
AirspyTunerController.MIXER_GAIN_MIN,
|
||||||
@@ -338,7 +421,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
mController.setMixerGain( gain );
|
mController.setMixerGain( gain );
|
||||||
mSelectedConfig.setMixerGain( gain );
|
mSelectedConfig.setMixerGain( gain );
|
||||||
save();
|
save();
|
||||||
mMixerGainLabel.setText( String.valueOf( gain ) );
|
mMixerGainValueLabel.setText( String.valueOf( gain ) );
|
||||||
}
|
}
|
||||||
catch ( Exception e )
|
catch ( Exception e )
|
||||||
{
|
{
|
||||||
@@ -352,13 +435,15 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
} );
|
} );
|
||||||
|
|
||||||
add( mMixerGain, "span,grow" );
|
add( mMixerGain, "span,grow" );
|
||||||
|
|
||||||
add( new JLabel( "LNA Gain" ) );
|
/**
|
||||||
|
* LNA Gain
|
||||||
|
*/
|
||||||
|
mLNAGainLabel = new JLabel( "LNA Gain" );
|
||||||
|
add( mLNAGainLabel );
|
||||||
|
|
||||||
mLNAAGC = new JCheckBox( "AGC" );
|
mLNAAGC = new JCheckBox( "AGC" );
|
||||||
|
|
||||||
mLNAAGC.setSelected( mSelectedConfig.isLNAAGC() );
|
mLNAAGC.setSelected( mSelectedConfig.isLNAAGC() );
|
||||||
|
|
||||||
mLNAAGC.addActionListener( new ActionListener()
|
mLNAAGC.addActionListener( new ActionListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -381,8 +466,8 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
|
|
||||||
add( mLNAAGC, "span 2,center" );
|
add( mLNAAGC, "span 2,center" );
|
||||||
|
|
||||||
mLNAGainLabel = new JLabel( String.valueOf( mSelectedConfig.getLNAGain() ) );
|
mLNAGainValueLabel = new JLabel( String.valueOf( mSelectedConfig.getLNAGain() ) );
|
||||||
add( mLNAGainLabel, "wrap" );
|
add( mLNAGainValueLabel, "wrap" );
|
||||||
|
|
||||||
mLNAGain = new JSlider( JSlider.HORIZONTAL,
|
mLNAGain = new JSlider( JSlider.HORIZONTAL,
|
||||||
AirspyTunerController.LNA_GAIN_MIN,
|
AirspyTunerController.LNA_GAIN_MIN,
|
||||||
@@ -404,7 +489,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
mController.setLNAGain( gain );
|
mController.setLNAGain( gain );
|
||||||
mSelectedConfig.setLNAGain( gain );
|
mSelectedConfig.setLNAGain( gain );
|
||||||
save();
|
save();
|
||||||
mLNAGainLabel.setText( String.valueOf( gain ) );
|
mLNAGainValueLabel.setText( String.valueOf( gain ) );
|
||||||
}
|
}
|
||||||
catch ( Exception e )
|
catch ( Exception e )
|
||||||
{
|
{
|
||||||
@@ -418,6 +503,9 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
} );
|
} );
|
||||||
|
|
||||||
add( mLNAGain, "span,grow" );
|
add( mLNAGain, "span,grow" );
|
||||||
|
|
||||||
|
//Set the enabled state of each of the gain controls
|
||||||
|
updateGainComponents( (GainMode)mGainModeCombo.getSelectedItem() );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new configuration
|
* Create a new configuration
|
||||||
@@ -485,6 +573,34 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
|
|
||||||
add( mDeleteConfiguration, "span 2,growx,push" );
|
add( mDeleteConfiguration, "span 2,growx,push" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the enabled state of each of the gain controls according to the
|
||||||
|
* specified gain mode. The overall gain controls are enabled for linearity
|
||||||
|
* and sensitivity and the individual gain controls are disabled, and
|
||||||
|
* vice-versa for custom mode.
|
||||||
|
*/
|
||||||
|
private void updateGainComponents( GainMode mode )
|
||||||
|
{
|
||||||
|
boolean isCustom = ( mode == GainMode.CUSTOM );
|
||||||
|
|
||||||
|
mGainLabel.setEnabled( !isCustom );
|
||||||
|
mGainFillerLabel.setEnabled( !isCustom );
|
||||||
|
mGainValueLabel.setEnabled( !isCustom );
|
||||||
|
mGain.setEnabled( !isCustom );
|
||||||
|
mIFGainLabel.setEnabled( isCustom );
|
||||||
|
mIFGainFillerLabel.setEnabled( isCustom );
|
||||||
|
mIFGainValueLabel.setEnabled( isCustom );
|
||||||
|
mIFGain.setEnabled( isCustom );
|
||||||
|
mLNAGainLabel.setEnabled( isCustom );
|
||||||
|
mLNAAGC.setEnabled( isCustom );
|
||||||
|
mLNAGainValueLabel.setEnabled( isCustom );
|
||||||
|
mLNAGain.setEnabled( isCustom );
|
||||||
|
mMixerGainValueLabel.setEnabled( isCustom );
|
||||||
|
mMixerAGC.setEnabled( isCustom );
|
||||||
|
mMixerGainLabel.setEnabled( isCustom );
|
||||||
|
mMixerGain.setEnabled( isCustom );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates gui controls with the values from the tuner configuration
|
* Updates gui controls with the values from the tuner configuration
|
||||||
@@ -507,9 +623,7 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
{
|
{
|
||||||
mSampleRateCombo.setSelectedItem( rate );
|
mSampleRateCombo.setSelectedItem( rate );
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: set decimation and effective rate here
|
|
||||||
|
|
||||||
mIFGain.setValue( mSelectedConfig.getIFGain() );
|
mIFGain.setValue( mSelectedConfig.getIFGain() );
|
||||||
mMixerGain.setValue( mSelectedConfig.getMixerGain() );
|
mMixerGain.setValue( mSelectedConfig.getMixerGain() );
|
||||||
mLNAGain.setValue( mSelectedConfig.getLNAGain() );
|
mLNAGain.setValue( mSelectedConfig.getLNAGain() );
|
||||||
@@ -517,6 +631,10 @@ public class AirspyTunerConfigurationPanel extends JPanel
|
|||||||
mMixerAGC.setSelected( mSelectedConfig.isMixerAGC() );
|
mMixerAGC.setSelected( mSelectedConfig.isMixerAGC() );
|
||||||
mLNAAGC.setSelected( mSelectedConfig.isLNAAGC() );
|
mLNAAGC.setSelected( mSelectedConfig.isLNAAGC() );
|
||||||
|
|
||||||
|
Gain gain = mSelectedConfig.getGain();
|
||||||
|
mGainModeCombo.setSelectedItem( Gain.getGainMode( gain ) );
|
||||||
|
mGain.setValue( gain.getValue() );
|
||||||
|
|
||||||
mResourceManager.getSettingsManager().setSelectedTunerConfiguration(
|
mResourceManager.getSettingsManager().setSelectedTunerConfiguration(
|
||||||
TunerType.AIRSPY_R820T, mController.getDeviceInfo().getSerialNumber(), config );
|
TunerType.AIRSPY_R820T, mController.getDeviceInfo().getSerialNumber(), config );
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,10 @@ import java.nio.ByteBuffer;
|
|||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import java.util.concurrent.LinkedTransferQueue;
|
import java.util.concurrent.LinkedTransferQueue;
|
||||||
import java.util.concurrent.RejectedExecutionException;
|
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
@@ -29,9 +28,6 @@ import sample.Broadcaster;
|
|||||||
import sample.Listener;
|
import sample.Listener;
|
||||||
import sample.complex.ComplexBuffer;
|
import sample.complex.ComplexBuffer;
|
||||||
import source.SourceException;
|
import source.SourceException;
|
||||||
import source.tuner.Tuner;
|
|
||||||
import source.tuner.TunerChannel;
|
|
||||||
import source.tuner.TunerChannelSource;
|
|
||||||
import source.tuner.TunerConfiguration;
|
import source.tuner.TunerConfiguration;
|
||||||
import source.tuner.TunerController;
|
import source.tuner.TunerController;
|
||||||
import controller.ThreadPoolManager;
|
import controller.ThreadPoolManager;
|
||||||
@@ -81,15 +77,19 @@ import dsp.filter.hilbert.HilbertTransform;
|
|||||||
|
|
||||||
public class AirspyTunerController extends TunerController
|
public class AirspyTunerController extends TunerController
|
||||||
{
|
{
|
||||||
|
public static final Gain LINEARITY_GAIN_DEFAULT = Gain.LINEARITY_14;
|
||||||
|
public static final Gain SENSITIVITY_GAIN_DEFAULT = Gain.SENSITIVITY_10;
|
||||||
|
public static final int GAIN_MIN = 1;
|
||||||
|
public static final int GAIN_MAX = 22;
|
||||||
public static final int LNA_GAIN_MIN = 0;
|
public static final int LNA_GAIN_MIN = 0;
|
||||||
public static final int LNA_GAIN_MAX = 14;
|
public static final int LNA_GAIN_MAX = 14;
|
||||||
public static final int LNA_GAIN_DEFAULT = 1;
|
public static final int LNA_GAIN_DEFAULT = 7;
|
||||||
public static final int MIXER_GAIN_MIN = 0;
|
public static final int MIXER_GAIN_MIN = 0;
|
||||||
public static final int MIXER_GAIN_MAX = 15;
|
public static final int MIXER_GAIN_MAX = 15;
|
||||||
public static final int MIXER_GAIN_DEFAULT = 5;
|
public static final int MIXER_GAIN_DEFAULT = 9;
|
||||||
public static final int IF_GAIN_MIN = 0;
|
public static final int IF_GAIN_MIN = 0;
|
||||||
public static final int IF_GAIN_MAX = 15;
|
public static final int IF_GAIN_MAX = 15;
|
||||||
public static final int IF_GAIN_DEFAULT = 5;
|
public static final int IF_GAIN_DEFAULT = 9;
|
||||||
public static final long FREQUENCY_MIN = 24000000l;
|
public static final long FREQUENCY_MIN = 24000000l;
|
||||||
public static final long FREQUENCY_MAX = 1800000000l;
|
public static final long FREQUENCY_MAX = 1800000000l;
|
||||||
public static final long FREQUENCY_DEFAULT = 101100000;
|
public static final long FREQUENCY_DEFAULT = 101100000;
|
||||||
@@ -296,6 +296,11 @@ public class AirspyTunerController extends TunerController
|
|||||||
|
|
||||||
setMixerAGC( airspy.isMixerAGC() );
|
setMixerAGC( airspy.isMixerAGC() );
|
||||||
setLNAAGC( airspy.isLNAAGC() );
|
setLNAAGC( airspy.isLNAAGC() );
|
||||||
|
|
||||||
|
//Set the gain mode last, so custom values are already set, and
|
||||||
|
//linearity and sensitivity modes will automatically override
|
||||||
|
//the custom values.
|
||||||
|
setGain( airspy.getGain() );
|
||||||
}
|
}
|
||||||
catch( Exception e )
|
catch( Exception e )
|
||||||
{
|
{
|
||||||
@@ -482,6 +487,18 @@ public class AirspyTunerController extends TunerController
|
|||||||
throw new UsbException( "Couldnt set LNA AGC enabled: " + enabled );
|
throw new UsbException( "Couldnt set LNA AGC enabled: " + enabled );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setGain( Gain gain ) throws UsbException
|
||||||
|
{
|
||||||
|
if( gain != Gain.CUSTOM )
|
||||||
|
{
|
||||||
|
setMixerAGC( false );
|
||||||
|
setLNAAGC( false );
|
||||||
|
setLNAGain( gain.getLNA() );
|
||||||
|
setMixerGain( gain.getMixer() );
|
||||||
|
setIFGain( gain.getIF() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets LNA gain
|
* Sets LNA gain
|
||||||
@@ -829,6 +846,155 @@ public class AirspyTunerController extends TunerController
|
|||||||
LibUsb.ERROR_NO_DEVICE );
|
LibUsb.ERROR_NO_DEVICE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum GainMode
|
||||||
|
{
|
||||||
|
LINEARITY,
|
||||||
|
SENSITIVITY,
|
||||||
|
CUSTOM;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum Gain
|
||||||
|
{
|
||||||
|
LINEARITY_1( 1, 4, 0, 0 ),
|
||||||
|
LINEARITY_2( 2, 5, 0, 0 ),
|
||||||
|
LINEARITY_3( 3, 6, 1, 0 ),
|
||||||
|
LINEARITY_4( 4, 7, 1, 0 ),
|
||||||
|
LINEARITY_5( 5, 8, 1, 0 ),
|
||||||
|
LINEARITY_6( 6, 9, 1, 0 ),
|
||||||
|
LINEARITY_7( 7, 10, 2, 0 ),
|
||||||
|
LINEARITY_8( 8, 10, 2, 1 ),
|
||||||
|
LINEARITY_9( 9, 10, 0, 3 ),
|
||||||
|
LINEARITY_10( 10, 10, 0, 5 ),
|
||||||
|
LINEARITY_11( 11, 10, 1, 6 ),
|
||||||
|
LINEARITY_12( 12, 10, 0, 8 ),
|
||||||
|
LINEARITY_13( 13, 10, 0, 9 ),
|
||||||
|
LINEARITY_14( 14, 10, 5, 8 ),
|
||||||
|
LINEARITY_15( 15, 10, 6, 9 ),
|
||||||
|
LINEARITY_16( 16, 11, 6, 9 ),
|
||||||
|
LINEARITY_17( 17, 11, 7, 10 ),
|
||||||
|
LINEARITY_18( 18, 11, 8, 12 ),
|
||||||
|
LINEARITY_19( 19, 11, 9, 13 ),
|
||||||
|
LINEARITY_20( 20, 11, 11, 14 ),
|
||||||
|
LINEARITY_21( 21, 12, 12, 14 ),
|
||||||
|
LINEARITY_22( 22, 13, 12, 14 ),
|
||||||
|
SENSITIVITY_1( 1, 4, 0, 0 ),
|
||||||
|
SENSITIVITY_2( 2, 4, 0, 1 ),
|
||||||
|
SENSITIVITY_3( 3, 4, 0, 2 ),
|
||||||
|
SENSITIVITY_4( 4, 4, 0, 3 ),
|
||||||
|
SENSITIVITY_5( 5, 4, 1, 5 ),
|
||||||
|
SENSITIVITY_6( 6, 4, 2, 6 ),
|
||||||
|
SENSITIVITY_7( 7, 4, 2, 7 ),
|
||||||
|
SENSITIVITY_8( 8, 4, 3, 8 ),
|
||||||
|
SENSITIVITY_9( 9, 4, 4, 9 ),
|
||||||
|
SENSITIVITY_10( 10, 5, 4, 9 ),
|
||||||
|
SENSITIVITY_11( 11, 5, 4, 12 ),
|
||||||
|
SENSITIVITY_12( 12, 5, 7, 12 ),
|
||||||
|
SENSITIVITY_13( 13, 5, 8, 13 ),
|
||||||
|
SENSITIVITY_14( 14, 5, 9, 14 ),
|
||||||
|
SENSITIVITY_15( 15, 6, 9, 14 ),
|
||||||
|
SENSITIVITY_16( 16, 7, 10, 14 ),
|
||||||
|
SENSITIVITY_17( 17, 8, 10, 14 ),
|
||||||
|
SENSITIVITY_18( 18, 9, 11, 14 ),
|
||||||
|
SENSITIVITY_19( 19, 10, 12, 14 ),
|
||||||
|
SENSITIVITY_20( 20, 11, 12, 14 ),
|
||||||
|
SENSITIVITY_21( 21, 12, 12, 14 ),
|
||||||
|
SENSITIVITY_22( 22, 13, 12, 14 ),
|
||||||
|
CUSTOM( 1, 0, 0, 0 );
|
||||||
|
|
||||||
|
private int mValue;
|
||||||
|
private int mIF;
|
||||||
|
private int mMixer;
|
||||||
|
private int mLNA;
|
||||||
|
|
||||||
|
private Gain( int value, int ifGain, int mixer, int lna )
|
||||||
|
{
|
||||||
|
mValue = value;
|
||||||
|
mIF = ifGain;
|
||||||
|
mMixer = mixer;
|
||||||
|
mLNA = lna;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValue()
|
||||||
|
{
|
||||||
|
return mValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIF()
|
||||||
|
{
|
||||||
|
return mIF;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMixer()
|
||||||
|
{
|
||||||
|
return mMixer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLNA()
|
||||||
|
{
|
||||||
|
return mLNA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Gain getGain( GainMode mode, int value )
|
||||||
|
{
|
||||||
|
assert( GAIN_MIN <= value && value <= GAIN_MAX );
|
||||||
|
|
||||||
|
switch( mode )
|
||||||
|
{
|
||||||
|
case LINEARITY:
|
||||||
|
for( Gain gain: getLinearityGains() )
|
||||||
|
{
|
||||||
|
if( gain.getValue() == value )
|
||||||
|
{
|
||||||
|
return gain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return LINEARITY_GAIN_DEFAULT;
|
||||||
|
case SENSITIVITY:
|
||||||
|
for( Gain gain: getSensitivityGains() )
|
||||||
|
{
|
||||||
|
if( gain.getValue() == value )
|
||||||
|
{
|
||||||
|
return gain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SENSITIVITY_GAIN_DEFAULT;
|
||||||
|
case CUSTOM:
|
||||||
|
default:
|
||||||
|
return Gain.CUSTOM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GainMode getGainMode( Gain gain )
|
||||||
|
{
|
||||||
|
if( gain == CUSTOM )
|
||||||
|
{
|
||||||
|
return GainMode.CUSTOM;
|
||||||
|
}
|
||||||
|
else if( getLinearityGains().contains( gain ) )
|
||||||
|
{
|
||||||
|
return GainMode.LINEARITY;
|
||||||
|
}
|
||||||
|
else if( getSensitivityGains().contains( gain ) )
|
||||||
|
{
|
||||||
|
return GainMode.SENSITIVITY;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GainMode.CUSTOM;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EnumSet<Gain> getLinearityGains()
|
||||||
|
{
|
||||||
|
return EnumSet.range( LINEARITY_1, LINEARITY_22 );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EnumSet<Gain> getSensitivityGains()
|
||||||
|
{
|
||||||
|
return EnumSet.range( SENSITIVITY_1, SENSITIVITY_22 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Airspy Board Identifier
|
* Airspy Board Identifier
|
||||||
|
|||||||
Reference in New Issue
Block a user