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 <noreply@anthropic.com>
This commit is contained in:
parent
d774604d74
commit
c770693848
4 changed files with 16 additions and 18 deletions
|
|
@ -9,6 +9,12 @@ single running list until the first versioned release.
|
||||||
|
|
||||||
_Nothing yet._
|
_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
|
## 0.10.0
|
||||||
|
|
||||||
- **SMS recipient from contacts** — when composing a message, press **GREEN** in
|
- **SMS recipient from contacts** — when composing a message, press **GREEN** in
|
||||||
|
|
|
||||||
|
|
@ -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.
|
fixed. Every element (S-meter, frequencies, menus) follows the selected theme.
|
||||||
|
|
||||||
### Mute indicator — 🟢 [FreeTRX]
|
### Mute indicator — 🟢 [FreeTRX]
|
||||||
While muted, a bold **"M"** appears in the status bar (just left of the battery)
|
While muted, the **red LED flashes** (0.5 s every 2 s). See *Mute* below.
|
||||||
and the **red LED flashes** (0.5 s every 2 s). See *Mute* below.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1853,12 +1853,12 @@ void uiUtilityRenderQSOData(void)
|
||||||
displayThemeResetToDefault();
|
displayThemeResetToDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle the audio mute (speaker) state. The header shows a mute icon and the LED
|
// Toggle the audio mute (speaker) state. The flashing red LED (see the main
|
||||||
// flashes amber (see the main loop) while muted.
|
// loop) indicates the muted state.
|
||||||
void toggleAudioMute(void)
|
void toggleAudioMute(void)
|
||||||
{
|
{
|
||||||
audioAmpMute(!audioAmpIsMuted());
|
audioAmpMute(!audioAmpIsMuted());
|
||||||
headerRowIsDirty = true; // refresh the header so the mute icon appears/clears
|
headerRowIsDirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiUtilityRenderHeader(bool isVFODualWatchScanning, bool isVFOSweepScanning, bool forceBatteryDisplay)
|
void uiUtilityRenderHeader(bool isVFODualWatchScanning, bool isVFOSweepScanning, bool forceBatteryDisplay)
|
||||||
|
|
@ -1878,8 +1878,6 @@ void uiUtilityRenderHeader(bool isVFODualWatchScanning, bool isVFOSweepScanning,
|
||||||
static uint32_t blinkTime = 0;
|
static uint32_t blinkTime = 0;
|
||||||
int radioMode = trxGetMode();
|
int radioMode = trxGetMode();
|
||||||
uint8_t powerLevel = trxGetPowerLevel();
|
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 isPerChannelPower = (currentChannelData->libreDMR_Power != 0x00);
|
||||||
bool scanIsActive = (uiDataGlobal.Scan.active || uiDataGlobal.Scan.toneActive);
|
bool scanIsActive = (uiDataGlobal.Scan.active || uiDataGlobal.Scan.toneActive);
|
||||||
bool batteryIsLow = batteryIsLowWarning();
|
bool batteryIsLow = batteryIsLowWarning();
|
||||||
|
|
@ -2000,7 +1998,7 @@ void uiUtilityRenderHeader(bool isVFODualWatchScanning, bool isVFOSweepScanning,
|
||||||
displayPrintCore(MODE_TEXT_X_OFFSET, DISPLAY_Y_POS_HEADER, buffer,
|
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);
|
(((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) &&
|
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);
|
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)
|
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));
|
bool displayTime = (settingsIsOptionBitSet(BIT_DISPLAY_TIME_IN_HEADER) && (forceBatteryDisplay == false) && (batteryIsLow == false));
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
// Mute indicator: bold "M" just left of the battery indicator.
|
// Mute state is indicated by the flashing red LED only; no header icon
|
||||||
if (audioIsMuted)
|
// (it collided with the GPS text in the status bar).
|
||||||
{
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Display battery percentage/voltage
|
// Display battery percentage/voltage
|
||||||
bool apoEnabled = (nonVolatileSettings.apo > 0);
|
bool apoEnabled = (nonVolatileSettings.apo > 0);
|
||||||
|
|
|
||||||
|
|
@ -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
|
- **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
|
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
|
down** counts as muted too. While muted, the **red LED flashes** (0.5 s every
|
||||||
bar (left of the battery) and the **red LED flashes** (0.5 s every 2 s). SK2's
|
2 s). SK2's
|
||||||
existing roles are unchanged: held as a modifier, extra-long-press for
|
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
|
monitor/squelch-off, and — while a DMR QSO is on screen — a tap still sets the
|
||||||
TX talkgroup to the incoming one.
|
TX talkgroup to the incoming one.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue