Field Guide · term

Also known as: LCW, link control word, LCO, link control opcode

The P25 Link Control Word (LCW) is the 72-bit message carried in an LDU1 voice frame — and, in terminator form, a TDULC — that says who is talking on the voice channel and in what mode.1 Its first octet is the Link Control Opcode (LCO, also written LCF for Link Control Format), which names the word’s layout; the most common, Group Voice Channel User (0x00), carries the destination talkgroup and the source radio ID. The 72-bit word is protected by an inner Hamming(10,6,3) layer under an outer RS(24,12,13) code.

LCF MFID svc rsvd Talkgroup 16 Source ID 24 octet 0 opcode selects the layout · LCO 0x00 = Group Voice Channel User (TG + source)
For the Group Voice Channel User opcode, the nine octets are LCF, manufacturer ID, service options, a reserved octet, a 16-bit talkgroup, and a 24-bit source ID; other opcodes reinterpret the same nine octets.

How it works

The LCO in octet 0 is the discriminator: it tells the parser how to read the remaining eight octets. GopherTrunk models the Group Voice Channel User layout directly and recognises the standard talker-alias opcodes that carry a radio’s display name across an active call as a header-plus-fragments sequence:

LCO Name Content
0x00 Group Voice Channel User MFID, service options, talkgroup (octets 4–5), source ID (octets 6–8)
0x15 Talker Alias — Header Character set + total alias length
0x16 Talker Alias — Block 1 First alias-data fragment
0x17 Talker Alias — Block 2 Second alias-data fragment

Many more LCOs are defined in TIA-102.AABF (unit-to-unit users, various broadcast and status words); GopherTrunk decodes the ones above and exposes the raw nine octets for any other opcode a caller wants to interpret. Whatever the opcode, the FEC is identical: the 72 content bits are the first 12 six-bit symbols of an RS(24,12,13) codeword, each symbol wrapped in a Hamming(10,6,3) inner codeword. On receive, the inner Hamming pass fixes single-bit hits, then the outer RS pass corrects up to six residual symbol errors before the octets are read.

In practice

The outer RS layer is not optional decoration. Residual bit errors that survive the single-error Hamming layer will corrupt the talkgroup or source under marginal SNR, and because the voice composer gates a call on the on-air talkgroup matching the granted one, a corrupted LCW ends the call early and fragments one transmission into many tiny recordings. Running RS(24,12,13) after the Hamming layer is what holds a marginal call together. The octet layout is equally unforgiving: an earlier GopherTrunk model placed the talkgroup at octets 2–3 and the source at 4–6, which made the talkgroup decode to the constant service-options byte and the real talkgroup land inside the misread source — the same early-termination symptom, from a one-octet shift.

Relevance to SDR

internal/radio/p25/phase1/link_control.go implements ParseLinkControl (the LCO-0 struct with talkgroup and source), ParseLinkControlContent (raw octets for other opcodes), and AssembleLinkControl (the symmetric encoder that computes RS parity so synthetic frames carry valid FEC). The same 72-bit word is reached two ways — from LDU1 via ExtractLCESBlocks and from a TDULC terminator — so the LCW is the single most important metadata unit on a P25 voice channel: it is what turns decoded audio into a labelled call with a talkgroup and a source radio.

Sources

  1. Project 25 — Wikipedia, on the P25 standard and its Phase 1 link-control signalling. 

See also