Multi device support: load and save source presets moved to device API

This commit is contained in:
f4exb 2016-05-16 17:47:22 +02:00
parent bb8c3a305f
commit 9e77782da9
5 changed files with 133 additions and 49 deletions

View File

@ -19,6 +19,7 @@
#include "gui/glspectrum.h"
#include "gui/channelwindow.h"
#include "mainwindow.h"
#include "settings/preset.h"
DeviceAPI::DeviceAPI(MainWindow *mainWindow,
int deviceTabIndex,
@ -109,11 +110,6 @@ void DeviceAPI::configureCorrections(bool dcOffsetCorrection, bool iqImbalanceCo
m_deviceEngine->configureCorrections(dcOffsetCorrection, iqImbalanceCorrection);
}
void DeviceAPI::setSourceSequence(int sourceSequence)
{
m_deviceEngine->setSourceSequence(sourceSequence);
}
GLSpectrum *DeviceAPI::getSpectrum()
{
return m_spectrum;
@ -152,6 +148,7 @@ void DeviceAPI::setSampleSourceSerial(const QString& serial)
void DeviceAPI::setSampleSourceSequence(int sequence)
{
m_sampleSourceSequence = sequence;
m_deviceEngine->setSourceSequence(sequence);
}
void DeviceAPI::setSampleSourcePluginGUI(PluginGUI *gui)
@ -171,3 +168,53 @@ void DeviceAPI::freeAll()
m_sampleSourceId.clear();
}
}
void DeviceAPI::loadSourceSettings(const Preset* preset)
{
qDebug("DeviceAPI::loadSourceSettings: Loading preset [%s | %s]\n", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
if(m_sampleSourcePluginGUI != 0)
{
const QByteArray* sourceConfig = preset->findBestSourceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence);
if (sourceConfig != 0)
{
qDebug() << "DeviceAPI::loadSettings: deserializing source " << qPrintable(m_sampleSourceId);
m_sampleSourcePluginGUI->deserialize(*sourceConfig);
}
qint64 centerFrequency = preset->getCenterFrequency();
m_sampleSourcePluginGUI->setCenterFrequency(centerFrequency);
}
}
void DeviceAPI::saveSourceSettings(Preset* preset)
{
qDebug("DeviceAPI::saveSourceSettings");
if(m_sampleSourcePluginGUI != NULL)
{
preset->addOrUpdateSourceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence, m_sampleSourcePluginGUI->serialize());
preset->setCenterFrequency(m_sampleSourcePluginGUI->getCenterFrequency());
}
}
// sort by increasing delta frequency and type (i.e. name)
bool DeviceAPI::ChannelInstanceRegistration::operator<(const ChannelInstanceRegistration& other) const
{
if (m_gui && other.m_gui)
{
if (m_gui->getCenterFrequency() == other.m_gui->getCenterFrequency())
{
return m_gui->getName() < other.m_gui->getName();
}
else
{
return m_gui->getCenterFrequency() < other.m_gui->getCenterFrequency();
}
}
else
{
return false;
}
}

View File

