From 8b371368db9d9270b0d24d7a1998aa774fb7b456 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 16 Mar 2026 00:56:11 +0100 Subject: [PATCH] Meshtastic demod: set invariant settings to static consts and removed unused schemes from enum --- .../demodmeshtastic/meshtasticdemod.cpp | 28 ---- .../meshtasticdemoddecoder.cpp | 2 +- .../demodmeshtastic/meshtasticdemodgui.cpp | 134 +----------------- .../demodmeshtastic/meshtasticdemodgui.h | 7 - .../meshtasticdemodsettings.cpp | 29 +--- .../demodmeshtastic/meshtasticdemodsettings.h | 11 +- .../demodmeshtastic/meshtasticdemodsink.cpp | 87 +++++------- 7 files changed, 45 insertions(+), 253 deletions(-) diff --git a/plugins/channelrx/demodmeshtastic/meshtasticdemod.cpp b/plugins/channelrx/demodmeshtastic/meshtasticdemod.cpp index 9da38bdc6..57a42d8a2 100644 --- a/plugins/channelrx/demodmeshtastic/meshtasticdemod.cpp +++ b/plugins/channelrx/demodmeshtastic/meshtasticdemod.cpp @@ -179,9 +179,6 @@ MeshtasticDemodSettings MeshtasticDemod::makePipelineSettingsFromMeshRadio( ) const { MeshtasticDemodSettings out = baseSettings; - out.m_codingScheme = MeshtasticDemodSettings::CodingLoRa; - out.m_hasHeader = true; - out.m_hasCRC = true; out.m_spreadFactor = meshRadio.spreadFactor; out.m_deBits = meshRadio.deBits; out.m_nbParityBits = meshRadio.parityBits; @@ -829,16 +826,6 @@ void MeshtasticDemod::applySettings(const MeshtasticDemodSettings& settings, boo reverseAPIKeys.append("codingScheme"); } - if ((settings.m_hasHeader != m_settings.m_hasHeader) || force) - { - reverseAPIKeys.append("hasHeader"); - } - - if ((settings.m_hasCRC != m_settings.m_hasCRC) || force) - { - reverseAPIKeys.append("hasCRC"); - } - if ((settings.m_nbParityBits != m_settings.m_nbParityBits) || force) { reverseAPIKeys.append("nbParityBits"); @@ -870,9 +857,6 @@ void MeshtasticDemod::applySettings(const MeshtasticDemodSettings& settings, boo if ((settings.m_sendViaUDP != m_settings.m_sendViaUDP) || force) { reverseAPIKeys.append("sendViaUDP"); } - if ((settings.m_autoNbSymbolsMax != m_settings.m_autoNbSymbolsMax) || force) { - reverseAPIKeys.append("autoNbSymbolsMax"); - } if ((settings.m_invertRamps != m_settings.m_invertRamps) || force) { reverseAPIKeys.append("invertRamps"); } @@ -997,9 +981,6 @@ void MeshtasticDemod::webapiUpdateChannelSettings( if (channelSettingsKeys.contains("fftWindow")) { settings.m_fftWindow = (FFTWindow::Function) response.getChirpChatDemodSettings()->getFftWindow(); } - if (channelSettingsKeys.contains("codingScheme")) { - settings.m_codingScheme = (MeshtasticDemodSettings::CodingScheme) response.getChirpChatDemodSettings()->getCodingScheme(); - } if (channelSettingsKeys.contains("decodeActive")) { settings.m_decodeActive = response.getChirpChatDemodSettings()->getDecodeActive() != 0; } @@ -1009,9 +990,6 @@ void MeshtasticDemod::webapiUpdateChannelSettings( if (channelSettingsKeys.contains("nbSymbolsMax")) { settings.m_nbSymbolsMax = response.getChirpChatDemodSettings()->getNbSymbolsMax(); } - if (channelSettingsKeys.contains("autoNbSymbolsMax")) { - settings.m_autoNbSymbolsMax = response.getChirpChatDemodSettings()->getAutoNbSymbolsMax() != 0; - } if (channelSettingsKeys.contains("preambleChirps")) { settings.m_preambleChirps = response.getChirpChatDemodSettings()->getPreambleChirps(); } @@ -1021,12 +999,6 @@ void MeshtasticDemod::webapiUpdateChannelSettings( if (channelSettingsKeys.contains("packetLength")) { settings.m_packetLength = response.getChirpChatDemodSettings()->getPacketLength(); } - if (channelSettingsKeys.contains("hasCRC")) { - settings.m_hasCRC = response.getChirpChatDemodSettings()->getHasCrc() != 0; - } - if (channelSettingsKeys.contains("hasHeader")) { - settings.m_hasHeader = response.getChirpChatDemodSettings()->getHasHeader() != 0; - } if (channelSettingsKeys.contains("sendViaUDP")) { settings.m_sendViaUDP = response.getChirpChatDemodSettings()->getSendViaUdp() != 0; } diff --git a/plugins/channelrx/demodmeshtastic/meshtasticdemoddecoder.cpp b/plugins/channelrx/demodmeshtastic/meshtasticdemoddecoder.cpp index 1e97449e7..0c2f3c295 100644 --- a/plugins/channelrx/demodmeshtastic/meshtasticdemoddecoder.cpp +++ b/plugins/channelrx/demodmeshtastic/meshtasticdemoddecoder.cpp @@ -24,7 +24,7 @@ #include "meshtasticdemodmsg.h" MeshtasticDemodDecoder::MeshtasticDemodDecoder() : - m_codingScheme(MeshtasticDemodSettings::CodingTTY), + m_codingScheme(MeshtasticDemodSettings::CodingLoRa), m_spreadFactor(0U), m_deBits(0U), m_nbSymbolBits(5), diff --git a/plugins/channelrx/demodmeshtastic/meshtasticdemodgui.cpp b/plugins/channelrx/demodmeshtastic/meshtasticdemodgui.cpp index 87f8c0fd5..898035031 100644 --- a/plugins/channelrx/demodmeshtastic/meshtasticdemodgui.cpp +++ b/plugins/channelrx/demodmeshtastic/meshtasticdemodgui.cpp @@ -213,22 +213,12 @@ bool MeshtasticDemodGUI::handleMessage(const Message& message) } else if (MeshtasticDemodMsg::MsgReportDecodeString::match(message)) { - if ((m_settings.m_codingScheme == MeshtasticDemodSettings::CodingASCII) - || (m_settings.m_codingScheme == MeshtasticDemodSettings::CodingTTY) - || (m_settings.m_codingScheme == MeshtasticDemodSettings::CodingLoRa)) { + if ((m_settings.m_codingScheme == MeshtasticDemodSettings::CodingLoRa)) { showTextMessage(message); } return true; } - else if (MeshtasticDemodMsg::MsgReportDecodeFT::match(message)) - { - if (m_settings.m_codingScheme == MeshtasticDemodSettings::CodingFT) { - showFTMessage(message); - } - - return true; - } else if (MeshtasticDemod::MsgConfigureMeshtasticDemod::match(message)) { qDebug("MeshtasticDemodGUI::handleMessage: NFMDemod::MsgConfigureMeshtasticDemod"); @@ -355,52 +345,6 @@ void MeshtasticDemodGUI::on_messageLength_valueChanged(int value) applySettings(); } -void MeshtasticDemodGUI::on_messageLengthAuto_stateChanged(int state) -{ - m_settings.m_autoNbSymbolsMax = (state == Qt::Checked); - applySettings(); -} - -void MeshtasticDemodGUI::on_header_stateChanged(int state) -{ - m_settings.m_hasHeader = (state == Qt::Checked); - - if (!m_settings.m_hasHeader) // put back values from settings - { - ui->fecParity->blockSignals(true); - ui->crc->blockSignals(true); - ui->fecParity->setValue(m_settings.m_nbParityBits); - ui->fecParityText->setText(tr("%1").arg(m_settings.m_nbParityBits)); - ui->crc->setChecked(m_settings.m_hasCRC); - ui->fecParity->blockSignals(false); - ui->crc->blockSignals(false); - } - - updateControlAvailabilityHints(); - - applySettings(); -} - -void MeshtasticDemodGUI::on_fecParity_valueChanged(int value) -{ - m_settings.m_nbParityBits = value; - ui->fecParityText->setText(tr("%1").arg(m_settings.m_nbParityBits)); - applySettings(); -} - -void MeshtasticDemodGUI::on_crc_stateChanged(int state) -{ - m_settings.m_hasCRC = (state == Qt::Checked); - applySettings(); -} - -void MeshtasticDemodGUI::on_packetLength_valueChanged(int value) -{ - m_settings.m_packetLength = value; - ui->packetLengthText->setText(tr("%1").arg(m_settings.m_packetLength)); - applySettings(); -} - void MeshtasticDemodGUI::on_udpSend_stateChanged(int state) { m_settings.m_sendViaUDP = (state == Qt::Checked); @@ -1356,12 +1300,6 @@ void MeshtasticDemodGUI::applyMeshtasticProfileFromSelection() selectionStateChanged = true; } - if (m_settings.m_codingScheme != MeshtasticDemodSettings::CodingLoRa) - { - m_settings.m_codingScheme = MeshtasticDemodSettings::CodingLoRa; - changed = true; - } - const int bwIndex = findBandwidthIndex(meshRadio.bandwidthHz); if (bwIndex >= 0 && bwIndex != m_settings.m_bandwidthIndex) { @@ -1387,18 +1325,6 @@ void MeshtasticDemodGUI::applyMeshtasticProfileFromSelection() changed = true; } - if (!m_settings.m_hasHeader) - { - m_settings.m_hasHeader = true; - changed = true; - } - - if (!m_settings.m_hasCRC) - { - m_settings.m_hasCRC = true; - changed = true; - } - const int meshPreambleChirps = meshRadio.preambleChirps; if (m_settings.m_preambleChirps != static_cast(meshPreambleChirps)) { @@ -2126,25 +2052,6 @@ void MeshtasticDemodGUI::resetLoRaStatus() ui->nbCodewordsText->setText("---"); } -void MeshtasticDemodGUI::displayFTStatus(int payloadParityStatus, bool payloadCRCStatus) -{ - if (payloadParityStatus == (int) MeshtasticDemodSettings::ParityOK) { - ui->payloadFECStatus->setStyleSheet("QLabel { background-color : green; }"); - } else if (payloadParityStatus == (int) MeshtasticDemodSettings::ParityError) { - ui->payloadFECStatus->setStyleSheet("QLabel { background-color : red; }"); - } else if (payloadParityStatus == (int) MeshtasticDemodSettings::ParityCorrected) { - ui->payloadFECStatus->setStyleSheet("QLabel { background-color : blue; }"); - } else { - ui->payloadFECStatus->setStyleSheet("QLabel { background:rgb(79,79,79); }"); - } - - if (payloadCRCStatus) { - ui->payloadCRCStatus->setStyleSheet("QLabel { background-color : green; }"); - } else { - ui->payloadCRCStatus->setStyleSheet("QLabel { background-color : red; }"); - } -} - void MeshtasticDemodGUI::setBandwidths() { int maxBandwidth = m_basebandSampleRate/MeshtasticDemodSettings::oversampling; @@ -3275,31 +3182,6 @@ void MeshtasticDemodGUI::showTextMessage(const Message& message) } } -void MeshtasticDemodGUI::showFTMessage(const Message& message) -{ - const MeshtasticDemodMsg::MsgReportDecodeFT& msg = (MeshtasticDemodMsg::MsgReportDecodeFT&) message; - const int pipelineId = msg.getPipelineId(); - const QString pipelineName = msg.getPipelineName().trimmed().isEmpty() - ? (pipelineId < 0 ? QString("Main") : QString("P%1").arg(pipelineId)) - : msg.getPipelineName(); - - QDateTime dt = QDateTime::currentDateTime(); - QString dateStr = dt.toString("HH:mm:ss"); - ui->sText->setText(tr("%1").arg(msg.getSingalDb(), 0, 'f', 1)); - ui->snrText->setText(tr("%1").arg(msg.getSingalDb() - msg.getNoiseDb(), 0, 'f', 1)); - - QString status = tr("%1 S:%2 SN:%3 FEC:%4 CRC:%5") - .arg(dateStr) - .arg(msg.getSingalDb(), 0, 'f', 1) - .arg(msg.getSingalDb() - msg.getNoiseDb(), 0, 'f', 1) - .arg(getParityStr(msg.getPayloadParityStatus())) - .arg(msg.getPayloadCRCStatus() ? "ok" : "err"); - - appendPipelineStatusLine(pipelineId, pipelineName, status); - appendPipelineLogLine(pipelineId, pipelineName, QString("TXT|%1").arg(msg.getMessage())); // We do not show constituents of the message (call1, ...) - displayFTStatus(msg.getPayloadParityStatus(), msg.getPayloadCRCStatus()); -} - void MeshtasticDemodGUI::displayText(const QString& text) { if (m_pipelineTabs) @@ -3471,20 +3353,6 @@ void MeshtasticDemodGUI::makeUIConnections() QObject::connect(ui->clear, &QPushButton::clicked, this, &MeshtasticDemodGUI::on_clear_clicked); QObject::connect(ui->eomSquelch, &QDial::valueChanged, this, &MeshtasticDemodGUI::on_eomSquelch_valueChanged); QObject::connect(ui->messageLength, &QDial::valueChanged, this, &MeshtasticDemodGUI::on_messageLength_valueChanged); -#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) - QObject::connect(ui->messageLengthAuto, &QCheckBox::checkStateChanged, this, [this](Qt::CheckState state){ on_messageLengthAuto_stateChanged(static_cast(state)); }); - QObject::connect(ui->header, &QCheckBox::checkStateChanged, this, [this](Qt::CheckState state){ on_header_stateChanged(static_cast(state)); }); -#else - QObject::connect(ui->messageLengthAuto, &QCheckBox::stateChanged, this, &MeshtasticDemodGUI::on_messageLengthAuto_stateChanged); - QObject::connect(ui->header, &QCheckBox::stateChanged, this, &MeshtasticDemodGUI::on_header_stateChanged); -#endif - QObject::connect(ui->fecParity, &QDial::valueChanged, this, &MeshtasticDemodGUI::on_fecParity_valueChanged); -#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) - QObject::connect(ui->crc, &QCheckBox::checkStateChanged, this, [this](Qt::CheckState state){ on_crc_stateChanged(static_cast(state)); }); -#else - QObject::connect(ui->crc, &QCheckBox::stateChanged, this, &MeshtasticDemodGUI::on_crc_stateChanged); -#endif - QObject::connect(ui->packetLength, &QDial::valueChanged, this, &MeshtasticDemodGUI::on_packetLength_valueChanged); #if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) QObject::connect(ui->udpSend, &QCheckBox::checkStateChanged, this, [this](Qt::CheckState state){ on_udpSend_stateChanged(static_cast(state)); }); #else diff --git a/plugins/channelrx/demodmeshtastic/meshtasticdemodgui.h b/plugins/channelrx/demodmeshtastic/meshtasticdemodgui.h index 653cde441..10673701f 100644 --- a/plugins/channelrx/demodmeshtastic/meshtasticdemodgui.h +++ b/plugins/channelrx/demodmeshtastic/meshtasticdemodgui.h @@ -85,11 +85,6 @@ private slots: void on_clear_clicked(bool checked); void on_eomSquelch_valueChanged(int value); void on_messageLength_valueChanged(int value); - void on_messageLengthAuto_stateChanged(int state); - void on_header_stateChanged(int state); - void on_fecParity_valueChanged(int value); - void on_crc_stateChanged(int state); - void on_packetLength_valueChanged(int value); void on_udpSend_stateChanged(int state); void on_udpAddress_editingFinished(); void on_udpPort_editingFinished(); @@ -197,7 +192,6 @@ private: void setBandwidths(); void showLoRaMessage(const Message& message); //!< For LoRa coding scheme void showTextMessage(const Message& message); //!< For TTY and ASCII - void showFTMessage(const Message& message); //!< For FT coding scheme void setupPipelineViews(); PipelineView& ensurePipelineView(int pipelineId, const QString& pipelineName); void clearPipelineViews(); @@ -215,7 +209,6 @@ private: void displayBytes(const QByteArray& bytes); void displayStatus(const QString& status); void displayLoRaStatus(int headerParityStatus, bool headerCRCStatus, int payloadParityStatus, bool payloadCRCStatus); - void displayFTStatus(int payloadParityStatus, bool payloadCRCStatus); QString getParityStr(int parityStatus); void resetLoRaStatus(); bool handleMessage(const Message& message); diff --git a/plugins/channelrx/demodmeshtastic/meshtasticdemodsettings.cpp b/plugins/channelrx/demodmeshtastic/meshtasticdemodsettings.cpp index c5fc15a0d..b21e666e2 100644 --- a/plugins/channelrx/demodmeshtastic/meshtasticdemodsettings.cpp +++ b/plugins/channelrx/demodmeshtastic/meshtasticdemodsettings.cpp @@ -58,6 +58,12 @@ const int MeshtasticDemodSettings::nbBandwidths = 3*8 + 4; // so SF11/SF12 Meshtastic presets retain enough timing resolution. const int MeshtasticDemodSettings::oversampling = 4; +// Static settings values (not user-configurable) +const MeshtasticDemodSettings::CodingScheme MeshtasticDemodSettings::m_codingScheme = MeshtasticDemodSettings::CodingLoRa; +const bool MeshtasticDemodSettings::m_autoNbSymbolsMax = false; +const bool MeshtasticDemodSettings::m_hasHeader = true; +const bool MeshtasticDemodSettings::m_hasCRC = true; + MeshtasticDemodSettings::MeshtasticDemodSettings() : m_inputFrequencyOffset(0), m_channelMarker(0), @@ -72,17 +78,13 @@ void MeshtasticDemodSettings::resetToDefaults() m_bandwidthIndex = 5; m_spreadFactor = 7; m_deBits = 0; - m_codingScheme = CodingLoRa; m_decodeActive = true; m_fftWindow = FFTWindow::Rectangle; m_eomSquelchTenths = 60; m_nbSymbolsMax = 255; - m_autoNbSymbolsMax = false; m_preambleChirps = 17; m_packetLength = 237; m_nbParityBits = 1; - m_hasCRC = true; - m_hasHeader = true; m_sendViaUDP = false; m_invertRamps = false; m_udpAddress = "127.0.0.1"; @@ -121,14 +123,11 @@ QByteArray MeshtasticDemodSettings::serialize() const s.writeString(6, m_title); s.writeS32(7, m_deBits); - s.writeS32(8, m_codingScheme); s.writeBool(9, m_decodeActive); s.writeS32(10, m_eomSquelchTenths); s.writeU32(11, m_nbSymbolsMax); s.writeS32(12, m_packetLength); s.writeS32(13, m_nbParityBits); - s.writeBool(14, m_hasCRC); - s.writeBool(15, m_hasHeader); s.writeU32(17, m_preambleChirps); s.writeS32(18, (int) m_fftWindow); s.writeBool(19, m_invertRamps); @@ -192,15 +191,11 @@ bool MeshtasticDemodSettings::deserialize(const QByteArray& data) d.readString(6, &m_title, "Meshtastic Demodulator"); d.readS32(7, &m_deBits, 0); - d.readS32(8, &tmp); - m_codingScheme = (CodingScheme) tmp; d.readBool(9, &m_decodeActive, true); d.readS32(10, &m_eomSquelchTenths, 60); d.readU32(11, &m_nbSymbolsMax, 255); d.readS32(12, &m_packetLength, 237); d.readS32(13, &m_nbParityBits, 1); - d.readBool(14, &m_hasCRC, true); - d.readBool(15, &m_hasHeader, true); d.readU32(17, &m_preambleChirps, 17); d.readS32(18, &tmp, (int) FFTWindow::Rectangle); m_fftWindow = (FFTWindow::Function) tmp; @@ -266,8 +261,6 @@ void MeshtasticDemodSettings::applySettings(const QStringList& settingsKeys, con m_deBits = settings.m_deBits; if (settingsKeys.contains("fftWindow")) m_fftWindow = settings.m_fftWindow; - if (settingsKeys.contains("codingScheme")) - m_codingScheme = settings.m_codingScheme; if (settingsKeys.contains("decodeActive")) m_decodeActive = settings.m_decodeActive; if (settingsKeys.contains("eomSquelchTenths")) @@ -280,10 +273,6 @@ void MeshtasticDemodSettings::applySettings(const QStringList& settingsKeys, con m_nbParityBits = settings.m_nbParityBits; if (settingsKeys.contains("packetLength")) m_packetLength = settings.m_packetLength; - if (settingsKeys.contains("hasCRC")) - m_hasCRC = settings.m_hasCRC; - if (settingsKeys.contains("hasHeader")) - m_hasHeader = settings.m_hasHeader; if (settingsKeys.contains("sendViaUDP")) m_sendViaUDP = settings.m_sendViaUDP; if (settingsKeys.contains("invertRamps")) @@ -330,8 +319,6 @@ QString MeshtasticDemodSettings::getDebugString(const QStringList& settingsKeys, debug += QString("DEBits: %1 ").arg(m_deBits); if (force || settingsKeys.contains("fftWindow")) debug += QString("FFTWindow: %1 ").arg((int) m_fftWindow); - if (force || settingsKeys.contains("codingScheme")) - debug += QString("CodingScheme: %1 ").arg((int) m_codingScheme); if (force || settingsKeys.contains("decodeActive")) debug += QString("DecodeActive: %1 ").arg(m_decodeActive); if (force || settingsKeys.contains("eomSquelchTenths")) @@ -344,10 +331,6 @@ QString MeshtasticDemodSettings::getDebugString(const QStringList& settingsKeys, debug += QString("NbParityBits: %1 ").arg(m_nbParityBits); if (force || settingsKeys.contains("packetLength")) debug += QString("PacketLength: %1 ").arg(m_packetLength); - if (force || settingsKeys.contains("hasCRC")) - debug += QString("HasCRC: %1 ").arg(m_hasCRC); - if (force || settingsKeys.contains("hasHeader")) - debug += QString("HasHeader: %1 ").arg(m_hasHeader); if (force || settingsKeys.contains("sendViaUDP")) debug += QString("SendViaUDP: %1 ").arg(m_sendViaUDP); if (force || settingsKeys.contains("invertRamps")) diff --git a/plugins/channelrx/demodmeshtastic/meshtasticdemodsettings.h b/plugins/channelrx/demodmeshtastic/meshtasticdemodsettings.h index e8eabe3c6..347feb03d 100644 --- a/plugins/channelrx/demodmeshtastic/meshtasticdemodsettings.h +++ b/plugins/channelrx/demodmeshtastic/meshtasticdemodsettings.h @@ -36,9 +36,6 @@ struct MeshtasticDemodSettings enum CodingScheme { CodingLoRa, //!< Standard LoRa - CodingASCII, //!< plain ASCII (7 bits) - CodingTTY, //!< plain TTY (5 bits) - CodingFT //!< FT8/4 scheme (payload 174 bits LDPC) }; enum ParityStatus @@ -54,16 +51,16 @@ struct MeshtasticDemodSettings int m_spreadFactor; int m_deBits; //!< Low data rate optimize (DE) bits FFTWindow::Function m_fftWindow; - CodingScheme m_codingScheme; + static const CodingScheme m_codingScheme; bool m_decodeActive; int m_eomSquelchTenths; //!< Squelch factor to trigger end of message (/10) unsigned int m_nbSymbolsMax; //!< Maximum number of symbols in a payload - bool m_autoNbSymbolsMax; //!< Set maximum number of symbols in a payload automatically using last message value + static const bool m_autoNbSymbolsMax; //!< Set maximum number of symbols in a payload automatically using last message value unsigned int m_preambleChirps; //!< Number of expected preamble chirps int m_nbParityBits; //!< Hamming parity bits (LoRa) int m_packetLength; //!< Payload packet length in bytes or characters (LoRa) - bool m_hasCRC; //!< Payload has CRC (LoRa) - bool m_hasHeader; //!< Header present before actual payload (LoRa) + static const bool m_hasCRC; //!< Payload has CRC (LoRa) + static const bool m_hasHeader; //!< Header present before actual payload (LoRa) bool m_sendViaUDP; //!< Send decoded message via UDP bool m_invertRamps; //!< Invert chirp ramps vs standard LoRa (up/down/up is standard) QString m_udpAddress; //!< UDP address where to send message diff --git a/plugins/channelrx/demodmeshtastic/meshtasticdemodsink.cpp b/plugins/channelrx/demodmeshtastic/meshtasticdemodsink.cpp index 6efbce09d..bb47ba835 100644 --- a/plugins/channelrx/demodmeshtastic/meshtasticdemodsink.cpp +++ b/plugins/channelrx/demodmeshtastic/meshtasticdemodsink.cpp @@ -520,66 +520,45 @@ void MeshtasticDemodSink::processSample(const Complex& ci) double magsq, magsqTotal; unsigned short symbol; - if (m_settings.m_codingScheme == MeshtasticDemodSettings::CodingFT) + int imax; + + if (m_settings.m_deBits > 0) { - std::vector magnitudes; - symbol = evalSymbol( - extractMagnitudes( - magnitudes, - m_fft->out(), - m_fftInterpolation, - m_fftLength, - magsq, - magsqTotal, - m_spectrumBuffer, - m_fftInterpolation - ) - ) % m_nbSymbolsEff; - m_decodeMsg->pushBackSymbol(symbol); - m_decodeMsg->pushBackMagnitudes(magnitudes); + double magSqNoise; + imax = argmaxSpreaded( + m_fft->out(), + m_fftInterpolation, + m_fftLength, + magsq, + magSqNoise, + magsqTotal, + m_spectrumBuffer, + m_fftInterpolation + ); } else { - int imax; - - if (m_settings.m_deBits > 0) - { - double magSqNoise; - imax = argmaxSpreaded( - m_fft->out(), - m_fftInterpolation, - m_fftLength, - magsq, - magSqNoise, - magsqTotal, - m_spectrumBuffer, - m_fftInterpolation - ); - } - else - { - imax = argmax( - m_fft->out(), - m_fftInterpolation, - m_fftLength, - magsq, - magsqTotal, - m_spectrumBuffer, - m_fftInterpolation - ); - } - - if (m_settings.m_invertRamps) { - imax = (m_nbSymbols * m_fftInterpolation - imax) % (m_nbSymbols * m_fftInterpolation); - } - - const bool headerSymbol = (m_settings.m_codingScheme == MeshtasticDemodSettings::CodingLoRa) - && m_settings.m_hasHeader - && (m_chirpCount < 8U); - symbol = evalSymbol(imax, headerSymbol) % m_nbSymbolsEff; - m_decodeMsg->pushBackSymbol(symbol); + imax = argmax( + m_fft->out(), + m_fftInterpolation, + m_fftLength, + magsq, + magsqTotal, + m_spectrumBuffer, + m_fftInterpolation + ); } + if (m_settings.m_invertRamps) { + imax = (m_nbSymbols * m_fftInterpolation - imax) % (m_nbSymbols * m_fftInterpolation); + } + + const bool headerSymbol = (m_settings.m_codingScheme == MeshtasticDemodSettings::CodingLoRa) + && m_settings.m_hasHeader + && (m_chirpCount < 8U); + symbol = evalSymbol(imax, headerSymbol) % m_nbSymbolsEff; + m_decodeMsg->pushBackSymbol(symbol); + if (m_spectrumSink) { m_spectrumSink->feed(m_spectrumBuffer, m_nbSymbols); }