From 24d0e6a77016d11ae56b19879ea4584216c6bb31 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 17 Mar 2017 10:04:00 +0100 Subject: [PATCH] ATV Demod: pass modulation type in the RF config --- plugins/channelrx/demodatv/atvdemod.cpp | 32 ++++++++++++++---- plugins/channelrx/demodatv/atvdemod.h | 20 ++++++++--- plugins/channelrx/demodatv/atvdemodgui.cpp | 39 +++++++++++++++++++--- plugins/channelrx/demodatv/atvdemodgui.h | 4 +++ plugins/channelrx/demodatv/atvdemodgui.ui | 8 ++++- 5 files changed, 86 insertions(+), 17 deletions(-) diff --git a/plugins/channelrx/demodatv/atvdemod.cpp b/plugins/channelrx/demodatv/atvdemod.cpp index 713ad283c..886d11863 100644 --- a/plugins/channelrx/demodatv/atvdemod.cpp +++ b/plugins/channelrx/demodatv/atvdemod.cpp @@ -103,12 +103,14 @@ void ATVDemod::configureRF( MessageQueue* objMessageQueue, ATVModulation enmModulation, float fltRFBandwidth, - float fltRFOppBandwidth) + float fltRFOppBandwidth, + bool blnFFTFiltering) { Message* msgCmd = MsgConfigureRFATVDemod::create( enmModulation, fltRFBandwidth, - fltRFOppBandwidth); + fltRFOppBandwidth, + blnFFTFiltering); objMessageQueue->push(msgCmd); } @@ -188,7 +190,7 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto fltNorm = sqrt(magSq); - if ((m_objRunning.m_enmModulation == ATV_FM1) || (m_objRunning.m_enmModulation == ATV_FM2)) + if ((m_objRFRunning.m_enmModulation == ATV_FM1) || (m_objRFRunning.m_enmModulation == ATV_FM2)) { //Amplitude FM @@ -198,7 +200,7 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto //-2 > 2 : 0 -> 1 volt //0->0.3 synchro 0.3->1 image - if (m_objRunning.m_enmModulation == ATV_FM1) + if (m_objRFRunning.m_enmModulation == ATV_FM1) { //YDiff Cd fltVal = m_fltBufferI[0]*(fltNormQ - m_fltBufferQ[1]); @@ -237,7 +239,7 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto m_fltBufferQ[0]=fltNormQ; } - else if ((m_objRunning.m_enmModulation == ATV_AM) || (m_objRunning.m_enmModulation == ATV_VAMU) || (m_objRunning.m_enmModulation == ATV_VAML)) + else if ((m_objRFRunning.m_enmModulation == ATV_AM) || (m_objRFRunning.m_enmModulation == ATV_VAMU) || (m_objRFRunning.m_enmModulation == ATV_VAML)) { //Amplitude AM fltVal = fltNorm; @@ -423,7 +425,7 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto m_intRowsLimit = m_intNumberOfLines-1; - if (m_objRunning.m_enmModulation == ATV_AM) + if (m_objRFRunning.m_enmModulation == ATV_AM) { m_fltAmpMin=m_fltEffMin; m_fltAmpMax=m_fltEffMax; @@ -520,6 +522,22 @@ bool ATVDemod::handleMessage(const Message& cmd) return true; } + else if (MsgConfigureRFATVDemod::match(cmd)) + { + MsgConfigureRFATVDemod& objCfg = (MsgConfigureRFATVDemod&) cmd; + + m_objRFConfig = objCfg.m_objMsgConfig; + + qDebug() << "ATVDemod::handleMessage: MsgConfigureRFATVDemod:" + << " m_enmModulation" << m_objRFConfig.m_enmModulation + << " m_fltRFBandwidth" << m_objRFConfig.m_fltRFBandwidth + << " m_fltRFOppBandwidth" << m_objRFConfig.m_fltRFOppBandwidth + << " m_blnFFTFiltering" << m_objRFConfig.m_blnFFTFiltering; + + applySettings(); + + return true; + } else { return false; @@ -567,6 +585,8 @@ void ATVDemod::applySettings() m_objRunning.m_fltRatioOfRowsToDisplay = m_objConfig.m_fltRatioOfRowsToDisplay; m_objRunning.m_blnHSync = m_objConfig.m_blnHSync; m_objRunning.m_blnVSync = m_objConfig.m_blnVSync; + + m_objRFRunning = m_objRFConfig; } int ATVDemod::getSampleRate() diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index 8e4653d29..d00ca7630 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -81,11 +81,13 @@ public: ATVModulation m_enmModulation; float m_fltRFBandwidth; float m_fltRFOppBandwidth; + bool m_blnFFTFiltering; ATVRFConfig() : m_enmModulation(ATV_FM1), m_fltRFBandwidth(0), - m_fltRFOppBandwidth(0) + m_fltRFOppBandwidth(0), + m_blnFFTFiltering(false) { } }; @@ -107,7 +109,8 @@ public: void configureRF(MessageQueue* objMessageQueue, ATVModulation enmModulation, float fltRFBandwidth, - float fltRFOppBandwidth); + float fltRFOppBandwidth, + bool blnFFTFiltering); virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); @@ -183,12 +186,14 @@ private: static MsgConfigureRFATVDemod* create( ATVModulation enmModulation, float fltRFBandwidth, - float fltRFOppBandwidth) + float fltRFOppBandwidth, + bool blnFFTFiltering) { return new MsgConfigureRFATVDemod( enmModulation, fltRFBandwidth, - fltRFOppBandwidth); + fltRFOppBandwidth, + blnFFTFiltering); } ATVRFConfig m_objMsgConfig; @@ -197,12 +202,14 @@ private: MsgConfigureRFATVDemod( ATVModulation enmModulation, float fltRFBandwidth, - float fltRFOppBandwidth) : + float fltRFOppBandwidth, + bool blnFFTFiltering) : Message() { m_objMsgConfig.m_enmModulation = enmModulation; m_objMsgConfig.m_fltRFBandwidth = fltRFBandwidth; m_objMsgConfig.m_fltRFOppBandwidth = fltRFOppBandwidth; + m_objMsgConfig.m_blnFFTFiltering = blnFFTFiltering; } }; @@ -249,6 +256,9 @@ private: ATVConfig m_objRunning; ATVConfig m_objConfig; + ATVRFConfig m_objRFRunning; + ATVRFConfig m_objRFConfig; + QMutex m_objSettingsMutex; static const float m_fltSecondToUs; diff --git a/plugins/channelrx/demodatv/atvdemodgui.cpp b/plugins/channelrx/demodatv/atvdemodgui.cpp index 86a83aece..bb341271c 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.cpp +++ b/plugins/channelrx/demodatv/atvdemodgui.cpp @@ -298,6 +298,18 @@ void ATVDemodGUI::applySettings() } } +void ATVDemodGUI::applyRFSettings() +{ + if (m_blnDoApplySettings) + { + m_objATVDemod->configureRF(m_objATVDemod->getInputMessageQueue(), + (ATVDemod::ATVModulation) ui->modulation->currentIndex(), + ui->rfBW->value() * 100000.0f, + ui->rfOppBW->value() * 100000.0f, + ui->rfFFTFiltering->isChecked()); + } +} + void ATVDemodGUI::leaveEvent(QEvent*) { blockApplySettings(true); @@ -372,11 +384,6 @@ void ATVDemodGUI::on_halfImage_clicked() applySettings(); } -void ATVDemodGUI::on_modulation_currentIndexChanged(int index) -{ - applySettings(); -} - void ATVDemodGUI::on_fps_currentIndexChanged(int index) { applySettings(); @@ -386,3 +393,25 @@ void ATVDemodGUI::on_reset_clicked(bool checked) { resetToDefaults(); } + +void ATVDemodGUI::on_modulation_currentIndexChanged(int index) +{ + applyRFSettings(); +} + +void ATVDemodGUI::on_rfBW_valueChanged(int value) +{ + ui->rfBWText->setText(QString("%1 MHz").arg(value / 10.0, 0, 'f', 1)); + applyRFSettings(); +} + +void ATVDemodGUI::on_rfOppBW_valueChanged(int value) +{ + ui->rfOppBWText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); + applyRFSettings(); +} + +void ATVDemodGUI::on_rfFFTFiltering_toggled(bool checked) +{ + applyRFSettings(); +} diff --git a/plugins/channelrx/demodatv/atvdemodgui.h b/plugins/channelrx/demodatv/atvdemodgui.h index fbd6a7bde..9c20f879e 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.h +++ b/plugins/channelrx/demodatv/atvdemodgui.h @@ -72,6 +72,9 @@ private slots: void on_modulation_currentIndexChanged(int index); void on_fps_currentIndexChanged(int index); void on_reset_clicked(bool checked); + void on_rfBW_valueChanged(int value); + void on_rfOppBW_valueChanged(int value); + void on_rfFFTFiltering_toggled(bool checked); private: Ui::ATVDemodGUI* ui; @@ -92,6 +95,7 @@ private: void blockApplySettings(bool blnBlock); void applySettings(); + void applyRFSettings(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodatv/atvdemodgui.ui b/plugins/channelrx/demodatv/atvdemodgui.ui index 9ee89e33b..5c0e9ac51 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.ui +++ b/plugins/channelrx/demodatv/atvdemodgui.ui @@ -187,7 +187,7 @@ - + @@ -195,6 +195,9 @@ :/filter_bandpass.png:/filter_bandpass.png + + true + @@ -238,6 +241,9 @@ 100 + + 1 + 10