Field Guide · term

Also known as: FLC, Full Link Control, FLCO

The DMR Full Link Control (FLC) is the 72-bit PDU that says who is talking to whom on a DMR voice call.1 It appears in three places: the Voice LC Header (Data Type 0x1) that opens a call, the Terminator with LC (0x2) that closes it, and — spread across four fragments — the embedded LC of a voice superframe. Its leading 6 bits are the FLCO (Full Link Control Opcode) naming the block type; the remaining octets carry a feature-set ID, service options, and the 24-bit destination and source addresses that identify the talkgroup and radio.

PF·FLCO oct 0 FID oct 1 svc opt oct 2 destination · 24-bit oct 3–5 source · 24-bit oct 6–8 72 info bits + 24-bit RS(12,9) parity trailer (12 octets total)
Nine FLC octets: the FLCO opcode, feature-set ID, service options, and 24-bit destination and source addresses, followed on the wire by an RS(12,9) parity trailer.

The FLCO opcode table

GopherTrunk parses the FLC in internal/radio/dmr/flc.go. Octet 0 holds a 1-bit protect flag (PF), a reserved bit, and the 6-bit FLCO; the common voice-call opcodes per ETSI TS 102 361-2 §7.1.1 Table 7.1 are:

FLCO Opcode Meaning
0x00 Group Voice Channel User group call — destination is a talkgroup
0x03 Unit-to-Unit Voice Channel User private call — destination is a subscriber
0x04 Talker Alias header first block of the alias text
0x08 GPS Info source location
0x30 Terminator end-of-transmission link control

Vendor extensions live behind a non-zero feature-set ID (FID — see vendor FID); the opcodes above are the manufacturer-independent set (FID 0). Octet 2, the service options, carries the emergency (bit 7) and encryption/privacy (bit 6) flags that FLC.AsGroupVoiceUser surfaces on a decoded group call.

Structure and FEC

The 9 FLC octets are the data portion of a 12-octet RS(12,9,4) Reed–Solomon frame; the trailing 3 octets are parity, XOR-masked with a context-specific seed. ParseFLC reads the leading 9 octets a BPTC(196,96) or embedded-LC decode reconstructs. In the current pass GopherTrunk relies on the BPTC / embedded-BPTC layer for error correction over the same bits and treats RS(12,9) verification as a separate, self-contained follow-up (dmr-rs-12-9), so ParseFLC decodes the FLC without failing it on the RS trailer.

Relevance to SDR

The FLC is where a DMR voice decode turns into a usable scanner event. From one recovered FLC, GopherTrunk learns the call type (group vs unit-to-unit from the FLCO), the talkgroup or destination subscriber, the source radio ID, and whether the traffic is encrypted or an emergency — everything a scanner needs to name and log the call. Because the same FLC arrives redundantly (the Voice LC Header, the embedded LC every superframe, and the Terminator), a receiver has repeated chances to recover it even if the opening header is lost mid-tune, which is what lets GopherTrunk label a call it joined late.

Sources

  1. Digital mobile radio — Wikipedia, on the DMR standard and its link-control signalling. 

See also