diff --git a/plugins/channelrx/demodwfm/wfmdemod.cpp b/plugins/channelrx/demodwfm/wfmdemod.cpp
index 14ca4eab3..df5615399 100644
--- a/plugins/channelrx/demodwfm/wfmdemod.cpp
+++ b/plugins/channelrx/demodwfm/wfmdemod.cpp
@@ -15,34 +15,43 @@
// along with this program. If not, see . //
///////////////////////////////////////////////////////////////////////////////////
-#include "../../channelrx/demodwfm/wfmdemod.h"
#include
#include
#include
#include
+
#include
+#include "dsp/threadedbasebandsamplesink.h"
+#include
#include "audio/audiooutput.h"
#include "dsp/dspengine.h"
#include "dsp/pidcontroller.h"
+#include "wfmdemod.h"
+
MESSAGE_CLASS_DEFINITION(WFMDemod::MsgConfigureWFMDemod, Message)
MESSAGE_CLASS_DEFINITION(WFMDemod::MsgConfigureChannelizer, Message)
-WFMDemod::WFMDemod(BasebandSampleSink* sampleSink) :
+WFMDemod::WFMDemod(DeviceSourceAPI* deviceAPI) :
+ m_deviceAPI(deviceAPI),
m_squelchOpen(false),
m_magsq(0.0f),
m_magsqSum(0.0f),
m_magsqPeak(0.0f),
m_magsqCount(0),
m_movingAverage(40, 0),
- m_sampleSink(sampleSink),
+ m_sampleSink(0),
m_audioFifo(250000),
m_settingsMutex(QMutex::Recursive)
{
setObjectName("WFMDemod");
+ m_channelizer = new DownChannelizer(this);
+ m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
+ m_deviceAPI->addThreadedSink(m_threadedChannelizer);
+
m_rfFilter = new fftfilt(-50000.0 / 384000.0, 50000.0 / 384000.0, rfFilterFftLength);
m_phaseDiscri.setFMScaling(384000/75000);
@@ -63,6 +72,10 @@ WFMDemod::~WFMDemod()
}
DSPEngine::instance()->removeAudioSink(&m_audioFifo);
+
+ m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
+ delete m_threadedChannelizer;
+ delete m_channelizer;
}
void WFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool firstOfBurst __attribute__((unused)))
diff --git a/plugins/channelrx/demodwfm/wfmdemod.h b/plugins/channelrx/demodwfm/wfmdemod.h
index b9c02697e..39740bd07 100644
--- a/plugins/channelrx/demodwfm/wfmdemod.h
+++ b/plugins/channelrx/demodwfm/wfmdemod.h
@@ -34,6 +34,10 @@
#define rfFilterFftLength 1024
+class ThreadedBasebandSampleSink;
+class DownChannelizer;
+class DeviceSourceAPI;
+
class WFMDemod : public BasebandSampleSink {
public:
class MsgConfigureWFMDemod : public Message {
@@ -82,8 +86,9 @@ public:
{ }
};
- WFMDemod(BasebandSampleSink* sampleSink);
+ WFMDemod(DeviceSourceAPI *deviceAPI);
virtual ~WFMDemod();
+ void setSampleSink(BasebandSampleSink* sampleSink) { m_sampleSink = sampleSink; }
virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po);
virtual void start();
@@ -110,7 +115,10 @@ private:
RSRunning
};
- WFMDemodSettings m_settings;
+ DeviceSourceAPI* m_deviceAPI;
+ ThreadedBasebandSampleSink* m_threadedChannelizer;
+ DownChannelizer* m_channelizer;
+ WFMDemodSettings m_settings;
NCO m_nco;
Interpolator m_interpolator; //!< Interpolator between sample rate sent from DSP engine and requested RF bandwidth (rational)
diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.cpp b/plugins/channelrx/demodwfm/wfmdemodgui.cpp
index 7515a917b..ff5745395 100644
--- a/plugins/channelrx/demodwfm/wfmdemodgui.cpp
+++ b/plugins/channelrx/demodwfm/wfmdemodgui.cpp
@@ -6,7 +6,6 @@
#include
#include
-#include "dsp/threadedbasebandsamplesink.h"
#include "ui_wfmdemodgui.h"
#include "dsp/dspengine.h"
#include "plugin/pluginapi.h"
@@ -173,10 +172,7 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg
connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(menuDoubleClickEvent()), this, SLOT(onMenuDoubleClicked()));
- m_wfmDemod = new WFMDemod(0);
- m_channelizer = new DownChannelizer(m_wfmDemod);
- m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
- m_deviceAPI->addThreadedSink(m_threadedChannelizer);
+ m_wfmDemod = new WFMDemod(m_deviceAPI);
connect(&m_pluginAPI->getMainWindow()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick()));
@@ -193,6 +189,8 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg
m_deviceAPI->addChannelMarker(&m_channelMarker);
m_deviceAPI->addRollupWidget(this);
+ m_settings.setChannelMarker(&m_channelMarker);
+
displaySettings();
applySettings(true);
}
@@ -200,9 +198,6 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg
WFMDemodGUI::~WFMDemodGUI()
{
m_deviceAPI->removeChannelInstance(this);
- m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
- delete m_threadedChannelizer;
- delete m_channelizer;
delete m_wfmDemod;
//delete m_channelMarker;
delete ui;
@@ -219,9 +214,10 @@ void WFMDemodGUI::applySettings(bool force)
{
setTitleColor(m_channelMarker.getColor());
- m_channelizer->configure(m_channelizer->getInputMessageQueue(),
- requiredBW(WFMDemodSettings::getRFBW(ui->rfBW->currentIndex())), // TODO: this is where requested sample rate is specified
- m_channelMarker.getCenterFrequency());
+ WFMDemod::MsgConfigureChannelizer *msgChan = WFMDemod::MsgConfigureChannelizer::create(
+ requiredBW(WFMDemodSettings::getRFBW(ui->rfBW->currentIndex())),
+ m_channelMarker.getCenterFrequency());
+ m_wfmDemod->getInputMessageQueue()->push(msgChan);
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.h b/plugins/channelrx/demodwfm/wfmdemodgui.h
index 59ff2a8c0..775acc4f4 100644
--- a/plugins/channelrx/demodwfm/wfmdemodgui.h
+++ b/plugins/channelrx/demodwfm/wfmdemodgui.h
@@ -12,8 +12,6 @@
class PluginAPI;
class DeviceSourceAPI;
-class ThreadedBasebandSampleSink;
-class DownChannelizer;
class WFMDemod;
namespace Ui {
@@ -63,8 +61,6 @@ private:
bool m_audioMute;
bool m_squelchOpen;
- ThreadedBasebandSampleSink* m_threadedChannelizer;
- DownChannelizer* m_channelizer;
WFMDemod* m_wfmDemod;
MovingAverage m_channelPowerDbAvg;
MessageQueue m_inputMessageQueue;
diff --git a/plugins/channelrx/demodwfm/wfmplugin.cpp b/plugins/channelrx/demodwfm/wfmplugin.cpp
index 9cf3fe06f..cb647dade 100644
--- a/plugins/channelrx/demodwfm/wfmplugin.cpp
+++ b/plugins/channelrx/demodwfm/wfmplugin.cpp
@@ -7,7 +7,7 @@
const PluginDescriptor WFMPlugin::m_pluginDescriptor = {
QString("WFM Demodulator"),
- QString("3.5.0"),
+ QString("3.7.4"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,