summaryrefslogtreecommitdiff
path: root/sdrgui
diff options
context:
space:
mode:
authorf4exb <f4exb06@gmail.com>2017-10-31 22:37:57 +0100
committerf4exb <f4exb06@gmail.com>2017-10-31 22:37:57 +0100
commite206fc84a8fcf35a4a498825ff8255afea837415 (patch)
tree58d654bcf0d3b078833f2b74c1ba55bd7a62f464 /sdrgui
parentc0afeaefa3a18488556c1c73548bfc88a99c55f3 (diff)
Create channel registration methods for the Tx part in DeviceUISet
Diffstat (limited to 'sdrgui')
-rw-r--r--sdrgui/device/devicesinkapi.h8
-rw-r--r--sdrgui/device/deviceuiset.cpp176
-rw-r--r--sdrgui/device/deviceuiset.h21
-rw-r--r--sdrgui/mainwindow.cpp6
4 files changed, 173 insertions, 38 deletions
diff --git a/sdrgui/device/devicesinkapi.h b/sdrgui/device/devicesinkapi.h
index 100f25993..73f844dd4 100644
--- a/sdrgui/device/devicesinkapi.h
+++ b/sdrgui/device/devicesinkapi.h
@@ -67,9 +67,12 @@ public:
MessageQueue *getSampleSinkInputMessageQueue();
MessageQueue *getSampleSinkGUIMessageQueue();
- // device related stuff
+ // device GUI related stuff
void addChannelMarker(ChannelMarker* channelMarker); //!< Add channel marker to spectrum
void addRollupWidget(QWidget *widget); //!< Add rollup widget to channel window
+ void freeChannels();
+ void loadChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
+ void saveChannelSettings(Preset* preset);
void setHardwareId(const QString& id);
void setSampleSinkId(const QString& id);
@@ -91,12 +94,9 @@ public:
void registerChannelInstance(const QString& channelName, PluginInstanceGUI* pluginGUI);
void removeChannelInstance(PluginInstanceGUI* pluginGUI);
- void freeChannels();
void loadSinkSettings(const Preset* preset);
void saveSinkSettings(Preset* preset);
- void loadChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
- void saveChannelSettings(Preset* preset);
DSPDeviceSinkEngine *getDeviceSinkEngine() { return m_deviceSinkEngine; }
diff --git a/sdrgui/device/deviceuiset.cpp b/sdrgui/device/deviceuiset.cpp
index 3a53f4909..2957e97b8 100644
--- a/sdrgui/device/deviceuiset.cpp
+++ b/sdrgui/device/deviceuiset.cpp
@@ -73,36 +73,65 @@ void DeviceUISet::addRollupWidget(QWidget *widget)
m_channelWindow->addRollupWidget(widget);
}
-void DeviceUISet::registerChannelInstance(const QString& channelName, PluginInstanceGUI* pluginGUI)
+void DeviceUISet::registerRxChannelInstance(const QString& channelName, PluginInstanceGUI* pluginGUI)
{
- m_channelInstanceRegistrations.append(ChannelInstanceRegistration(channelName, pluginGUI));
- renameChannelInstances();
+ m_rxChannelInstanceRegistrations.append(ChannelInstanceRegistration(channelName, pluginGUI));
+ renameRxChannelInstances();
}
-void DeviceUISet::removeChannelInstance(PluginInstanceGUI* pluginGUI)
+void DeviceUISet::registerTxChannelInstance(const QString& channelName, PluginInstanceGUI* pluginGUI)
{
- for(ChannelInstanceRegistrations::iterator it = m_channelInstanceRegistrations.begin(); it != m_channelInstanceRegistrations.end(); ++it)
+ m_txChannelInstanceRegistrations.append(ChannelInstanceRegistration(channelName, pluginGUI));
+ renameRxChannelInstances();
+}
+
+void DeviceUISet::removeRxChannelInstance(PluginInstanceGUI* pluginGUI)
+{
+ for(ChannelInstanceRegistrations::iterator it = m_rxChannelInstanceRegistrations.begin(); it != m_rxChannelInstanceRegistrations.end(); ++it)
+ {
+ if(it->m_gui == pluginGUI)
+ {
+ m_rxChannelInstanceRegistrations.erase(it);
+ break;
+ }
+ }
+
+ renameRxChannelInstances();
+}
+
+void DeviceUISet::removeTxChannelInstance(PluginInstanceGUI* pluginGUI)
+{
+ for(ChannelInstanceRegistrations::iterator it = m_txChannelInstanceRegistrations.begin(); it != m_txChannelInstanceRegistrations.end(); ++it)
{
if(it->m_gui == pluginGUI)
{
- m_channelInstanceRegistrations.erase(it);
+ m_txChannelInstanceRegistrations.erase(it);
break;
}
}
- renameChannelInstances();
+ renameRxChannelInstances();
+}
+
+void DeviceUISet::freeRxChannels()
+{
+ for(int i = 0; i < m_rxChannelInstanceRegistrations.count(); i++)
+ {
+ qDebug("DeviceUISet::freeAll: destroying channel [%s]", qPrintable(m_rxChannelInstanceRegistrations[i].m_channelName));
+ m_rxChannelInstanceRegistrations[i].m_gui->destroy();
+ }
}
-void DeviceUISet::freeChannels()
+void DeviceUISet::freeTxChannels()
{
- for(int i = 0; i < m_channelInstanceRegistrations.count(); i++)
+ for(int i = 0; i < m_txChannelInstanceRegistrations.count(); i++)
{
- qDebug("DeviceUISet::freeAll: destroying channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
- m_channelInstanceRegistrations[i].m_gui->destroy();
+ qDebug("DeviceUISet::freeAll: destroying channel [%s]", qPrintable(m_txChannelInstanceRegistrations[i].m_channelName));
+ m_txChannelInstanceRegistrations[i].m_gui->destroy();
}
}
-void DeviceUISet::loadChannelSettings(const Preset *preset, PluginAPI *pluginAPI)
+void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginAPI)
{
if (preset->isSourcePreset())
{
@@ -112,8 +141,8 @@ void DeviceUISet::loadChannelSettings(const Preset *preset, PluginAPI *pluginAPI
PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getRxChannelRegistrations();
// copy currently open channels and clear list
- ChannelInstanceRegistrations openChannels = m_channelInstanceRegistrations;
- m_channelInstanceRegistrations.clear();
+ ChannelInstanceRegistrations openChannels = m_rxChannelInstanceRegistrations;
+ m_rxChannelInstanceRegistrations.clear();
qDebug("DeviceUISet::loadChannelSettings: %d channel(s) in preset", preset->getChannelCount());
@@ -132,7 +161,7 @@ void DeviceUISet::loadChannelSettings(const Preset *preset, PluginAPI *pluginAPI
{
qDebug("DeviceSourceAPI::loadChannelSettings: channel [%s] found", qPrintable(openChannels[i].m_channelName));
reg = openChannels.takeAt(i);
- m_channelInstanceRegistrations.append(reg);
+ m_rxChannelInstanceRegistrations.append(reg);
break;
}
}
@@ -170,7 +199,7 @@ void DeviceUISet::loadChannelSettings(const Preset *preset, PluginAPI *pluginAPI
openChannels[i].m_gui->destroy();
}
- renameChannelInstances();
+ renameRxChannelInstances();
}
else
{
@@ -178,16 +207,16 @@ void DeviceUISet::loadChannelSettings(const Preset *preset, PluginAPI *pluginAPI
}
}
-void DeviceUISet::saveChannelSettings(Preset *preset)
+void DeviceUISet::saveRxChannelSettings(Preset *preset)
{
if (preset->isSourcePreset())
{
- qSort(m_channelInstanceRegistrations.begin(), m_channelInstanceRegistrations.end()); // sort by increasing delta frequency and type
+ qSort(m_rxChannelInstanceRegistrations.begin(), m_rxChannelInstanceRegistrations.end()); // sort by increasing delta frequency and type
- for(int i = 0; i < m_channelInstanceRegistrations.count(); i++)
+ for(int i = 0; i < m_rxChannelInstanceRegistrations.count(); i++)
{
- qDebug("DeviceUISet::saveChannelSettings: channel [%s] saved", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
- preset->addChannel(m_channelInstanceRegistrations[i].m_channelName, m_channelInstanceRegistrations[i].m_gui->serialize());
+ qDebug("DeviceUISet::saveChannelSettings: channel [%s] saved", qPrintable(m_rxChannelInstanceRegistrations[i].m_channelName));
+ preset->addChannel(m_rxChannelInstanceRegistrations[i].m_channelName, m_rxChannelInstanceRegistrations[i].m_gui->serialize());
}
}
else
@@ -196,11 +225,110 @@ void DeviceUISet::saveChannelSettings(Preset *preset)
}
}
-void DeviceUISet::renameChannelInstances()
+void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI)
+{
+ if (preset->isSourcePreset())
+ {
+ qDebug("DeviceUISet::loadChannelSettings: Loading preset [%s | %s] not a sink preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
+ }
+ else
+ {
+ qDebug("DeviceUISet::loadChannelSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
+
+ // Available channel plugins
+ PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getTxChannelRegistrations();
+
+ // copy currently open channels and clear list
+ ChannelInstanceRegistrations openChannels = m_txChannelInstanceRegistrations;
+ m_txChannelInstanceRegistrations.clear();
+
+ qDebug("DeviceUISet::loadChannelSettings: %d channel(s) in preset", preset->getChannelCount());
+
+ for(int i = 0; i < preset->getChannelCount(); i++)
+ {
+ const Preset::ChannelConfig& channelConfig = preset->getChannelConfig(i);
+ ChannelInstanceRegistration reg;
+
+ // if we have one instance available already, use it
+
+ for(int i = 0; i < openChannels.count(); i++)
+ {
+ qDebug("DeviceUISet::loadChannelSettings: channels compare [%s] vs [%s]", qPrintable(openChannels[i].m_channelName), qPrintable(channelConfig.m_channel));
+
+ if(openChannels[i].m_channelName == channelConfig.m_channel)
+ {
+ qDebug("DeviceUISet::loadChannelSettings: channel [%s] found", qPrintable(openChannels[i].m_channelName));
+ reg = openChannels.takeAt(i);
+ m_txChannelInstanceRegistrations.append(reg);
+ break;
+ }
+ }
+
+ // if we haven't one already, create one
+
+ if(reg.m_gui == 0)
+ {
+ for(int i = 0; i < channelRegistrations->count(); i++)
+ {
+ if((*channelRegistrations)[i].m_channelName == channelConfig.m_channel)
+ {
+ qDebug("DeviceUISet::loadChannelSettings: creating new channel [%s]", qPrintable(channelConfig.m_channel));
+ // TODO: replace m_deviceSinkAPI by this
+ reg = ChannelInstanceRegistration(channelConfig.m_channel, (*channelRegistrations)[i].m_plugin->createTxChannel(channelConfig.m_channel, m_deviceSinkAPI));
+ break;
+ }
+ }
+ }
+
+ if(reg.m_gui != 0)
+ {
+ qDebug("DeviceUISet::loadChannelSettings: deserializing channel [%s]", qPrintable(channelConfig.m_channel));
+ reg.m_gui->deserialize(channelConfig.m_config);
+ }
+ }
+
+ // everything, that is still "available" is not needed anymore
+ for(int i = 0; i < openChannels.count(); i++)
+ {
+ qDebug("DeviceUISet::loadChannelSettings: destroying spare channel [%s]", qPrintable(openChannels[i].m_channelName));
+ openChannels[i].m_gui->destroy();
+ }
+
+ renameTxChannelInstances();
+ }
+}
+
+void DeviceUISet::saveTxChannelSettings(Preset *preset)
+{
+ if (preset->isSourcePreset())
+ {
+ qDebug("DeviceUISet::saveChannelSettings: not a sink preset");
+ }
+ else
+ {
+ qSort(m_txChannelInstanceRegistrations.begin(), m_txChannelInstanceRegistrations.end()); // sort by increasing delta frequency and type
+
+ for(int i = 0; i < m_txChannelInstanceRegistrations.count(); i++)
+ {
+ qDebug("DeviceUISet::saveChannelSettings: channel [%s] saved", qPrintable(m_txChannelInstanceRegistrations[i].m_channelName));
+ preset->addChannel(m_txChannelInstanceRegistrations[i].m_channelName, m_txChannelInstanceRegistrations[i].m_gui->serialize());
+ }
+ }
+}
+
+void DeviceUISet::renameRxChannelInstances()
+{
+ for(int i = 0; i < m_rxChannelInstanceRegistrations.count(); i++)
+ {
+ m_rxChannelInstanceRegistrations[i].m_gui->setName(QString("%1:%2").arg(m_rxChannelInstanceRegistrations[i].m_channelName).arg(i));
+ }
+}
+
+void DeviceUISet::renameTxChannelInstances()
{
- for(int i = 0; i < m_channelInstanceRegistrations.count(); i++)
+ for(int i = 0; i < m_txChannelInstanceRegistrations.count(); i++)
{
- m_channelInstanceRegistrations[i].m_gui->setName(QString("%1:%2").arg(m_channelInstanceRegistrations[i].m_channelName).arg(i));
+ m_txChannelInstanceRegistrations[i].m_gui->setName(QString("%1:%2").arg(m_txChannelInstanceRegistrations[i].m_channelName).arg(i));
}
}
diff --git a/sdrgui/device/deviceuiset.h b/sdrgui/device/deviceuiset.h
index e0bd7de98..a0e7b946a 100644
--- a/sdrgui/device/deviceuiset.h
+++ b/sdrgui/device/deviceuiset.h
@@ -51,11 +51,16 @@ struct DeviceUISet
void addChannelMarker(ChannelMarker* channelMarker); //!< Add channel marker to spectrum
void addRollupWidget(QWidget *widget); //!< Add rollup widget to channel window
- void registerChannelInstance(const QString& channelName, PluginInstanceGUI* pluginGUI);
- void removeChannelInstance(PluginInstanceGUI* pluginGUI);
- void freeChannels();
- void loadChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
- void saveChannelSettings(Preset* preset);
+ void registerRxChannelInstance(const QString& channelName, PluginInstanceGUI* pluginGUI);
+ void registerTxChannelInstance(const QString& channelName, PluginInstanceGUI* pluginGUI);
+ void removeRxChannelInstance(PluginInstanceGUI* pluginGUI);
+ void removeTxChannelInstance(PluginInstanceGUI* pluginGUI);
+ void freeRxChannels();
+ void freeTxChannels();
+ void loadRxChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
+ void saveRxChannelSettings(Preset* preset);
+ void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
+ void saveTxChannelSettings(Preset* preset);
private:
struct ChannelInstanceRegistration
@@ -78,9 +83,11 @@ private:
typedef QList<ChannelInstanceRegistration> ChannelInstanceRegistrations;
- ChannelInstanceRegistrations m_channelInstanceRegistrations;
+ ChannelInstanceRegistrations m_rxChannelInstanceRegistrations;
+ ChannelInstanceRegistrations m_txChannelInstanceRegistrations;
- void renameChannelInstances();
+ void renameRxChannelInstances();
+ void renameTxChannelInstances();
};
diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp
index 83e3ea0e9..696927d25 100644
--- a/sdrgui/mainwindow.cpp
+++ b/sdrgui/mainwindow.cpp
@@ -330,7 +330,7 @@ void MainWindow::removeLastDevice()
ui->tabSpectra->removeTab(ui->tabSpectra->count() - 1);
// deletes old UI and input object
- m_deviceUIs.back()->freeChannels(); // destroys the channel instances
+ m_deviceUIs.back()->freeRxChannels(); // destroys the channel instances
m_deviceUIs.back()->m_deviceSourceAPI->getSampleSource()->setMessageQueueToGUI(0); // have source stop sending messages to the GUI
m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI(
m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourcePluginInstanceGUI());
@@ -479,7 +479,7 @@ void MainWindow::loadPresetSettings(const Preset* preset, int tabIndex)
{
deviceUI->m_spectrumGUI->deserialize(preset->getSpectrumConfig());
deviceUI->m_deviceSourceAPI->loadSourceSettings(preset);
- deviceUI->loadChannelSettings(preset, m_pluginManager->getPluginAPI());
+ deviceUI->loadRxChannelSettings(preset, m_pluginManager->getPluginAPI());
}
else if (deviceUI->m_deviceSinkEngine) // sink device
{
@@ -507,7 +507,7 @@ void MainWindow::savePresetSettings(Preset* preset, int tabIndex)
{
preset->setSpectrumConfig(deviceUI->m_spectrumGUI->serialize());
preset->clearChannels();
- deviceUI->saveChannelSettings(preset);
+ deviceUI->saveRxChannelSettings(preset);
deviceUI->m_deviceSourceAPI->saveSourceSettings(preset);
}
else if (deviceUI->m_deviceSinkEngine) // sink device