Features

Which features each radio has, and which each build leaves out.

Build Versions

Full

Every feature the radio supports.

Leaves out: Nothing

Amateur

For amateur radio. Leaves out business features.

Leaves out: Basic privacy (Motorola / Anytone BP), Motorola TMS text format, ARS registration, LRRP location, Control station mode (boot as network, PC answers data, fixed link), SNMP v2c agent and traps (USB and over the air)

Commercial

For business and public service radios. Leaves out amateur-only features.

Leaves out: MMDVM hotspot, APRS: AFSK positions, status, messages; DMR positions; KISS TNC

Custom

Customize your own software build with the features you want, directly from the browser.

All Features

FeatureDM-32UVDM-1701DM-1801 ProDB25-D PROMD-380
Radio and voice
Analog FM receive and transmit FM

analog FM receive and transmit

Includes its children (tones, VOX, APRS, FM VFO)

Needs: — · Flash: DM-1701 29,296 B · MD-380 28,056 B

includedincludedincludedincludedincluded
CTCSS / DCS encode and decode SUBTONE

CTCSS / DCS encode and decode (needs FM)

MD-380: software decode (ADC) and PWM encode; CTCSS 100.0 Hz works on air both ways (2026-10-19), DCS not yet checked

Needs: FM · Flash: DM-1701 904 B · MD-380 3,292* B

includedincludedincludedincludedincluded
DMR Tier II voice (modem, call stack, AMBE FEC, vocoder) DMR

DMR Tier II voice: modem driver, call stack, AMBE FEC, vocoder hosting

Includes every DMR feature and everything on IP over DMR

Needs: — · Flash: DM-1701 175,856 B · MD-380 134,308 B

includedincludedincludedincludedincluded
Basic privacy (Motorola / Anytone BP) DMR_PRIVACY not in Amateur

basic privacy (Motorola / Anytone BP) on the voice path (needs DMR)

Needs: DMR · Flash: DM-1701 1,936 B · MD-380 1,992 B

includedincludedincludedincludedincluded
Talker alias receive and send DMR_TALKER_ALIAS

talker alias decode and TX of our radio name (needs DMR)

Needs: DMR · Flash: DM-1701 984 B · MD-380 1,300 B

includedincludedincludedincludedincluded
ETSI GPS Info in the embedded LC DMR_GPS

ETSI GPS Info in the embedded LC (FLCO 8): the caller's position decoded and shown, ours sent from the APRS position source when the radio-wide setting is on (needs DMR)

Needs: DMR · Flash: DM-1701 2,208 B · MD-380 2,152 B

includedincludedincludedincludedincluded
CSBK signaling: call alert, radio check DMR_SIGNALING

CSBK signaling: call alert, radio check (needs DMR)

Needs: DMR · Flash: DM-1701 592 B · MD-380 752 B

includedincludedincludedincludedincluded
DMR emergency (alarm, emergency call, hot mic) DMR_EMERGENCY

DMR emergency: the emergency alarm CSBK sent and heard, emergency calls (the LC's emergency service option, hot mic), the receive alert (needs DMR; core/dmr/dmr_emergency.c, docs/spec/dmr-emergency.md)

Needs: DMR · Flash: DM-1701 3,296 B · MD-380 3,188 B

includedincludedincludedincludedincluded
Repeater roaming DMR_ROAMING

DMR repeater roaming: move between the repeater sites of a roaming zone by signal strength (needs DMR; core/radio/roam.c, docs/spec/dmr-roaming.md)

Needs: DMR · Flash: DM-1701 11,952 B · MD-380 12,380 B

includedincludedincludedincludedincluded
VFO (hand-tuned frequency) VFO

VFO: tune a frequency by hand (off: programmed channels only)

Includes the DMR VFO; VFO and VFO_DMR re-measured 2026-10-17 (DM-1701 plain build, MD-380 with LTO). Copy to VFO (dmr-voice.md 2.2) is on top of that figure, behind the same switch: about 630 B on the DM-1701 and 730 B on the MD-380 (default builds, LTO as each has it), 750 B on the C-SKY radios

Needs: — · Flash: DM-1701 656 B · MD-380 516 B

includedincludedincludedincludedincluded
FM VFO VFO_FM

analog FM VFO (needs VFO and FM)

Needs: VFO, FM · Flash: DM-1701 504 B · MD-380 452 B

includedincludedincludedincludedincluded
DMR VFO (color code, slot, talk target typed in; mode change FM / DMR) VFO_DMR

digital DMR VFO: color code, timeslot and talk target typed in, the Mode tile switches it FM / DMR (needs VFO and DMR)

The VFO's mode, color code, slot and talk target are settings of the VFO, kept across power cycles (dmr-voice.md 2.1)

Needs: VFO, DMR · Flash: DM-1701 144 B · MD-380 104 B

includedincludedincludedincludedincluded
Scan, band scan, dual watch, nuisance delete SCAN

channel / zone scan, VFO band scan, dual watch, nuisance delete (docs/spec/radio-features.md)

Needs: — · Flash: DM-1701 2,576 B · MD-380 3,032 B

includedincludedincludedincludedincluded
Dual watch: A and B in any zone or the VFO, PTT on the selected one, its screens, talk back DUAL_WATCH

the dual watch screens: two channels on Home, which one PTT uses and which one a call came in on; the radio core's dual watch across zones and with the VFO, PTT on the selected channel (needs SCAN; docs/ux/dual-watch.md)

Needs SCAN. Without it, only the debug link's dual watch (two channels of one zone). Measured 2026-10-21 on the dual watch branch, default builds

Needs: SCAN · Flash: DM-1701 10,864 B · MD-380 11,456 B

includedincludedincludedincludedincluded
Beeps and alert tones BEEP

beeps and alert tones as PCM through the speaker (needs the board's PCM audio, which some radios have only with DMR)

Needs: — · Flash: DM-1701 1,552 B · MD-380 1,800 B

includedincludedincludedincludedincluded
FM TX tones: roger beep, 1750 Hz burst FM_TX_TONES

FM transmit tones: roger beep and the 1750 Hz repeater access burst (needs FM)

MD-380: TX tone path not written

Needs: FM · Flash: DM-1701 568 B

includedincludedincludedincludednot written for this radio yet
DTMF transmit from the keys DTMF

DTMF transmit: keypad digits send touch tones while PTT is held on FM (needs FM; docs/spec/radio-features.md 3.7)

MD-380: TX tone path not written

Needs: FM · Flash: DM-1701 920 B

includedincludedincludedincludednot written for this radio yet
FM VOX VOX

FM VOX: voice-operated transmit from the microphone level (needs FM; unverified on the bench)

Needs: FM · Flash: DM-1701 496 B · MD-380 1,064 B

not written for this radio yetincludedincludednot written for this radio yetincluded
Receiver battery saver BATTERY_SAVE

receiver battery saving: FM receiver duty cycling while idle (needs FM)

Needs: FM · Flash: DM-1701 296 B · MD-380 740 B

includedincludedincludedincludedincluded
Vibration alerts (Settings > Sound > Vibrate) VIBRATE

vibration alerts on the board's motor (hal_power_t.vibrate) for messages, call alerts, private calls and emergencies, Settings > Sound > Vibrate (core/radio/vibe.c, docs/spec/radio-features.md 4.1). On for radios with a motor (their config.mk); a board without one shows the setting dimmed

Needs a vibration motor (hal_power_t.vibrate): none of these radios has one RadioFoundry drives. On for the DM-1801 Pro. Measured 2026-10-16 with CONFIG_SNMP=n; 236 B with LTO

Needs: — · Flash: DM-1701 520* B

left outnot available on this radioincludednot available on this radionot available on this radio
GPS receiver: the module driver and its NMEA input (Settings > Location > GPS) GPS

the GPS receiver: the board's module driver and its NMEA parsing (drivers/gps, platform/*/gps*, CAP_GPS). Off, the radio has no GPS: DMR_GPS, LRRP and APRS keep a fixed position and answer "no fix". Off where the radio has none

Needs a GPS receiver. Off, DMR GPS, LRRP and APRS keep the fixed position and report no fix. MD-380 measured 2026-10-22 (LTO, 58f2cebe); the DM-1701 has no receiver

Needs: — · Flash: MD-380 1,196 B

includednot available on this radionot available on this radioincludedincluded
Air band AM receive (108-137 MHz) AM_RX

air band AM receive: FM channels and the VFO in 108-137 MHz are received in AM, receive only, on radios whose receiver does AM (CAP_AM_RX; needs FM; docs/spec/airband-and-broadcast.md). Off where the receiver can't

Needs a receiver that does AM; DM-32 board glue not written yet, so nothing runs

Needs: FM · Flash: DM-1701 408* B

includednot available on this radioincludednot available on this radionot available on this radio
Broadcast FM receiver BCAST_FM

broadcast FM receive: FM channels and the VFO in the broadcast receiver's range play on that second receiver chip, receive only (board.bcast, CAP_BCAST_FM; docs/spec/airband-and-broadcast.md). Off where there is none

Needs a second receiver chip (DM-32's RDA5807M); glue not written yet

Needs: — · Flash: DM-1701 ~0* B

includednot available on this radioincludednot written for this radio yetnot available on this radio
Key assignment (Settings > Keys, codeplug) KEY_ASSIGN

key assignment: Settings > Keys and the codeplug's quick-key slots say what the board's programmable keys do (core/input/keyassign.c, docs/spec/ui.md 3.1)

Up to 9 keys. Measured 2026-10-24

Needs: — · Flash: DM-1701 2,120 B · MD-380 2,188 B

includedincludedincludedincludedincluded
Channels list: every channel by number, a channel's settings (hub 5) CHANNEL_LIST

the hub's Channels list: every codeplug channel by number, and a channel's settings (read only; core/ui/ui_menus.c, docs/spec/ui.md 2)

Needs: — · Flash: DM-1701 1,536 B · MD-380 2,140 B

includedincludedincludedincludedincluded
Channel editor: edit a channel, New channel from current settings, text entry CHANNEL_EDIT

editing a channel on the radio, New channel from current settings, keypad text entry (docs/spec/ui.md 2.1): with the Channels list

Needs CHANNEL_LIST. Without it a channel's settings are read only. Measured 2026-10-17

Needs: CHANNEL_LIST · Flash: DM-1701 4,656 B · MD-380 4,252 B

includedincludedincludedincludedincluded
Zone editor: move, add, copy and remove channels in a zone; rename, copy and delete a zone ZONE_EDIT

the zone editor in a zone's list: add, move, copy here, remove channels; rename, copy, delete zones (docs/spec/ui.md 2.2): with the channel editor

Needs CHANNEL_EDIT. Measured 2026-10-24 on the default builds, LTO as each has it; also about 1.3 KB of RAM

Needs: CHANNEL_EDIT · Flash: DM-1701 6,580 B · MD-380 6,928 B

includedincludedincludedincludedincluded
DMR data
Text messages (ETSI IP text by default) DMR_SMS

DMR text messages (SMS; needs DMR): ETSI IP text and ETSI defined short data, sent and received (docs/spec/dmr-data.md 5)

Includes the TMS format. Individual ETSI IP texts go confirmed ("Delivered to")

Needs: DMR · Flash: DM-1701 2,640 B · MD-380 5,072 B

includedincludedincludedincludedincluded
Motorola TMS text format DMR_TMS not in Amateur

Motorola TMS format support for text messages: send, receive, the TMS ACK (needs DMR_SMS; docs/spec/dmr-data.md 5.1)

Optional format next to ETSI IP text

Needs: DMR_SMS · Flash: DM-1701 784 B · MD-380 740 B

includedincludedincludedincludedincluded
ARS registration DMR_ARS not in Amateur

ARS registration with a presence server (needs DMR; docs/spec/dmr-data.md)

Needs: DMR · Flash: DM-1701 1,112 B · MD-380 1,324 B

includedincludedincludedincludedincluded
LRRP location DMR_LRRP not in Amateur

LRRP location request / response (needs DMR; uses GPS where the board has it, else answers "no fix")

Needs: DMR · Flash: DM-1701 8,548 B · MD-380 2,048 B

includedincludedincludedincludedincluded
Zone and channel sharing: send a zone or a channel, import an offered one ZONE_SHARE

zone and channel sharing over DMR data: "Send zone to..." and offers of zones from other radios, imported only when the user accepts (needs DMR; core/dmr/zoneShare*.c, docs/spec/zone-share.md)

Includes its screens and the import; about 4 KB of RAM. Receiving is off until the user sets Ask (zone-share.md). Measured 2026-10-24 with LTO, on the zone share branch

Needs: DMR · Flash: DM-1701 12,240 B · MD-380 12,388 B

includedincludedincludedincludedincluded
Compressed UDP/IP headers on transmit (SAP 3) DMR_UDP_COMPRESS

compressed UDP/IPv4 headers on transmit (SAP 3, ETSI TS 102 361-3 5.6 / 7.2): UDP packets whose header fits the compression rules go with a 5 to 9 octet header instead of 28 (needs DMR; docs/spec/dmr-data.md 11)

Auto: not for ports 4000-4099 or ETSI IP text

Needs: DMR · Flash: DM-1701 408 B · MD-380 356 B

includedincludedincludedincludedincluded
Confirmed packet data DMR_CONFIRMED

confirmed packet data (ETSI TS 102 361-1 8.2 / -3 5.4): our IP packets confirmed per destination or UDP port (N(S), responses, selective retry, retry limit), and the selective retry asked for when confirmed data to us has bad blocks (needs DMR; docs/spec/dmr-data.md 12)

Needs: DMR · Flash: DM-1701 2,880 B · MD-380 2,920 B

includedincludedincludedincludedincluded
Single frequency repeater (MMDVM SFR) SFR

single frequency repeater (needs DMR): the MMDVM hotspot's SFR mode (core/hotspot/hotspotSfr.c, core/dmr/sfrRunner.c); the stand-alone repeater and user roles on a channel are not wired yet (docs/spec/sfr.md)

MD-380: HR_C5000 lacks what the SFR glue uses

Needs: DMR · Flash: DM-1701 6,884 B

includedincludedincludednot written for this radio yetnot available on this radio
APRS: AFSK positions, status, messages; DMR positions; KISS TNC APRS not in Commercial

APRS (core/aprs, docs/spec/aprs.md): position, status and message packets as AX.25 / 1200 baud AFSK on FM, positions over DMR (LRRP / UDT), a KISS TNC on the host port. Transmit stays off until the user turns it on (needs FM)

Includes APRS receive, KISS over TCP and APRS-IS where built. MD-380: AFSK TX needs the tone path (not written), DMR positions work

Needs: FM · Flash: DM-1701 26,568 B · MD-380 26,628 B

includedincludedincludedincludedincluded
APRS receive: demodulator, station list, digipeater APRS_RX not in Commercial

APRS receive: the AFSK demodulator, station list, messages to us, digipeater (needs APRS; useful only on boards whose board.afsk can sample received audio)

DM-1701: FM receive audio on the I2S stream, squelch gated (aprs 5.3). MD-380: not written

Needs: APRS · Flash: DM-1701 8,892 B

includedincludedincludednot written for this radio yetnot written for this radio yet
APRS iGate rules (with tools/aprs_gate.py) APRS_IGATE not in Commercial

APRS iGate rules, RF <-> APRS-IS through the host helper tools/aprs_gate.py (needs APRS_RX and HOSTLINK)

Needs APRS receive. DM-1701: off by default

Needs: APRS_RX, HOSTLINK · Flash: DM-1701 1,820* B

includedleft outincludednot written for this radio yetnot written for this radio yet
Network (USB network adapter and IP over DMR)
IP over DMR gateway DMR_IP_GATEWAY

IP over DMR packet data through a network link to the host: the USB network adapter or PPP on the serial host port (needs DMR and USB_NETWORK or NET_PPP; core/hostlink/hostlink_net.c)

Includes the radio's own services below

Needs: DMR, (USB_NETWORK | NET_PPP) · Flash: DM-1701 44,128 B · MD-380 43,220 B

includedincludedincludedincludedincluded
Minimal TCP NET_TCP

a minimal TCP for the radio's own services on the USB network link, never over RF (needs DMR_IP_GATEWAY, whose IPv4 layer it uses; core/net, docs/spec/tcp-services.md)

Includes KISS, HTTP, rigctld, APRS-IS. About 4.5 KB RAM

Needs: DMR, DMR_IP_GATEWAY · Flash: DM-1701 16,240 B · MD-380 15,656 B

includedincludedincludedincludedincluded
KISS over TCP, port 8001 NET_KISS not in Commercial

KISS over TCP on port 8001, bridged to the APRS KISS TNC (needs NET_TCP and APRS; core/net/kiss_tcp.c)

Needs: DMR, NET_TCP, APRS · Flash: DM-1701 700 B · MD-380 752 B

includedincludedincludedincludedincluded
HTTP status page and JSON, port 80 NET_HTTP

the HTTP status server on port 80: a page, JSON status and view sections, the screen (needs NET_TCP; core/net/http.c)

Needs: DMR, NET_TCP · Flash: DM-1701 4,796 B · MD-380 4,860 B

includedincludedincludedincludedincluded
HTTP static files stored and served gzip compressed NET_HTTP_GZIP

the status server's static files (core/net/http_assets) stored gzip compressed at build time and served with Content-Encoding: gzip; off: stored and served as they are (needs NET_HTTP; tools/gen_http_assets.py)

Negative: saves flash

Needs: DMR, NET_HTTP · Flash: DM-1701 -64 B · MD-380 -96 B

includedincludedincludedincludedincluded
Web control: the front panel page, keys, status and receive audio over /ws NET_WEBCTL

web control on the status server: /ws (WebSocket) for the radio's front panel page, keys, status and receive audio (needs NET_HTTP; core/net/ws.c, docs/spec/tcp-services.md 5)

The page and the radio's drawing included (about 6 KB gzip compressed); 1 KB RAM (tcp-services.md 5.1)

Needs: NET_HTTP · Flash: DM-1701 9,620 B · MD-380 9,332 B

includedincludedincludedincludedincluded
rigctld, port 4532 NET_RIGCTL

Hamlib rigctld on port 4532: frequency, mode, PTT, S meter for loggers and SDR programs (needs NET_TCP; core/net/rigctld.c)

Needs: DMR, NET_TCP · Flash: DM-1701 3,852 B · MD-380 3,728 B

includedincludedincludedincludedincluded
APRS-IS client NET_APRSIS not in Commercial

the radio's own APRS-IS client through the host: our beacons and the iGate's lines, off until a server is set (needs NET_TCP and APRS; core/net/aprsis.c)

Needs NAT on the host

Needs: DMR, NET_TCP, APRS · Flash: DM-1701 2,856 B · MD-380 2,720 B

includedincludedincludedincludedincluded
Audio linking (USRP over UDP, port 34001) NET_USRP

audio linking for AllStarLink, DVSwitch and bridges (USRP voice over UDP, port 34001): the radio sends what it receives, with the squelch as keyup, and transmits what the computer sends. DMR works both ways on every radio; FM needs the radio's audio paths to the processor, which radios have both ways, DMR only or FM one way (docs/feature-matrix.md) (needs DMR_IP_GATEWAY; core/usbaudio, docs/spec/usb-audio.md)

DM-1701: DMR and FM both ways. MD-380: DMR only (FM audio doesn't reach the processor yet). DM-32UV: DMR only until its board code has the FM audio paths

Needs: DMR, DMR_IP_GATEWAY · Flash: DM-1701 4,552 B · MD-380 4,888 B

includedincludedincludednot written for this radio yetincluded
mDNS / DNS-SD (rfoundry-<id>.local) MDNS

mDNS / DNS-SD responder on the USB network link: <host>.local and the radio's services (needs DMR_IP_GATEWAY, the IP stack it runs on; core/net/mdns.c, docs/spec/mdns.md)

Needs: DMR, DMR_IP_GATEWAY · Flash: DM-1701 6,744 B · MD-380 6,504 B

includedincludedincludedincludedincluded
TFTP codeplug read / write TFTP

TFTP server on the USB network link: codeplug.bin read and (staged, checked) written, info.txt (needs DMR_IP_GATEWAY; core/net/tftp.c, docs/spec/tftp.md)

Without the ID database below

Needs: DMR, DMR_IP_GATEWAY · Flash: DM-1701 6,356 B · MD-380 6,412 B

includedincludedincludedincludedincluded
DMR ID database over TFTP (iddb.bin, combined codeplug.bin) TFTP_IDDB

DMR ID database over TFTP: iddb.bin read and written in place, and the database part of a combined codeplug.bin (needs TFTP; core/net/tftp_iddb.c, docs/spec/tftp.md 5)

Follows TFTP

Needs: TFTP · Flash: DM-1701 2,184 B · MD-380 2,264 B

includedincludedincludedincludedincluded
Control station mode (boot as network, PC answers data, fixed link) DMR_CONTROL_STATION not in Amateur

control station mode for PC dispatch software on the USB network link: the PC as the endpoint of the radio's own data ports (passthrough) and a fixed private link address pair (needs DMR_IP_GATEWAY; docs/spec/usb-network.md 5)

Needs: DMR_IP_GATEWAY · Flash: DM-1701 288 B · MD-380 484 B

includedincludedincludedincludedincluded
SNMP v2c agent and traps (USB and over the air) SNMP not in Amateur

SNMP agent (SNMPv2c) on UDP 161 of the radio's address, over the USB network and over the air, with notifications (needs DMR_IP_GATEWAY; core/snmp, docs/spec/snmp.md)

Needs: DMR_IP_GATEWAY · Flash: DM-1701 8,460 B · MD-380 8,036 B

includedincludedincludedincludedincluded
USB network adapter (CDC-NCM) USB_NETWORK

USB network adapter personality (CDC-NCM, switched with the serial one at run time; needs USB)

Includes everything below

Needs: USB, HOSTLINK · Flash: DM-1701 48,344 B · MD-380 47,468 B

not available on this radioincludednot available on this radionot available on this radioincluded
PPP on the serial host port (IPv4 into the gateway) NET_PPP

IPv4 over PPP on the serial host port, into the IP gateway and its services: for radios whose only host link is a USB-serial cable, and a fallback on the USB serial port (needs HOSTLINK and DMR_IP_GATEWAY, which it turns on by default; core/net/ppp.c, core/hostlink/hostlink_ppp.c, docs/spec/ppp.md). On in the config.mk of a radio whose only IP link it is; off on the USB radios (docs/feature-matrix.md)

Interop tested with pppd; checked on the DB25-D PRO and the DM-1801 Pro (docs/spec/ppp.md 8). Fits neither default image as it is when measured (DM-1701 688 B short, MD-380 1,588 B short of its 275 KB then; DM-1701 with LTO: +3,948, fits). DM-32: its only IP link, on by default with the gateway and every service (Whole images, DM-32UV)

Needs: HOSTLINK, DMR_IP_GATEWAY · Flash: DM-1701 4,368* B · MD-380 3,816* B

includedleft outincludedincludedleft out
Host link and USB
Task stacks in the debug link view TASK_STACKS

every task's least free stack in the debug link's tasks view: the kernel's task create / delete trace hooks keep a table of the tasks (core/app/task_stack.c, docs/spec/debuglink.md 3.7; needs DEBUGLINK). About 0.6 KB

Each task's least free stack, the tasks view section (debuglink 3.7)

Needs: DEBUGLINK · Flash: DM-1701 536 B · MD-380 560 B

includedincludedincludedincludedincluded
USB device USB

USB device (CDC serial)

DM-32 has no USB (host link on the programming cable's UART). Includes everything on USB

Needs: — · Flash: DM-1701 127,300 B · MD-380 87,848 B

not available on this radioincludednot available on this radionot available on this radioincluded
MMDVM hotspot HOTSPOT not in Commercial

MMDVM modem / hotspot mode over the host port (needs DMR and HOSTLINK)

Includes split duplex and MMDVM SFR where built. MD-380: size estimated

Needs: DMR, HOSTLINK · Flash: DM-1701 34,196 B · MD-380 ~12,400 B

includedincludedincludedincludedincluded
Split duplex repeater (two radios, one duplex modem) HOTSPOT_SPLIT not in Commercial

split duplex repeater: two radios as one duplex MMDVM modem through the hotspot's vendor command 0xD6 (needs HOTSPOT; core/hotspot/hotspotSplit.c, core/dmr/bsOutbound.c, core/dmr/slotEpoch.c, docs/spec/split-duplex.md)

MD-380: HR_C6000-only glue. DM-1701, DM-32UV, DM-1801 Pro: each half checked alone on the SDR bench; one pair (DM-1801 Pro TX, DM-32UV RX) with a subscriber: 29 of 31 calls on the right slot

Needs: HOTSPOT · Flash: DM-1701 12,584 B

includedincludedincludednot written for this radio yetnot written for this radio yet
Open-firmware CPS protocol (qdmr) CPS_OPENFW

the open-firmware CPS protocol shim on the host port, so qdmr and the open-firmware CPS can read and write the codeplug (docs/spec/open-firmware-cps.md; needs HOSTLINK)

Needs: HOSTLINK · Flash: DM-1701 3,064 B · MD-380 3,008 B

includedincludedincludedincludedincluded
Fast codeplug protocol (debug link CODEPLUG) CPS_FAST

the fast codeplug protocol on the debug link: blank blocks skipped, CRC-32 compare so only changed blocks move, LZ4 both ways, staged writes with a power-cut safe commit (docs/spec/cps-fast.md; needs CPS_OPENFW and DEBUGLINK)

Changed 4 KB blocks only, LZ4 both ways, staged commit (cps-fast.md). DM-1701 figure with LTO (2026-10-18)

Needs: CPS_OPENFW, DEBUGLINK · Flash: DM-1701 3,732 B · MD-380 3,948* B

includedincludedincludedincludedincluded
Loader hand-over (stub entry, command 0x1A) STUB_ENTRY

runtime RAM-monitor entry: command 0x1A on the host port loads the host's flash-access stub into free RAM and jumps to it without a power cycle, so updates need no key combo at power-on (the web flasher, stub/stubtool.py, rfoundry; core/stubentry, docs/spec/stub-entry.md). Its own feature: with the debug link off it answers on its own small listener (PING, VERSION, STUB). Needs HOSTLINK (the task that owns the port) and a platform with hal_system_t.enter_stub: the HR_C7000, and the STM32F4 with an 8 KB staging buffer (docs/spec/stub-stm32f4.md). On wherever the host link is; a board leaves it off in its config.mk only for a stated reason

Updates and backups over the radio's own link without the bootloader key press: the web flasher and stub/stubtool.py. On by default on every radio, with or without the debug link (stub-entry.md); on the STM32 radios a RAM flash stub that also takes 8 KB of RAM (stub-stm32f4.md) (the DM-1701's RAM is 95 % used with it on)

Needs: HOSTLINK · Flash: DM-1701 768* B

includedincludedincludedincludedincluded
Crash log CRASH_LOG

the crash log: a CPU fault, a task stack overflow, running out of heap or a failed assertion keeps a record (registers, fault status, task, stack words) where a reset doesn't clear it and restarts the radio; the next start shows it (core/crash, docs/spec/crash-log.md). Off: a crash stops the radio until a power cycle, as before. Needs nothing else

A fault, stack overflow, heap exhaustion or failed assertion keeps a record across the restart; the debug link shows it (crash-log.md)

Needs: — · Flash: DM-1701 1,572 B · MD-380 1,756 B

includedincludedincludedincludedincluded
Crash log screen CRASH_SCREEN

the crash log's screen: Settings > Advanced > Crash log, the record's summary and Clear (needs CRASH_LOG). Off, the debug link still shows the record

Settings > Advanced > Crash log: the record's summary and Clear

Needs: CRASH_LOG · Flash: DM-1701 1,024 B · MD-380 1,408* B

includedincludedincludedincludedincluded
Crash report over DMR CRASH_REPORT

the crash report: the crash log's record, packed (76-124 bytes), as one UDP datagram over DMR packet data to a codeplug contact, from the Crash log screen or after the restart (off / ask / automatic; docs/spec/crash-log.md 5) (needs CRASH_SCREEN and DMR)

Sends the crash record as one UDP datagram to a codeplug contact, from the menu or after the restart (Off, Ask, Auto) (crash-log.md 5). Needs the screen

Needs: CRASH_SCREEN, DMR · Flash: DM-1701 1,440 B · MD-380 1,712* B

includedincludedincludedincludedincluded
Hardware watchdog WATCHDOG

the hardware watchdog: started in main(), fed by the idle task, so a hang or a starved system of a few seconds resets the chip (the IWDG on the STM32F4, the SoC's watchdog on the HR_C7000; docs/spec/watchdog.md). With the debug link it also has a bench test (command 0x1D). Off: no watchdog runs, as before. Needs nothing else

Fed by the idle task; a hang or a starved system resets the radio. Timeout about 5 s on the STM32 radios, 4 s on the HR_C7000 radios (watchdog.md)

Needs: — · Flash: DM-1701 932 B · MD-380 856 B

includedincludedincludedincludedincluded
Fault trace on the host UART FAULT_TRACE

the fault trace: a CPU fault prints its registers on the host UART, three framed lines a second apart, before the restart (core/crash/crash_trace.c, tools/rfoundry_fault_trace.py; docs/spec/crash-log.md 2.3). Only where the host port is a UART the fault handler can drive polled: the HR_C7000 radios (the STM32 radios' config.mk turn it off: USB only). Off: straight to the record and the restart. Needs nothing else

A CPU fault's registers in three framed lines before the restart, about 600 B (crash-log.md 2.3). The STM32 radios' host port is USB

Needs: — · Flash: —

includednot available on this radioincludedincludednot available on this radio
User interface
Diagnostics page DIAG

the diagnostics page

Needs: — · Flash: DM-1701 3,752 B · MD-380 3,532 B

includedincludedincludedincludedincluded
16x32 font FONT_XL

16x32 font, only useful on 240 px and wider displays

Only useful at 240 px and wider (MD-380 is 160 px). Anti-aliased on the DM-32 (7.4 KB of glyphs)

Needs: — · Flash: DM-1701 6,352* B

includednot available on this radionot available on this radionot available on this radionot available on this radio
Anti-aliased fonts FONT_AA

anti-aliased fonts from 6x12 up (JetBrains Mono Bold, 2 bits a pixel) instead of the bitmap ones: smooth text on color panels. About 5 KB more flash, 12 KB more with FONT_XL; a mono panel draws them as plain ink and gains nothing. On a 4 bpp color panel the edge grays share the 16 palette entries with the screen's colors: some font sizes or colors can be slightly harder to read (docs/spec/ui.md 5)

Smooth text on color panels (measured 2026-10-17); the DM-32's image grew 9.5 KB with it and FONT_XL

Needs: — · Flash: DM-1701 3,004* B

includedleft outleft outleft outleft out
Larger text FONT_BIG

larger text on 240 px and wider color panels: lists, labels and the status strip in a 9x18 font instead of 8x16 (12% larger, 24 characters a line on a 240 px panel instead of 27). About 3 KB more flash (needs FONT_AA)

9x18 lists and labels on 240 px color panels (needs FONT_AA); 3,588 B on the DM-32 (measured 2026-10-17)

Needs: FONT_AA · Flash: —

includedleft outleft outleft outleft out
Color screen settings (theme, highlight color, filled status bar) UI_COLOR

color screen settings: theme, highlight color, filled status bar (off: the dark theme only; for radios whose only screen is monochrome)

Off on the DM-1801 Pro (monochrome screen; 628 B there). Measured 2026-10-17; DM-1701 with LTO 612 B

Needs: — · Flash: DM-1701 672 B · MD-380 608 B

includedincludednot available on this radioincludedincluded
Settings menu on the radio UI_SETTINGS

the Settings menu on the radio (off: settings keep their stored values and are set with qdmr; docs/spec/ui.md)

Needs: — · Flash: DM-1701 5,304 B · MD-380 5,640 B

includedincludedincludedincludedincluded
Storage
Settings and codeplug storage on SPI NAND NAND_STORAGE

the core's storage (settings, codeplug) on SPI NAND: the NOR-like 4 KB sector layer over the board's own block range (drivers/flash/nand_sectors, docs/spec/nand-sectors.md). On in the config.mk of radios whose data flash is SPI NAND (docs/feature-matrix.md); off, such a radio runs on the default settings and stores nothing. Radios with SPI NOR don't use it

For radios whose data flash is SPI NAND: on for the DB25-D (about 6.6 KB flash, 1.5 KB RAM), not in these columns. These radios have SPI NOR and don't use it (nand-sectors)

Needs: — · Flash: —

not available on this radionot available on this radionot available on this radioincludednot available on this radio

● included · ○ left out · … not written for this radio yet · ✕ not available on this radio