diff --git a/sdrbase/device/deviceset.cpp b/sdrbase/device/deviceset.cpp index 9f0d26e8b..cb2b2c463 100644 --- a/sdrbase/device/deviceset.cpp +++ b/sdrbase/device/deviceset.cpp @@ -92,40 +92,40 @@ void DeviceSet::deleteChannel(int channelIndex) } } -void DeviceSet::addRxChannel(int selectedChannelIndex, PluginAPI *pluginAPI) +ChannelAPI *DeviceSet::addRxChannel(int selectedChannelIndex, PluginAPI *pluginAPI) { PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getRxChannelRegistrations(); // Available channel plugins ChannelAPI *rxChannel; (*channelRegistrations)[selectedChannelIndex].m_plugin->createRxChannel(m_deviceAPI, nullptr, &rxChannel); - ChannelAPI *channelAPI = rxChannel; - m_channelInstanceRegistrations.append(channelAPI); - MainCore::instance()->addChannelInstance(this, channelAPI); + m_channelInstanceRegistrations.append(rxChannel); + MainCore::instance()->addChannelInstance(this, rxChannel); renameChannelInstances(); qDebug("DeviceSet::addRxChannel: %s", qPrintable(rxChannel->getName())); + return rxChannel; } -void DeviceSet::addTxChannel(int selectedChannelIndex, PluginAPI *pluginAPI) +ChannelAPI *DeviceSet::addTxChannel(int selectedChannelIndex, PluginAPI *pluginAPI) { PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getTxChannelRegistrations(); // Available channel plugins ChannelAPI *txChannel; (*channelRegistrations)[selectedChannelIndex].m_plugin->createTxChannel(m_deviceAPI, nullptr, &txChannel); - ChannelAPI *channelAPI = txChannel; - m_channelInstanceRegistrations.append(channelAPI); - MainCore::instance()->addChannelInstance(this, channelAPI); + m_channelInstanceRegistrations.append(txChannel); + MainCore::instance()->addChannelInstance(this, txChannel); renameChannelInstances(); qDebug("DeviceSet::addTxChannel: %s", qPrintable(txChannel->getName())); + return txChannel; } -void DeviceSet::addMIMOChannel(int selectedChannelIndex, PluginAPI *pluginAPI) +ChannelAPI *DeviceSet::addMIMOChannel(int selectedChannelIndex, PluginAPI *pluginAPI) { PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getMIMOChannelRegistrations(); // Available channel plugins ChannelAPI *mimoChannel; (*channelRegistrations)[selectedChannelIndex].m_plugin->createMIMOChannel(m_deviceAPI, nullptr, &mimoChannel); - ChannelAPI *channelAPI = mimoChannel; - m_channelInstanceRegistrations.append(channelAPI); - MainCore::instance()->addChannelInstance(this, channelAPI); + m_channelInstanceRegistrations.append(mimoChannel); + MainCore::instance()->addChannelInstance(this, mimoChannel); renameChannelInstances(); qDebug("DeviceSet::addMIMOChannel: %s", qPrintable(mimoChannel->getName())); + return mimoChannel; } void DeviceSet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginAPI) diff --git a/sdrbase/device/deviceset.h b/sdrbase/device/deviceset.h index 6092d64d8..c4c981d03 100644 --- a/sdrbase/device/deviceset.h +++ b/sdrbase/device/deviceset.h @@ -61,9 +61,9 @@ public: void saveTxChannelSettings(Preset* preset); void loadMIMOChannelSettings(const Preset* preset, PluginAPI *pluginAPI); void saveMIMOChannelSettings(Preset* preset); - void addRxChannel(int selectedChannelIndex, PluginAPI *pluginAPI); - void addTxChannel(int selectedChannelIndex, PluginAPI *pluginAPI); - void addMIMOChannel(int selectedChannelIndex, PluginAPI *pluginAPI); + ChannelAPI *addRxChannel(int selectedChannelIndex, PluginAPI *pluginAPI); + ChannelAPI *addTxChannel(int selectedChannelIndex, PluginAPI *pluginAPI); + ChannelAPI *addMIMOChannel(int selectedChannelIndex, PluginAPI *pluginAPI); // slave mode void addChannelInstance(ChannelAPI *channelAPI); void removeChannelInstanceAt(int index); diff --git a/sdrbase/feature/feature.h b/sdrbase/feature/feature.h index aeac7a18f..29197cc09 100644 --- a/sdrbase/feature/feature.h +++ b/sdrbase/feature/feature.h @@ -136,7 +136,13 @@ public: } int getIndexInFeatureSet() const { return m_indexInFeatureSet; } - void setIndexInFeatureSet(int indexInFeatureSet) { m_indexInFeatureSet = indexInFeatureSet; } + + void setIndexInFeatureSet(int indexInFeatureSet) + { + m_indexInFeatureSet = indexInFeatureSet; + emit indexInFeatureSetChanged(m_indexInFeatureSet); + } + uint64_t getUID() const { return m_uid; } FeatureState getState() const { return m_state; } const QString& getErrorMessage() const { return m_errorMessage; } @@ -164,6 +170,9 @@ private: QString m_uri; //!< Unique non modifiable identifier attached to channel type uint64_t m_uid; int m_indexInFeatureSet; + +signals: + void indexInFeatureSetChanged(int index); }; #endif // SDRBASE_FETURE_FEATUREAPI_H_ diff --git a/sdrbase/feature/featureset.cpp b/sdrbase/feature/featureset.cpp index d80f42498..8b9803087 100644 --- a/sdrbase/feature/featureset.cpp +++ b/sdrbase/feature/featureset.cpp @@ -34,7 +34,7 @@ FeatureSet::~FeatureSet() { } -void FeatureSet::addFeature(int selectedFeatureIndex, PluginAPI *pluginAPI, WebAPIAdapterInterface *apiAdapter) +Feature *FeatureSet::addFeature(int selectedFeatureIndex, PluginAPI *pluginAPI, WebAPIAdapterInterface *apiAdapter) { PluginAPI::FeatureRegistrations *featureRegistrations = pluginAPI->getFeatureRegistrations(); // Available feature plugins Feature *feature = featureRegistrations->at(selectedFeatureIndex).m_plugin->createFeature(apiAdapter); @@ -43,6 +43,7 @@ void FeatureSet::addFeature(int selectedFeatureIndex, PluginAPI *pluginAPI, WebA m_featureInstanceRegistrations.append(feature); MainCore::instance()->addFeatureInstance(this, feature); renameFeatureInstances(); + return feature; } void FeatureSet::removeFeatureInstance(Feature* feature) diff --git a/sdrbase/feature/featureset.h b/sdrbase/feature/featureset.h index c5ea50421..4fc402fed 100644 --- a/sdrbase/feature/featureset.h +++ b/sdrbase/feature/featureset.h @@ -36,7 +36,7 @@ public: int getNumberOfFeatures() const { return m_featureInstanceRegistrations.size(); } int getIndex() const { return m_featureTabIndex; } - void addFeature(int selectedFeatureIndex, PluginAPI *pluginAPI, WebAPIAdapterInterface *apiAdapter); + Feature *addFeature(int selectedFeatureIndex, PluginAPI *pluginAPI, WebAPIAdapterInterface *apiAdapter); void removeFeatureInstance(Feature* feature); void freeFeatures(); void deleteFeature(int featureIndex); diff --git a/sdrbase/maincore.cpp b/sdrbase/maincore.cpp index e99e777d8..f1a7f99a5 100644 --- a/sdrbase/maincore.cpp +++ b/sdrbase/maincore.cpp @@ -133,11 +133,6 @@ DeviceAPI *MainCore::getDevice(unsigned int deviceSetIndex) } } -void MainCore::sendDeviceChanged(int deviceSetIndex) -{ - emit deviceChanged(deviceSetIndex); -} - ChannelAPI *MainCore::getChannel(unsigned int deviceSetIndex, int channelIndex) { if (deviceSetIndex < m_deviceSets.size()) { @@ -162,7 +157,6 @@ void MainCore::appendFeatureSet() FeatureSet *featureSet = new FeatureSet(newIndex); m_featureSets.push_back(featureSet); m_featureSetsMap.insert(featureSet, newIndex); - emit featureSetAdded(newIndex); } void MainCore::removeFeatureSet(unsigned int index) @@ -172,7 +166,6 @@ void MainCore::removeFeatureSet(unsigned int index) FeatureSet *featureSet = m_featureSets[index]; m_featureSetsMap.remove(featureSet); m_featureSets.erase(m_featureSets.begin() + index); - emit featureSetRemoved(index); } } @@ -180,11 +173,9 @@ void MainCore::removeLastFeatureSet() { if (m_featureSets.size() != 0) { - int size = m_featureSets.size(); FeatureSet *featureSet = m_featureSets.back(); m_featureSetsMap.remove(featureSet); m_featureSets.pop_back(); - emit featureSetRemoved(size - 1); } } @@ -194,18 +185,15 @@ void MainCore::appendDeviceSet(int deviceType) DeviceSet *deviceSet = new DeviceSet(newIndex, deviceType); m_deviceSets.push_back(deviceSet); m_deviceSetsMap.insert(deviceSet, newIndex); - emit deviceSetAdded(newIndex, deviceSet->m_deviceAPI); } void MainCore::removeLastDeviceSet() { if (m_deviceSets.size() != 0) { - int size = m_deviceSets.size(); DeviceSet *deviceSet = m_deviceSets.back(); m_deviceSetsMap.remove(deviceSet); m_deviceSets.pop_back(); - emit deviceSetRemoved(size - 1); } } diff --git a/sdrbase/maincore.h b/sdrbase/maincore.h index 8477cc9f9..941808cb6 100644 --- a/sdrbase/maincore.h +++ b/sdrbase/maincore.h @@ -716,7 +716,6 @@ public: std::vector& getFeatureeSets() { return m_featureSets; } void setLoggingOptions(); DeviceAPI *getDevice(unsigned int deviceSetIndex); - void sendDeviceChanged(int deviceSetIndex); ChannelAPI *getChannel(unsigned int deviceSetIndex, int channelIndex); Feature *getFeature(unsigned int featureSetIndex, int featureIndex); bool existsChannel(const ChannelAPI *channel) const { return m_channelsMap.contains(const_cast(channel)); } diff --git a/sdrgui/device/deviceuiset.cpp b/sdrgui/device/deviceuiset.cpp index 3f889f95c..cb628124c 100644 --- a/sdrgui/device/deviceuiset.cpp +++ b/sdrgui/device/deviceuiset.cpp @@ -151,6 +151,11 @@ void DeviceUISet::deleteChannel(int channelIndex) m_deviceSet->removeChannelInstanceAt(channelIndex); } +ChannelAPI *DeviceUISet::getChannelAt(int channelIndex) +{ + return m_deviceSet->getChannelAt(channelIndex); +} + void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginAPI) { if (preset->isSourcePreset()) diff --git a/sdrgui/device/deviceuiset.h b/sdrgui/device/deviceuiset.h index 35d48e3d6..4965b431b 100644 --- a/sdrgui/device/deviceuiset.h +++ b/sdrgui/device/deviceuiset.h @@ -72,6 +72,7 @@ public: int getNumberOfChannels() const { return m_channelInstanceRegistrations.size(); } void freeChannels(); void deleteChannel(int channelIndex); + ChannelAPI *getChannelAt(int channelIndex); void loadRxChannelSettings(const Preset* preset, PluginAPI *pluginAPI); void saveRxChannelSettings(Preset* preset); void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI); diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 18ed02422..6190dffa2 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -412,6 +412,7 @@ void MainWindow::addSourceDevice(int deviceIndex) m_deviceUIs.back()->m_deviceGUI = pluginGUI; m_deviceUIs.back()->m_deviceAPI->getSampleSource()->init(); setDeviceGUI(deviceTabIndex, gui, deviceAPI->getSamplingDeviceDisplayName()); + emit m_mainCore->deviceSetAdded(deviceTabIndex, deviceAPI); } void MainWindow::addSinkDevice() @@ -489,6 +490,7 @@ void MainWindow::addSinkDevice() m_deviceUIs.back()->m_deviceGUI = pluginGUI; m_deviceUIs.back()->m_deviceAPI->getSampleSink()->init(); setDeviceGUI(deviceTabIndex, gui, deviceAPI->getSamplingDeviceDisplayName(), 1); + emit m_mainCore->deviceSetAdded(deviceTabIndex, deviceAPI); } void MainWindow::addMIMODevice() @@ -574,11 +576,14 @@ void MainWindow::addMIMODevice() m_deviceUIs.back()->m_deviceGUI = pluginGUI; m_deviceUIs.back()->m_deviceAPI->getSampleMIMO()->init(); setDeviceGUI(deviceTabIndex, gui, deviceAPI->getSamplingDeviceDisplayName(), 2); + emit m_mainCore->deviceSetAdded(deviceTabIndex, deviceAPI); } void MainWindow::removeLastDevice() { - if (m_deviceUIs.back()->m_deviceSourceEngine) // source tab + int removedTabIndex = m_deviceUIs.size() - 1; + + if (m_deviceUIs.back()->m_deviceSourceEngine) // source tab { DSPDeviceSourceEngine *lastDeviceEngine = m_deviceUIs.back()->m_deviceSourceEngine; lastDeviceEngine->stopAcquistion(); @@ -677,6 +682,7 @@ void MainWindow::removeLastDevice() m_deviceUIs.pop_back(); m_mainCore->removeLastDeviceSet(); + emit m_mainCore->deviceSetRemoved(removedTabIndex); } void MainWindow::addFeatureSet() @@ -685,6 +691,7 @@ void MainWindow::addFeatureSet() m_mainCore->appendFeatureSet(); m_featureUIs.push_back(new FeatureUISet(tabIndex, m_mainCore->m_featureSets[tabIndex])); ui->tabFeatures->addTab(m_featureUIs.back()->m_featureWindow, QString("F%1").arg(tabIndex)); + emit m_mainCore->featureSetAdded(tabIndex); } void MainWindow::removeFeatureSet(unsigned int tabIndex) @@ -694,6 +701,7 @@ void MainWindow::removeFeatureSet(unsigned int tabIndex) delete m_featureUIs[tabIndex]; m_featureUIs.pop_back(); m_mainCore->removeFeatureSet(tabIndex); + emit m_mainCore->featureSetRemoved(tabIndex); } } @@ -1964,7 +1972,7 @@ void MainWindow::samplingDeviceChanged(int deviceType, int tabIndex, int newDevi sampleMIMOChanged(tabIndex, newDeviceIndex); } - MainCore::instance()->sendDeviceChanged(tabIndex); + emit MainCore::instance()->deviceChanged(tabIndex); } void MainWindow::sampleSourceChanged(int tabIndex, int newDeviceIndex) diff --git a/sdrsrv/mainserver.cpp b/sdrsrv/mainserver.cpp index 3da57fb5d..9547b88c1 100644 --- a/sdrsrv/mainserver.cpp +++ b/sdrsrv/mainserver.cpp @@ -311,6 +311,7 @@ void MainServer::addSinkDevice() DeviceSampleSink *sink = deviceAPI->getPluginInterface()->createSampleSinkPluginInstance( deviceAPI->getSamplingDeviceId(), deviceAPI); deviceAPI->setSampleSink(sink); + emit m_mainCore->deviceSetAdded(deviceTabIndex, deviceAPI); } void MainServer::addSourceDevice() @@ -357,6 +358,7 @@ void MainServer::addSourceDevice() DeviceSampleSource *source = deviceAPI->getPluginInterface()->createSampleSourcePluginInstance( deviceAPI->getSamplingDeviceId(), deviceAPI); deviceAPI->setSampleSource(source); + emit m_mainCore->deviceSetAdded(deviceTabIndex, deviceAPI); } void MainServer::addMIMODevice() @@ -401,10 +403,13 @@ void MainServer::addMIMODevice() DeviceSampleMIMO *mimo = deviceAPI->getPluginInterface()->createSampleMIMOPluginInstance( deviceAPI->getSamplingDeviceId(), deviceAPI); m_mainCore->m_deviceSets.back()->m_deviceAPI->setSampleMIMO(mimo); + emit m_mainCore->deviceSetAdded(deviceTabIndex, deviceAPI); } void MainServer::removeLastDevice() { + int removedTabIndex = m_mainCore->m_deviceSets.size() - 1; + if (m_mainCore->m_deviceSets.back()->m_deviceSourceEngine) // source set { DSPDeviceSourceEngine *lastDeviceEngine = m_mainCore->m_deviceSets.back()->m_deviceSourceEngine; @@ -447,6 +452,7 @@ void MainServer::removeLastDevice() } m_mainCore->m_deviceSets.pop_back(); + emit m_mainCore->deviceSetRemoved(removedTabIndex); } void MainServer::changeSampleSource(int deviceSetIndex, int selectedDeviceIndex) @@ -531,7 +537,7 @@ void MainServer::changeSampleSource(int deviceSetIndex, int selectedDeviceIndex) deviceSet->m_deviceAPI->loadSamplingDeviceSettings(m_mainCore->m_settings.getWorkingPreset()); // load new API settings // Notify - m_mainCore->sendDeviceChanged(deviceSetIndex); + emit m_mainCore->deviceChanged(deviceSetIndex); } } @@ -701,12 +707,15 @@ void MainServer::deleteChannel(int deviceSetIndex, int channelIndex) void MainServer::addFeatureSet() { m_mainCore->appendFeatureSet(); + emit m_mainCore->featureSetAdded(m_mainCore->getFeatureeSets().size() - 1); } void MainServer::removeFeatureSet(unsigned int featureSetIndex) { - if (featureSetIndex < m_mainCore->m_featureSets.size()) { + if (featureSetIndex < m_mainCore->m_featureSets.size()) + { m_mainCore->removeFeatureSet(featureSetIndex); + emit m_mainCore->featureSetRemoved(featureSetIndex); } }