mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 16:47:31 -05:00
wip #34 - final edits to R820T tuner configuration editor and introduced
frequency correction to the airspy tuner configuration.
This commit is contained in:
@@ -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
|
||||
@@ -28,10 +28,8 @@ import map.DefaultIcon;
|
||||
import map.MapIcon;
|
||||
import settings.ColorSetting.ColorSettingName;
|
||||
import source.recording.RecordingConfiguration;
|
||||
import source.tuner.TunerType;
|
||||
import source.tuner.airspy.AirspyTunerConfiguration;
|
||||
import source.tuner.configuration.TunerConfiguration;
|
||||
import source.tuner.configuration.TunerConfigurationAssignment;
|
||||
import source.tuner.fcd.proV1.FCD1TunerConfiguration;
|
||||
import source.tuner.fcd.proplusV2.FCD2TunerConfiguration;
|
||||
import source.tuner.hackrf.HackRFTunerConfiguration;
|
||||
@@ -54,8 +52,7 @@ import source.tuner.rtl.r820t.R820TTunerConfiguration;
|
||||
R820TTunerConfiguration.class,
|
||||
RecordingConfiguration.class,
|
||||
Setting.class,
|
||||
TunerConfiguration.class,
|
||||
TunerConfigurationAssignment.class} )
|
||||
TunerConfiguration.class } )
|
||||
|
||||
@XmlRootElement( name = "SDRTrunk_settings" )
|
||||
public class Settings
|
||||
@@ -65,9 +62,6 @@ public class Settings
|
||||
private List<TunerConfiguration> mTunerConfiguration =
|
||||
new ArrayList<TunerConfiguration>();
|
||||
|
||||
private List<TunerConfigurationAssignment> mConfigurationAssignments =
|
||||
new ArrayList<TunerConfigurationAssignment>();
|
||||
|
||||
private List<RecordingConfiguration> mRecordingConfigurations =
|
||||
new ArrayList<RecordingConfiguration>();
|
||||
|
||||
@@ -89,7 +83,6 @@ public class Settings
|
||||
public void addRecordingConfiguration( RecordingConfiguration config )
|
||||
{
|
||||
mRecordingConfigurations.add( config );
|
||||
|
||||
}
|
||||
|
||||
public void removeRecordingConfiguration( RecordingConfiguration config )
|
||||
@@ -107,33 +100,6 @@ public class Settings
|
||||
{
|
||||
mTunerConfiguration = configs;
|
||||
}
|
||||
|
||||
public void addTunerConfiguration( TunerConfiguration config )
|
||||
{
|
||||
mTunerConfiguration.add( config );
|
||||
|
||||
}
|
||||
|
||||
public void removeTunerConfiguration( TunerConfiguration config )
|
||||
{
|
||||
mTunerConfiguration.remove( config );
|
||||
}
|
||||
|
||||
public ArrayList<TunerConfiguration> getTunerConfigurations( TunerType type )
|
||||
{
|
||||
ArrayList<TunerConfiguration> configs =
|
||||
new ArrayList<TunerConfiguration>();
|
||||
|
||||
for( TunerConfiguration config: mTunerConfiguration )
|
||||
{
|
||||
if( config.getTunerType() == type )
|
||||
{
|
||||
configs.add( config );
|
||||
}
|
||||
}
|
||||
|
||||
return configs;
|
||||
}
|
||||
|
||||
@XmlElement( name="setting" )
|
||||
public List<Setting> getSettings()
|
||||
@@ -254,59 +220,6 @@ public class Settings
|
||||
return icons;
|
||||
}
|
||||
|
||||
@XmlElement( name="tuner_configuration_assignment" )
|
||||
public List<TunerConfigurationAssignment> getSelectedTunerConfiguration()
|
||||
{
|
||||
return mConfigurationAssignments;
|
||||
}
|
||||
|
||||
public void setSelectedTunerConfiguration( List<TunerConfigurationAssignment> configs )
|
||||
{
|
||||
mConfigurationAssignments = configs;
|
||||
}
|
||||
|
||||
public void addSelectedTunerConfiguration( TunerConfigurationAssignment config )
|
||||
{
|
||||
mConfigurationAssignments.add( config );
|
||||
|
||||
}
|
||||
|
||||
public void removeSelectedTunerConfiguration( TunerConfigurationAssignment config )
|
||||
{
|
||||
mConfigurationAssignments.remove( config );
|
||||
}
|
||||
|
||||
public TunerConfigurationAssignment getConfigurationAssignment( TunerType type, String uniqueID )
|
||||
{
|
||||
for( TunerConfigurationAssignment config: mConfigurationAssignments )
|
||||
{
|
||||
if( config.getTunerType() == type &&
|
||||
uniqueID.contentEquals( config.getUniqueID() ) )
|
||||
{
|
||||
return config;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setConfigurationAssignment( TunerType type,
|
||||
String uniqueID,
|
||||
String tunerConfigurationName )
|
||||
{
|
||||
TunerConfigurationAssignment config = getConfigurationAssignment( type, uniqueID );
|
||||
|
||||
if( config == null )
|
||||
{
|
||||
config = new TunerConfigurationAssignment();
|
||||
config.setTunerType( type );
|
||||
config.setUniqueID( uniqueID );
|
||||
addSelectedTunerConfiguration( config );
|
||||
}
|
||||
|
||||
config.setTunerConfigurationName( tunerConfigurationName );
|
||||
}
|
||||
|
||||
public MapViewSetting getMapViewSetting( String name )
|
||||
{
|
||||
for( Setting setting: mSettings )
|
||||
|
||||
@@ -31,6 +31,8 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.xml.bind.JAXBContext;
|
||||
@@ -45,6 +47,8 @@ import org.jdesktop.swingx.mapviewer.GeoPosition;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import controller.ThreadPoolManager;
|
||||
import playlist.PlaylistManager.PlaylistSaveTask;
|
||||
import properties.SystemProperties;
|
||||
import sample.Listener;
|
||||
import settings.ColorSetting.ColorSettingName;
|
||||
@@ -72,14 +76,19 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
new HashMap<String,ImageIcon>();
|
||||
|
||||
private TunerConfigurationModel mTunerConfigurationModel;
|
||||
private boolean mLoading = false;
|
||||
private ThreadPoolManager mThreadPoolManager;
|
||||
|
||||
private boolean mLoadingSettings = false;
|
||||
private AtomicBoolean mSettingsSavePending = new AtomicBoolean();
|
||||
|
||||
public SettingsManager( TunerConfigurationModel tunerConfigurationModel )
|
||||
public SettingsManager( ThreadPoolManager threadPoolManager,
|
||||
TunerConfigurationModel tunerConfigurationModel )
|
||||
{
|
||||
//TODO: move settings and icons into a SettingsModel and an IconModel
|
||||
//and update this class to only provide loading, saving, and model
|
||||
//change detection producing a save.
|
||||
|
||||
|
||||
mThreadPoolManager = threadPoolManager;
|
||||
mTunerConfigurationModel = tunerConfigurationModel;
|
||||
|
||||
//Register for tuner config events so that we can save the settings
|
||||
@@ -112,9 +121,9 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
@Override
|
||||
public void receive( TunerConfigurationEvent t )
|
||||
{
|
||||
if( !mLoading )
|
||||
if( !mLoadingSettings )
|
||||
{
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,7 +205,7 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
|
||||
broadcastSettingChange( setting );
|
||||
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
}
|
||||
|
||||
public void resetColorSetting( ColorSettingName name )
|
||||
@@ -242,7 +251,7 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
|
||||
broadcastSettingChange( setting );
|
||||
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
}
|
||||
|
||||
public MapIcon[] getMapIcons()
|
||||
@@ -339,7 +348,7 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
|
||||
broadcastSettingDeleted( existing );
|
||||
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -362,7 +371,7 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
existing.setName( icon.getName() );
|
||||
existing.setPath( icon.getPath() );
|
||||
broadcastSettingChange( existing );
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -379,7 +388,7 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
existing.setName( newName );
|
||||
existing.setPath( newPath );
|
||||
broadcastSettingChange( existing );
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -539,7 +548,7 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
|
||||
defaultIconSetting.setName( icon.getName() );
|
||||
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
|
||||
broadcastSettingChange( defaultIconSetting );
|
||||
}
|
||||
@@ -553,7 +562,7 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
{
|
||||
mSettings.addSetting( setting );
|
||||
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
|
||||
broadcastSettingChange( setting );
|
||||
}
|
||||
@@ -566,13 +575,13 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
public void addRecordingConfiguration( RecordingConfiguration config )
|
||||
{
|
||||
mSettings.addRecordingConfiguration( config );
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
}
|
||||
|
||||
public void removeRecordingConfiguration( RecordingConfiguration config )
|
||||
{
|
||||
mSettings.removeRecordingConfiguration( config );
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
}
|
||||
|
||||
public MapViewSetting getMapViewSetting( String name, GeoPosition position, int zoom )
|
||||
@@ -600,11 +609,12 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
loc.setGeoPosition( position );
|
||||
loc.setZoom( zoom );
|
||||
|
||||
save();
|
||||
scheduleSettingsSave();
|
||||
}
|
||||
|
||||
public void save()
|
||||
private void save()
|
||||
{
|
||||
mLog.debug( "Saving settings" );
|
||||
saveTunerConfigurationModel();
|
||||
|
||||
JAXBContext context = null;
|
||||
@@ -685,7 +695,7 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
*/
|
||||
public void load( Path settingsPath )
|
||||
{
|
||||
mLoading = true;
|
||||
mLoadingSettings = true;
|
||||
|
||||
if( Files.exists( settingsPath ) )
|
||||
{
|
||||
@@ -748,7 +758,7 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
|
||||
loadTunerConfigurationModel();
|
||||
|
||||
mLoading = false;
|
||||
mLoadingSettings = false;
|
||||
}
|
||||
|
||||
private void loadTunerConfigurationModel()
|
||||
@@ -818,4 +828,35 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
|
||||
{
|
||||
mListeners.remove( listener );
|
||||
}
|
||||
|
||||
/**
|
||||
* Schedules a settings save task. Subsequent calls to this method will be ignored until the
|
||||
* save event occurs, thus limiting repetitive saving to a minimum.
|
||||
*/
|
||||
private void scheduleSettingsSave()
|
||||
{
|
||||
if( !mLoadingSettings )
|
||||
{
|
||||
if( mSettingsSavePending.compareAndSet( false, true ) )
|
||||
{
|
||||
mThreadPoolManager.scheduleOnce( new SettingsSaveTask(),
|
||||
2, TimeUnit.SECONDS );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the settings save pending flag to false and proceeds to save the
|
||||
* settings.
|
||||
*/
|
||||
public class SettingsSaveTask implements Runnable
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
mSettingsSavePending.set( false );
|
||||
|
||||
save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user