1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-08-14 15:33:34 -04:00

Meshtastic demod: removed useless buttons in the UI, removed FT8 dependency, first pass on rewriting the readme

This commit is contained in:
f4exb
2026-03-16 19:34:12 +01:00
parent 8b371368db
commit a756e3d7fb
4 changed files with 20 additions and 154 deletions
@@ -1,10 +1,5 @@
project(meshtastic)
if (FT8_SUPPORT)
set(meshtastic_FT8_LIB ft8)
set(meshtastic_FT8_INCLUDE ${CMAKE_SOURCE_DIR}/ft8)
endif()
set(meshtastic_SOURCES
meshtasticdemod.cpp
meshtasticdemodsettings.cpp
@@ -31,7 +26,6 @@ set(meshtastic_HEADERS
include_directories(
${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
${meshtastic_FT8_INCLUDE}
${CMAKE_SOURCE_DIR}/modemmeshtastic
)
@@ -73,7 +67,6 @@ target_link_libraries(${TARGET_NAME} PRIVATE
sdrbase
${TARGET_LIB_GUI}
swagger
${meshtastic_FT8_LIB}
modemmeshtastic
)
@@ -1409,10 +1409,8 @@ void MeshtasticDemodGUI::applyMeshtasticProfileFromSelection()
ui->deBitsText->setText(tr("%1").arg(m_settings.m_deBits));
ui->preambleChirps->setValue(m_settings.m_preambleChirps);
ui->preambleChirpsText->setText(tr("%1").arg(m_settings.m_preambleChirps));
ui->header->setChecked(m_settings.m_hasHeader);
ui->fecParity->setValue(m_settings.m_nbParityBits);
ui->fecParityText->setText(tr("%1").arg(m_settings.m_nbParityBits));
ui->crc->setChecked(m_settings.m_hasCRC);
blockApplySettings(false);
updateControlAvailabilityHints();
@@ -1746,14 +1744,11 @@ MeshtasticDemodGUI::MeshtasticDemodGUI(PluginAPI* pluginAPI, DeviceUISet *device
ui->eomSquelchLabel->setToolTip(tr("End-of-message squelch level."));
ui->eomSquelchText->setToolTip(tr("Current end-of-message squelch value."));
ui->messageLength->setToolTip(tr("Maximum payload symbol length when auto is disabled."));
ui->messageLengthAuto->setToolTip(tr("Auto-detect payload symbol length from headers."));
ui->messageLengthLabel->setToolTip(tr("Maximum payload symbol length."));
ui->messageLengthText->setToolTip(tr("Current payload symbol length setting."));
ui->header->setToolTip(tr("Assume explicit LoRa header mode."));
ui->fecParity->setToolTip(tr("LoRa coding rate parity denominator (CR)."));
ui->fecParityLabel->setToolTip(tr("LoRa coding rate parity setting."));
ui->fecParityText->setToolTip(tr("Current coding rate parity value."));
ui->crc->setToolTip(tr("Expect payload CRC."));
ui->packetLength->setToolTip(tr("Fixed packet length for implicit-header mode."));
ui->packetLengthLabel->setToolTip(tr("Fixed packet length for implicit header mode."));
ui->packetLengthText->setToolTip(tr("Current fixed packet length."));
@@ -1780,7 +1775,6 @@ MeshtasticDemodGUI::MeshtasticDemodGUI(PluginAPI* pluginAPI, DeviceUISet *device
ui->snrLabel->setToolTip(tr("Estimated signal-to-noise ratio."));
ui->snrText->setToolTip(tr("Current estimated SNR."));
ui->sUnits->setToolTip(tr("Unit for SNR."));
ui->loraLabel->setToolTip(tr("LoRa header/payload status indicators."));
ui->symbolsCodewordsSeparator->setToolTip(tr("Separator between symbol and codeword counters."));
ui->messageText->setReadOnly(true);
@@ -1846,8 +1840,6 @@ void MeshtasticDemodGUI::updateControlAvailabilityHints()
const QString messageLengthAutoEnabledTip = tr("Auto-detect payload symbol length from headers.");
const QString messageLengthAutoDisabledTip = tr("Disabled in LoRa explicit-header mode. Payload length is decoded from the LoRa header.");
ui->messageLengthAuto->setEnabled(!explicitHeaderMode);
ui->messageLengthAuto->setToolTip(explicitHeaderMode ? messageLengthAutoDisabledTip : messageLengthAutoEnabledTip);
const QString messageLengthDefaultTip = tr("Maximum payload symbol length when auto is disabled.");
const QString messageLengthHeaderTip = tr("Maximum payload symbol clamp in LoRa explicit-header mode. Header still provides nominal payload length.");
@@ -1858,7 +1850,6 @@ void MeshtasticDemodGUI::updateControlAvailabilityHints()
const bool headerControlsEnabled = !m_settings.m_hasHeader;
ui->fecParity->setEnabled(headerControlsEnabled);
ui->crc->setEnabled(headerControlsEnabled);
ui->packetLength->setEnabled(headerControlsEnabled);
const QString fecParityEnabledTip = tr("LoRa coding rate parity denominator (CR).");
@@ -1870,7 +1861,6 @@ void MeshtasticDemodGUI::updateControlAvailabilityHints()
const QString crcEnabledTip = tr("Expect payload CRC.");
const QString crcDisabledTip = tr("Disabled in explicit-header mode. CRC expectation is decoded from the LoRa header.");
ui->crc->setToolTip(headerControlsEnabled ? crcEnabledTip : crcDisabledTip);
const QString packetLengthEnabledTip = tr("Fixed packet length for implicit-header mode.");
const QString packetLengthDisabledTip = tr("Disabled in explicit-header mode. Payload length is decoded from the LoRa header.");
@@ -1912,18 +1902,15 @@ void MeshtasticDemodGUI::displaySettings()
ui->udpSend->setChecked(m_settings.m_sendViaUDP);
ui->udpAddress->setText(m_settings.m_udpAddress);
ui->udpPort->setText(tr("%1").arg(m_settings.m_udpPort));
ui->header->setChecked(m_settings.m_hasHeader);
if (!m_settings.m_hasHeader)
{
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->packetLength->setValue(m_settings.m_packetLength);
ui->spectrumGUI->setFFTSize(m_settings.m_spreadFactor);
}
ui->messageLengthAuto->setChecked(m_settings.m_autoNbSymbolsMax);
ui->invertRamps->setChecked(m_settings.m_invertRamps);
displaySquelch();
@@ -3058,7 +3045,6 @@ void MeshtasticDemodGUI::showLoRaMessage(const Message& message)
{
ui->fecParity->setValue(msg.getNbParityBits());
ui->fecParityText->setText(tr("%1").arg(msg.getNbParityBits()));
ui->crc->setChecked(msg.getHasCRC());
ui->packetLength->setValue(msg.getPacketSize());
ui->packetLengthText->setText(tr("%1").arg(msg.getPacketSize()));
packetLength = msg.getPacketSize();
@@ -6,13 +6,13 @@
<rect>
<x>0</x>
<y>0</y>
<width>579</width>
<width>605</width>
<height>680</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>532</width>
<width>605</width>
<height>680</height>
</size>
</property>
@@ -30,7 +30,7 @@
<rect>
<x>0</x>
<y>10</y>
<width>571</width>
<width>601</width>
<height>91</height>
</rect>
</property>
@@ -565,8 +565,8 @@
<rect>
<x>0</x>
<y>100</y>
<width>572</width>
<height>301</height>
<width>601</width>
<height>316</height>
</rect>
</property>
<property name="windowTitle">
@@ -706,63 +706,6 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="messageLengthAuto">
<property name="toolTip">
<string>Set message length in symbols automatically to provided message length (LoRa and FT only)</string>
</property>
<property name="text">
<string>Auto</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="fecLayout">
<item>
<widget class="QLabel" name="loraLabel">
<property name="text">
<string>LoRa</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="header">
<property name="toolTip">
<string>Expect header (explicit) - disables manual FEC and CRC</string>
</property>
<property name="text">
<string>HDR</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_4">
<property name="minimumSize">
<size>
<width>5</width>
<height>0</height>
</size>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="fecParityLabel">
<property name="text">
@@ -815,29 +758,6 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="crc">
<property name="toolTip">
<string>CRC appended to payload</string>
</property>
<property name="text">
<string>CRC</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_7">
<property name="minimumSize">
<size>
<width>5</width>
<height>0</height>
</size>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QDial" name="packetLength">
<property name="maximumSize">
@@ -878,13 +798,7 @@
</widget>
</item>
<item>
<widget class="Line" name="line_6">
<property name="minimumSize">
<size>
<width>5</width>
<height>0</height>
</size>
</property>
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
@@ -980,7 +894,7 @@
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -1177,7 +1091,7 @@
<rect>
<x>0</x>
<y>410</y>
<width>571</width>
<width>601</width>
<height>260</height>
</rect>
</property>
+12 -39
View File
@@ -180,15 +180,6 @@ When you check this option it inverts the direction of the chirps thus becoming
![Meshtastic Demodulator payload controls](../../../doc/img/MeshtasticDemod_payload.png)
<h4>A.1: Coding scheme</h4>
In addition to the LoRa standard plain ASCII and TTY have been added for pure text messages. ASCII and TTY have no form of FEC.
- **LoRa**: LoRa standard (see LoRa documentation)
- **ASCII**: This is plain 7 bit ASCII coded characters. It needs exactly 7 effective bits per symbols (SF - DE = 7)
- **TTY**: Baudot (Teletype) 5 bit encoded characters. It needs exactly 5 effective bits per symbols (SF - DE = 5)
- **FT**: FT8/4 protocol. The 174 payload bits are packed into chirp symbols with zero padding if necessary
<h4>A.2: Start/Stop decoder</h4>
You can suspend and resume decoding activity using this button. This is useful if you want to freeze the payload content display.
@@ -203,43 +194,23 @@ During payload detection the maximum power value in the FFT (at argmax) P<sub>ma
This is the expected number of symbols in a message. When a header is present in the payload it should match the size given in the header (A.11).
<h4>A.5: Auto message length</h4>
LoRa and DT modes only. Set message length (A.4) equal to the number of symbols specified (or implied for FT) in the message just received. When messages are sent repeatedly this helps adjusting in possible message length changes automatically.
<h4>A.6: Sync word</h4>
This is the message 1 byte sync word displayed in hexadecimal.
<h4>A.7: Expect header in message</h4>
LoRa mode only. Use this checkbox to tell if you expect or not a header in the message.
<h4>A.8: Number of FEC parity bits</h4>
LoRa mode only. This is the number of parity bits in the Hamming code used in the FEC. The standard values are 1 to 4 for H(4,5) to H(4,8) encoding. 0 is a non-standard value to specify no FEC.
When a header is expected this control is disabled because the value used is the one found in the header.
In FT8 mode there is no FEC as FEC is handled within the FT payload (with LDPC)
<h4>A.9: Payload CRC presence</h4>
LoRa mode: Use this checkbox to tell if you expect a 2 byte CRC at the end of the payload. FT mode: there is always a CRC.
LoRa: When a header is expected this control is disabled because the value used is the one found in the header.
This control is disabled because the value used is the one found in the header.
<h4>A.10: Packet length</h4>
This is the expected packet length in bytes without header and CRC. For FT this is the number of symbols.
This is the expected packet length in bytes without header and CRC.
LoRa: When a header is expected this control is disabled because the value used is the one found in the header.
This control is disabled because the value used is the one found in the header.
<h4>A.11: Number of symbols and codewords</h4>
This is the number of symbols (left of slash) and codewords (right of slash) used for the payload including header and CRC.
<h4>A.12: Header FEC indicator (LoRa)</h4>
<h4>A.12: Header FEC indicator</h4>
Header uses a H(4,8) FEC. The color of the indicator gives the status of header parity checks:
@@ -248,27 +219,27 @@ Header uses a H(4,8) FEC. The color of the indicator gives the status of header
- **Blue**: recovered error
- **Green**: no errors
<h4>A.13: Header CRC indicator (LoRa)</h4>
<h4>A.13: Header CRC indicator</h4>
The header has a one byte CRC. The color of this indicator gives the CRC status:
- **Green**: CRC OK
- **Red**: CRC error
<h4>A.14: Payload FEC indicator (LoRa and FT)</h4>
<h4>A.14: Payload FEC indicator</h4>
The color of the indicator gives the status of payload parity checks:
- **Grey**: undefined
- **Red**: unrecoverable error. H(4,7) cannot distinguish between recoverable and unrecoverable error. Therefore this is never displayed for H(4,7). For FT it means that LDPC decoding failed.
- **Blue**: recovered error (LoRa only)
- **Blue**: recovered error
- **Green**: no errors
<h4>A.15: Payload CRC indicator (LoRa and FT)</h4>
<h4>A.15: Payload CRC indicator</h4>
The payload can have a two byte CRC. The color of this indicator gives the CRC status:
- **Grey**: No CRC (LoRa)
- **Grey**: No CRC
- **Green**: CRC OK
- **Red**: CRC error
@@ -276,9 +247,11 @@ The payload can have a two byte CRC. The color of this indicator gives the CRC s
Use this push button to clear the message window (12)
<h3>Live button</h3>
<h3>12: Message window</h3>
This is where the message and status data are displayed. The display varies if the coding scheme is purely text based (TTY, ASCII, FT) or text/binary mixed based (LoRa). The text vs binary consideration concerns the content of the message not the way it is transmitted on air that is by itself binary.
This is where the message and status data are displayed. The display is text/binary mixed. The text vs binary consideration concerns the content of the message not the way it is transmitted on air that is by itself binary.
<h4>12.a: Text messages</h4>