From 49db1b2273da34db5298f200a9da75187835417c Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 8 Oct 2017 23:36:47 +0200 Subject: [PATCH] NFM demod: GUI and demod separation phase1 (3) --- plugins/channelrx/demodnfm/nfmdemod.cpp | 19 +++++++++++---- plugins/channelrx/demodnfm/nfmdemod.h | 28 ++++++++++++++++------ plugins/channelrx/demodnfm/nfmdemodgui.cpp | 27 +++++++++++++++++++-- plugins/channelrx/demodnfm/nfmdemodgui.h | 1 + 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/plugins/channelrx/demodnfm/nfmdemod.cpp b/plugins/channelrx/demodnfm/nfmdemod.cpp index a485c92c1..6d1252a1b 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.cpp +++ b/plugins/channelrx/demodnfm/nfmdemod.cpp @@ -33,6 +33,7 @@ MESSAGE_CLASS_DEFINITION(NFMDemod::MsgConfigureNFMDemod, Message) MESSAGE_CLASS_DEFINITION(NFMDemod::MsgConfigureChannelizer, Message) +MESSAGE_CLASS_DEFINITION(NFMDemod::MsgReportCTCSSFreq, Message) static const double afSqTones[2] = {1000.0, 6000.0}; // {1200.0, 8000.0}; const int NFMDemod::m_udpBlockSize = 512; @@ -240,7 +241,10 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto { if (maxToneIndex+1 != m_ctcssIndex) { - m_nfmDemodGUI->setCtcssFreq(m_ctcssDetector.getToneSet()[maxToneIndex]); + if (getMessageQueueToGUI()) { + MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(m_ctcssDetector.getToneSet()[maxToneIndex]); + getMessageQueueToGUI()->push(msg); + } m_ctcssIndex = maxToneIndex+1; } } @@ -248,7 +252,10 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto { if (m_ctcssIndex != 0) { - m_nfmDemodGUI->setCtcssFreq(0); + if (getMessageQueueToGUI()) { + MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(0); + getMessageQueueToGUI()->push(msg); + } m_ctcssIndex = 0; } } @@ -273,8 +280,12 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto { if (m_ctcssIndex != 0) { - m_nfmDemodGUI->setCtcssFreq(0); - m_ctcssIndex = 0; + if (getMessageQueueToGUI()) { + MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(0); + getMessageQueueToGUI()->push(msg); + } + + m_ctcssIndex = 0; } sample = 0; diff --git a/plugins/channelrx/demodnfm/nfmdemod.h b/plugins/channelrx/demodnfm/nfmdemod.h index 5148cef87..decaeada0 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.h +++ b/plugins/channelrx/demodnfm/nfmdemod.h @@ -38,7 +38,6 @@ class DeviceSourceAPI; class ThreadedBasebandSampleSink; class DownChannelizer; -class NFMDemodGUI; class NFMDemod : public BasebandSampleSink { public: @@ -88,7 +87,27 @@ public: { } }; - NFMDemod(DeviceSourceAPI *deviceAPI); + class MsgReportCTCSSFreq : public Message { + MESSAGE_CLASS_DECLARATION + + public: + Real getFrequency() const { return m_freq; } + + static MsgReportCTCSSFreq* create(Real freq) + { + return new MsgReportCTCSSFreq(freq); + } + + private: + Real m_freq; + + MsgReportCTCSSFreq(Real freq) : + Message(), + m_freq(freq) + { } + }; + + NFMDemod(DeviceSourceAPI *deviceAPI); ~NFMDemod(); virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); @@ -96,10 +115,6 @@ public: virtual void stop(); virtual bool handleMessage(const Message& cmd); - void registerGUI(NFMDemodGUI *nfmDemodGUI) { - m_nfmDemodGUI = nfmDemodGUI; - } - const Real *getCtcssToneSet(int& nbTones) const { nbTones = m_ctcssDetector.getNTones(); return m_ctcssDetector.getToneSet(); @@ -174,7 +189,6 @@ private: AudioFifo m_audioFifo; UDPSink *m_udpBufferAudio; - NFMDemodGUI *m_nfmDemodGUI; QMutex m_settingsMutex; PhaseDiscriminators m_phaseDiscri; diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.cpp b/plugins/channelrx/demodnfm/nfmdemodgui.cpp index afc1b2fa3..ae345822a 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodgui.cpp @@ -160,7 +160,28 @@ bool NFMDemodGUI::deserialize(const QByteArray& data) bool NFMDemodGUI::handleMessage(const Message& message __attribute__((unused))) { - return false; + if (NFMDemod::MsgReportCTCSSFreq::match(message)) + { + NFMDemod::MsgReportCTCSSFreq& report = (NFMDemod::MsgReportCTCSSFreq&) message; + setCtcssFreq(report.getFrequency()); + //qDebug("NFMDemodGUI::handleMessage: MsgReportCTCSSFreq: %f", report.getFrequency()); + return true; + } + + return false; +} + +void NFMDemodGUI::handleInputMessages() +{ + Message* message; + + while ((message = getInputMessageQueue()->pop()) != 0) + { + if (handleMessage(*message)) + { + delete message; + } + } } void NFMDemodGUI::channelMarkerChanged() @@ -303,7 +324,7 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_nfmDemod = new NFMDemod(m_deviceAPI); - m_nfmDemod->registerGUI(this); + m_nfmDemod->setMessageQueueToGUI(getInputMessageQueue()); connect(&m_pluginAPI->getMainWindow()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); @@ -354,6 +375,8 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg QChar delta = QChar(0x94, 0x03); ui->deltaSquelch->setText(delta); + connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); + applySettings(true); } diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.h b/plugins/channelrx/demodnfm/nfmdemodgui.h index cf10c417e..071693e28 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.h +++ b/plugins/channelrx/demodnfm/nfmdemodgui.h @@ -55,6 +55,7 @@ private slots: void on_copyAudioToUDP_toggled(bool checked); void onWidgetRolled(QWidget* widget, bool rollDown); void onMenuDialogCalled(const QPoint& p); + void handleInputMessages(); void tick(); private: