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
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
-
Digital mobile radio — Wikipedia, on the DMR standard and its in-call embedded signalling. ↩
-
Forward error correction — Wikipedia, on the parity protection the RC information bits carry. ↩