#1257 restores recording tuner feature. sdrtrunk now supports multiple recording tuners. Recordings are automatically loaded/restored on application start and each recording tuner has to be manually enabled for use. (#1258)

Co-authored-by: Dennis Sheirer <dsheirer@github.com>
This commit is contained in:
Denny Sheirer
2022-05-22 08:24:42 -04:00
committed by GitHub
parent d0033578d5
commit fc5c6ef841
10 changed files with 486 additions and 355 deletions

View File

@@ -0,0 +1,96 @@
/*
* *****************************************************************************
* Copyright (C) 2014-2022 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 io.github.dsheirer.source.tuner.manager;
import io.github.dsheirer.preference.UserPreferences;
import io.github.dsheirer.source.SourceException;
import io.github.dsheirer.source.tuner.TunerClass;
import io.github.dsheirer.source.tuner.recording.RecordingTuner;
import io.github.dsheirer.source.tuner.recording.RecordingTunerConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Discovered tuner for recording tuner type.
*/
public class DiscoveredRecordingTuner extends DiscoveredTuner
{
private static final Logger mLog = LoggerFactory.getLogger(DiscoveredRecordingTuner.class);
private UserPreferences mUserPreferences;
/**
* Constructs an instance
* @param userPreferences instance
* @param recordingTunerConfiguration with recording path and frequency
*/
public DiscoveredRecordingTuner(UserPreferences userPreferences,
RecordingTunerConfiguration recordingTunerConfiguration)
{
mUserPreferences = userPreferences;
setTunerConfiguration(recordingTunerConfiguration);
//Default all recordings to be disabled on startup
setEnabled(false);
}
/**
* Access the tuner configuration as a recording tuner configuration
*/
public RecordingTunerConfiguration getRecordingTunerConfiguration()
{
return (RecordingTunerConfiguration) getTunerConfiguration();
}
@Override
public TunerClass getTunerClass()
{
return TunerClass.RECORDING_TUNER;
}
@Override
public String getId()
{
return getRecordingTunerConfiguration().getPath();
}
@Override
public void start()
{
if(!hasTuner())
{
mTuner = new RecordingTuner(mUserPreferences, this, getRecordingTunerConfiguration());
try
{
mTuner.start();
}
catch(SourceException se)
{
setErrorMessage("Error - " + se.getMessage());
}
}
}
@Override
public String toString()
{
return "Recording [" + getRecordingTunerConfiguration().getPath() + "]";
}
}

View File

@@ -35,6 +35,7 @@ import io.github.dsheirer.source.tuner.channel.TunerChannel;
import io.github.dsheirer.source.tuner.channel.TunerChannelSource;
import io.github.dsheirer.source.tuner.configuration.TunerConfiguration;
import io.github.dsheirer.source.tuner.configuration.TunerConfigurationManager;
import io.github.dsheirer.source.tuner.recording.RecordingTunerConfiguration;
import io.github.dsheirer.source.tuner.ui.DiscoveredTunerModel;
import io.github.dsheirer.util.ThreadPool;
import java.nio.ByteBuffer;
@@ -89,6 +90,14 @@ public class TunerManager implements IDiscoveredTunerStatusListener
return mDiscoveredTunerModel;
}
/**
* Tuner configuration manager
*/
public TunerConfigurationManager getTunerConfigurationManager()
{
return mTunerConfigurationManager;
}
/**
* Starts the tuner manager and loads all available tuners
*/
@@ -290,7 +299,26 @@ public class TunerManager implements IDiscoveredTunerStatusListener
*/
private void discoverRecordingTuners()
{
//placeholder
List<TunerConfiguration> tunerConfigurations = getTunerConfigurationManager().getTunerConfigurations(TunerType.RECORDING);
if(tunerConfigurations.size() > 0)
{
mLog.info("Discovered [" + tunerConfigurations.size() + "] recording tuners");
}
for(TunerConfiguration tunerConfiguration: tunerConfigurations)
{
if(tunerConfiguration instanceof RecordingTunerConfiguration recordingTunerConfiguration)
{
DiscoveredRecordingTuner discoveredRecordingTuner =
new DiscoveredRecordingTuner(mUserPreferences, recordingTunerConfiguration);
discoveredRecordingTuner.addTunerStatusListener(this);
discoveredRecordingTuner.setEnabled(false);
mLog.info("Tuner Added: " + discoveredRecordingTuner);
mDiscoveredTunerModel.addDiscoveredTuner(discoveredRecordingTuner);
}
}
}
/**
@@ -315,13 +343,17 @@ public class TunerManager implements IDiscoveredTunerStatusListener
{
TunerType tunerType = discoveredTuner.getTuner().getTunerType();
TunerConfiguration tunerConfiguration = mTunerConfigurationManager
.getTunerConfiguration(tunerType, discoveredTuner.getId());
if(tunerConfiguration != null)
//Don't fetch or create a configuration for recording tuners
if(tunerType != TunerType.RECORDING)
{
discoveredTuner.setTunerConfiguration(tunerConfiguration);
mTunerConfigurationManager.saveConfigurations();
TunerConfiguration tunerConfiguration = mTunerConfigurationManager
.getTunerConfiguration(tunerType, discoveredTuner.getId());
if(tunerConfiguration != null)
{
discoveredTuner.setTunerConfiguration(tunerConfiguration);
mTunerConfigurationManager.saveConfigurations();
}
}
}
}