@ -35,6 +35,7 @@ class MessageQueue;
class ChannelMarker;
class QWidget;
class PluginGUI;
class Preset;
class SDRANGEL_API DeviceAPI : public QObject {
Q_OBJECT
@ -56,8 +57,6 @@ public:
MessageQueue *getDeviceOutputMessageQueue();
void configureCorrections(bool dcOffsetCorrection, bool iqImbalanceCorrection); //!< Configure current device engine DSP corrections
void setSourceSequence(int sourceSequence);
// device related stuff
GLSpectrum *getSpectrum(); //!< Direct spectrum getter
void addChannelMarker(ChannelMarker* channelMarker); //!< Add channel marker to spectrum
@ -72,7 +71,30 @@ public:
void freeAll();
void loadSourceSettings(const Preset* preset);
void saveSourceSettings(Preset* preset);
protected:
struct ChannelInstanceRegistration
{
QString m_channelName;
PluginGUI* m_gui;
ChannelInstanceRegistration() :
m_channelName(),
m_gui(NULL)
{ }
ChannelInstanceRegistration(const QString& channelName, PluginGUI* pluginGUI) :
m_channelName(channelName),
m_gui(pluginGUI)
{ }
bool operator<(const ChannelInstanceRegistration& other) const;
};
typedef QList<ChannelInstanceRegistration> ChannelInstanceRegistrations;
DeviceAPI(MainWindow *mainWindow,
int deviceTabIndex,
DSPDeviceEngine *deviceEngine,
@ -91,6 +113,8 @@ protected:
int m_sampleSourceSequence;
PluginGUI* m_sampleSourcePluginGUI;
ChannelInstanceRegistrations m_channelInstanceRegistrations;
friend class MainWindow;
};

View File

@ -317,6 +317,7 @@ void MainWindow::loadPresetSettings(const Preset* preset)
DeviceUISet *deviceUI = m_deviceUIs[currentSourceTabIndex];
deviceUI->m_spectrumGUI->deserialize(preset->getSpectrumConfig());
deviceUI->m_pluginManager->loadSettings(preset, deviceUI->m_deviceAPI);
deviceUI->m_deviceAPI->loadSourceSettings(preset);
}
// has to be last step
@ -344,6 +345,7 @@ void MainWindow::savePresetSettings(Preset* preset)
preset->setSpectrumConfig(deviceUI->m_spectrumGUI->serialize());
preset->clearChannels();
deviceUI->m_pluginManager->saveSettings(preset);
deviceUI->m_deviceAPI->saveSourceSettings(preset);
preset->setLayout(saveState());
}
@ -673,11 +675,13 @@ void MainWindow::on_sampleSource_currentIndexChanged(int index)
if (currentSourceTabIndex >= 0)
{
DeviceUISet *deviceUI = m_deviceUIs[currentSourceTabIndex];
deviceUI->m_pluginManager->saveSourceSettings(m_settings.getWorkingPreset());
deviceUI->m_deviceAPI->saveSourceSettings(m_settings.getWorkingPreset());
//deviceUI->m_pluginManager->saveSourceSettings(m_settings.getWorkingPreset());
deviceUI->m_pluginManager->selectSampleSourceByIndex(deviceUI->m_samplingDeviceControl->getDeviceSelector()->currentIndex(), deviceUI->m_deviceAPI);
m_settings.setSourceIndex(deviceUI->m_samplingDeviceControl->getDeviceSelector()->currentIndex());
deviceUI->m_pluginManager->loadSourceSettings(m_settings.getWorkingPreset());
//deviceUI->m_pluginManager->loadSourceSettings(m_settings.getWorkingPreset());
deviceUI->m_deviceAPI->loadSourceSettings(m_settings.getWorkingPreset());
}
}

View File

@ -144,27 +144,27 @@ void PluginManager::loadSettings(const Preset* preset, DeviceAPI *deviceAPI)
renameChannelInstances();
loadSourceSettings(preset);
// loadSourceSettings(preset); // FIXME
}
void PluginManager::loadSourceSettings(const Preset* preset)
{
fprintf(stderr, "PluginManager::loadSourceSettings: Loading preset [%s | %s]\n", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
if(m_sampleSourcePluginGUI != 0)
{
const QByteArray* sourceConfig = preset->findBestSourceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence);
if (sourceConfig != 0)
{
qDebug() << "PluginManager::loadSettings: deserializing source " << qPrintable(m_sampleSourceId);
m_sampleSourcePluginGUI->deserialize(*sourceConfig);
}
qint64 centerFrequency = preset->getCenterFrequency();
m_sampleSourcePluginGUI->setCenterFrequency(centerFrequency);
}
}
//void PluginManager::loadSourceSettings(const Preset* preset)
//{
// fprintf(stderr, "PluginManager::loadSourceSettings: Loading preset [%s | %s]\n", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
//
// if(m_sampleSourcePluginGUI != 0)
// {
// const QByteArray* sourceConfig = preset->findBestSourceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence);
//
// if (sourceConfig != 0)
// {
// qDebug() << "PluginManager::loadSettings: deserializing source " << qPrintable(m_sampleSourceId);
// m_sampleSourcePluginGUI->deserialize(*sourceConfig);
// }
//
// qint64 centerFrequency = preset->getCenterFrequency();
// m_sampleSourcePluginGUI->setCenterFrequency(centerFrequency);
// }
//}
// sort by increasing delta frequency and type (i.e. name)
bool PluginManager::ChannelInstanceRegistration::operator<(const ChannelInstanceRegistration& other) const {
@ -182,7 +182,7 @@ bool PluginManager::ChannelInstanceRegistration::operator<(const ChannelInstance
void PluginManager::saveSettings(Preset* preset)
{
qDebug("PluginManager::saveSettings");
saveSourceSettings(preset);
// saveSourceSettings(preset); // FIXME
qSort(m_channelInstanceRegistrations.begin(), m_channelInstanceRegistrations.end()); // sort by increasing delta frequency and type
@ -192,17 +192,17 @@ void PluginManager::saveSettings(Preset* preset)
}
}
void PluginManager::saveSourceSettings(Preset* preset)
{
qDebug("PluginManager::saveSourceSettings");
if(m_sampleSourcePluginGUI != NULL)
{
preset->addOrUpdateSourceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence, m_sampleSourcePluginGUI->serialize());
//preset->setSourceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence, m_sampleSourcePluginGUI->serialize());
preset->setCenterFrequency(m_sampleSourcePluginGUI->getCenterFrequency());
}
}
//void PluginManager::saveSourceSettings(Preset* preset)
//{
// qDebug("PluginManager::saveSourceSettings");
//
// if(m_sampleSourcePluginGUI != NULL)
// {
// preset->addOrUpdateSourceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence, m_sampleSourcePluginGUI->serialize());
// //preset->setSourceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence, m_sampleSourcePluginGUI->serialize());
// preset->setCenterFrequency(m_sampleSourcePluginGUI->getCenterFrequency());
// }
//}
void PluginManager::freeAll()
{
@ -317,7 +317,10 @@ int PluginManager::selectSampleSourceByIndex(int index, DeviceAPI *deviceAPI)
PluginGUI *pluginGUI = m_sampleSourceDevices[index].m_plugin->createSampleSourcePluginGUI(m_sampleSourceId, m_sampleSourceDevices[index].m_displayName, deviceAPI);
m_sampleSourcePluginGUI = pluginGUI;
deviceAPI->setSourceSequence(m_sampleSourceSequence);
deviceAPI->setSampleSourceSequence(m_sampleSourceDevices[index].m_sourceSequence);
deviceAPI->setSampleSourceId(m_sampleSourceDevices[index].m_sourceId);
deviceAPI->setSampleSourceSerial(m_sampleSourceDevices[index].m_sourceSerial);
deviceAPI->setSampleSourcePluginGUI(pluginGUI);
return index;
}
@ -372,7 +375,10 @@ int PluginManager::selectFirstSampleSource(const QString& sourceId, DeviceAPI *d
PluginGUI *pluginGUI = m_sampleSourceDevices[index].m_plugin->createSampleSourcePluginGUI(m_sampleSourceId, m_sampleSourceDevices[index].m_displayName, deviceAPI);
m_sampleSourcePluginGUI = pluginGUI;
deviceAPI->setSourceSequence(m_sampleSourceSequence);
deviceAPI->setSampleSourceSequence(m_sampleSourceDevices[index].m_sourceSequence);
deviceAPI->setSampleSourceId(m_sampleSourceDevices[index].m_sourceId);
deviceAPI->setSampleSourceSerial(m_sampleSourceDevices[index].m_sourceSerial);
deviceAPI->setSampleSourcePluginGUI(pluginGUI);
return index;
}
@ -441,7 +447,10 @@ int PluginManager::selectSampleSourceBySerialOrSequence(const QString& sourceId,
PluginGUI *pluginGUI = m_sampleSourceDevices[index].m_plugin->createSampleSourcePluginGUI(m_sampleSourceId, m_sampleSourceDevices[index].m_displayName, deviceAPI);
m_sampleSourcePluginGUI = pluginGUI;
deviceAPI->setSourceSequence(m_sampleSourceSequence);
deviceAPI->setSampleSourceSequence(m_sampleSourceDevices[index].m_sourceSequence);
deviceAPI->setSampleSourceId(m_sampleSourceDevices[index].m_sourceId);
deviceAPI->setSampleSourceSerial(m_sampleSourceDevices[index].m_sourceSerial);
deviceAPI->setSampleSourcePluginGUI(pluginGUI);
return index;
}

View File

@ -48,9 +48,9 @@ public:
void registerSampleSource(const QString& sourceName, PluginInterface* plugin);
void loadSettings(const Preset* preset, DeviceAPI *deviceAPI);
void loadSourceSettings(const Preset* preset);
// void loadSourceSettings(const Preset* preset);
void saveSettings(Preset* preset);
void saveSourceSettings(Preset* preset);
// void saveSourceSettings(Preset* preset);
void freeAll();
@ -129,10 +129,10 @@ private:
DSPDeviceEngine* m_dspDeviceEngine;
Plugins m_plugins;
ChannelRegistrations m_channelRegistrations;
ChannelInstanceRegistrations m_channelInstanceRegistrations;
SampleSourceRegistrations m_sampleSourceRegistrations;
SampleSourceDevices m_sampleSourceDevices;
ChannelRegistrations m_channelRegistrations; //!< Channel plugins register here
ChannelInstanceRegistrations m_channelInstanceRegistrations; // TODO: remove
SampleSourceRegistrations m_sampleSourceRegistrations; //!< Input source plugins (one per device kind) register here
SampleSourceDevices m_sampleSourceDevices; //!< Instances of input sources present in the system
QString m_sampleSourceId;
QString m_sampleSourceSerial;