Task flows
Step-by-step flows for the 22 most frequent or most important tasks, with press counts per radio class. Keys use the logical names from information-architecture.md; the reference mapping is SELECT = green/Menu, BACK = red/Back, QUICK = *, CONTEXT = #, TALK_TARGET = SK2, MONITOR = SK1.
Radio classes
| Class | Example radios | Input | Display |
|---|---|---|---|
| K | DM-1701, MD-UV380, DM-32UV | keypad, channel knob or encoder, 2 side keys | color |
| M | GD-77 | keypad, no knob/encoder, 2 side keys | 128x64 mono |
| V | MD-9600 (mobile) | mic keypad + mic function keys, front encoder | color |
| F | few-key radios | Up/Down/Select/Back, knob, PTT, no keypad | any |
Counting rules
- One press = one short or long key press, or one knob/encoder detent. PTT counts as a press.
- "+n" means "plus n navigation presses that depend on list position". Budgets assume the target is in the first 5 items or found by typing.
- Text typing counts each key press (T9 predictive: one press per letter).
- Budget = the target maximum (P1). A flow that needs more is a design bug.
Caller actions (opened by CONTEXT on Home)
Numbered, so a digit picks directly:
- Talk to (their TG, or them privately if the call was private)
- Private call
- Message
- Radio check
- Call alert
- Position (request or show)
- Save as contact
- Speak status
- Save to channel (shown only when the channel has temporary changes)
1. Change channel
- K: turn the channel knob (on radios with an encoder,
CAP_ENCODER, one detent per channel). OrNAV_UP/NAV_DOWN. - M, V:
NAV_UP/NAV_DOWN(V: or front encoder). - By number or name (all keypad classes): type digits or T9 letters on Home, Find shows matches,
SELECT. - Feedback: Home redraws the channel name within 50 ms; voice prompt says "Channel 4, County fire".
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Next channel | 1 | 1 | 1 | 1 | 1 |
| Channel 12 by number | 3 (1,2,SELECT) |
3 | 3 | 1+n | 3 |
2. Change zone
SELECT(Hub).4(Zones). The zone list opens with the current zone focused.NAV_UP/NAV_DOWNto the zone (or type its first letters).SELECT: the radio switches to that zone (on the knob's channel, or channel 1 on encoder radios) and returns to Home.CONTEXTon a zone instead opens its channel list to pick a different channel.
Shortcut: type the zone name on Home (Find lists zones too). Assignable side-key function "Zone picker" makes it 1 + n + 1.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Zone 2 positions away | 5 (SELECT,4,↓,↓,SELECT) |
5 | 5 | 5 | 5 |
3. Switch talkgroup: this transmission only, or permanently
One-shot (this transmission and its replies):
TALK_TARGET: picker opens. Order: Channel default, Reply to last heard, the channel's listen list, recent talkgroups, speed dials, "Type a number".NAV_DOWNto TG 91 (or type9,1).PTT: transmits to TG 91. Home shows "PTT → TG 91 (reply 10 s)" and reverts to the channel default after the reply window.
Temporary (until channel change): step 3 is SELECT instead of PTT. Home shows "Temporary TG 91 · Back to revert".
Permanent: step 3 is long SELECT. Banner "TG 91 is now the default for County DMR". Revert is done the same way.
Without the side key: QUICK, 8 opens the same picker.
TG not in the codeplug: on Home type 3,1,0,0; Find's first result is "Talk to TG 3100"; PTT (one-shot) or SELECT (temporary).
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| One-shot, TG in list (2nd item) | 3 | 3 | 3 | 4 (SELECT long → quick, 8… via list) |
3 |
| One-shot, typed TG 3100 | 5 (3100,PTT) |
5 | 5 | n/a (picker list only) | 5 |
| Permanent | 3 | 3 | 3 | 4 | 4 |
4. Call back the last station heard
During the reply window (default 10 s): just PTT. Home already shows "Reply → TG 91" or "Reply → K1ABC (private)".
After the window:
CONTEXT(#): caller actions for the last heard.1(Talk to): sets their TG (or them privately) as the temporary talk target; orPTTdirectly with item 1 focused.
Older station: SELECT, 3 opens Recent, NAV_DOWN to the station, PTT. (Long CONTEXT was Recent until #18 gave it the talk target picker.)
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Within reply window | 1 | 1 | 1 | 1 | 1 |
| After window | 2 (#,PTT) |
2 | 2 | 3 (Hub item 0, PTT) |
2 |
| 3rd station in Recent | 5 (OK,3,↓,↓,PTT) |
5 | 5 | 5 | 5 |
5. Private call a contact by name or ID
By name:
- On Home type T9 letters (
5,6,3for "Joe"). Find lists Joe Smith K1ABC first. CONTEXT: contact actions.2(Private call) or simplyPTTwith "Private call" focused.
Shortcut: in Find, focus the contact and press PTT: talk target choice for a person is private call, for a TG group call.
By ID: type the ID (3,1,0,1,2,3,4); Find shows "Private call 3101234" (name from the ID database if present) and "Talk to TG 3101234"; focus the private call line and PTT.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| By name (3 letters) | 4 (3 letters, PTT) |
4 | 4 | 2+n (Contacts list) | 4 |
| By 7-digit ID | 9 (7 digits, ↓, PTT) |
9 | 9 | n/a | 9 (digits dominate) |
6. Send a text message
- Pick the recipient:
CONTEXT(last caller) or Find by name, thenCONTEXT. 3(Message): the composer opens with Canned messages listed first ("OK", "On my way", "Call me", "QSY TG 91", user-defined), then "Write…".- Canned:
NAV_DOWNto it,SELECT= Send. Written:NAV_DOWNto "Write…",SELECT, type (T9),SELECT= Send. - Status strip shows "Sending…", then "Delivered" (if confirmed data) or "Sent, no confirmation" with what to do on failure ("No answer from K1ABC. Retry with Select, or Back to keep in Drafts").
Long BACK from the composer keeps the text as a draft (P4).
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Canned reply to last caller | 4 (#,3,↓,SELECT) |
4 | 4 | 5 | 4 |
| Canned to contact by name | 6 (3 letters, #,3,SELECT) |
6 | 6 (driving: canned only) | 3+n | 6 |
| Written, 10 letters | 15 | 15 | locked while driving | n/a | - |
7. Read a new message
Banner is up (8 s): CONTEXT opens it. Banner gone: the status strip shows an envelope with the count; SELECT, 2 opens Messages with the newest unread focused; SELECT opens it. In the message: CONTEXT = Reply (canned first), Call, Delete (with Undo), Save sender.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| While banner visible | 1 | 1 | 1 | 1 (SELECT while banner) |
1 |
| Later | 3 | 3 | 3 | 3+n | 3 |
8. Radio check
- Pick the target (last caller:
CONTEXT; contact: Find,CONTEXT). 4(Radio check). Status strip "Checking K1ABC…"; tone and banner "K1ABC answered (0.8 s)" or "No answer from K1ABC after 3 tries. They may be off, out of range, or on another channel."
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Last caller | 2 | 2 | 2 | 3 | 2 |
| Contact by name | 5 | 5 | 5 | 3+n | 5 |
9. Adjust volume, squelch and power
- Volume: the volume knob (analog on the reference radios). If the board reports the volume position, Home shows a volume bar for 1 s. No presses in firmware.
- Squelch (FM):
QUICK,2,NAV_UP/NAV_DOWN(live: hear it change),QUICKorBACKto close. Temporary; longSELECTsaves. - Power:
QUICK,1cycles levels (Low, Mid, High; each press advances, voice "Power high").BACKcloses.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Power one step | 3 (*,1,BACK) |
3 | 3 | 4 | 3 |
| Squelch 2 steps | 5 | 5 | 5 | 6 | 5 |
10. Enable privacy
DMR channel: QUICK, 6 toggles Privacy. If the channel or contact has no key: the tile says "No key for this channel. Add one in Settings > Privacy or in qdmr" and stays off. Home shows a privacy icon and the talk target chip "Private" (blue + icon, P5). Making it permanent: long SELECT on the tile.
Per-contact key: privacy follows the talk target automatically when the contact has a key; Home shows the icon whenever the next transmission will be encrypted.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Toggle privacy | 3 | 3 | 3 | 4 | 3 |
11. Scan
Start: Tools > Scan (SELECT, 6, 1), or a side key set to Scan. Quick tile 7 and a long TALK_TARGET are dual watch instead (dual-watch.md); if it is running, the scan stops it, staying on the selected channel. Home shows "Scanning: Zone Local" in the status strip and the channel name updating; when a channel stops the scan, Activity shows it.
While scanning (Home keys): PTT talks on the channel that last stopped (or the start channel if none, setting); NAV_UP/NAV_DOWN skip ahead; CONTEXT on a stopped channel gives "Skip channel for now" (nuisance delete), "Stay here" (stop scan on this channel), "Always skip" (edit scan list, permanent). BACK stops scanning and returns to the start channel.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Start | 3 | 3 | 3 | 3 | 3 |
| Nuisance skip | 2 (#,1) |
2 | 2 | 3 | 2 |
| Stop | 1 | 1 | 1 | 1 | 1 |
11b. Dual watch
Two channels, A and B (any channel of any zone, or the VFO); PTT talks on the selected one. The behavior, screens and per-radio keys are in dual-watch.md.
Start: QUICK, 7 (tile 7, Dual watch; long TALK_TARGET does the same). The first time the B picker opens: a channel number, then SELECT. For a B in another zone or the VFO: UP to the Zone row, SELECT, pick the zone (or the VFO), SELECT, then the channel. Later starts use the last B (kept across power off) and take two presses. QUICK, 7 again stops it.
While it runs (Home keys): PTT talks on the selected channel and the watch goes on; CONTEXT, 1 talks on the other channel (an A/B side key or NAV_LEFT/NAV_RIGHT: one press); NAV_UP/NAV_DOWN and the knob move the selected channel; CONTEXT also changes A or B and shows the last caller. With Settings > Talk > Dual watch talk back on, a call that ends on the other channel selects it for 10 s so PTT answers there; CONTEXT, 1 goes back. BACK stops, staying on the selected channel.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Start with the last B | 2 | 2 | 2 | 2 | 2 |
| Start, B from this zone by number | 4 | 4 | 4 | 4 | 4 |
| Start, B on the VFO | 6 | 6 | 6 | 6 | 6 |
| Start, B in another zone | 7 | 7 | 7 | 7 | 7 |
| Talk on B | 2 (#,1; 1 with an A/B key) |
2 | 2 | 2 | 2 |
| Stop | 1 (BACK) |
1 | 1 | 1 | 1 |
| Talk back on (Settings > Talk) | 10 | 10 | 10 | 10 | 10 |
The budgets are the ones tests/host/uiFlowTest.c checks ("11 dual watch ..."). Zone scan starts in 3 (Tools > Scan: SELECT, 6, 1).
12. Enter a VFO frequency
Enter VFO: SELECT, 4, VFO is the first row in Zones: SELECT. (Or type "VFO" in Find.) Home shows the frequency large.
On Home in VFO, digits enter a frequency directly: 4,4,6,0,0,0 is 446.000 MHz (the decimal point is implied after the band's MHz digits; * inserts it explicitly). Preview shows "446.000 MHz" as you type, out-of-band digits are refused as you type with a hint ("UHF 400-480"). SELECT tunes, and so does CONTEXT while digits are typed. NAV_UP/NAV_DOWN step by the step size (Settings › Talk › VFO step; Auto follows the width). Mode and tone are quick tiles 4 and 3. "Save as channel" is in CONTEXT.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Into VFO | 3 | 3 | 3 | 3 | 3 |
| 446.000 in VFO | 7 (6 digits,SELECT) |
7 | 7 | n/a (step with encoder) | 7 |
13. Lock and unlock keys
Lock: long QUICK (*). Banner "Keys locked. Hold * to unlock." PTT, monitor, volume and emergency stay active (configurable). Any other press shows the hint with the invalid tone. Unlock: long * again.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Lock / unlock | 1 | 1 | 1 | 1 (Lock on an assignable key; few-key boards ship with one) | 1 |
14. Check GPS
Status strip shows a GPS icon: hollow = searching, solid = fix, crossed = off. Details: SELECT, 6, 2 (Tools > Position): fix state, satellites, lat/long, grid locator, altitude, last sent report and next one. CONTEXT there: Send position now, Turn GPS off. Position of another station: caller actions 6.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| See fix | 0 (strip) / 3 | 0 / 3 | 0 / 3 | 0 / 2+n | 3 |
15. Enter hotspot or USB network mode
- Connect USB.
SELECT,6(Tools),3(Hotspot) or4(USB network).SELECT= Start. Screen shows link state (host connected, mode, frequency, TS/CC, traffic and the current talker).
Option (Connections): "Start hotspot when a hotspot host connects", default off. When on, a banner says "Hotspot started by host. OK stops it."
While active: BACK goes Home; the hotspot keeps running and Home's status strip shows "HOTSPOT" with the traffic. Stop: SELECT = Stop on the hotspot screen or CONTEXT on Home > "Stop hotspot". PTT on the radio while in hotspot mode explains "Hotspot mode: the radio relays network traffic. Stop hotspot to talk locally."
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Start | 4 | 4 | 4 | 3+n | 4 |
| Stop from Home | 2 | 2 | 2 | 3 | 2 |
16. See who is talking
No presses: on RX the Activity region shows, in order of what's known: name (contact, else ID database), callsign, talker alias (as it arrives), DMR ID, TG and TS, RSSI, distance and bearing if a position is known. On 128x64, the two most important lines (name or callsign, TG) are shown and CONTEXT > Speak status or the RX detail view (CONTEXT, then SELECT on the header) shows the rest. Outside Home, the status strip shows "RX TG 91 · K1ABC".
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Name and TG | 0 | 0 | 0 | 0 | 0 |
| Full details on small screen | 2 | 2 | 2 | 2 | 2 |
17. Emergency (if enabled in the codeplug)
Hold EMERGENCY (top/orange key) 1.5 s. A rising tone during the hold, then "EMERGENCY" full screen in red with a word label, the radio sends the alarm and (per codeplug) opens the mic. Cancel: hold the same key 1.5 s. If emergency is not configured, the hold gives a hint "Emergency is not set up on this radio" instead of nothing. On radios without a top key it is an assignable long press only, never on PTT or a key used for typing.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Start / cancel | 1 (hold) | 1 | 1 (mic key) | 1 if a key is free | 1 |
18. Copy a channel to the VFO, switch the VFO's mode
On a channel: QUICK, 4 ("To VFO"). What is in effect on the channel now (frequencies and offset, mode, bandwidth, power, tones, color code, timeslot and talk target, temporary changes included) becomes the VFO's own settings, the VFO opens on Home and the toast says "Copied to VFO". The channel is unchanged; the VFO's values are kept like its other settings (no dot). A channel the VFO can't hold (a mode this build's VFO lacks, a frequency outside the radio's bands) is refused with a toast and nothing changes. The same is on a key: Settings > Keys > Copy to VFO, or the VFO/MR key's long press where a radio has one. In the VFO "Already in VFO". The full rules are in dmr-voice.md 2.2.
In the VFO: QUICK, 4 ("Mode") switches the VFO FM / DMR on its frequency, kept (no dot): FM → DMR uses the VFO's color code (1 at first), slot and talk target (talkgroup 9 at first); change them with quick tiles 2, 3 and 8. Home's mode chip changes color and word. A channel has no temporary mode change.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Copy to VFO | 2 | 2 | 2 | 3 | 2 |
19. Monitor and hear all
MONITOR. FM: hold it, the squelch opens. DMR: press it, digital monitor (hear all: all TGs on this frequency and timeslot) goes on; press again for off (#19).- Latched from quick settings:
QUICK,5. Home shows "DMon" (DMR) or "Mon" (FM) until turned off or the channel changes. - While hear all is on, every call shows its TG; the reply window lets you answer on it with
PTT.
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Momentary | 1 | 1 | 1 | 2 (quick tile) | 1 |
| Latched | 2 | 2 | 2 | 3 | 2 |
20. Change a channel's timeslot or color code on the fly
- Timeslot:
QUICK,2(toggles 1/2),BACK. - Color code:
QUICK,3, type the code (7) orNAV_UP/NAV_DOWN,SELECT. - Both temporary with a dot on Home; long
SELECTin quick settings orCONTEXT> 9 on Home saves to the channel. - Hearing traffic on the other timeslot or CC with hear all on shows a hint "Heard on TS2 CC3. Press # to switch" (
CONTEXT> "Use TS2 CC3").
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Timeslot | 3 | 3 | 3 | 4 | 3 |
| Color code 7 | 4 | 4 | 4 | 5+n | 4 |
| Save both to channel | +1 (long SELECT) |
+1 | +1 | +2 | +1 |
21. Edit a channel
SELECT,5: Channels opens on the channel in use.NAV_UP/NAV_DOWNor typing finds another one.SELECT: the channel's settings.NAV_DOWNto the row. Two-value rows (timeslot, mode, bandwidth) flip onSELECT; rows with more values (power, PL / DCS tone, color code, time-out) open a spinner: turn the knob (orNAV_UP/NAV_DOWN) to the value,SELECTkeeps it; frequencies and the ID take digits; the name opens text entry; the TX contact opens a picker.- Long
SELECTsaves. Changed rows show a dot until then;BACKwith changes asks "Discard the changes to this channel?".
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Timeslot of the channel in use, saved | 5+n | 5+n | 5+n | 5+n | 6+n |
| TX contact by name ("WCRA": 9 2 7 2) | 9+n | 9+n | 9+n | 7+n+m | 10+n |
Changing the channel in use for now is shorter from quick settings (flow 20). This flow is for saved changes, other channels and rows quick settings don't have.
22. New channel from current settings
SELECT,5,NAV_UPto the first row, "New from current",SELECT: an unsaved copy of the channel in use (with its temporary changes) or of the VFO, at the lowest free number.- Change what differs (flow 21, step 3), for example the name and the TX contact.
- Long
SELECTsaves it. Add it to a zone with qdmr for now (issue #44 adds it to the current zone).
| K | M | V | F | Budget | |
|---|---|---|---|---|---|
| Copy, saved unchanged | 5+n | 5+n | 5+n | 5+n | 6+n |
Summary
| Task | K | Budget met? |
|---|---|---|
| Change channel | 1 | yes |
| Change zone | 5 | yes |
| TG one-shot / permanent | 3 / 3 | yes |
| Reply to last heard | 1-2 | yes |
| Private call by name | 4 | yes |
| Canned text reply | 4 | yes |
| Read new message | 1-3 | yes |
| Radio check last caller | 2 | yes |
| Power / squelch | 3 / 5 | yes |
| Privacy | 3 | yes |
| Scan start / stop | 3 / 1 | yes |
| Dual watch start (last B / pick B) / stop | 2 / 4 / 1 | yes |
| Dual watch, talk on B | 2 | yes |
| VFO 446.000 | 7 | yes |
| Lock | 1 | yes |
| GPS | 0-3 | yes |
| Hotspot start / stop | 4 / 2 | yes |
| Who is talking | 0 | yes |
| Emergency | 1 hold | yes |
| Copy to VFO / VFO mode | 2 | yes |
| Monitor / hear all | 1 / 2 | yes |
| Edit a channel (timeslot, saved) | 5+n | yes |
| New channel from current | 5+n | yes |
| TS / CC | 3 / 4 | yes |
Every task except typed entries (IDs, frequencies, free text) completes in six presses or fewer, inside the NHTSA six-input guideline.