From 582ce24c6203618e9773e9d4d2623c34c51c3519 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 19 Aug 2015 22:12:52 +0200 Subject: [PATCH] Use specific message to communicate between channelizer and demodulator --- include-gpl/dsp/channelizer.h | 19 +++++++++++++++++++ include-gpl/dsp/dspcommands.h | 11 +++++------ plugins/channel/am/amdemod.cpp | 10 +++++----- plugins/channel/chanalyzer/chanalyzer.cpp | 8 ++++---- plugins/channel/lora/lorademod.cpp | 9 +++++---- plugins/channel/nfm/nfmdemod.cpp | 8 ++++---- plugins/channel/ssb/ssbdemod.cpp | 8 ++++---- plugins/channel/tcpsrc/tcpsrc.cpp | 8 ++++---- plugins/channel/wfm/wfmdemod.cpp | 8 ++++---- sdrbase/dsp/channelizer.cpp | 7 ++++--- sdrbase/dsp/dspengine.cpp | 2 +- sdrbase/dsp/filesink.cpp | 2 +- sdrbase/mainwindow.cpp | 4 ++-- 13 files changed, 62 insertions(+), 42 deletions(-) diff --git a/include-gpl/dsp/channelizer.h b/include-gpl/dsp/channelizer.h index 510cb5714..870985e83 100644 --- a/include-gpl/dsp/channelizer.h +++ b/include-gpl/dsp/channelizer.h @@ -4,6 +4,7 @@ #include #include "dsp/samplesink.h" #include "util/export.h" +#include "util/message.h" class MessageQueue; class IntHalfbandFilter; @@ -11,6 +12,24 @@ class IntHalfbandFilter; class SDRANGELOVE_API Channelizer : public SampleSink { Q_OBJECT public: + class SDRANGELOVE_API MsgChannelizerNotification : public Message { + MESSAGE_CLASS_DECLARATION + + public: + MsgChannelizerNotification(int samplerate, qint64 frequencyOffset) : + Message(), + m_sampleRate(samplerate), + m_frequencyOffset(frequencyOffset) + { } + + int getSampleRate() const { return m_sampleRate; } + qint64 getFrequencyOffset() const { return m_frequencyOffset; } + + private: + int m_sampleRate; + qint64 m_frequencyOffset; + }; + Channelizer(SampleSink* sampleSink); virtual ~Channelizer(); diff --git a/include-gpl/dsp/dspcommands.h b/include-gpl/dsp/dspcommands.h index 072d50d6d..1983ce1e1 100644 --- a/include-gpl/dsp/dspcommands.h +++ b/include-gpl/dsp/dspcommands.h @@ -153,7 +153,6 @@ private: AudioFifo* m_audioFifo; }; -/* class SDRANGELOVE_API DSPConfigureSpectrumVis : public Message { MESSAGE_CLASS_DECLARATION @@ -173,7 +172,7 @@ private: int m_fftSize; int m_overlapPercent; FFTWindow::Function m_window; -};*/ +}; class SDRANGELOVE_API DSPConfigureCorrection : public Message { MESSAGE_CLASS_DECLARATION @@ -237,18 +236,18 @@ class SDRANGELOVE_API DSPSignalNotification : public Message { MESSAGE_CLASS_DECLARATION public: - DSPSignalNotification(int samplerate, qint64 frequencyOffset) : + DSPSignalNotification(int samplerate, qint64 centerFrequency) : Message(), m_sampleRate(samplerate), - m_frequencyOffset(frequencyOffset) + m_centerFrequency(centerFrequency) { } int getSampleRate() const { return m_sampleRate; } - qint64 getFrequencyOffset() const { return m_frequencyOffset; } + qint64 getCenterFrequency() const { return m_centerFrequency; } private: int m_sampleRate; - qint64 m_frequencyOffset; + qint64 m_centerFrequency; }; class SDRANGELOVE_API DSPConfigureChannelizer : public Message { diff --git a/plugins/channel/am/amdemod.cpp b/plugins/channel/am/amdemod.cpp index 072666176..a241b15dd 100644 --- a/plugins/channel/am/amdemod.cpp +++ b/plugins/channel/am/amdemod.cpp @@ -21,7 +21,7 @@ #include #include #include "audio/audiooutput.h" -#include "dsp/dspcommands.h" +#include "dsp/channelizer.h" #include "dsp/pidcontroller.h" MESSAGE_CLASS_DEFINITION(AMDemod::MsgConfigureAMDemod, Message) @@ -176,16 +176,16 @@ bool AMDemod::handleMessage(const Message& cmd) { qDebug() << "AMDemod::handleMessage"; - if (DSPSignalNotification::match(cmd)) + if (Channelizer::MsgChannelizerNotification::match(cmd)) { - DSPSignalNotification& notif = (DSPSignalNotification&) cmd; + Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd; m_config.m_inputSampleRate = notif.getSampleRate(); m_config.m_inputFrequencyOffset = notif.getFrequencyOffset(); apply(); - qDebug() << " - DSPSignalNotification:" + qDebug() << "AMDemod::handleMessage: MsgChannelizerNotification:" << " m_inputSampleRate: " << m_config.m_inputSampleRate << " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset; @@ -212,7 +212,7 @@ bool AMDemod::handleMessage(const Message& cmd) } else { - if(m_sampleSink != 0) + if(m_sampleSink != 0) // FIXME: for dependent sample sink - unused for this demod { return m_sampleSink->handleMessage(cmd); } diff --git a/plugins/channel/chanalyzer/chanalyzer.cpp b/plugins/channel/chanalyzer/chanalyzer.cpp index f6011b619..a32c3d57d 100644 --- a/plugins/channel/chanalyzer/chanalyzer.cpp +++ b/plugins/channel/chanalyzer/chanalyzer.cpp @@ -20,7 +20,7 @@ #include #include #include "audio/audiooutput.h" -#include "dsp/dspcommands.h" +#include "dsp/channelizer.h" #include "chanalyzer.h" @@ -127,14 +127,14 @@ bool ChannelAnalyzer::handleMessage(const Message& cmd) qDebug() << "ChannelAnalyzer::handleMessage"; - if (DSPSignalNotification::match(cmd)) + if (Channelizer::MsgChannelizerNotification::match(cmd)) { - DSPSignalNotification& notif = (DSPSignalNotification&) cmd; + Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd; m_sampleRate = notif.getSampleRate(); m_nco.setFreq(-notif.getFrequencyOffset(), m_sampleRate); - qDebug() << " - DSPSignalNotification: m_sampleRate: " << m_sampleRate + qDebug() << "ChannelAnalyzer::handleMessage: MsgChannelizerNotification: m_sampleRate: " << m_sampleRate << " frequencyOffset: " << notif.getFrequencyOffset(); return true; diff --git a/plugins/channel/lora/lorademod.cpp b/plugins/channel/lora/lorademod.cpp index 299899265..206080800 100644 --- a/plugins/channel/lora/lorademod.cpp +++ b/plugins/channel/lora/lorademod.cpp @@ -20,7 +20,7 @@ #include #include #include "lorademod.h" -#include "dsp/dspcommands.h" +#include "dsp/channelizer.h" #include "lorabits.h" @@ -279,16 +279,17 @@ bool LoRaDemod::handleMessage(const Message& cmd) { qDebug() << "LoRaDemod::handleMessage"; - if (DSPSignalNotification::match(cmd)) + if (Channelizer::MsgChannelizerNotification::match(cmd)) { - DSPSignalNotification& notif = (DSPSignalNotification&) cmd; + Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd; m_sampleRate = notif.getSampleRate(); m_nco.setFreq(-notif.getFrequencyOffset(), m_sampleRate); m_interpolator.create(16, m_sampleRate, m_Bandwidth/1.9); m_sampleDistanceRemain = m_sampleRate / m_Bandwidth; - qDebug() << " DSPSignalNotification: m_sampleRate: " << m_sampleRate; + qDebug() << "LoRaDemod::handleMessage: MsgChannelizerNotification: m_sampleRate: " << m_sampleRate + << " frequencyOffset: " << notif.getFrequencyOffset(); return true; } diff --git a/plugins/channel/nfm/nfmdemod.cpp b/plugins/channel/nfm/nfmdemod.cpp index 6bd86f952..a68b2d347 100644 --- a/plugins/channel/nfm/nfmdemod.cpp +++ b/plugins/channel/nfm/nfmdemod.cpp @@ -22,7 +22,7 @@ #include "nfmdemod.h" #include "nfmdemodgui.h" #include "audio/audiooutput.h" -#include "dsp/dspcommands.h" +#include "dsp/channelizer.h" #include "dsp/pidcontroller.h" #include "dsp/dspengine.h" @@ -256,16 +256,16 @@ bool NFMDemod::handleMessage(const Message& cmd) { qDebug() << "NFMDemod::handleMessage"; - if (DSPSignalNotification::match(cmd)) + if (Channelizer::MsgChannelizerNotification::match(cmd)) { - DSPSignalNotification& notif = (DSPSignalNotification&) cmd; + Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd; m_config.m_inputSampleRate = notif.getSampleRate(); m_config.m_inputFrequencyOffset = notif.getFrequencyOffset(); apply(); - qDebug() << " - DSPSignalNotification: m_inputSampleRate: " << m_config.m_inputSampleRate + qDebug() << "NFMDemod::handleMessage: MsgChannelizerNotification: m_inputSampleRate: " << m_config.m_inputSampleRate << " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset; return true; diff --git a/plugins/channel/ssb/ssbdemod.cpp b/plugins/channel/ssb/ssbdemod.cpp index fb2281968..7e436530f 100644 --- a/plugins/channel/ssb/ssbdemod.cpp +++ b/plugins/channel/ssb/ssbdemod.cpp @@ -21,7 +21,7 @@ #include #include "ssbdemod.h" #include "audio/audiooutput.h" -#include "dsp/dspcommands.h" +#include "dsp/channelizer.h" MESSAGE_CLASS_DEFINITION(SSBDemod::MsgConfigureSSBDemod, Message) @@ -149,16 +149,16 @@ bool SSBDemod::handleMessage(const Message& cmd) qDebug() << "SSBDemod::handleMessage"; - if (DSPSignalNotification::match(cmd)) + if (Channelizer::MsgChannelizerNotification::match(cmd)) { - DSPSignalNotification& notif = (DSPSignalNotification&) cmd; + Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd; m_sampleRate = notif.getSampleRate(); m_nco.setFreq(-notif.getFrequencyOffset(), m_sampleRate); m_interpolator.create(16, m_sampleRate, m_Bandwidth); m_sampleDistanceRemain = m_sampleRate / 48000.0; - qDebug() << " - DSPSignalNotification: m_sampleRate: " << m_sampleRate + qDebug() << "SSBDemod::handleMessage: MsgChannelizerNotification: m_sampleRate: " << m_sampleRate << " frequencyOffset" << notif.getFrequencyOffset(); return true; diff --git a/plugins/channel/tcpsrc/tcpsrc.cpp b/plugins/channel/tcpsrc/tcpsrc.cpp index d4256cef3..dbf7ea8e3 100644 --- a/plugins/channel/tcpsrc/tcpsrc.cpp +++ b/plugins/channel/tcpsrc/tcpsrc.cpp @@ -19,7 +19,7 @@ #include #include "tcpsrc.h" #include "tcpsrcgui.h" -#include "dsp/dspcommands.h" +#include "dsp/channelizer.h" MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcConfigure, Message) MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcConnection, Message) @@ -162,16 +162,16 @@ bool TCPSrc::handleMessage(const Message& cmd) { qDebug() << "TCPSrc::handleMessage"; - if (DSPSignalNotification::match(cmd)) + if (Channelizer::MsgChannelizerNotification::match(cmd)) { - DSPSignalNotification& notif = (DSPSignalNotification&) cmd; + Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd; m_inputSampleRate = notif.getSampleRate(); m_nco.setFreq(-notif.getFrequencyOffset(), m_inputSampleRate); m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.0); m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate; - qDebug() << " - DSPSignalNotification: m_inputSampleRate: " << m_inputSampleRate + qDebug() << "TCPSrc::handleMessage: MsgChannelizerNotification: m_inputSampleRate: " << m_inputSampleRate << " frequencyOffset: " << notif.getFrequencyOffset(); return true; diff --git a/plugins/channel/wfm/wfmdemod.cpp b/plugins/channel/wfm/wfmdemod.cpp index a76477a18..23d31fb1e 100644 --- a/plugins/channel/wfm/wfmdemod.cpp +++ b/plugins/channel/wfm/wfmdemod.cpp @@ -20,7 +20,7 @@ #include #include #include "audio/audiooutput.h" -#include "dsp/dspcommands.h" +#include "dsp/channelizer.h" #include "dsp/pidcontroller.h" #include "wfmdemod.h" @@ -163,15 +163,15 @@ bool WFMDemod::handleMessage(const Message& cmd) { qDebug() << "WFMDemod::handleMessage"; - if (DSPSignalNotification::match(cmd)) + if (Channelizer::MsgChannelizerNotification::match(cmd)) { - DSPSignalNotification& notif = (DSPSignalNotification&) cmd; + Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd; m_config.m_inputSampleRate = notif.getSampleRate(); m_config.m_inputFrequencyOffset = notif.getFrequencyOffset(); apply(); - qDebug() << " - DSPSignalNotification: m_inputSampleRate: " << m_config.m_inputSampleRate + qDebug() << "WFMDemod::handleMessage: MsgChannelizerNotification: m_inputSampleRate: " << m_config.m_inputSampleRate << " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset; return true; diff --git a/sdrbase/dsp/channelizer.cpp b/sdrbase/dsp/channelizer.cpp index 68fb87ce9..f89f8e545 100644 --- a/sdrbase/dsp/channelizer.cpp +++ b/sdrbase/dsp/channelizer.cpp @@ -4,6 +4,8 @@ #include +MESSAGE_CLASS_DEFINITION(Channelizer::MsgChannelizerNotification, Message) + Channelizer::Channelizer(SampleSink* sampleSink) : m_sampleSink(sampleSink), m_inputSampleRate(10), @@ -83,8 +85,7 @@ bool Channelizer::handleMessage(const Message& cmd) emit inputSampleRateChanged(); return true; } - else - if (DSPConfigureChannelizer::match(cmd)) + else if (DSPConfigureChannelizer::match(cmd)) { DSPConfigureChannelizer& chan = (DSPConfigureChannelizer&) cmd; m_requestedOutputSampleRate = chan.getSampleRate(); @@ -98,7 +99,7 @@ bool Channelizer::handleMessage(const Message& cmd) if (m_sampleSink != NULL) { - DSPSignalNotification notif(m_currentOutputSampleRate, m_currentCenterFrequency); + MsgChannelizerNotification notif(m_currentOutputSampleRate, m_currentCenterFrequency); m_sampleSink->handleMessage(notif); } diff --git a/sdrbase/dsp/dspengine.cpp b/sdrbase/dsp/dspengine.cpp index c240ac64a..bf279df5d 100644 --- a/sdrbase/dsp/dspengine.cpp +++ b/sdrbase/dsp/dspengine.cpp @@ -651,7 +651,7 @@ void DSPEngine::handleSourceMessages() // update DSP values m_sampleRate = notif->getSampleRate(); - m_centerFrequency = notif->getFrequencyOffset(); + m_centerFrequency = notif->getCenterFrequency(); qDebug() << "DSPEngine::handleSourceMessages: DSPSignalNotification(" << m_sampleRate << "," << m_centerFrequency << ")"; diff --git a/sdrbase/dsp/filesink.cpp b/sdrbase/dsp/filesink.cpp index 4223d2819..b2a5cd6d0 100644 --- a/sdrbase/dsp/filesink.cpp +++ b/sdrbase/dsp/filesink.cpp @@ -89,7 +89,7 @@ bool FileSink::handleMessage(const Message& message) { DSPSignalNotification& notif = (DSPSignalNotification&) message; m_sampleRate = notif.getSampleRate(); - m_centerFrequency = notif.getFrequencyOffset(); + m_centerFrequency = notif.getCenterFrequency(); qDebug() << " - DSPSignalNotification: m_inputSampleRate: " << m_sampleRate << " m_centerFrequency: " << m_centerFrequency; return true; diff --git a/sdrbase/mainwindow.cpp b/sdrbase/mainwindow.cpp index c7669049d..4037e1233 100644 --- a/sdrbase/mainwindow.cpp +++ b/sdrbase/mainwindow.cpp @@ -342,8 +342,8 @@ void MainWindow::handleDSPMessages() { DSPSignalNotification* notif = (DSPSignalNotification*) message; m_sampleRate = notif->getSampleRate(); - m_centerFrequency = notif->getFrequencyOffset(); - qDebug("SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getFrequencyOffset()); + m_centerFrequency = notif->getCenterFrequency(); + qDebug("SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); updateCenterFreqDisplay(); updateSampleRate(); qDebug() << "MainWindow::handleDSPMessages: forward to file sink";