diff --git a/plugins/channelrx/demodatv/atvdemod.cpp b/plugins/channelrx/demodatv/atvdemod.cpp index ed471b17a..dd81e85ad 100644 --- a/plugins/channelrx/demodatv/atvdemod.cpp +++ b/plugins/channelrx/demodatv/atvdemod.cpp @@ -36,6 +36,7 @@ const QString ATVDemod::m_channelId = "ATVDemod"; ATVDemod::ATVDemod(DeviceAPI *deviceAPI) : ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), m_deviceAPI(deviceAPI), + m_centerFrequency(0), m_basebandSampleRate(0) { qDebug("ATVDemod::ATVDemod"); @@ -64,12 +65,16 @@ void ATVDemod::start() { qDebug("ATVDemod::start"); - if (m_basebandSampleRate != 0) { - m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); - } - m_basebandSink->reset(); m_thread->start(); + + // re-apply essential messages + + DSPSignalNotification* notifToSink = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(notifToSink); + + ATVDemodBaseband::MsgConfigureATVDemodBaseband *msg = ATVDemodBaseband::MsgConfigureATVDemodBaseband::create(m_settings, true); + m_basebandSink->getInputMessageQueue()->push(msg); } void ATVDemod::stop() @@ -97,6 +102,7 @@ bool ATVDemod::handleMessage(const Message& cmd) else if (DSPSignalNotification::match(cmd)) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; + m_centerFrequency = notif.getCenterFrequency(); m_basebandSampleRate = notif.getSampleRate(); // store for init at start qDebug() << "ATVDemod::handleMessage: DSPSignalNotification" << m_basebandSampleRate; diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index ec470d287..aae35a695 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -100,7 +100,8 @@ private: QThread *m_thread; ATVDemodBaseband* m_basebandSink; ATVDemodSettings m_settings; - int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; //!< center frequency stored from device message used when starting baseband sink + int m_basebandSampleRate; //!< sample rate stored from device message used when starting baseband sink void applySettings(const ATVDemodSettings& settings, bool force = false); }; diff --git a/plugins/channelrx/demodatv/atvdemodbaseband.cpp b/plugins/channelrx/demodatv/atvdemodbaseband.cpp index 750fd1a1b..2cf5b0e61 100644 --- a/plugins/channelrx/demodatv/atvdemodbaseband.cpp +++ b/plugins/channelrx/demodatv/atvdemodbaseband.cpp @@ -24,7 +24,6 @@ #include "atvdemodbaseband.h" MESSAGE_CLASS_DEFINITION(ATVDemodBaseband::MsgConfigureATVDemodBaseband, Message) -MESSAGE_CLASS_DEFINITION(ATVDemodBaseband::MsgConfigureChannelizer, Message) ATVDemodBaseband::ATVDemodBaseband() : m_mutex(QMutex::Recursive) @@ -52,6 +51,7 @@ ATVDemodBaseband::~ATVDemodBaseband() void ATVDemodBaseband::reset() { QMutexLocker mutexLocker(&m_mutex); + m_inputMessageQueue.clear(); m_sampleFifo.reset(); } @@ -111,18 +111,6 @@ bool ATVDemodBaseband::handleMessage(const Message& cmd) return true; } - else if (MsgConfigureChannelizer::match(cmd)) - { - QMutexLocker mutexLocker(&m_mutex); - MsgConfigureChannelizer& cfg = (MsgConfigureChannelizer&) cmd; - qDebug() << "ATVDemodBaseband::handleMessage: MsgConfigureChannelizer" - << "(requested) sinkSampleRate: " << cfg.getSinkSampleRate() - << "(requested) sinkCenterFrequency: " << cfg.getSinkCenterFrequency(); - m_channelizer->setChannelization(cfg.getSinkSampleRate(), cfg.getSinkCenterFrequency()); - m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); - - return true; - } else if (DSPSignalNotification::match(cmd)) { QMutexLocker mutexLocker(&m_mutex); diff --git a/plugins/channelrx/demodatv/atvdemodbaseband.h b/plugins/channelrx/demodatv/atvdemodbaseband.h index 353c9c118..f666bea08 100644 --- a/plugins/channelrx/demodatv/atvdemodbaseband.h +++ b/plugins/channelrx/demodatv/atvdemodbaseband.h @@ -56,28 +56,6 @@ public: { } }; - class MsgConfigureChannelizer : public Message { - MESSAGE_CLASS_DECLARATION - - public: - int getSinkSampleRate() const { return m_sinkSampleRate; } - int getSinkCenterFrequency() const { return m_sinkCenterFrequency; } - - static MsgConfigureChannelizer* create(int sinkSampleRate, int sinkCenterFrequency) { - return new MsgConfigureChannelizer(sinkSampleRate, sinkCenterFrequency); - } - - private: - int m_sinkSampleRate; - int m_sinkCenterFrequency; - - MsgConfigureChannelizer(int sinkSampleRate, int sinkCenterFrequency) : - Message(), - m_sinkSampleRate(sinkSampleRate), - m_sinkCenterFrequency(sinkCenterFrequency) - { } - }; - ATVDemodBaseband(); ~ATVDemodBaseband(); void reset(); diff --git a/plugins/channelrx/demodatv/atvdemodgui.cpp b/plugins/channelrx/demodatv/atvdemodgui.cpp index 05f8ac770..81e4698a8 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.cpp +++ b/plugins/channelrx/demodatv/atvdemodgui.cpp @@ -109,7 +109,7 @@ void ATVDemodGUI::displaySettings() setWindowTitle(m_channelMarker.getTitle()); displayStreamIndex(); - blockApplySettings(true); + m_doApplySettings = false; //********** ATV values ********** ui->synchLevel->setValue((int) (m_settings.m_levelSynchroTop * 1000.0f)); @@ -130,6 +130,7 @@ void ATVDemodGUI::displaySettings() topTimeUpdate(); //********** RF values ********** + ui->deltaFrequency->setValue(m_settings.m_inputFrequencyOffset); ui->decimatorEnable->setChecked(m_settings.m_forceDecimator); ui->rfFiltering->setChecked(m_settings.m_fftFiltering); ui->bfo->setValue(m_settings.m_bfoFrequency); @@ -140,9 +141,10 @@ void ATVDemodGUI::displaySettings() ui->amScaleFactorText->setText(QString("%1").arg(m_settings.m_amScalingFactor)); ui->amScaleOffset->setValue(m_settings.m_amOffsetFactor); ui->amScaleOffsetText->setText(QString("%1").arg(m_settings.m_amOffsetFactor)); - blockApplySettings(false); applyTVSampleRate(); + + m_doApplySettings = true; } void ATVDemodGUI::displayStreamIndex() @@ -168,7 +170,7 @@ void ATVDemodGUI::displayRFBandwidths() void ATVDemodGUI::applyTVSampleRate() { - blockApplySettings(true); + qDebug("TVDemodGUI::applyTVSampleRate"); unsigned int nbPointsPerLine; ATVDemodSettings::getBaseValues(m_basebandSampleRate, m_settings.m_fps*m_settings.m_nbLines, m_tvSampleRate, nbPointsPerLine); ui->tvSampleRateText->setText(tr("%1k").arg(m_tvSampleRate/1000.0f, 0, 'f', 2)); @@ -178,7 +180,6 @@ void ATVDemodGUI::applyTVSampleRate() displayRFBandwidths(); lineTimeUpdate(); topTimeUpdate(); - blockApplySettings(false); } bool ATVDemodGUI::handleMessage(const Message& message) @@ -235,7 +236,7 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Base m_pluginAPI(objPluginAPI), m_deviceUISet(deviceUISet), m_channelMarker(this), - m_blnDoApplySettings(true), + m_doApplySettings(false), m_intTickCount(0), m_basebandSampleRate(48000), m_tvSampleRate(48000) @@ -306,14 +307,11 @@ ATVDemodGUI::~ATVDemodGUI() delete ui; } -void ATVDemodGUI::blockApplySettings(bool blnBlock) -{ - m_blnDoApplySettings = !blnBlock; -} - void ATVDemodGUI::applySettings(bool force) { - if (m_blnDoApplySettings) + qDebug() << "ATVDemodGUI::applySettings: " << force << " m_doApplySettings: " << m_doApplySettings; + + if (m_doApplySettings) { ATVDemod::MsgConfigureATVDemod *msg = ATVDemod::MsgConfigureATVDemod::create(m_settings, force); m_atvDemod->getInputMessageQueue()->push(msg); @@ -322,8 +320,12 @@ void ATVDemodGUI::applySettings(bool force) void ATVDemodGUI::setChannelMarkerBandwidth() { - m_blnDoApplySettings = false; // avoid infinite recursion + // avoid infinite recursion m_channelMarker.blockSignals(true); + ui->rfFiltering->blockSignals(true); + ui->rfBW->blockSignals(true); + ui->rfOppBW->blockSignals(true); + ui->modulation->blockSignals(true); if (ui->rfFiltering->isChecked()) // FFT filter { @@ -351,7 +353,11 @@ void ATVDemodGUI::setChannelMarkerBandwidth() m_channelMarker.blockSignals(false); m_channelMarker.emitChangedByAPI(); - m_blnDoApplySettings = true; + + ui->rfFiltering->blockSignals(false); + ui->rfBW->blockSignals(false); + ui->rfOppBW->blockSignals(false); + ui->modulation->blockSignals(false); } void ATVDemodGUI::setRFFiltersSlidersRange(int sampleRate) diff --git a/plugins/channelrx/demodatv/atvdemodgui.h b/plugins/channelrx/demodatv/atvdemodgui.h index 8d6c2135e..067228f7d 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.h +++ b/plugins/channelrx/demodatv/atvdemodgui.h @@ -69,7 +69,7 @@ private: ATVDemod* m_atvDemod; ATVDemodSettings m_settings; - bool m_blnDoApplySettings; + bool m_doApplySettings; MovingAverageUtil m_objMagSqAverage; int m_intTickCount; @@ -85,7 +85,6 @@ private: explicit ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* objParent = 0); virtual ~ATVDemodGUI(); - void blockApplySettings(bool blnBlock); void applySettings(bool force = false); void displaySettings(); void displayStreamIndex();