From c770693848154bb19d2ce9edc7da121f4720c118 Mon Sep 17 00:00:00 2001 From: Marcus Kida Date: Tue, 14 Jul 2026 23:27:43 +0200 Subject: [PATCH] Fix: remove muted 'M' header icon that overlapped GPS text With GPS enabled, the bold 'M' mute indicator in the status bar collided with the GPS text. Drop the header icon; the flashing red LED already indicates the muted state. Docs updated. Co-Authored-By: Claude Fable 5 --- CHANGELOG.md | 6 ++++++ MANUAL.md | 3 +-- .../source/user_interface/uiUtilities.c | 21 +++++++------------ README.md | 4 ++-- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa4f09b..2f02664 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,12 @@ single running list until the first versioned release. _Nothing yet._ +## 0.10.1 + +- **Fix:** the muted **"M"** indicator in the status bar overlapped the GPS text + when GPS was enabled. The header icon is removed; the muted state is shown by + the flashing red LED alone. + ## 0.10.0 - **SMS recipient from contacts** — when composing a message, press **GREEN** in diff --git a/MANUAL.md b/MANUAL.md index 03af6cf..e98999d 100644 --- a/MANUAL.md +++ b/MANUAL.md @@ -80,8 +80,7 @@ Editing colours in the CPS only affects **Custom**; the built-in presets are fixed. Every element (S-meter, frequencies, menus) follows the selected theme. ### Mute indicator — 🟢 [FreeTRX] -While muted, a bold **"M"** appears in the status bar (just left of the battery) -and the **red LED flashes** (0.5 s every 2 s). See *Mute* below. +While muted, the **red LED flashes** (0.5 s every 2 s). See *Mute* below. --- diff --git a/MDUV380_firmware/application/source/user_interface/uiUtilities.c b/MDUV380_firmware/application/source/user_interface/uiUtilities.c index 72ea4b5..ef9f4f0 100644 --- a/MDUV380_firmware/application/source/user_interface/uiUtilities.c +++ b/MDUV380_firmware/application/source/user_interface/uiUtilities.c @@ -1853,12 +1853,12 @@ void uiUtilityRenderQSOData(void) displayThemeResetToDefault(); } -// Toggle the audio mute (speaker) state. The header shows a mute icon and the LED -// flashes amber (see the main loop) while muted. +// Toggle the audio mute (speaker) state. The flashing red LED (see the main +// loop) indicates the muted state. void toggleAudioMute(void) { audioAmpMute(!audioAmpIsMuted()); - headerRowIsDirty = true; // refresh the header so the mute icon appears/clears + headerRowIsDirty = true; } void uiUtilityRenderHeader(bool isVFODualWatchScanning, bool isVFOSweepScanning, bool forceBatteryDisplay) @@ -1878,8 +1878,6 @@ void uiUtilityRenderHeader(bool isVFODualWatchScanning, bool isVFOSweepScanning, static uint32_t blinkTime = 0; int radioMode = trxGetMode(); uint8_t powerLevel = trxGetPowerLevel(); - // Muted either explicitly (SK2) or by the volume knob turned fully down (-99). - bool audioIsMuted = (audioAmpIsMuted() || (lastVolume == -99)); bool isPerChannelPower = (currentChannelData->libreDMR_Power != 0x00); bool scanIsActive = (uiDataGlobal.Scan.active || uiDataGlobal.Scan.toneActive); bool batteryIsLow = batteryIsLowWarning(); @@ -2000,7 +1998,7 @@ void uiUtilityRenderHeader(bool isVFODualWatchScanning, bool isVFOSweepScanning, displayPrintCore(MODE_TEXT_X_OFFSET, DISPLAY_Y_POS_HEADER, buffer, (((nonVolatileSettings.hotspotType != HOTSPOT_TYPE_OFF) && (uiDataGlobal.dmrDisabled == false)) ? FONT_SIZE_1_BOLD : FONT_SIZE_1), TEXT_ALIGN_LEFT, isInverted); - // (mute is shown by the header "M" indicator, not a strike-through) + // (mute is indicated by the flashing red LED, not a strike-through) } if ((aprsIsTransmittingOnSameQRG == false) && (monitorModeData.isEnabled == false) && (isVFOSweepScanning == false) && (isVFODualWatchScanning == false) && @@ -2068,7 +2066,7 @@ void uiUtilityRenderHeader(bool isVFODualWatchScanning, bool isVFOSweepScanning, displayPrintCore(MODE_TEXT_X_OFFSET, DISPLAY_Y_POS_HEADER, (isVFODualWatchScanning ? "[DW]" : "DMR"), ((nonVolatileSettings.hotspotType != HOTSPOT_TYPE_OFF) ? FONT_SIZE_1_BOLD : FONT_SIZE_1), TEXT_ALIGN_LEFT, isInverted); - // (mute is shown by the header "M" indicator, not a strike-through) + // (mute is indicated by the flashing red LED, not a strike-through) } if (isVFODualWatchScanning == false) @@ -2180,13 +2178,8 @@ void uiUtilityRenderHeader(bool isVFODualWatchScanning, bool isVFOSweepScanning, bool displayTime = (settingsIsOptionBitSet(BIT_DISPLAY_TIME_IN_HEADER) && (forceBatteryDisplay == false) && (batteryIsLow == false)); #endif #endif - // Mute indicator: bold "M" just left of the battery indicator. - if (audioIsMuted) - { - displayThemeApply(THEME_ITEM_FG_HEADER_TEXT, THEME_ITEM_BG_HEADER_TEXT); - displayPrintCore((DISPLAY_SIZE_X - 40), DISPLAY_Y_POS_HEADER, "M", FONT_SIZE_1_BOLD, TEXT_ALIGN_LEFT, false); - displayThemeResetToDefault(); - } + // Mute state is indicated by the flashing red LED only; no header icon + // (it collided with the GPS text in the status bar). // Display battery percentage/voltage bool apoEnabled = (nonVolatileSettings.apo > 0); diff --git a/README.md b/README.md index b66147f..e2a1878 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,8 @@ FreeTRX keeps OpenGD77's core (DMR/FM, hotspot, CPS compatibility) and adds: - **Audio mute — new SK2 short-tap.** A short tap of **SK2** on the VFO/Channel screen toggles the speaker mute on and off. Turning the **volume knob fully - down** counts as muted too. While muted, a bold **"M"** appears in the status - bar (left of the battery) and the **red LED flashes** (0.5 s every 2 s). SK2's + down** counts as muted too. While muted, the **red LED flashes** (0.5 s every + 2 s). SK2's existing roles are unchanged: held as a modifier, extra-long-press for monitor/squelch-off, and — while a DMR QSO is on screen — a tap still sets the TX talkgroup to the incoming one.