diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h index 555a8fdc4..fa2c614b3 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h @@ -113,6 +113,7 @@ public: virtual int getNbSinkStreams() const { return 0; } virtual int getNbSourceStreams() const { return 2; } + virtual int getStreamIndex() const { return -1; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelmimo/doa2/doa2.h b/plugins/channelmimo/doa2/doa2.h index 9907698a3..236f90b29 100644 --- a/plugins/channelmimo/doa2/doa2.h +++ b/plugins/channelmimo/doa2/doa2.h @@ -113,6 +113,7 @@ public: virtual int getNbSinkStreams() const { return 2; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return -1; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelmimo/interferometer/interferometer.h b/plugins/channelmimo/interferometer/interferometer.h index 5e87ffbe9..0eed37d8a 100644 --- a/plugins/channelmimo/interferometer/interferometer.h +++ b/plugins/channelmimo/interferometer/interferometer.h @@ -113,6 +113,7 @@ public: virtual int getNbSinkStreams() const { return 2; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return -1; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/chanalyzer/chanalyzer.h b/plugins/channelrx/chanalyzer/chanalyzer.h index c311f51d1..018720ce2 100644 --- a/plugins/channelrx/chanalyzer/chanalyzer.h +++ b/plugins/channelrx/chanalyzer/chanalyzer.h @@ -100,6 +100,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } uint32_t getNumberOfDeviceStreams() const; virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const diff --git a/plugins/channelrx/demodadsb/adsbdemod.h b/plugins/channelrx/demodadsb/adsbdemod.h index 2a3ab8f7e..2ded12ee9 100644 --- a/plugins/channelrx/demodadsb/adsbdemod.h +++ b/plugins/channelrx/demodadsb/adsbdemod.h @@ -115,6 +115,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodais/aisdemod.h b/plugins/channelrx/demodais/aisdemod.h index 1be40065c..54b521af2 100644 --- a/plugins/channelrx/demodais/aisdemod.h +++ b/plugins/channelrx/demodais/aisdemod.h @@ -125,6 +125,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodam/amdemod.h b/plugins/channelrx/demodam/amdemod.h index 5ed4b3c54..64ade14b3 100644 --- a/plugins/channelrx/demodam/amdemod.h +++ b/plugins/channelrx/demodam/amdemod.h @@ -88,6 +88,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodapt/aptdemod.h b/plugins/channelrx/demodapt/aptdemod.h index aa580dcc5..67fe1192c 100644 --- a/plugins/channelrx/demodapt/aptdemod.h +++ b/plugins/channelrx/demodapt/aptdemod.h @@ -220,6 +220,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index 51d199969..09eddbcf3 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -86,6 +86,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodbfm/bfmdemod.h b/plugins/channelrx/demodbfm/bfmdemod.h index ac9f58f24..f9b81ddcd 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.h +++ b/plugins/channelrx/demodbfm/bfmdemod.h @@ -96,6 +96,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemod.h b/plugins/channelrx/demodchirpchat/chirpchatdemod.h index b2e770a69..f1432f4f4 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemod.h +++ b/plugins/channelrx/demodchirpchat/chirpchatdemod.h @@ -228,6 +228,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demoddab/dabdemod.h b/plugins/channelrx/demoddab/dabdemod.h index ca2a63cf3..8f90cc756 100644 --- a/plugins/channelrx/demoddab/dabdemod.h +++ b/plugins/channelrx/demoddab/dabdemod.h @@ -355,6 +355,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demoddatv/datvdemod.h b/plugins/channelrx/demoddatv/datvdemod.h index c8db06f6f..a3785b712 100644 --- a/plugins/channelrx/demoddatv/datvdemod.h +++ b/plugins/channelrx/demoddatv/datvdemod.h @@ -67,6 +67,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } uint32_t getNumberOfDeviceStreams() const; virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const diff --git a/plugins/channelrx/demoddsc/dscdemod.h b/plugins/channelrx/demoddsc/dscdemod.h index cbdfe5da0..bcd768b2b 100644 --- a/plugins/channelrx/demoddsc/dscdemod.h +++ b/plugins/channelrx/demoddsc/dscdemod.h @@ -122,6 +122,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demoddsd/dsddemod.h b/plugins/channelrx/demoddsd/dsddemod.h index bb9ed0a98..6d47bf739 100644 --- a/plugins/channelrx/demoddsd/dsddemod.h +++ b/plugins/channelrx/demoddsd/dsddemod.h @@ -121,6 +121,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodfreedv/freedvdemod.h b/plugins/channelrx/demodfreedv/freedvdemod.h index 3b560deda..61e13041e 100644 --- a/plugins/channelrx/demodfreedv/freedvdemod.h +++ b/plugins/channelrx/demodfreedv/freedvdemod.h @@ -103,6 +103,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodft8/ft8demod.h b/plugins/channelrx/demodft8/ft8demod.h index 89202be50..8b57d2b23 100644 --- a/plugins/channelrx/demodft8/ft8demod.h +++ b/plugins/channelrx/demodft8/ft8demod.h @@ -92,6 +92,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodils/ilsdemod.h b/plugins/channelrx/demodils/ilsdemod.h index fc98d10c5..accc95ce7 100644 --- a/plugins/channelrx/demodils/ilsdemod.h +++ b/plugins/channelrx/demodils/ilsdemod.h @@ -134,6 +134,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodm17/m17demod.h b/plugins/channelrx/demodm17/m17demod.h index 22dbd9478..758299e0b 100644 --- a/plugins/channelrx/demodm17/m17demod.h +++ b/plugins/channelrx/demodm17/m17demod.h @@ -177,6 +177,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodnavtex/navtexdemod.h b/plugins/channelrx/demodnavtex/navtexdemod.h index 72c1b11cd..a9dc61f47 100644 --- a/plugins/channelrx/demodnavtex/navtexdemod.h +++ b/plugins/channelrx/demodnavtex/navtexdemod.h @@ -141,6 +141,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodnfm/nfmdemod.h b/plugins/channelrx/demodnfm/nfmdemod.h index 7cd54e745..14ca52d10 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.h +++ b/plugins/channelrx/demodnfm/nfmdemod.h @@ -88,6 +88,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodpacket/packetdemod.h b/plugins/channelrx/demodpacket/packetdemod.h index 701baaa0a..1d0d1238a 100644 --- a/plugins/channelrx/demodpacket/packetdemod.h +++ b/plugins/channelrx/demodpacket/packetdemod.h @@ -93,6 +93,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodpager/pagerdemod.h b/plugins/channelrx/demodpager/pagerdemod.h index 64b8dcc96..cae8e7658 100644 --- a/plugins/channelrx/demodpager/pagerdemod.h +++ b/plugins/channelrx/demodpager/pagerdemod.h @@ -148,6 +148,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodradiosonde/radiosondedemod.h b/plugins/channelrx/demodradiosonde/radiosondedemod.h index ca49ac0d9..5fce1de41 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemod.h +++ b/plugins/channelrx/demodradiosonde/radiosondedemod.h @@ -128,6 +128,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodrtty/rttydemod.h b/plugins/channelrx/demodrtty/rttydemod.h index a00535e2b..aa0267a0f 100644 --- a/plugins/channelrx/demodrtty/rttydemod.h +++ b/plugins/channelrx/demodrtty/rttydemod.h @@ -135,6 +135,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodssb/ssbdemod.h b/plugins/channelrx/demodssb/ssbdemod.h index 75e4834c9..49c3aa067 100644 --- a/plugins/channelrx/demodssb/ssbdemod.h +++ b/plugins/channelrx/demodssb/ssbdemod.h @@ -92,6 +92,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodssb/ssbdemodsink.cpp b/plugins/channelrx/demodssb/ssbdemodsink.cpp index 7531b4d69..3635ac96e 100644 --- a/plugins/channelrx/demodssb/ssbdemodsink.cpp +++ b/plugins/channelrx/demodssb/ssbdemodsink.cpp @@ -178,7 +178,7 @@ void SSBDemodSink::processOneSample(Complex &ci) // Only if AGC is active if (m_agcActive && m_agcClamping && agcVal > 100.0) { - qDebug("SSBDemodSink::processOneSample: %f", agcVal); + // qDebug("SSBDemodSink::processOneSample: %f", agcVal); m_agc.reset(m_agcTarget*m_agcTarget); m_squelchDelayLine.write(fftfilt::cmplx{0.0, 0.0}); } diff --git a/plugins/channelrx/demodvor/vordemod.h b/plugins/channelrx/demodvor/vordemod.h index c7d165e6c..61816fe60 100644 --- a/plugins/channelrx/demodvor/vordemod.h +++ b/plugins/channelrx/demodvor/vordemod.h @@ -90,6 +90,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/demodwfm/wfmdemod.h b/plugins/channelrx/demodwfm/wfmdemod.h index 6a118e7b5..df9d15b96 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.h +++ b/plugins/channelrx/demodwfm/wfmdemod.h @@ -88,6 +88,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/filesink/filesink.h b/plugins/channelrx/filesink/filesink.h index a86e189fb..516bd2d23 100644 --- a/plugins/channelrx/filesink/filesink.h +++ b/plugins/channelrx/filesink/filesink.h @@ -107,6 +107,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/freqscanner/freqscanner.cpp b/plugins/channelrx/freqscanner/freqscanner.cpp index f59856762..d11326f5e 100644 --- a/plugins/channelrx/freqscanner/freqscanner.cpp +++ b/plugins/channelrx/freqscanner/freqscanner.cpp @@ -302,9 +302,9 @@ void FreqScanner::setDeviceCenterFrequency(qint64 frequency) void FreqScanner::initScan() { - if (m_scanChannelIndex < 0) { - applyChannelSetting(m_settings.m_channel); - } + // if (m_scanChannelIndex < 0) { // Always false + // applyChannelSetting(m_settings.m_channel); + // } ChannelWebAPIUtils::setAudioMute(m_scanDeviceSetIndex, m_scanChannelIndex, true); if (m_centerFrequency != m_stepStartFrequency) { @@ -700,6 +700,7 @@ void FreqScanner::applySettings(const FreqScannerSettings& settings, const QStri m_deviceAPI->removeChannelSink(this, m_settings.m_streamIndex); m_deviceAPI->addChannelSink(this, settings.m_streamIndex); m_deviceAPI->addChannelSinkAPI(this); + scanAvailableChannels(); // re-scan } } @@ -1108,22 +1109,53 @@ void FreqScanner::handleIndexInDeviceSetChanged(int index) void FreqScanner::scanAvailableChannels() { - MainCore* mainCore = MainCore::instance(); - std::vector& deviceSets = mainCore->getDeviceSets(); m_availableChannels.clear(); - for (const auto& deviceSet : deviceSets) + DSPDeviceSourceEngine* deviceSourceEngine = getDeviceAPI()->getDeviceSourceEngine(); + + if (deviceSourceEngine) { - DSPDeviceSourceEngine* deviceSourceEngine = deviceSet->m_deviceSourceEngine; - - if (deviceSourceEngine) + for (int chi = 0; chi < getDeviceAPI()->getNbSinkChannels(); chi++) // Rx channels { - for (int chi = 0; chi < deviceSet->getNumberOfChannels(); chi++) - { - ChannelAPI* channel = deviceSet->getChannelAt(chi); + ChannelAPI* channel = getDeviceAPI()->getChanelSinkAPIAt(chi); + if (channel->getIndexInDeviceSet() == getIndexInDeviceSet()) { // Exclude oneself + continue; + } + + FreqScannerSettings::AvailableChannel availableChannel = + FreqScannerSettings::AvailableChannel{ + channel->getDeviceSetIndex(), + channel->getIndexInDeviceSet(), + -1 + }; + m_availableChannels[channel] = availableChannel; + } + } + + DSPDeviceMIMOEngine *deviceMIMOEngine = getDeviceAPI()->getDeviceMIMOEngine(); + + if (deviceMIMOEngine) + { + for (int chi = 0; chi < getDeviceAPI()->getNbSinkChannels(); chi++) // Rx channels + { + ChannelAPI* channel = getDeviceAPI()->getChanelSinkAPIAt(chi); + + if (channel->getIndexInDeviceSet() == getIndexInDeviceSet()) { // Exclude oneself + continue; + } + + // Single Rx on the same I/Q stream + if ((channel->getNbSinkStreams() == 1) + && (channel->getNbSourceStreams() == 0) + && (channel->getStreamIndex() == m_settings.m_streamIndex)) + { FreqScannerSettings::AvailableChannel availableChannel = - FreqScannerSettings::AvailableChannel{ channel->getDeviceSetIndex(), channel->getIndexInDeviceSet()}; + FreqScannerSettings::AvailableChannel{ + channel->getDeviceSetIndex(), + channel->getIndexInDeviceSet(), + channel->getStreamIndex() + }; m_availableChannels[channel] = availableChannel; } } @@ -1134,16 +1166,34 @@ void FreqScanner::scanAvailableChannels() void FreqScanner::handleChannelAdded(int deviceSetIndex, ChannelAPI* channel) { + if (deviceSetIndex != getDeviceSetIndex()) { // Can control channels only in the same device set + return; + } + qDebug("FreqScanner::handleChannelAdded: deviceSetIndex: %d:%d channel: %s (%p)", deviceSetIndex, channel->getIndexInDeviceSet(), qPrintable(channel->getURI()), channel); - std::vector& deviceSets = MainCore::instance()->getDeviceSets(); - DeviceSet* deviceSet = deviceSets[deviceSetIndex]; - DSPDeviceSourceEngine* deviceSourceEngine = deviceSet->m_deviceSourceEngine; + DSPDeviceSourceEngine* deviceSourceEngine = getDeviceAPI()->getDeviceSourceEngine(); if (deviceSourceEngine) { FreqScannerSettings::AvailableChannel availableChannel = - FreqScannerSettings::AvailableChannel{ deviceSetIndex, channel->getIndexInDeviceSet()}; + FreqScannerSettings::AvailableChannel{ deviceSetIndex, channel->getIndexInDeviceSet(), -1}; + m_availableChannels[channel] = availableChannel; + } + + DSPDeviceMIMOEngine *deviceMIMOEngine = getDeviceAPI()->getDeviceMIMOEngine(); + + if (deviceMIMOEngine + && (channel->getNbSinkStreams() == 1) + && (channel->getNbSourceStreams() == 0) + && (channel->getStreamIndex() == m_settings.m_streamIndex)) + { + FreqScannerSettings::AvailableChannel availableChannel = + FreqScannerSettings::AvailableChannel{ + deviceSetIndex, + channel->getIndexInDeviceSet(), + channel->getStreamIndex() + }; m_availableChannels[channel] = availableChannel; } @@ -1152,13 +1202,16 @@ void FreqScanner::handleChannelAdded(int deviceSetIndex, ChannelAPI* channel) void FreqScanner::handleChannelRemoved(int deviceSetIndex, ChannelAPI* channel) { + if (deviceSetIndex != getDeviceSetIndex()) { // Can control channels only in the same device set + return; + } + qDebug("FreqScanner::handleChannelRemoved: deviceSetIndex: %d:%d channel: %s (%p)", deviceSetIndex, channel->getIndexInDeviceSet(), qPrintable(channel->getURI()), channel); - std::vector& deviceSets = MainCore::instance()->getDeviceSets(); - DeviceSet* deviceSet = deviceSets[deviceSetIndex]; - DSPDeviceSourceEngine* deviceSourceEngine = deviceSet->m_deviceSourceEngine; + DSPDeviceSourceEngine* deviceSourceEngine = getDeviceAPI()->getDeviceSourceEngine(); + DSPDeviceMIMOEngine *deviceMIMOEngine = getDeviceAPI()->getDeviceMIMOEngine(); - if (deviceSourceEngine) { + if (deviceSourceEngine || deviceMIMOEngine) { m_availableChannels.remove(channel); } @@ -1178,8 +1231,9 @@ void FreqScanner::notifyUpdateChannels() FreqScannerSettings::AvailableChannel msgChannel = FreqScannerSettings::AvailableChannel{ it->m_deviceSetIndex, - it->m_channelIndex - }; + it->m_channelIndex, + it->m_streamIndex + }; msgChannels.push_back(msgChannel); } diff --git a/plugins/channelrx/freqscanner/freqscanner.h b/plugins/channelrx/freqscanner/freqscanner.h index e0e7ba2c6..e56262e2d 100644 --- a/plugins/channelrx/freqscanner/freqscanner.h +++ b/plugins/channelrx/freqscanner/freqscanner.h @@ -307,6 +307,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/freqscanner/freqscannergui.cpp b/plugins/channelrx/freqscanner/freqscannergui.cpp index 8563e183e..71030f12b 100644 --- a/plugins/channelrx/freqscanner/freqscannergui.cpp +++ b/plugins/channelrx/freqscanner/freqscannergui.cpp @@ -225,7 +225,14 @@ void FreqScannerGUI::updateChannelsCombo(QComboBox *combo, const QListgetDeviceSetIndex()) && (channel.m_channelIndex != m_freqScanner->getIndexInDeviceSet())) { - QString name = QString("R%1:%2").arg(channel.m_deviceSetIndex).arg(channel.m_channelIndex); + QString name; + + if (channel.m_streamIndex < 0) { // Rx + name = QString("R%1:%2").arg(channel.m_deviceSetIndex).arg(channel.m_channelIndex); + } else { // MIMO + name = QString("M%1:%2.%3").arg(channel.m_deviceSetIndex).arg(channel.m_channelIndex).arg(channel.m_streamIndex); + } + combo->addItem(name); } } diff --git a/plugins/channelrx/freqscanner/freqscannersettings.h b/plugins/channelrx/freqscanner/freqscannersettings.h index 8c073e119..439f06419 100644 --- a/plugins/channelrx/freqscanner/freqscannersettings.h +++ b/plugins/channelrx/freqscanner/freqscannersettings.h @@ -35,6 +35,7 @@ struct FreqScannerSettings { int m_deviceSetIndex; int m_channelIndex; + int m_streamIndex; AvailableChannel() = default; AvailableChannel(const AvailableChannel&) = default; diff --git a/plugins/channelrx/freqtracker/freqtracker.h b/plugins/channelrx/freqtracker/freqtracker.h index 7a38e11c3..451ebf44f 100644 --- a/plugins/channelrx/freqtracker/freqtracker.h +++ b/plugins/channelrx/freqtracker/freqtracker.h @@ -88,6 +88,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/heatmap/heatmap.h b/plugins/channelrx/heatmap/heatmap.h index 3d9fe71d4..91505d224 100644 --- a/plugins/channelrx/heatmap/heatmap.h +++ b/plugins/channelrx/heatmap/heatmap.h @@ -95,6 +95,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/localsink/localsink.h b/plugins/channelrx/localsink/localsink.h index cfb02001e..663d76687 100644 --- a/plugins/channelrx/localsink/localsink.h +++ b/plugins/channelrx/localsink/localsink.h @@ -108,6 +108,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/noisefigure/noisefigure.h b/plugins/channelrx/noisefigure/noisefigure.h index 316180604..bc9335db7 100644 --- a/plugins/channelrx/noisefigure/noisefigure.h +++ b/plugins/channelrx/noisefigure/noisefigure.h @@ -198,6 +198,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/radioastronomy/radioastronomy.h b/plugins/channelrx/radioastronomy/radioastronomy.h index d287fe9ba..1021f8590 100644 --- a/plugins/channelrx/radioastronomy/radioastronomy.h +++ b/plugins/channelrx/radioastronomy/radioastronomy.h @@ -386,6 +386,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/radioclock/radioclock.h b/plugins/channelrx/radioclock/radioclock.h index a281b2091..4f367ff1a 100644 --- a/plugins/channelrx/radioclock/radioclock.h +++ b/plugins/channelrx/radioclock/radioclock.h @@ -138,6 +138,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/remotesink/remotesink.h b/plugins/channelrx/remotesink/remotesink.h index 47369a225..4fbc49e4d 100644 --- a/plugins/channelrx/remotesink/remotesink.h +++ b/plugins/channelrx/remotesink/remotesink.h @@ -87,6 +87,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/remotetcpsink/remotetcpsink.h b/plugins/channelrx/remotetcpsink/remotetcpsink.h index 57cb6e3d6..4b5cf1108 100644 --- a/plugins/channelrx/remotetcpsink/remotetcpsink.h +++ b/plugins/channelrx/remotetcpsink/remotetcpsink.h @@ -129,6 +129,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/sigmffilesink/sigmffilesink.h b/plugins/channelrx/sigmffilesink/sigmffilesink.h index 7a11253d5..3a5f3e29a 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesink.h +++ b/plugins/channelrx/sigmffilesink/sigmffilesink.h @@ -107,6 +107,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channelrx/udpsink/udpsink.h b/plugins/channelrx/udpsink/udpsink.h index 65bda9d35..c08d4d256 100644 --- a/plugins/channelrx/udpsink/udpsink.h +++ b/plugins/channelrx/udpsink/udpsink.h @@ -94,6 +94,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/filesource/filesource.h b/plugins/channeltx/filesource/filesource.h index b71a20165..20bb8e0b4 100644 --- a/plugins/channeltx/filesource/filesource.h +++ b/plugins/channeltx/filesource/filesource.h @@ -169,6 +169,7 @@ public: virtual int getNbSinkStreams() const { return 0; } virtual int getNbSourceStreams() const { return 1; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/localsource/localsource.h b/plugins/channeltx/localsource/localsource.h index bcd5e2258..4ce4e9eee 100644 --- a/plugins/channeltx/localsource/localsource.h +++ b/plugins/channeltx/localsource/localsource.h @@ -84,6 +84,7 @@ public: virtual int getNbSinkStreams() const { return 0; } virtual int getNbSourceStreams() const { return 1; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.h b/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.h index ca5254107..956f48209 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.h +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.h @@ -113,6 +113,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modais/aismod.h b/plugins/channeltx/modais/aismod.h index bbc4d6a49..d93a350eb 100644 --- a/plugins/channeltx/modais/aismod.h +++ b/plugins/channeltx/modais/aismod.h @@ -174,6 +174,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modam/ammod.h b/plugins/channeltx/modam/ammod.h index 647b4a446..61f427a53 100644 --- a/plugins/channeltx/modam/ammod.h +++ b/plugins/channeltx/modam/ammod.h @@ -196,6 +196,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modatv/atvmod.h b/plugins/channeltx/modatv/atvmod.h index 7f8f04c49..bc77a82fc 100644 --- a/plugins/channeltx/modatv/atvmod.h +++ b/plugins/channeltx/modatv/atvmod.h @@ -267,6 +267,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modchirpchat/chirpchatmod.h b/plugins/channeltx/modchirpchat/chirpchatmod.h index c1f8bc22a..583118235 100644 --- a/plugins/channeltx/modchirpchat/chirpchatmod.h +++ b/plugins/channeltx/modchirpchat/chirpchatmod.h @@ -112,6 +112,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/moddatv/datvmod.h b/plugins/channeltx/moddatv/datvmod.h index 98781f861..bb259141a 100644 --- a/plugins/channeltx/moddatv/datvmod.h +++ b/plugins/channeltx/moddatv/datvmod.h @@ -222,6 +222,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modfreedv/freedvmod.h b/plugins/channeltx/modfreedv/freedvmod.h index d050e219e..698dee921 100644 --- a/plugins/channeltx/modfreedv/freedvmod.h +++ b/plugins/channeltx/modfreedv/freedvmod.h @@ -200,6 +200,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modm17/m17mod.h b/plugins/channeltx/modm17/m17mod.h index 8122f4f3c..aa5e0657e 100644 --- a/plugins/channeltx/modm17/m17mod.h +++ b/plugins/channeltx/modm17/m17mod.h @@ -200,6 +200,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modnfm/nfmmod.h b/plugins/channeltx/modnfm/nfmmod.h index 6c0d9de67..36478dbac 100644 --- a/plugins/channeltx/modnfm/nfmmod.h +++ b/plugins/channeltx/modnfm/nfmmod.h @@ -196,6 +196,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modpacket/packetmod.h b/plugins/channeltx/modpacket/packetmod.h index ba006f920..66bb7c4ee 100644 --- a/plugins/channeltx/modpacket/packetmod.h +++ b/plugins/channeltx/modpacket/packetmod.h @@ -164,6 +164,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modpsk31/psk31mod.h b/plugins/channeltx/modpsk31/psk31mod.h index 58b41de77..4b217ab88 100644 --- a/plugins/channeltx/modpsk31/psk31mod.h +++ b/plugins/channeltx/modpsk31/psk31mod.h @@ -148,6 +148,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modrtty/rttymod.h b/plugins/channeltx/modrtty/rttymod.h index dd6ad4324..ea332c678 100644 --- a/plugins/channeltx/modrtty/rttymod.h +++ b/plugins/channeltx/modrtty/rttymod.h @@ -148,6 +148,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modssb/ssbmod.h b/plugins/channeltx/modssb/ssbmod.h index 43685e310..2587bf1e0 100644 --- a/plugins/channeltx/modssb/ssbmod.h +++ b/plugins/channeltx/modssb/ssbmod.h @@ -198,6 +198,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/modwfm/wfmmod.h b/plugins/channeltx/modwfm/wfmmod.h index 879aa5547..b538e003a 100644 --- a/plugins/channeltx/modwfm/wfmmod.h +++ b/plugins/channeltx/modwfm/wfmmod.h @@ -196,6 +196,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/remotesource/remotesource.h b/plugins/channeltx/remotesource/remotesource.h index 67c251cc2..02fcfd29d 100644 --- a/plugins/channeltx/remotesource/remotesource.h +++ b/plugins/channeltx/remotesource/remotesource.h @@ -178,6 +178,7 @@ public: virtual int getNbSinkStreams() const { return 0; } virtual int getNbSourceStreams() const { return 1; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/plugins/channeltx/udpsource/udpsource.h b/plugins/channeltx/udpsource/udpsource.h index 6e6662794..c633b5fcc 100644 --- a/plugins/channeltx/udpsource/udpsource.h +++ b/plugins/channeltx/udpsource/udpsource.h @@ -117,6 +117,7 @@ public: virtual int getNbSinkStreams() const { return 1; } virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const { diff --git a/sdrbase/channel/channelapi.h b/sdrbase/channel/channelapi.h index 260546f21..c9301c433 100644 --- a/sdrbase/channel/channelapi.h +++ b/sdrbase/channel/channelapi.h @@ -153,6 +153,7 @@ public: StreamType getStreamType() const { return m_streamType; } virtual int getNbSinkStreams() const = 0; virtual int getNbSourceStreams() const = 0; + virtual int getStreamIndex() const = 0; virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const = 0; void handlePipeMessageQueue(MessageQueue* messageQueue)