Field Guide · term

Also known as: RC, Reverse Channel, DMR reverse channel

The DMR Reverse Channel (RC) is in-call signalling carried in the same 32-bit embedded fragment a voice burst uses for link control — but as a single, self-contained word rather than a fragment of a longer Full LC.1 It is fast link feedback that rides inside an ongoing call, distinct from the CSBKs a trunking control channel carries. Of the 32 fragment bits, 11 are information and the remaining 21 are FEC parity protecting them.2

RC info · 11 bits FEC parity · 21 bits only when EMB LCSS == Single (single, non-LC fragment) all-zero field = ETSI null / idle → rejected
The 32-bit embedded fragment splits into 11 information bits and 21 parity bits; a fragment is treated as RC only when its EMB marks a single non-LC fragment and the field is non-null.

Carriers and framing

The RC rides one of two carriers, per ETSI TS 102 361-1 §6.2 / §9.1.4:

  • the 32-bit embedded fragment of an ordinary voice burst, when the framing EMB marks a single, non-LC fragment (LCSS == Single); or
  • a short MS-sourced RC burst framed by the dedicated MS-RC sync word (dmr.MSRC).

GopherTrunk decodes only the first — the embedded carrier a downlink receiver actually observes, since it is already pulling the embedded field out of every voice burst. The short MS-RC burst is a mobile uplink transmission a downlink scanner does not normally receive: its sync is detected by dmr.MSRC, but the burst itself is not present on the downlink, so no payload decode is attempted. DecodeReverseChannel (internal/radio/dmr/rc.go) reads the 32-bit fragment, rejects the all-zero “null embedded message” idle, and returns the 11-bit Info and 21-bit Parity. The caller must confirm the EMB’s LCSS == LCSSSingle before treating a fragment as RC; a voice superframe decodes the first RC it sees across bursts B–E.

Impl-gap: parity preserved, not applied

GopherTrunk preserves the 21 parity bits but does not yet use them to correct or validate the 11 information bits, and it leaves the per-opcode sub-field semantics of Info unparsed. The reason is honestly documented in rc.go: there is no real off-air RC capture and no open reference decoder (dsd-fme, pd0mz/go-dmr) that implements the (32,11) RC FEC to validate against. The integrity gate is therefore the caller’s EMB framing check (LCSS == Single) plus the null/idle rejection, mirroring the capture-pending posture already documented for the EMB’s own QR(16,7) and the MBC last-block CRC. A future off-air capture can promote the parity to a real FEC gate without changing any callers.

Relevance to SDR

For a scanner, the RC matters mostly as something to recognise and not mis-handle. A single-fragment embedded field is not part of a four-fragment Full LC, so a decoder that treated every fragment as LC would corrupt its reassembly; separating the RC path (gated on LCSS == Single) from the LC path keeps the Full LC reassembly clean and lets the null/idle case be dropped rather than parsed. HasRC / RC on the decoded superframe surface the 11-bit word when present, in-call signalling independent of the LC, ready to become a fully-validated channel once a capture exists to pin the FEC against.

Sources

  1. Digital mobile radio — Wikipedia, on the DMR standard and its in-call embedded signalling. 

  2. Forward error correction — Wikipedia, on the parity protection the RC information bits carry. 

See also