From a32175eccb67f43b0961e604f7130921946a08a4 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 22 May 2016 21:56:07 +0200 Subject: [PATCH] Multi device support: ensure there is only one instance of SDRdaemon and FileSource plugins --- sdrbase/mainwindow.cpp | 2 +- sdrbase/plugin/pluginmanager.cpp | 13 ++++++++++++- sdrbase/plugin/pluginmanager.h | 5 ++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/sdrbase/mainwindow.cpp b/sdrbase/mainwindow.cpp index 46d670812..d1460d8e7 100644 --- a/sdrbase/mainwindow.cpp +++ b/sdrbase/mainwindow.cpp @@ -194,7 +194,7 @@ void MainWindow::addDevice() ui->tabChannels->addTab(m_deviceUIs.back()->m_channelWindow, tabNameCStr); bool sampleSourceSignalsBlocked = m_deviceUIs.back()->m_samplingDeviceControl->getDeviceSelector()->blockSignals(true); - m_pluginManager->fillSampleSourceSelector(m_deviceUIs.back()->m_samplingDeviceControl->getDeviceSelector()); + m_pluginManager->fillSampleSourceSelector(m_deviceUIs.back()->m_samplingDeviceControl->getDeviceSelector(), dspDeviceEngineUID); connect(m_deviceUIs.back()->m_samplingDeviceControl->getDeviceSelectionConfirm(), SIGNAL(clicked(bool)), this, SLOT(on_sampleSource_confirmClicked(bool))); diff --git a/sdrbase/plugin/pluginmanager.cpp b/sdrbase/plugin/pluginmanager.cpp index dca8c61b9..9c42a12aa 100644 --- a/sdrbase/plugin/pluginmanager.cpp +++ b/sdrbase/plugin/pluginmanager.cpp @@ -14,6 +14,9 @@ #include +const QString PluginManager::m_sdrDaemonDeviceTypeID = "sdrangel.samplesource.sdrdaemon"; +const QString PluginManager::m_fileSourceDeviceTypeID = "sdrangel.samplesource.filesource"; + PluginManager::PluginManager(MainWindow* mainWindow, QObject* parent) : QObject(parent), m_pluginAPI(this, mainWindow), @@ -81,12 +84,20 @@ void PluginManager::updateSampleSourceDevices() } } -void PluginManager::fillSampleSourceSelector(QComboBox* comboBox) +void PluginManager::fillSampleSourceSelector(QComboBox* comboBox, uint deviceUID) { comboBox->clear(); for(int i = 0; i < m_sampleSourceDevices.count(); i++) { + // There can be only one instance of file source and SDRdaemon plugins + if ((m_sampleSourceDevices[i].m_sourceId == m_sdrDaemonDeviceTypeID) || (m_sampleSourceDevices[i].m_sourceId == m_fileSourceDeviceTypeID)) + { + if (deviceUID != 0) { + continue; + } + } + comboBox->addItem(m_sampleSourceDevices[i].m_displayName, i); } } diff --git a/sdrbase/plugin/pluginmanager.h b/sdrbase/plugin/pluginmanager.h index 2897a8b8d..daaeae768 100644 --- a/sdrbase/plugin/pluginmanager.h +++ b/sdrbase/plugin/pluginmanager.h @@ -48,7 +48,7 @@ public: PluginAPI::ChannelRegistrations *getChannelRegistrations() { return &m_channelRegistrations; } void updateSampleSourceDevices(); - void fillSampleSourceSelector(QComboBox* comboBox); + void fillSampleSourceSelector(QComboBox* comboBox, uint deviceUID); int selectSampleSourceByIndex(int index, DeviceAPI *deviceAPI); int selectFirstSampleSource(const QString& sourceId, DeviceAPI *deviceAPI); @@ -99,6 +99,9 @@ private: SampleSourceRegistrations m_sampleSourceRegistrations; //!< Input source plugins (one per device kind) register here SampleSourceDevices m_sampleSourceDevices; //!< Instances of input sources present in the system + static const QString m_sdrDaemonDeviceTypeID; + static const QString m_fileSourceDeviceTypeID; + // QString m_sampleSourceId; // QString m_sampleSourceSerial; // int m_sampleSourceSequence;