6.7 KiB
Talker Alias (DMR)
DMR Talker Alias (ETSI TS 102 361-2, 2016) carries a short alphanumeric label in the voice stream. On the Homebrew Protocol (HBP) it appears as separate DMRA UDP packets (15 bytes each, up to four per transmission).
This is not the same as subscriber ID aliases in subscriber_ids.json used for logs and the monitor UI. Talker Alias is embedded signaling intended for radio displays (OLED, Hytera/MD380tools, etc.).
See also: Configuration.
How ADN handles Talker Alias
When enabled on a MASTER system, the server can:
| Mode | Behaviour |
|---|---|
both (default) |
Prefer the source's own TA, fall back to inject. The server briefly waits (≈2 s after VHEAD) for the source's TA, decoded from either a valid MMDVM DMRA buffer or the embedded LC inside voice (FLCO 4–7). If found, it is passed through unchanged. If the source sent no TA within that window (e.g. a radio that does not support Talker Alias), ADN injects the configured template (embedded LC + DMRA). When the source is an OpenBridge system (which never carries TA), there is nothing to wait for, so ADN injects immediately at VHEAD. |
passthrough |
Relay the source's TA only (buffered DMRA and the source embedded LC, both untouched). Never inject the template. |
inject |
Always build TA from the configured template and alias data, overwriting the embedded LC and sending DMRA packets. |
On bridge forward at voice header (VHEAD), when TALKER_ALIAS_SEND_DMRA is true, the server may send up to four DMRA packets to each HBP target (MASTER peers or PEER upstream) once per stream, then forwards DMRD as usual. With the default (false), only embedded LC is used — closer to legacy ADN masters that often show no DMRA on the wire.
MMDVMHost / DMRGateway (Pi-Star, WPSD): stock MMDVMHost does not consume standalone downlink DMRA UDP; it decodes Talker Alias from embedded LC inside DMRD voice (FLCO 4–7).
The embedded LC of voice bursts B–E (dtype 1–4) is always rewritten with the destination group LC (re-encoded for the forwarded TGID, as legacy bridge.py does) — this is required for the receiving MMDVM to accept the voice; a stale embedded LC from the source TG causes packet loss. The Talker Alias is then overlaid on alternate superframes:
injectand thebothno-source-TA fallback use the configured template.passthroughandbothwith a source TA re-encode the source's own Talker Alias (decoded from itsDMRA/embedded-voice blocks) and overlay that, so the radio's alias reaches the far side while the group LC stays correct for the new TG.
On the same MASTER, when REPEAT copies group voice to other logged-in hotspots, the server also sends those four DMRA packets on VHEAD (excluding the transmitting peer). Bridge forwarding to the same system shares the same once-per-stream dedupe, so TA is not sent twice.
Not supported: OpenBridge legs (no standard DMRA on OBP/DMRE wire). Legacy ADN never implemented TA beyond debug logging.
Configuration
Under GLOBAL (optional per-system override with the same keys):
GLOBAL:
TALKER_ALIAS: false
TALKER_ALIAS_MODE: both
TALKER_ALIAS_FORMAT: "TA {callsign} {fname}"
TALKER_ALIAS_TEXT_FORMAT: "utf8,iso8"
TALKER_ALIAS_SEND_DMRA: false
| Key | Meaning |
|---|---|
| TALKER_ALIAS | Master switch (false by default). |
| TALKER_ALIAS_MODE | both, passthrough, or inject. Default both if omitted. |
| TALKER_ALIAS_FORMAT | Python format string; fields: {callsign}, {fname}, {surname}, {id}. |
| TALKER_ALIAS_TEXT_FORMAT | TA payload encoding: utf8 (Motorola / MMDVMHost default), iso8 (ISO-8859-1, many Hytera models), or 7bit (oldest radios). Comma-separated list (e.g. utf8,iso8) emits both encodings back-to-back in embedded LC so each vendor can pick the format it displays; standalone DMRA UDP uses the first format only. Default utf8. |
| TALKER_ALIAS_SEND_DMRA | Send standalone HBP DMRA UDP on VHEAD (false by default). Radios / MMDVMHost use embedded LC in DMRD; leaving this off matches typical legacy wire (no DMRA toward the peer). Set true only if a client needs the UDP packets. |
Maximum string length is 29 characters (ETSI / MMDVMHost). This limit is fixed in code and is not configurable, to avoid incompatible payloads on radios and hotspots.
Subscriber JSON may include fname, surname, or a dedicated talker_alias field per record.
HBP DMRA wire format
| Offset | Field |
|---|---|
| 0–3 | DMRA |
| 4–6 | Source DMR ID (3 bytes, big-endian) |
| 7 | Block index 0–3 |
| 8–14 | 7 payload bytes |
Encoding follows TALKER_ALIAS_TEXT_FORMAT (ETSI formats 0/1/2: 7-bit, ISO-8859-1, UTF-8), matching MMDVMHost DMRTA.cpp when set to utf8.
Embedded TA in DMRD voice alternates superframes: one cycle (bursts B–E) with the normal group embedded LC, the next with a TA block (FLCO 4–7), repeating until the stream ends.
Pi-Star / MMDVM operator settings
For TA to reach the local RF radio:
| Setting | Recommendation |
|---|---|
| DMR DumpTAData | 1 (on, Pi-Star default): write embedded Talker Alias to the MMDVM log — required for Pi-Star dashboard / log-based tools to show TA; with 0 nothing appears there. This does not block TA on RF. |
| DMR EmbeddedLCOnly | off (default). If on, Talker Alias from the network is disabled. |
Pi-Star’s web dashboard does not show TA; use the radio OLED, MD380tools, or tools such as pistar-lastqso.
Radio compatibility: Hytera PD6/7/9 and MD380tools firmware generally work. Many Motorola radios do not support TA; some older firmware may show audio issues when TA is present.
The adn-monitor proxy already forwards DMRA to the master unchanged.
Limitations and follow-up work
| Topic | Status |
|---|---|
| TA on OpenBridge targets | Not available (no DMRA on standard OBP wire). |
| Monitor dashboard live TA column | Separate work (monitor uses DB aliases, not live DMRA). |
Unrelated RuntimeError in bridge iteration |
Tracked as a separate fix. |
References
- ETSI TS 102 361-2 (Talker Alias format)
- MMDVMHost
DMRTA.cpp/DMRNetwork.cpp(writeTalkerAlias)