diff options
author | f4exb <f4exb06@gmail.com> | 2017-10-31 22:37:57 +0100 |
---|---|---|
committer | f4exb <f4exb06@gmail.com> | 2017-10-31 22:37:57 +0100 |
commit | e206fc84a8fcf35a4a498825ff8255afea837415 (patch) | |
tree | 58d654bcf0d3b078833f2b74c1ba55bd7a62f464 /sdrgui | |
parent | c0afeaefa3a18488556c1c73548bfc88a99c55f3 (diff) |
Create channel registration methods for the Tx part in DeviceUISet
Diffstat (limited to 'sdrgui')
-rw-r--r-- | sdrgui/device/devicesinkapi.h | 8 | ||||
-rw-r--r-- | sdrgui/device/deviceuiset.cpp | 176 | ||||
-rw-r--r-- | sdrgui/device/deviceuiset.h | 21 | ||||
-rw-r--r-- | sdrgui/mainwindow.cpp | 6 |
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 |