From 53e4f4b1e87224547f4b1933f75423667bfc0238 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Fri, 17 Apr 2026 14:49:23 +0100 Subject: [PATCH] Send DSPSignalNotification to Baseband when started, rather than calling m_basebandSink->setBasebandSampleRate, to ensure that FIFO can be resized according to the sample rate. For #2661. --- plugins/channelrx/demodadsb/adsbdemod.cpp | 9 +++++---- plugins/channelrx/demodadsb/adsbdemod.h | 1 + plugins/channelrx/demodam/amdemod.cpp | 1 + plugins/channelrx/demodchirpchat/chirpchatdemod.cpp | 9 +++++---- plugins/channelrx/demodchirpchat/chirpchatdemod.h | 1 + plugins/channelrx/demoddatv/datvdemod.cpp | 11 ++++++----- plugins/channelrx/demoddatv/datvdemod.h | 1 + plugins/channelrx/demoddsd/dsddemod.cpp | 8 +++++--- plugins/channelrx/demoddsd/dsddemod.h | 1 + plugins/channelrx/demodfreedv/freedvdemod.cpp | 12 +++++++----- plugins/channelrx/demodfreedv/freedvdemod.h | 1 + plugins/channelrx/demodft8/ft8demod.cpp | 11 ++++++----- plugins/channelrx/demodft8/ft8demod.h | 1 + plugins/channelrx/demodm17/m17demod.cpp | 8 +++++--- plugins/channelrx/demodm17/m17demod.h | 1 + plugins/channelrx/demodnfm/nfmdemod.cpp | 11 ++++++----- plugins/channelrx/demodnfm/nfmdemod.h | 1 + plugins/channelrx/demodssb/ssbdemod.cpp | 11 ++++++----- plugins/channelrx/demodssb/ssbdemod.h | 1 + plugins/channelrx/demodwfm/wfmdemod.cpp | 11 ++++++----- plugins/channelrx/demodwfm/wfmdemod.h | 1 + plugins/channelrx/freqtracker/freqtracker.cpp | 11 ++++++----- plugins/channelrx/freqtracker/freqtracker.h | 1 + plugins/channelrx/remotesink/remotesink.cpp | 9 +++++---- plugins/channelrx/remotesink/remotesink.h | 1 + plugins/channelrx/remotetcpsink/remotetcpsink.cpp | 7 ++++--- plugins/channelrx/remotetcpsink/remotetcpsink.h | 1 + plugins/channelrx/udpsink/udpsink.cpp | 10 ++++++---- plugins/channelrx/udpsink/udpsink.h | 1 + plugins/channelrx/wdsprx/wdsprx.cpp | 11 ++++++----- plugins/channelrx/wdsprx/wdsprx.h | 1 + 31 files changed, 100 insertions(+), 65 deletions(-) diff --git a/plugins/channelrx/demodadsb/adsbdemod.cpp b/plugins/channelrx/demodadsb/adsbdemod.cpp index d88ea0933..59ee64744 100644 --- a/plugins/channelrx/demodadsb/adsbdemod.cpp +++ b/plugins/channelrx/demodadsb/adsbdemod.cpp @@ -54,6 +54,7 @@ ADSBDemod::ADSBDemod(DeviceAPI *devieAPI) : ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), m_deviceAPI(devieAPI), m_basebandSampleRate(0), + m_centerFrequency(0), m_targetAzElValid(false), m_targetAzimuth(0.0f), m_targetElevation(0.0f) @@ -134,16 +135,15 @@ void ADSBDemod::start() { qDebug() << "ADSBDemod::start"; - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_worker->reset(); m_worker->startWork(); m_basebandSink->reset(); m_basebandSink->startWork(); m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + ADSBDemodWorker::MsgConfigureADSBDemodWorker *msg = ADSBDemodWorker::MsgConfigureADSBDemodWorker::create(m_settings, QStringList(), true); m_worker->getInputMessageQueue()->push(msg); } @@ -174,6 +174,7 @@ bool ADSBDemod::handleMessage(const Message& cmd) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); // Forward to the sink DSPSignalNotification* rep = new DSPSignalNotification(notif); // make a copy qDebug() << "ADSBDemod::handleMessage: DSPSignalNotification"; diff --git a/plugins/channelrx/demodadsb/adsbdemod.h b/plugins/channelrx/demodadsb/adsbdemod.h index 313771eb6..bee77c58a 100644 --- a/plugins/channelrx/demodadsb/adsbdemod.h +++ b/plugins/channelrx/demodadsb/adsbdemod.h @@ -188,6 +188,7 @@ private: ADSBDemodBaseband* m_basebandSink; ADSBDemodSettings m_settings; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; bool m_targetAzElValid; float m_targetAzimuth; diff --git a/plugins/channelrx/demodam/amdemod.cpp b/plugins/channelrx/demodam/amdemod.cpp index 073fac7b6..fb868b396 100644 --- a/plugins/channelrx/demodam/amdemod.cpp +++ b/plugins/channelrx/demodam/amdemod.cpp @@ -57,6 +57,7 @@ AMDemod::AMDemod(DeviceAPI *deviceAPI) : m_basebandSink(nullptr), m_running(false), m_basebandSampleRate(0), + m_centerFrequency(0), m_lastTs(0) { setObjectName(m_channelId); diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemod.cpp b/plugins/channelrx/demodchirpchat/chirpchatdemod.cpp index f00ee2ea4..34d7d36d7 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemod.cpp +++ b/plugins/channelrx/demodchirpchat/chirpchatdemod.cpp @@ -61,6 +61,7 @@ ChirpChatDemod::ChirpChatDemod(DeviceAPI* deviceAPI) : m_running(false), m_spectrumVis(SDR_RX_SCALEF), m_basebandSampleRate(0), + m_centerFrequency(0), m_lastMsgSignalDb(0.0), m_lastMsgNoiseDb(0.0), m_lastMsgSyncWord(0), @@ -158,13 +159,12 @@ void ChirpChatDemod::start() QObject::connect(m_thread, &QThread::finished, m_basebandSink, &QObject::deleteLater); QObject::connect(m_thread, &QThread::finished, m_thread, &QThread::deleteLater); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_basebandSink->reset(); m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + SpectrumSettings spectrumSettings = m_spectrumVis.getSettings(); spectrumSettings.m_ssb = true; SpectrumVis::MsgConfigureSpectrumVis *msg = SpectrumVis::MsgConfigureSpectrumVis::create(spectrumSettings, false); @@ -360,6 +360,7 @@ bool ChirpChatDemod::handleMessage(const Message& cmd) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); qDebug() << "ChirpChatDemod::handleMessage: DSPSignalNotification: m_basebandSampleRate: " << m_basebandSampleRate; // Forward to the sink diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemod.h b/plugins/channelrx/demodchirpchat/chirpchatdemod.h index 5bc815d2b..cf97446e8 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemod.h +++ b/plugins/channelrx/demodchirpchat/chirpchatdemod.h @@ -148,6 +148,7 @@ private: ChirpChatDemodSettings m_settings; SpectrumVis m_spectrumVis; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; float m_lastMsgSignalDb; float m_lastMsgNoiseDb; int m_lastMsgSyncWord; diff --git a/plugins/channelrx/demoddatv/datvdemod.cpp b/plugins/channelrx/demoddatv/datvdemod.cpp index 55c2447fe..2e971cb67 100644 --- a/plugins/channelrx/demoddatv/datvdemod.cpp +++ b/plugins/channelrx/demoddatv/datvdemod.cpp @@ -45,7 +45,8 @@ MESSAGE_CLASS_DEFINITION(DATVDemod::MsgConfigureDATVDemod, Message) DATVDemod::DATVDemod(DeviceAPI *deviceAPI) : ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), m_deviceAPI(deviceAPI), - m_basebandSampleRate(0) + m_basebandSampleRate(0), + m_centerFrequency(0) { qDebug("DATVDemod::DATVDemod"); setObjectName(m_channelId); @@ -115,14 +116,13 @@ void DATVDemod::start() { qDebug("DATVDemod::start"); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_basebandSink->reset(); m_basebandSink->startWork(); m_thread.start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + DATVDemodBaseband::MsgConfigureDATVDemodBaseband *msg = DATVDemodBaseband::MsgConfigureDATVDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -149,6 +149,7 @@ bool DATVDemod::handleMessage(const Message& cmd) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); // store for init at start + m_centerFrequency = notif.getCenterFrequency(); qDebug() << "DATVDemod::handleMessage: DSPSignalNotification" << m_basebandSampleRate; // Forward to the sink diff --git a/plugins/channelrx/demoddatv/datvdemod.h b/plugins/channelrx/demoddatv/datvdemod.h index a898c235d..dbe46e2b8 100644 --- a/plugins/channelrx/demoddatv/datvdemod.h +++ b/plugins/channelrx/demoddatv/datvdemod.h @@ -169,6 +169,7 @@ private: DATVDemodBaseband* m_basebandSink; DATVDemodSettings m_settings; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/channelrx/demoddsd/dsddemod.cpp b/plugins/channelrx/demoddsd/dsddemod.cpp index c55de76be..54a1ffb77 100644 --- a/plugins/channelrx/demoddsd/dsddemod.cpp +++ b/plugins/channelrx/demoddsd/dsddemod.cpp @@ -63,6 +63,7 @@ DSDDemod::DSDDemod(DeviceAPI *deviceAPI) : m_deviceAPI(deviceAPI), m_running(false), m_basebandSampleRate(0), + m_centerFrequency(0), m_scopeXYSink(nullptr) { qDebug("DSDDemod::DSDDemod"); @@ -176,13 +177,13 @@ void DSDDemod::start() &QThread::deleteLater ); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } m_basebandSink->setScopeXYSink(m_scopeXYSink); m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + DSDDemodBaseband::MsgConfigureDSDDemodBaseband *msg = DSDDemodBaseband::MsgConfigureDSDDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); @@ -229,6 +230,7 @@ bool DSDDemod::handleMessage(const Message& cmd) qDebug() << "DSDDemod::handleMessage: DSPSignalNotification"; DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); // Forward to the sink if (m_running) { m_basebandSink->getInputMessageQueue()->push(new DSPSignalNotification(notif)); diff --git a/plugins/channelrx/demoddsd/dsddemod.h b/plugins/channelrx/demoddsd/dsddemod.h index 256862b71..a9973445e 100644 --- a/plugins/channelrx/demoddsd/dsddemod.h +++ b/plugins/channelrx/demoddsd/dsddemod.h @@ -191,6 +191,7 @@ private: bool m_running; DSDDemodSettings m_settings; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; QHash m_availableAMBEFeatures; BasebandSampleSink *m_scopeXYSink; QNetworkAccessManager *m_networkManager; diff --git a/plugins/channelrx/demodfreedv/freedvdemod.cpp b/plugins/channelrx/demodfreedv/freedvdemod.cpp index 5011f85a6..f21d4ced9 100644 --- a/plugins/channelrx/demodfreedv/freedvdemod.cpp +++ b/plugins/channelrx/demodfreedv/freedvdemod.cpp @@ -48,7 +48,9 @@ const char* const FreeDVDemod::m_channelId = "FreeDVDemod"; FreeDVDemod::FreeDVDemod(DeviceAPI *deviceAPI) : ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), m_deviceAPI(deviceAPI), - m_spectrumVis(SDR_RX_SCALEF) + m_spectrumVis(SDR_RX_SCALEF), + m_basebandSampleRate(0), + m_centerFrequency(0) { setObjectName(m_channelId); @@ -120,13 +122,12 @@ void FreeDVDemod::start() { qDebug() << "FreeDVDemod::start"; - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_basebandSink->reset(); m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + SpectrumSettings spectrumSettings = m_spectrumVis.getSettings(); spectrumSettings.m_ssb = true; SpectrumVis::MsgConfigureSpectrumVis *msg = SpectrumVis::MsgConfigureSpectrumVis::create(spectrumSettings, false); @@ -163,6 +164,7 @@ bool FreeDVDemod::handleMessage(const Message& cmd) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); // Forward to the sink DSPSignalNotification* rep = new DSPSignalNotification(notif); // make a copy qDebug() << "FreeDVDemod::handleMessage: DSPSignalNotification"; diff --git a/plugins/channelrx/demodfreedv/freedvdemod.h b/plugins/channelrx/demodfreedv/freedvdemod.h index 5d4d9f607..c5678d318 100644 --- a/plugins/channelrx/demodfreedv/freedvdemod.h +++ b/plugins/channelrx/demodfreedv/freedvdemod.h @@ -168,6 +168,7 @@ private: FreeDVDemodSettings m_settings; SpectrumVis m_spectrumVis; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/channelrx/demodft8/ft8demod.cpp b/plugins/channelrx/demodft8/ft8demod.cpp index 202f666bc..26cbf4627 100644 --- a/plugins/channelrx/demodft8/ft8demod.cpp +++ b/plugins/channelrx/demodft8/ft8demod.cpp @@ -58,7 +58,8 @@ FT8Demod::FT8Demod(DeviceAPI *deviceAPI) : m_deviceAPI(deviceAPI), m_running(false), m_spectrumVis(SDR_RX_SCALEF), - m_basebandSampleRate(0) + m_basebandSampleRate(0), + m_centerFrequency(0) { setObjectName(m_channelId); @@ -181,12 +182,11 @@ void FT8Demod::start() &QThread::deleteLater ); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + FT8DemodBaseband::MsgConfigureFT8DemodBaseband *msg = FT8DemodBaseband::MsgConfigureFT8DemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); @@ -223,6 +223,7 @@ bool FT8Demod::handleMessage(const Message& cmd) qDebug() << "FT8Demod::handleMessage: DSPSignalNotification"; DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); // Forward to the sink if (m_running) { m_basebandSink->getInputMessageQueue()->push(new DSPSignalNotification(notif)); diff --git a/plugins/channelrx/demodft8/ft8demod.h b/plugins/channelrx/demodft8/ft8demod.h index 2f409a21c..af1e27263 100644 --- a/plugins/channelrx/demodft8/ft8demod.h +++ b/plugins/channelrx/demodft8/ft8demod.h @@ -162,6 +162,7 @@ private: FT8DemodSettings m_settings; SpectrumVis m_spectrumVis; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/channelrx/demodm17/m17demod.cpp b/plugins/channelrx/demodm17/m17demod.cpp index 2cfee7581..5743efbf1 100644 --- a/plugins/channelrx/demodm17/m17demod.cpp +++ b/plugins/channelrx/demodm17/m17demod.cpp @@ -59,6 +59,7 @@ M17Demod::M17Demod(DeviceAPI *deviceAPI) : m_basebandSink(nullptr), m_running(false), m_basebandSampleRate(0), + m_centerFrequency(0), m_scopeXYSink(nullptr) { qDebug("M17Demod::M17Demod"); @@ -140,14 +141,14 @@ void M17Demod::start() QObject::connect(m_thread, &QThread::finished, m_basebandSink, &QObject::deleteLater); QObject::connect(m_thread, &QThread::finished, m_thread, &QThread::deleteLater); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } m_basebandSink->setScopeXYSink(m_scopeXYSink); m_basebandSink->reset(); m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + M17DemodBaseband::MsgConfigureM17DemodBaseband *msg = M17DemodBaseband::MsgConfigureM17DemodBaseband::create(m_settings, QStringList(), true); m_basebandSink->getInputMessageQueue()->push(msg); @@ -182,6 +183,7 @@ bool M17Demod::handleMessage(const Message& cmd) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); qDebug() << "M17Demod::handleMessage: DSPSignalNotification"; // Forward to the sink diff --git a/plugins/channelrx/demodm17/m17demod.h b/plugins/channelrx/demodm17/m17demod.h index 758299e0b..7225c1791 100644 --- a/plugins/channelrx/demodm17/m17demod.h +++ b/plugins/channelrx/demodm17/m17demod.h @@ -286,6 +286,7 @@ private: bool m_running; M17DemodSettings m_settings; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; BasebandSampleSink *m_scopeXYSink; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/channelrx/demodnfm/nfmdemod.cpp b/plugins/channelrx/demodnfm/nfmdemod.cpp index 44e92792c..40aff27f3 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.cpp +++ b/plugins/channelrx/demodnfm/nfmdemod.cpp @@ -56,7 +56,8 @@ NFMDemod::NFMDemod(DeviceAPI *devieAPI) : ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), m_deviceAPI(devieAPI), m_running(false), - m_basebandSampleRate(0) + m_basebandSampleRate(0), + m_centerFrequency(0) { qDebug("NFMDemod::NFMDemod"); setObjectName(m_channelId); @@ -149,12 +150,11 @@ void NFMDemod::start() &QThread::deleteLater ); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + NFMDemodBaseband::MsgConfigureNFMDemodBaseband *msg = NFMDemodBaseband::MsgConfigureNFMDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); @@ -189,6 +189,7 @@ bool NFMDemod::handleMessage(const Message& cmd) qDebug() << "NFMDemod::handleMessage: DSPSignalNotification"; DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); // Forward to the sink if any if (m_running) { m_basebandSink->getInputMessageQueue()->push(new DSPSignalNotification(notif)); diff --git a/plugins/channelrx/demodnfm/nfmdemod.h b/plugins/channelrx/demodnfm/nfmdemod.h index 31059baf4..a88576759 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.h +++ b/plugins/channelrx/demodnfm/nfmdemod.h @@ -152,6 +152,7 @@ private: bool m_running; NFMDemodSettings m_settings; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/channelrx/demodssb/ssbdemod.cpp b/plugins/channelrx/demodssb/ssbdemod.cpp index 57d43d8ce..f91b570d7 100644 --- a/plugins/channelrx/demodssb/ssbdemod.cpp +++ b/plugins/channelrx/demodssb/ssbdemod.cpp @@ -58,7 +58,8 @@ SSBDemod::SSBDemod(DeviceAPI *deviceAPI) : m_basebandSink(nullptr), m_running(false), m_spectrumVis(SDR_RX_SCALEF), - m_basebandSampleRate(0) + m_basebandSampleRate(0), + m_centerFrequency(0) { setObjectName(m_channelId); @@ -166,12 +167,11 @@ void SSBDemod::start() &QThread::deleteLater ); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + SSBDemodBaseband::MsgConfigureSSBDemodBaseband *msg = SSBDemodBaseband::MsgConfigureSSBDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); @@ -208,6 +208,7 @@ bool SSBDemod::handleMessage(const Message& cmd) qDebug() << "SSBDemod::handleMessage: DSPSignalNotification"; DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); // Forward to the sink if (m_running) { m_basebandSink->getInputMessageQueue()->push(new DSPSignalNotification(notif)); diff --git a/plugins/channelrx/demodssb/ssbdemod.h b/plugins/channelrx/demodssb/ssbdemod.h index 89de0e303..5da17ba36 100644 --- a/plugins/channelrx/demodssb/ssbdemod.h +++ b/plugins/channelrx/demodssb/ssbdemod.h @@ -160,6 +160,7 @@ private: SSBDemodSettings m_settings; SpectrumVis m_spectrumVis; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/channelrx/demodwfm/wfmdemod.cpp b/plugins/channelrx/demodwfm/wfmdemod.cpp index c11629fbc..7386b43b5 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.cpp +++ b/plugins/channelrx/demodwfm/wfmdemod.cpp @@ -58,7 +58,8 @@ WFMDemod::WFMDemod(DeviceAPI* deviceAPI) : m_thread(nullptr), m_basebandSink(nullptr), m_running(false), - m_basebandSampleRate(0) + m_basebandSampleRate(0), + m_centerFrequency(0) { setObjectName(m_channelId); applySettings(QStringList(), m_settings, true); @@ -138,13 +139,12 @@ void WFMDemod::start() QObject::connect(m_thread, &QThread::finished, m_basebandSink, &QObject::deleteLater); QObject::connect(m_thread, &QThread::finished, m_thread, &QThread::deleteLater); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_basebandSink->reset(); m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + WFMDemodBaseband::MsgConfigureWFMDemodBaseband *msg = WFMDemodBaseband::MsgConfigureWFMDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); @@ -178,6 +178,7 @@ bool WFMDemod::handleMessage(const Message& cmd) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); qDebug() << "WFMDemod::handleMessage: DSPSignalNotification"; // Forward to the sink diff --git a/plugins/channelrx/demodwfm/wfmdemod.h b/plugins/channelrx/demodwfm/wfmdemod.h index 94e822c26..5176a0e98 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.h +++ b/plugins/channelrx/demodwfm/wfmdemod.h @@ -153,6 +153,7 @@ private: bool m_running; WFMDemodSettings m_settings; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/channelrx/freqtracker/freqtracker.cpp b/plugins/channelrx/freqtracker/freqtracker.cpp index 45c7be45c..ea51ea21e 100644 --- a/plugins/channelrx/freqtracker/freqtracker.cpp +++ b/plugins/channelrx/freqtracker/freqtracker.cpp @@ -56,7 +56,8 @@ FreqTracker::FreqTracker(DeviceAPI *deviceAPI) : m_basebandSink(nullptr), m_running(false), m_spectrumVis(SDR_RX_SCALEF), - m_basebandSampleRate(0) + m_basebandSampleRate(0), + m_centerFrequency(0) { setObjectName(m_channelId); applySettings(QStringList(), m_settings, true); @@ -137,13 +138,12 @@ void FreqTracker::start() QObject::connect(m_thread, &QThread::finished, m_basebandSink, &QObject::deleteLater); QObject::connect(m_thread, &QThread::finished, m_thread, &QThread::deleteLater); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_basebandSink->reset(); m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + FreqTrackerBaseband::MsgConfigureFreqTrackerBaseband *msg = FreqTrackerBaseband::MsgConfigureFreqTrackerBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); @@ -168,6 +168,7 @@ bool FreqTracker::handleMessage(const Message& cmd) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); qDebug() << "FreqTracker::handleMessage: DSPSignalNotification"; // Forward to the sink diff --git a/plugins/channelrx/freqtracker/freqtracker.h b/plugins/channelrx/freqtracker/freqtracker.h index d384a3a33..86ad77be3 100644 --- a/plugins/channelrx/freqtracker/freqtracker.h +++ b/plugins/channelrx/freqtracker/freqtracker.h @@ -157,6 +157,7 @@ private: FreqTrackerSettings m_settings; SpectrumVis m_spectrumVis; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; static const int m_udpBlockSize; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/channelrx/remotesink/remotesink.cpp b/plugins/channelrx/remotesink/remotesink.cpp index 82a83477e..d5dd0353d 100644 --- a/plugins/channelrx/remotesink/remotesink.cpp +++ b/plugins/channelrx/remotesink/remotesink.cpp @@ -56,7 +56,8 @@ RemoteSink::RemoteSink(DeviceAPI *deviceAPI) : m_basebandSink(nullptr), m_running(false), m_frequencyOffset(0), - m_basebandSampleRate(0) + m_basebandSampleRate(0), + m_centerFrequency(0) { setObjectName(m_channelId); updateWithDeviceData(); @@ -141,9 +142,8 @@ void RemoteSink::start() m_basebandSink->startWork(); m_thread->start(); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); RemoteSinkBaseband::MsgConfigureRemoteSinkBaseband *msg = RemoteSinkBaseband::MsgConfigureRemoteSinkBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); @@ -178,6 +178,7 @@ bool RemoteSink::handleMessage(const Message& cmd) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); qDebug() << "RemoteSink::handleMessage: DSPSignalNotification: m_basebandSampleRate:" << m_basebandSampleRate; calculateFrequencyOffset(); updateWithDeviceData(); // Device center frequency and/or sample rate has changed diff --git a/plugins/channelrx/remotesink/remotesink.h b/plugins/channelrx/remotesink/remotesink.h index 9a6a73a9c..156634a2c 100644 --- a/plugins/channelrx/remotesink/remotesink.h +++ b/plugins/channelrx/remotesink/remotesink.h @@ -137,6 +137,7 @@ private: int64_t m_frequencyOffset; int m_basebandSampleRate; + qint64 m_centerFrequency; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/channelrx/remotetcpsink/remotetcpsink.cpp b/plugins/channelrx/remotetcpsink/remotetcpsink.cpp index e86e0b496..4f7c3ae57 100644 --- a/plugins/channelrx/remotetcpsink/remotetcpsink.cpp +++ b/plugins/channelrx/remotetcpsink/remotetcpsink.cpp @@ -54,6 +54,7 @@ RemoteTCPSink::RemoteTCPSink(DeviceAPI *deviceAPI) : ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), m_deviceAPI(deviceAPI), m_basebandSampleRate(0), + m_centerFrequency(0), m_clients(0), m_removeRequest(nullptr) { @@ -145,9 +146,8 @@ void RemoteTCPSink::start() m_basebandSink->startWork(); m_thread.start(); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); MsgConfigureRemoteTCPSink* msg = MsgConfigureRemoteTCPSink::create(m_settings, QStringList(), true, true); m_basebandSink->getInputMessageQueue()->push(msg); @@ -180,6 +180,7 @@ bool RemoteTCPSink::handleMessage(const Message& cmd) { const DSPSignalNotification& notif = (const DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); qDebug() << "RemoteTCPSink::handleMessage: DSPSignalNotification: m_basebandSampleRate:" << m_basebandSampleRate; // Forward to the sink diff --git a/plugins/channelrx/remotetcpsink/remotetcpsink.h b/plugins/channelrx/remotetcpsink/remotetcpsink.h index bc030e08c..ab05b9d64 100644 --- a/plugins/channelrx/remotetcpsink/remotetcpsink.h +++ b/plugins/channelrx/remotetcpsink/remotetcpsink.h @@ -288,6 +288,7 @@ private: RemoteTCPSinkSettings m_settings; int m_basebandSampleRate; + qint64 m_centerFrequency; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/channelrx/udpsink/udpsink.cpp b/plugins/channelrx/udpsink/udpsink.cpp index e8a446b05..5b076565c 100644 --- a/plugins/channelrx/udpsink/udpsink.cpp +++ b/plugins/channelrx/udpsink/udpsink.cpp @@ -49,6 +49,8 @@ UDPSink::UDPSink(DeviceAPI *deviceAPI) : ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), m_deviceAPI(deviceAPI), m_spectrumVis(SDR_RX_SCALEF), + m_basebandSampleRate(0), + m_centerFrequency(0), m_channelSampleRate(48000), m_channelFrequencyOffset(0) { @@ -122,12 +124,11 @@ void UDPSink::start() { qDebug() << "UDPSink::start"; - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_basebandSink->reset(); m_thread->start(); + + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); } void UDPSink::stop() @@ -152,6 +153,7 @@ bool UDPSink::handleMessage(const Message& cmd) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); // Forward to the sink DSPSignalNotification* rep = new DSPSignalNotification(notif); // make a copy qDebug() << "UDPSink::handleMessage: DSPSignalNotification"; diff --git a/plugins/channelrx/udpsink/udpsink.h b/plugins/channelrx/udpsink/udpsink.h index d976e56b6..973466133 100644 --- a/plugins/channelrx/udpsink/udpsink.h +++ b/plugins/channelrx/udpsink/udpsink.h @@ -150,6 +150,7 @@ protected: UDPSinkSettings m_settings; SpectrumVis m_spectrumVis; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; int m_channelSampleRate; int m_channelFrequencyOffset; diff --git a/plugins/channelrx/wdsprx/wdsprx.cpp b/plugins/channelrx/wdsprx/wdsprx.cpp index 9ac16c69a..215158c3e 100644 --- a/plugins/channelrx/wdsprx/wdsprx.cpp +++ b/plugins/channelrx/wdsprx/wdsprx.cpp @@ -58,7 +58,8 @@ WDSPRx::WDSPRx(DeviceAPI *deviceAPI) : m_basebandSink(nullptr), m_running(false), m_spectrumVis(SDR_RX_SCALEF), - m_basebandSampleRate(0) + m_basebandSampleRate(0), + m_centerFrequency(0) { setObjectName(m_channelId); @@ -168,12 +169,11 @@ void WDSPRx::start() &QThread::deleteLater ); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_thread->start(); + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + WDSPRxBaseband::MsgConfigureWDSPRxBaseband *msg = WDSPRxBaseband::MsgConfigureWDSPRxBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); @@ -210,6 +210,7 @@ bool WDSPRx::handleMessage(const Message& cmd) qDebug() << "WDSPRx::handleMessage: DSPSignalNotification"; auto& notif = (const DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); // Forward to the sink if (m_running) { m_basebandSink->getInputMessageQueue()->push(new DSPSignalNotification(notif)); diff --git a/plugins/channelrx/wdsprx/wdsprx.h b/plugins/channelrx/wdsprx/wdsprx.h index f47a4d0cd..4b7128d89 100644 --- a/plugins/channelrx/wdsprx/wdsprx.h +++ b/plugins/channelrx/wdsprx/wdsprx.h @@ -160,6 +160,7 @@ private: WDSPRxSettings m_settings; SpectrumVis m_spectrumVis; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest;