diff --git a/sdrgui/device/deviceuiset.cpp b/sdrgui/device/deviceuiset.cpp index 2d8e7d0c4..6c16446e5 100644 --- a/sdrgui/device/deviceuiset.cpp +++ b/sdrgui/device/deviceuiset.cpp @@ -48,6 +48,9 @@ DeviceUISet::DeviceUISet(int tabIndex, int deviceType, QTimer& timer) m_deviceAPI = 0; m_deviceSinkEngine = 0; m_deviceTabIndex = tabIndex; + m_nbAvailableRxChannels = 0; // updated at enumeration for UI selector + m_nbAvailableTxChannels = 0; // updated at enumeration for UI selector + m_nbAvailableMIMOChannels = 0; // updated at enumeration for UI selector // m_spectrum needs to have its font to be set since it cannot be inherited from the main window QFont font; diff --git a/sdrgui/device/deviceuiset.h b/sdrgui/device/deviceuiset.h index 12af33509..cff2da450 100644 --- a/sdrgui/device/deviceuiset.h +++ b/sdrgui/device/deviceuiset.h @@ -73,6 +73,14 @@ public: void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI); void saveTxChannelSettings(Preset* preset); + // These are the number of channel types available for selection + void setNumberOfAvailableRxChannels(int number) { m_nbAvailableRxChannels = number; } + void setNumberOfAvailableTxChannels(int number) { m_nbAvailableTxChannels = number; } + void setNumberOfAvailableMIMOChannels(int number) { m_nbAvailableMIMOChannels = number; } + int getNumberOfAvailableRxChannels() const { return m_nbAvailableRxChannels; } + int getNumberOfAvailableTxChannels() const { return m_nbAvailableTxChannels; } + int getNumberOfAvailableMIMOChannels() const { return m_nbAvailableMIMOChannels; } + private: struct ChannelInstanceRegistration { @@ -97,6 +105,9 @@ private: ChannelInstanceRegistrations m_rxChannelInstanceRegistrations; ChannelInstanceRegistrations m_txChannelInstanceRegistrations; int m_deviceTabIndex; + int m_nbAvailableRxChannels; //!< Number of Rx channels available for selection + int m_nbAvailableTxChannels; //!< Number of Tx channels available for selection + int m_nbAvailableMIMOChannels; //!< Number of MIMO channels available for selection void renameRxChannelInstances(); void renameTxChannelInstances(); diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index d99090a93..987f7fb3f 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -222,6 +222,7 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse } m_mimoEnabled = parser.getMIMOSupport(); + m_apiAdapter = new WebAPIAdapterGUI(*this); m_requestMapper = new WebAPIRequestMapper(this); m_requestMapper->setAdapter(m_apiAdapter); @@ -283,6 +284,7 @@ void MainWindow::addSourceDevice(int deviceIndex) m_pluginManager->listRxChannels(channelNames); QStringList channelNamesList(channelNames); m_deviceUIs.back()->m_samplingDeviceControl->getChannelSelector()->addItems(channelNamesList); + m_deviceUIs.back()->setNumberOfAvailableRxChannels(channelNamesList.size()); connect(m_deviceUIs.back()->m_samplingDeviceControl->getAddChannelButton(), SIGNAL(clicked(bool)), this, SLOT(channelAddClicked(bool))); @@ -357,6 +359,7 @@ void MainWindow::addSinkDevice() m_pluginManager->listTxChannels(channelNames); QStringList channelNamesList(channelNames); m_deviceUIs.back()->m_samplingDeviceControl->getChannelSelector()->addItems(channelNamesList); + m_deviceUIs.back()->setNumberOfAvailableTxChannels(channelNamesList.size()); connect(m_deviceUIs.back()->m_samplingDeviceControl->getAddChannelButton(), SIGNAL(clicked(bool)), this, SLOT(channelAddClicked(bool))); @@ -430,12 +433,13 @@ void MainWindow::addMIMODevice() m_pluginManager->listRxChannels(rxChannelNames); QStringList rxChannelNamesList(rxChannelNames); channelSelector->addItems(rxChannelNamesList); - channelSelector->insertSeparator(channelSelector->count()); + m_deviceUIs.back()->setNumberOfAvailableRxChannels(rxChannelNamesList.size()); // Add Tx channels QList txChannelNames; m_pluginManager->listTxChannels(txChannelNames); QStringList txChannelNamesList(txChannelNames); channelSelector->addItems(txChannelNamesList); + m_deviceUIs.back()->setNumberOfAvailableTxChannels(txChannelNamesList.size()); // TODO: add MIMO channels connect(m_deviceUIs.back()->m_samplingDeviceControl->getAddChannelButton(), SIGNAL(clicked(bool)), this, SLOT(channelAddClicked(bool))); @@ -1873,6 +1877,22 @@ void MainWindow::channelAddClicked(bool checked) m_pluginManager->createTxChannelInstance( deviceUI->m_samplingDeviceControl->getChannelSelector()->currentIndex(), deviceUI, deviceUI->m_deviceAPI); } + else if (deviceUI->m_deviceMIMOEngine) // MIMO device => all possible channels. Depends on index range + { + int nbRxChannels = deviceUI->getNumberOfAvailableRxChannels(); + int nbTxChannels = deviceUI->getNumberOfAvailableTxChannels(); + int selectedIndex = deviceUI->m_samplingDeviceControl->getChannelSelector()->currentIndex(); + qDebug("MainWindow::channelAddClicked: MIMO: tab: %d nbRx: %d nbTx: %d selected: %d", + currentSourceTabIndex, nbRxChannels, nbTxChannels, selectedIndex); + + if (selectedIndex < nbRxChannels) { + m_pluginManager->createRxChannelInstance( + selectedIndex, deviceUI, deviceUI->m_deviceAPI); + } else if (selectedIndex < nbRxChannels + nbTxChannels) { + m_pluginManager->createTxChannelInstance( + selectedIndex - nbRxChannels, deviceUI, deviceUI->m_deviceAPI); + } + } } }