From 6ecad314e1932c067b8b7fadc705f160759bcaba Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 13 Oct 2022 00:56:20 +0200 Subject: [PATCH] Revert "M17 demod: updated threading model. Part of #1346" This reverts commit 54ca369d6f82345fda45232625a31d00b235687e. --- plugins/channelrx/demodm17/m17demod.cpp | 74 ++++++------------- plugins/channelrx/demodm17/m17demod.h | 1 - .../channelrx/demodm17/m17demodbaseband.cpp | 31 ++++---- plugins/channelrx/demodm17/m17demodbaseband.h | 4 +- 4 files changed, 40 insertions(+), 70 deletions(-) diff --git a/plugins/channelrx/demodm17/m17demod.cpp b/plugins/channelrx/demodm17/m17demod.cpp index 4f6b9a735..ea771b689 100644 --- a/plugins/channelrx/demodm17/m17demod.cpp +++ b/plugins/channelrx/demodm17/m17demod.cpp @@ -52,15 +52,19 @@ const char* const M17Demod::m_channelId = "M17Demod"; const int M17Demod::m_udpBlockSize = 512; M17Demod::M17Demod(DeviceAPI *deviceAPI) : - ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), - m_deviceAPI(deviceAPI), - m_thread(nullptr), - m_basebandSink(nullptr), - m_running(false), - m_basebandSampleRate(0) + ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), + m_deviceAPI(deviceAPI), + m_basebandSampleRate(0) { qDebug("M17Demod::M17Demod"); setObjectName(m_channelId); + + m_thread = new QThread(this); + m_basebandSink = new M17DemodBaseband(); + m_basebandSink->setChannel(this); + m_basebandSink->setDemodInputMessageQueue(&m_inputMessageQueue); + m_basebandSink->moveToThread(m_thread); + applySettings(m_settings, QList(), true); m_deviceAPI->addChannelSink(this); @@ -79,8 +83,6 @@ M17Demod::M17Demod(DeviceAPI *deviceAPI) : this, &M17Demod::handleIndexInDeviceSetChanged ); - - start(); } M17Demod::~M17Demod() @@ -94,7 +96,8 @@ M17Demod::~M17Demod() delete m_networkManager; m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSink(this); - stop(); + delete m_basebandSink; + delete m_thread; } void M17Demod::setDeviceAPI(DeviceAPI *deviceAPI) @@ -117,27 +120,12 @@ uint32_t M17Demod::getNumberOfDeviceStreams() const void M17Demod::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool firstOfBurst) { (void) firstOfBurst; - - if (m_running) { - m_basebandSink->feed(begin, end); - } + m_basebandSink->feed(begin, end); } void M17Demod::start() { - if (m_running) { - return; - } - qDebug() << "M17Demod::start"; - m_thread = new QThread(this); - m_basebandSink = new M17DemodBaseband(); - m_basebandSink->setChannel(this); - m_basebandSink->setDemodInputMessageQueue(&m_inputMessageQueue); - m_basebandSink->moveToThread(m_thread); - - QObject::connect(m_thread, &QThread::finished, m_basebandSink, &QObject::deleteLater); - QObject::connect(m_thread, &QThread::finished, m_thread, &QThread::deleteLater); if (m_basebandSampleRate != 0) { m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); @@ -145,17 +133,11 @@ void M17Demod::start() m_basebandSink->reset(); m_thread->start(); - m_running = true; } void M17Demod::stop() { - if (!m_running) { - return; - } - qDebug() << "M17Demod::stop"; - m_running = false; m_thread->exit(); m_thread->wait(); } @@ -176,15 +158,10 @@ bool M17Demod::handleMessage(const Message& cmd) { DSPSignalNotification& notif = (DSPSignalNotification&) cmd; m_basebandSampleRate = notif.getSampleRate(); - qDebug() << "M17Demod::handleMessage: DSPSignalNotification"; - // Forward to the sink - if (m_running) - { - DSPSignalNotification* rep = new DSPSignalNotification(notif); // make a copy - m_basebandSink->getInputMessageQueue()->push(rep); - } - + DSPSignalNotification* rep = new DSPSignalNotification(notif); // make a copy + qDebug() << "M17Demod::handleMessage: DSPSignalNotification"; + m_basebandSink->getInputMessageQueue()->push(rep); // Forward to GUI if any if (getMessageQueueToGUI()) { getMessageQueueToGUI()->push(new DSPSignalNotification(notif)); @@ -281,11 +258,8 @@ void M17Demod::applySettings(const M17DemodSettings& settings, const QListgetInputMessageQueue()->push(msg); - } + M17DemodBaseband::MsgConfigureM17DemodBaseband *msg = M17DemodBaseband::MsgConfigureM17DemodBaseband::create(settings, settingsKeys, force); + m_basebandSink->getInputMessageQueue()->push(msg); if (settingsKeys.contains("m_useReverseAPI")) { @@ -569,13 +543,9 @@ void M17Demod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response getMagSqLevels(magsqAvg, magsqPeak, nbMagsqSamples); response.getM17DemodReport()->setChannelPowerDb(CalcDb::dbPower(magsqAvg)); - - if (m_running) - { - response.getM17DemodReport()->setAudioSampleRate(m_basebandSink->getAudioSampleRate()); - response.getM17DemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); - response.getM17DemodReport()->setSquelch(m_basebandSink->getSquelchOpen() ? 1 : 0); - } + response.getM17DemodReport()->setAudioSampleRate(m_basebandSink->getAudioSampleRate()); + response.getM17DemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); + response.getM17DemodReport()->setSquelch(m_basebandSink->getSquelchOpen() ? 1 : 0); } void M17Demod::webapiReverseSendSettings(const QList& channelSettingsKeys, const M17DemodSettings& settings, bool force) @@ -737,7 +707,7 @@ void M17Demod::networkManagerFinished(QNetworkReply *reply) void M17Demod::handleIndexInDeviceSetChanged(int index) { - if (!m_running || (index < 0)) { + if (index < 0) { return; } diff --git a/plugins/channelrx/demodm17/m17demod.h b/plugins/channelrx/demodm17/m17demod.h index b6ce99163..65c169033 100644 --- a/plugins/channelrx/demodm17/m17demod.h +++ b/plugins/channelrx/demodm17/m17demod.h @@ -268,7 +268,6 @@ private: DeviceAPI *m_deviceAPI; QThread *m_thread; M17DemodBaseband *m_basebandSink; - bool m_running; M17DemodSettings m_settings; int m_basebandSampleRate; //!< stored from device message used when starting baseband sink diff --git a/plugins/channelrx/demodm17/m17demodbaseband.cpp b/plugins/channelrx/demodm17/m17demodbaseband.cpp index 43fe898ce..f05ff236d 100644 --- a/plugins/channelrx/demodm17/m17demodbaseband.cpp +++ b/plugins/channelrx/demodm17/m17demodbaseband.cpp @@ -25,11 +25,11 @@ MESSAGE_CLASS_DEFINITION(M17DemodBaseband::MsgConfigureM17DemodBaseband, Message) -M17DemodBaseband::M17DemodBaseband() : - m_channelizer(&m_sink) +M17DemodBaseband::M17DemodBaseband() { qDebug("M17DemodBaseband::M17DemodBaseband"); m_sampleFifo.setSize(SampleSinkFifo::getSizePolicy(48000)); + m_channelizer = new DownChannelizer(&m_sink); QObject::connect( &m_sampleFifo, @@ -49,6 +49,7 @@ M17DemodBaseband::M17DemodBaseband() : M17DemodBaseband::~M17DemodBaseband() { DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(m_sink.getAudioFifo()); + delete m_channelizer; } void M17DemodBaseband::reset() @@ -83,12 +84,12 @@ void M17DemodBaseband::handleData() // first part of FIFO data if (part1begin != part1end) { - m_channelizer.feed(part1begin, part1end); + m_channelizer->feed(part1begin, part1end); } // second part of FIFO data (used when block wraps around) if(part2begin != part2end) { - m_channelizer.feed(part2begin, part2end); + m_channelizer->feed(part2begin, part2end); } m_sampleFifo.readCommit((unsigned int) count); @@ -125,13 +126,13 @@ bool M17DemodBaseband::handleMessage(const Message& cmd) DSPSignalNotification& notif = (DSPSignalNotification&) cmd; qDebug() << "M17DemodBaseband::handleMessage: DSPSignalNotification: basebandSampleRate: " << notif.getSampleRate(); m_sampleFifo.setSize(SampleSinkFifo::getSizePolicy(notif.getSampleRate())); - m_channelizer.setBasebandSampleRate(notif.getSampleRate()); - m_sink.applyChannelSettings(m_channelizer.getChannelSampleRate(), m_channelizer.getChannelFrequencyOffset()); + m_channelizer->setBasebandSampleRate(notif.getSampleRate()); + m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); - if (m_channelSampleRate != m_channelizer.getChannelSampleRate()) + if (m_channelSampleRate != m_channelizer->getChannelSampleRate()) { m_sink.applyAudioSampleRate(m_sink.getAudioSampleRate()); // reapply when channel sample rate changes - m_channelSampleRate = m_channelizer.getChannelSampleRate(); + m_channelSampleRate = m_channelizer->getChannelSampleRate(); } return true; @@ -146,13 +147,13 @@ void M17DemodBaseband::applySettings(const M17DemodSettings& settings, const QLi { if (settingsKeys.contains("inputFrequencyOffset") || force) { - m_channelizer.setChannelization(48000, settings.m_inputFrequencyOffset); - m_sink.applyChannelSettings(m_channelizer.getChannelSampleRate(), m_channelizer.getChannelFrequencyOffset()); + m_channelizer->setChannelization(48000, settings.m_inputFrequencyOffset); + m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); - if (m_channelSampleRate != m_channelizer.getChannelSampleRate()) + if (m_channelSampleRate != m_channelizer->getChannelSampleRate()) { m_sink.applyAudioSampleRate(m_sink.getAudioSampleRate()); // reapply when channel sample rate changes - m_channelSampleRate = m_channelizer.getChannelSampleRate(); + m_channelSampleRate = m_channelizer->getChannelSampleRate(); } } @@ -181,12 +182,12 @@ void M17DemodBaseband::applySettings(const M17DemodSettings& settings, const QLi int M17DemodBaseband::getChannelSampleRate() const { - return m_channelizer.getChannelSampleRate(); + return m_channelizer->getChannelSampleRate(); } void M17DemodBaseband::setBasebandSampleRate(int sampleRate) { - m_channelizer.setBasebandSampleRate(sampleRate); - m_sink.applyChannelSettings(m_channelizer.getChannelSampleRate(), m_channelizer.getChannelFrequencyOffset()); + m_channelizer->setBasebandSampleRate(sampleRate); + m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } diff --git a/plugins/channelrx/demodm17/m17demodbaseband.h b/plugins/channelrx/demodm17/m17demodbaseband.h index 3f86f727b..07b055785 100644 --- a/plugins/channelrx/demodm17/m17demodbaseband.h +++ b/plugins/channelrx/demodm17/m17demodbaseband.h @@ -22,12 +22,12 @@ #include #include "dsp/samplesinkfifo.h" -#include "dsp/downchannelizer.h" #include "util/message.h" #include "util/messagequeue.h" #include "m17demodsink.h" +class DownChannelizer; class ChannelAPI; class M17DemodBaseband : public QObject @@ -124,7 +124,7 @@ public: private: SampleSinkFifo m_sampleFifo; - DownChannelizer m_channelizer; + DownChannelizer *m_channelizer; int m_channelSampleRate; M17DemodSink m_sink; MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication