From f351fe6e71f2717c21855f37a6e7685c662cb9ec Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 16 May 2019 18:39:13 +0200 Subject: [PATCH] MIMO support: added basics in device UI set and device set --- sdrgui/device/deviceuiset.cpp | 8 ++++---- sdrgui/device/deviceuiset.h | 8 +++++--- sdrgui/gui/samplingdevicecontrol.cpp | 14 +++++++------- sdrgui/gui/samplingdevicecontrol.h | 4 ++-- sdrgui/gui/samplingdevicedialog.cpp | 12 ++++++------ sdrgui/gui/samplingdevicedialog.h | 4 ++-- sdrgui/mainwindow.cpp | 4 ++-- sdrsrv/device/deviceset.cpp | 3 ++- sdrsrv/device/deviceset.h | 6 ++++-- sdrsrv/maincore.cpp | 6 +++++- 10 files changed, 39 insertions(+), 30 deletions(-) diff --git a/sdrgui/device/deviceuiset.cpp b/sdrgui/device/deviceuiset.cpp index c0266ec1c..2d8e7d0c4 100644 --- a/sdrgui/device/deviceuiset.cpp +++ b/sdrgui/device/deviceuiset.cpp @@ -31,19 +31,19 @@ #include "deviceuiset.h" -DeviceUISet::DeviceUISet(int tabIndex, bool rxElseTx, QTimer& timer) +DeviceUISet::DeviceUISet(int tabIndex, int deviceType, QTimer& timer) { m_spectrum = new GLSpectrum; - if (rxElseTx) { + if ((deviceType == 0) || (deviceType == 2)) { // Single Rx or MIMO m_spectrumVis = new SpectrumVis(SDR_RX_SCALEF, m_spectrum); - } else { + } else if (deviceType == 1) { // Single Tx m_spectrumVis = new SpectrumVis(SDR_TX_SCALEF, m_spectrum); } m_spectrum->connectTimer(timer); m_spectrumGUI = new GLSpectrumGUI; m_spectrumGUI->setBuddies(m_spectrumVis->getInputMessageQueue(), m_spectrumVis, m_spectrum); m_channelWindow = new ChannelWindow; - m_samplingDeviceControl = new SamplingDeviceControl(tabIndex, rxElseTx); + m_samplingDeviceControl = new SamplingDeviceControl(tabIndex, deviceType); m_deviceSourceEngine = 0; m_deviceAPI = 0; m_deviceSinkEngine = 0; diff --git a/sdrgui/device/deviceuiset.h b/sdrgui/device/deviceuiset.h index 2b9c98950..12af33509 100644 --- a/sdrgui/device/deviceuiset.h +++ b/sdrgui/device/deviceuiset.h @@ -28,9 +28,10 @@ class GLSpectrum; class GLSpectrumGUI; class ChannelWindow; class SamplingDeviceControl; -class DSPDeviceSourceEngine; class DeviceAPI; +class DSPDeviceSourceEngine; class DSPDeviceSinkEngine; +class DSPDeviceMIMOEngine; class ChannelMarker; class PluginAPI; class PluginInstanceGUI; @@ -44,12 +45,13 @@ public: GLSpectrumGUI *m_spectrumGUI; ChannelWindow *m_channelWindow; SamplingDeviceControl *m_samplingDeviceControl; - DSPDeviceSourceEngine *m_deviceSourceEngine; DeviceAPI *m_deviceAPI; + DSPDeviceSourceEngine *m_deviceSourceEngine; DSPDeviceSinkEngine *m_deviceSinkEngine; + DSPDeviceMIMOEngine *m_deviceMIMOEngine; QByteArray m_mainWindowState; - DeviceUISet(int tabIndex, bool rxElseTx, QTimer& timer); + DeviceUISet(int tabIndex, int deviceType, QTimer& timer); ~DeviceUISet(); GLSpectrum *getSpectrum() { return m_spectrum; } //!< Direct spectrum getter diff --git a/sdrgui/gui/samplingdevicecontrol.cpp b/sdrgui/gui/samplingdevicecontrol.cpp index 35a774997..77f44f72c 100644 --- a/sdrgui/gui/samplingdevicecontrol.cpp +++ b/sdrgui/gui/samplingdevicecontrol.cpp @@ -22,12 +22,12 @@ #include "ui_samplingdevicecontrol.h" -SamplingDeviceControl::SamplingDeviceControl(int tabIndex, bool rxElseTx, QWidget* parent) : +SamplingDeviceControl::SamplingDeviceControl(int tabIndex, int deviceType, QWidget* parent) : QWidget(parent), ui(new Ui::SamplingDeviceControl), m_pluginManager(0), m_deviceTabIndex(tabIndex), - m_rxElseTx(rxElseTx), + m_deviceType(deviceType), m_selectedDeviceIndex(-1) { ui->setupUi(this); @@ -41,7 +41,7 @@ SamplingDeviceControl::~SamplingDeviceControl() void SamplingDeviceControl::on_deviceChange_clicked() { - SamplingDeviceDialog dialog(m_rxElseTx, m_deviceTabIndex, this); + SamplingDeviceDialog dialog(m_deviceType, m_deviceTabIndex, this); dialog.exec(); if (dialog.getSelectedDeviceIndex() >= 0) @@ -61,13 +61,13 @@ void SamplingDeviceControl::on_deviceReload_clicked() void SamplingDeviceControl::setSelectedDeviceIndex(int index) { - if (m_rxElseTx) + if (m_deviceType == 0) // Single Rx { const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(index); DeviceEnumerator::instance()->changeRxSelection(m_deviceTabIndex, index); ui->deviceSelectedText->setText(samplingDevice->displayedName); } - else + else if (m_deviceType == 1) // Single Tx { const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(index); DeviceEnumerator::instance()->changeTxSelection(m_deviceTabIndex, index); @@ -79,12 +79,12 @@ void SamplingDeviceControl::setSelectedDeviceIndex(int index) void SamplingDeviceControl::removeSelectedDeviceIndex() { - if (m_rxElseTx) + if (m_deviceType == 0) // Single Rx { DeviceEnumerator::instance()->removeRxSelection(m_deviceTabIndex); ui->deviceSelectedText->setText("None"); } - else + else if (m_deviceType == 1) // Single Tx { DeviceEnumerator::instance()->removeTxSelection(m_deviceTabIndex); ui->deviceSelectedText->setText("None"); diff --git a/sdrgui/gui/samplingdevicecontrol.h b/sdrgui/gui/samplingdevicecontrol.h index 46f767f85..d329f6627 100644 --- a/sdrgui/gui/samplingdevicecontrol.h +++ b/sdrgui/gui/samplingdevicecontrol.h @@ -36,7 +36,7 @@ class SDRGUI_API SamplingDeviceControl : public QWidget { Q_OBJECT public: - explicit SamplingDeviceControl(int tabIndex, bool rxElseTx, QWidget* parent = 0); + explicit SamplingDeviceControl(int tabIndex, int deviceType, QWidget* parent = 0); ~SamplingDeviceControl(); int getSelectedDeviceIndex() const { return m_selectedDeviceIndex; } @@ -55,7 +55,7 @@ private: Ui::SamplingDeviceControl* ui; PluginManager *m_pluginManager; int m_deviceTabIndex; - bool m_rxElseTx; + int m_deviceType; int m_selectedDeviceIndex; signals: diff --git a/sdrgui/gui/samplingdevicedialog.cpp b/sdrgui/gui/samplingdevicedialog.cpp index e2a2df4b7..9210bca63 100644 --- a/sdrgui/gui/samplingdevicedialog.cpp +++ b/sdrgui/gui/samplingdevicedialog.cpp @@ -24,10 +24,10 @@ #include "device/deviceenumerator.h" -SamplingDeviceDialog::SamplingDeviceDialog(bool rxElseTx, int deviceTabIndex, QWidget* parent) : +SamplingDeviceDialog::SamplingDeviceDialog(int deviceType, int deviceTabIndex, QWidget* parent) : QDialog(parent), ui(new Ui::SamplingDeviceDialog), - m_rxElseTx(rxElseTx), + m_deviceType(deviceType), m_deviceTabIndex(deviceTabIndex), m_selectedDeviceIndex(-1) { @@ -35,9 +35,9 @@ SamplingDeviceDialog::SamplingDeviceDialog(bool rxElseTx, int deviceTabIndex, QW QList deviceDisplayNames; - if (m_rxElseTx) { + if (m_deviceType == 0) { // Single Rx DeviceEnumerator::instance()->listRxDeviceNames(deviceDisplayNames, m_deviceIndexes); - } else { + } else if (m_deviceType == 1) { // Single Tx DeviceEnumerator::instance()->listTxDeviceNames(deviceDisplayNames, m_deviceIndexes); } @@ -54,9 +54,9 @@ void SamplingDeviceDialog::accept() { m_selectedDeviceIndex = m_deviceIndexes[ui->deviceSelect->currentIndex()]; - if (m_rxElseTx) { + if (m_deviceType == 0) { // Single Rx DeviceEnumerator::instance()->changeRxSelection(m_deviceTabIndex, m_selectedDeviceIndex); - } else { + } else if (m_deviceType == 1) { // Single Tx DeviceEnumerator::instance()->changeTxSelection(m_deviceTabIndex, m_selectedDeviceIndex); } diff --git a/sdrgui/gui/samplingdevicedialog.h b/sdrgui/gui/samplingdevicedialog.h index 1235061b6..9b05f9876 100644 --- a/sdrgui/gui/samplingdevicedialog.h +++ b/sdrgui/gui/samplingdevicedialog.h @@ -35,13 +35,13 @@ class SDRGUI_API SamplingDeviceDialog : public QDialog { Q_OBJECT public: - explicit SamplingDeviceDialog(bool rxElseTx, int deviceTabIndex, QWidget* parent = 0); + explicit SamplingDeviceDialog(int deviceType, int deviceTabIndex, QWidget* parent = 0); ~SamplingDeviceDialog(); int getSelectedDeviceIndex() const { return m_selectedDeviceIndex; } private: Ui::SamplingDeviceDialog* ui; - bool m_rxElseTx; + int m_deviceType; int m_deviceTabIndex; int m_selectedDeviceIndex; std::vector m_deviceIndexes; diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 5ce6f9844..8657a35a9 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -266,7 +266,7 @@ void MainWindow::addSourceDevice(int deviceIndex) sprintf(uidCStr, "UID:%d", dspDeviceSourceEngineUID); int deviceTabIndex = m_deviceUIs.size(); - m_deviceUIs.push_back(new DeviceUISet(deviceTabIndex, true, m_masterTimer)); + m_deviceUIs.push_back(new DeviceUISet(deviceTabIndex, 0, m_masterTimer)); m_deviceUIs.back()->m_deviceSourceEngine = dspDeviceSourceEngine; char tabNameCStr[16]; @@ -339,7 +339,7 @@ void MainWindow::addSinkDevice() sprintf(uidCStr, "UID:%d", dspDeviceSinkEngineUID); int deviceTabIndex = m_deviceUIs.size(); - m_deviceUIs.push_back(new DeviceUISet(deviceTabIndex, false, m_masterTimer)); + m_deviceUIs.push_back(new DeviceUISet(deviceTabIndex, 1, m_masterTimer)); m_deviceUIs.back()->m_deviceSourceEngine = 0; m_deviceUIs.back()->m_deviceSinkEngine = dspDeviceSinkEngine; diff --git a/sdrsrv/device/deviceset.cpp b/sdrsrv/device/deviceset.cpp index efb45a21b..62885bd63 100644 --- a/sdrsrv/device/deviceset.cpp +++ b/sdrsrv/device/deviceset.cpp @@ -50,9 +50,10 @@ DeviceSet::ChannelInstanceRegistration::ChannelInstanceRegistration(const QStrin DeviceSet::DeviceSet(int tabIndex) { - m_deviceSourceEngine = 0; m_deviceAPI = 0; + m_deviceSourceEngine = 0; m_deviceSinkEngine = 0; + m_deviceMIMOEngine = 0; m_deviceTabIndex = tabIndex; } diff --git a/sdrsrv/device/deviceset.h b/sdrsrv/device/deviceset.h index fcee0d7db..c253ce5db 100644 --- a/sdrsrv/device/deviceset.h +++ b/sdrsrv/device/deviceset.h @@ -20,9 +20,10 @@ #include -class DSPDeviceSourceEngine; class DeviceAPI; +class DSPDeviceSourceEngine; class DSPDeviceSinkEngine; +class DSPDeviceMIMOEngine; class PluginAPI; class ChannelAPI; class Preset; @@ -30,9 +31,10 @@ class Preset; class DeviceSet { public: - DSPDeviceSourceEngine *m_deviceSourceEngine; DeviceAPI *m_deviceAPI; + DSPDeviceSourceEngine *m_deviceSourceEngine; DSPDeviceSinkEngine *m_deviceSinkEngine; + DSPDeviceMIMOEngine *m_deviceMIMOEngine; DeviceSet(int tabIndex); ~DeviceSet(); diff --git a/sdrsrv/maincore.cpp b/sdrsrv/maincore.cpp index a6b2e0c45..c4112352f 100644 --- a/sdrsrv/maincore.cpp +++ b/sdrsrv/maincore.cpp @@ -274,7 +274,9 @@ void MainCore::addSinkDevice() int deviceTabIndex = m_deviceSets.size(); m_deviceSets.push_back(new DeviceSet(deviceTabIndex)); m_deviceSets.back()->m_deviceSourceEngine = 0; - m_deviceSets.back()->m_deviceSinkEngine = dspDeviceSinkEngine; + m_deviceSets.back()->m_deviceMIMOEngine = 0; + dspDeviceSinkEngine; + m_deviceSets.back()->m_deviceMIMOEngine = 0; char tabNameCStr[16]; sprintf(tabNameCStr, "T%d", deviceTabIndex); @@ -316,6 +318,8 @@ void MainCore::addSourceDevice() int deviceTabIndex = m_deviceSets.size(); m_deviceSets.push_back(new DeviceSet(deviceTabIndex)); m_deviceSets.back()->m_deviceSourceEngine = dspDeviceSourceEngine; + m_deviceSets.back()->m_deviceSinkEngine = 0; + m_deviceSets.back()->m_deviceMIMOEngine = 0; char tabNameCStr[16]; sprintf(tabNameCStr, "R%d", deviceTabIndex);