From dece3fa1802d1836e53a076cbf1b9da4075f4444 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 16 Jan 2026 02:32:25 +0100 Subject: [PATCH 1/4] Save/restore WDSPRx audio mute in settings. Part of #2607 --- plugins/channelrx/wdsprx/wdsprxsettings.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/channelrx/wdsprx/wdsprxsettings.cpp b/plugins/channelrx/wdsprx/wdsprxsettings.cpp index d36387d9b..32dbf3dcb 100644 --- a/plugins/channelrx/wdsprx/wdsprxsettings.cpp +++ b/plugins/channelrx/wdsprx/wdsprxsettings.cpp @@ -133,6 +133,7 @@ QByteArray WDSPRxSettings::serialize() const s.writeBool( 8, m_audioBinaural); s.writeBool( 9, m_audioFlipChannels); s.writeBool( 10, m_dsb); + s.writeBool( 19, m_audioMute); // AGC s.writeBool( 11, m_agc); s.writeS32( 12, (int) m_agcMode); @@ -346,6 +347,7 @@ bool WDSPRxSettings::deserialize(const QByteArray& data) d.readBool( 8, &m_audioBinaural, false); d.readBool( 9, &m_audioFlipChannels, false); d.readBool( 10, &m_dsb, false); + d.readBool( 19, &m_audioMute, false); // AGC d.readBool( 11, &m_agc, true); d.readS32( 12, &tmp, 2); From 4777fb58186435b2b97329e9afa0266d483b58a3 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 16 Jan 2026 02:34:14 +0100 Subject: [PATCH 2/4] Fix db/S meter minimum values when there is no input. Fixes #2606 --- plugins/channelrx/wdsprx/wdsprxgui.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/channelrx/wdsprx/wdsprxgui.cpp b/plugins/channelrx/wdsprx/wdsprxgui.cpp index 8a403ac3b..319790569 100644 --- a/plugins/channelrx/wdsprx/wdsprxgui.cpp +++ b/plugins/channelrx/wdsprx/wdsprxgui.cpp @@ -1375,6 +1375,8 @@ void WDSPRxGUI::tick() double powDbPeak; int nbMagsqSamples; m_wdspRx->getMagSqLevels(powDbAvg, powDbPeak, nbMagsqSamples); // powers directly in dB + powDbAvg = powDbAvg == 0.0 ? WDSPRxSettings::m_minPowerThresholdDB : powDbAvg; + powDbPeak = powDbPeak == 0.0 ? WDSPRxSettings::m_minPowerThresholdDB : powDbPeak; ui->channelPowerMeter->levelChanged( (WDSPRxSettings::m_mminPowerThresholdDBf + powDbAvg) / WDSPRxSettings::m_mminPowerThresholdDBf, From 32837c775723c4e161f2e10be93c14f838314289 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 16 Jan 2026 02:34:49 +0100 Subject: [PATCH 3/4] Avoid duplicate builds on releases --- .github/workflows/sdrangel.yml | 2 +- .github/workflows/windows.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sdrangel.yml b/.github/workflows/sdrangel.yml index 823ee176e..b4d1bf035 100644 --- a/.github/workflows/sdrangel.yml +++ b/.github/workflows/sdrangel.yml @@ -9,7 +9,7 @@ on: - mac_ci - fix-* - feature-* - tags: + tags-ignore: - 'v*' pull_request: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 4c930b40d..d4e7b4c77 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -3,7 +3,7 @@ name: SDRangel Windows release build and signing on: push: branches: - - master + - windows_release tags: - 'v*' From fedade27dd311362c8c165aa430d91bfbbd6d1ed Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 17 Jan 2026 05:52:08 +0100 Subject: [PATCH 4/4] Morse decoder: set text intensity according to decoding cost factor --- plugins/feature/morsedecoder/morsedecodergui.cpp | 12 ++++++++++-- plugins/feature/morsedecoder/morsedecodergui.h | 2 +- plugins/feature/morsedecoder/readme.md | 6 +++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/plugins/feature/morsedecoder/morsedecodergui.cpp b/plugins/feature/morsedecoder/morsedecodergui.cpp index 2e315841f..cabc877c5 100644 --- a/plugins/feature/morsedecoder/morsedecodergui.cpp +++ b/plugins/feature/morsedecoder/morsedecodergui.cpp @@ -114,7 +114,7 @@ bool MorseDecoderGUI::handleMessage(const Message& message) else if (MorseDecoder::MsgReportText::match(message)) { MorseDecoder::MsgReportText& report = (MorseDecoder::MsgReportText&) message; - textReceived(report.getText()); + textReceived(report.getText(), report.m_costFunction); updateMorseStats(report.m_estimatedPitchHz, report.m_estimatedSpeedWPM, report.m_costFunction); } @@ -133,8 +133,15 @@ void MorseDecoderGUI::handleInputMessages() } } -void MorseDecoderGUI::textReceived(const QString& text) +void MorseDecoderGUI::textReceived(const QString& text, float cost) { + // Set text color based on cost + int light = static_cast(255.0f / (1 + 2*cost)); + + if (light < 25) { + return; // too faint to display + } + // Is the scroll bar at the bottom? int scrollPos = ui->text->verticalScrollBar()->value(); bool atBottom = scrollPos >= ui->text->verticalScrollBar()->maximum(); @@ -145,6 +152,7 @@ void MorseDecoderGUI::textReceived(const QString& text) // Restore scroll position ui->text->verticalScrollBar()->setValue(scrollPos); + ui->text->setTextColor(QColor(light, light, light)); // Format and insert text ui->text->insertPlainText(MorseDecoderSettings::formatText(text)); diff --git a/plugins/feature/morsedecoder/morsedecodergui.h b/plugins/feature/morsedecoder/morsedecodergui.h index 9da8e01d6..dee5e209d 100644 --- a/plugins/feature/morsedecoder/morsedecodergui.h +++ b/plugins/feature/morsedecoder/morsedecodergui.h @@ -80,7 +80,7 @@ private: void displaySampleRate(int sampleRate); void updateChannelList(); bool handleMessage(const Message& message); - void textReceived(const QString& text); + void textReceived(const QString& text, float cost = 0.0f); void updateMorseStats(float estPitch, float estWPM, float cost); void makeUIConnections(); diff --git a/plugins/feature/morsedecoder/readme.md b/plugins/feature/morsedecoder/readme.md index c3b097ba8..49f3c734b 100644 --- a/plugins/feature/morsedecoder/readme.md +++ b/plugins/feature/morsedecoder/readme.md @@ -65,7 +65,7 @@ Lock the pitch and speed to the current values detected by GGMorse. Unlock to re

11: Decoder cost factor

-This is the GGMorse decoder cost factor. Successful decodes yield from a few millis to a few tens of millis. +This is the GGMorse decoder cost factor. Most successful decodes yield from a few millis to a few tens of millis.

11a: Show decoder threshold

@@ -87,6 +87,10 @@ Push this button to clear the text in the text window (15) This area shows the decoded text. New text appears every 3 seconds which is the GGMorse analysis window length. +The intensity of the text is proportional to the cost of the decoding function displayed in (11) (the lower the more confident and the brighter) with the following formula on the 25..255 scale (if lower than 25 which is the background intensity it is not displayed): + +$f(cost) = \frac{255}{1+2cost}$ +

16. Waveforms view

This scope display shows waveforms related to the decoding with GGMorse.