Use specific message to communicate between channelizer and demodulator

This commit is contained in:
f4exb 2015-08-19 22:12:52 +02:00
parent 60a8946ce4
commit 582ce24c62
13 changed files with 62 additions and 42 deletions

View File

@ -4,6 +4,7 @@
#include <list>
#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();

View File

@ -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 {

View File

@ -21,7 +21,7 @@
#include <stdio.h>
#include <complex.h>
#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);
}

View File

@ -20,7 +20,7 @@
#include <QDebug>
#include <stdio.h>
#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;

View File

@ -20,7 +20,7 @@
#include <QDebug>
#include <stdio.h>
#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;
}

View File

@ -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;

View File

@ -21,7 +21,7 @@
#include <stdio.h>
#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;

View File

@ -19,7 +19,7 @@
#include <QThread>
#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;

View File

@ -20,7 +20,7 @@
#include <stdio.h>
#include <complex.h>
#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;

View File

@ -4,6 +4,8 @@
#include <QDebug>
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);
}

View File

@ -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 << ")";

View File

@ -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;

View File

@ -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";