Full messaging support, implemented fresh in three layers:
- dmrDataProtocol: pure short-data codec (CSBK preamble, data/response
headers, IP/UDP/TMS payload, ETSI CRCs) validated against on-air
captures by a host-side test suite. Transmits Motorola TMS (UDP 4007),
receives TMS and Anytone/"DMR standard" (UDP 5016).
- smsCore/smsStorage: TX queue with wait-for-channel and delivery
confirmation (response PDU / ACK, resend prompt on timeout), ISR-side
block assembly with layout auto-detection (confirmed/unconfirmed,
rate-1/2 and full 18-byte rate-3/4 blocks), delivery reports to
senders that request them, and a checksummed message store in SPI
flash at 0xC00000 (inbox + sent, 8 each; 8 quick texts).
- UI: Messages hub (main menu or long-press GREEN), keypad compose with
multi-tap (160 chars), inbox/sent/view with reply-resend-delete,
quick-text picker/editor, options (Wait for ACK, My ID only), and an
incoming-message popup with chime. Strings in all 20 languages.
The HR-C6000 does the BPTC/FEC; the driver streams 12-byte logical
bursts through the existing TX state machine (repeater wake included),
locks out PTT during a send, and leaves hotspot mode untouched.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The DMR RX handler re-asserts the green LED whenever it reads it off, racing the
main-loop mute clear, so green flickered between the red flashes. Add a
LedGreenSuppress() hold in the LED driver: while muted the green LED is forced
off (the re-assert becomes a no-op); on un-mute the hold is released and green is
restored from the current RX state.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The mute flash forced the green LED off; on un-mute it was blanked instead of
restored, so a call in progress stayed dark. Restore green from the current RX
state (active DMR slot, or FM/digital signal received) on un-mute; the normal RX
code keeps it correct afterwards.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Treat the volume control at its minimum (lastVolume == -99, the firmware's
'muted' position) as effectively muted, so the red LED flash, the header M
and the built-in strike-through appear without an explicit SK2 mute.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a one-tap audio mute on the VFO and Channel screens:
- SK2 short-tap toggles mute via the built-in audioAmpMute()/audioAmpIsMuted().
The tap is only consumed by the existing "set TX TG to incoming" behaviour
while a DMR QSO is on screen, so mute works everywhere else.
- Header: a bold "M" is shown just left of the battery while muted (the
firmware's built-in strike-through over the mode text also still shows).
- LED: flashes red for 0.5s every 2s while muted (main loop), overriding the
normal RX/TX LED.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Shift the contact/TG, CTCSS/DCS and squelch info lines down by a tunable
DISPLAY_MAIN_CONTENT_TOP_PAD (4px) on MD-UV380/DM1701, so they no longer sit
flush against the new S-meter label row. Frequency and everything below are
unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>