Also known as: CCW, EDACS CCW, control channel word
The EDACS Control Channel Word (CCW) is the 40-bit signalling block that rides every EDACS control-channel slot after sync detection.1 EDACS — the GE / Ericsson trunking system — sends a steady stream of these words on its outbound control channel, each announcing one piece of system business: a voice or data channel grant, a system-identity broadcast, an adjacent-site pointer, or an idle heartbeat. Every CCW is prefaced by a 24-bit sync sequence and protected by a BCH(40,28,2) code so it survives a noisy channel.2
Field layout
The CCW packs five fields MSB-first across its 40 bits:
| Bits | Width | Field | Meaning |
|---|---|---|---|
| 39..36 | 4 | Command | Operation type — grant, system, idle, … |
| 35..32 | 4 | Status | Per-command flag bits (bit 0 encryption, bit 1 emergency) |
| 31..16 | 16 | Address | Talkgroup, radio ID, or site ID (per Command) |
| 15..11 | 5 | LCN | Logical channel number into the operator band plan |
| 10..0 | 11 | Aux | Command-specific auxiliary parameter |
The 4-bit Command field is the opcode. GopherTrunk models the subset most useful for trunk-following:
| Command | Value | Meaning |
|---|---|---|
| Idle | 0x0 | Control-channel idle / heartbeat |
| GroupVoiceGrant | 0x1 | Group voice channel grant |
| ProVoiceGrant | 0x2 | EDACS ProVoice (digital) grant |
| IndividualCall | 0x3 | Unit-to-unit call |
| DataGrant | 0x4 | Data channel grant |
| SystemID | 0x5 | System-identity broadcast |
| AdjacentSite | 0x6 | Neighbour-site announcement |
| Emergency | 0x7 | Emergency call |
| Affiliation | 0x8 | Unit affiliation |
| Encryption | 0x9 | Encryption signalling |
| Reserved | 0xF | Reserved |
A voice grant carries the talkgroup in the Address field and an LCN that indexes an operator-supplied band plan; the receiving radio retunes to the physical channel that LCN names. The Status nibble layers flags onto a grant — encryption in bit 0, emergency in bit 1.
Forward error correction
Under GopherTrunk’s BCHOn mode the 40 on-wire bits are not raw field bits but a
BCH(40,28,2) codeword: 28 information bits in the high positions (39..12) and a 12-bit
parity field in the low positions (11..0). The code is a shortened form of the
BCH(63,51,2) mother code over GF(2^6) with primitive polynomial x^6 + x + 1. Its generator
is the product of the minimal polynomials of α and α^3:
- m₁(x) = x^6 + x + 1
- m₃(x) = x^6 + x^4 + x^2 + x + 1
- g(x) = m₁(x) · m₃(x) = x^12 + x^10 + x^8 + x^5 + x^4 + x^3 + 1 = 0x1539
The code corrects up to t = 2 bit errors per codeword (designed minimum distance d = 5). GopherTrunk’s decoder computes the 12-bit syndrome, applies a single-bit correction from a per-position syndrome table, and — failing that — searches the 780 ordered position pairs for a matching double-bit error before re-deriving the fields. Per the canonical open reference (lwvmobile/edacs-fm), BCH is the only on-wire FEC on the Standard EDACS CCW; no outer interleaved or Reed-Solomon layer sits above it.
In practice
The 24-bit outbound sync is documented as 0x55D5AA across the public reference implementations GopherTrunk tracks; a sliding detector locks onto it (tolerating a mismatched bit or two) and the adapter then slices the 40-bit CCW that follows. Both the field-position and opcode assignments follow the most-cited public reference (lwvmobile/edacs-fm) rather than a paywalled EDACS specification, so they are best-effort — worth cross-checking against a fresh live capture before trusting an unusual Command or Status interpretation. Strict-mode operators reject any CCW whose Command falls outside the recognised set, since an unknown opcode is a strong signal of bit errors or a misaligned codeword.
Relevance to SDR
internal/radio/edacs/ccw.go holds the CCW packing (ParseCCW, CCWFromBits);
opcodes.go interprets the Command and Status fields into structured grants; and
internal/radio/framing/bch_edacs.go implements the BCH(40,28,2) encode/decode. Together
they let GopherTrunk follow an EDACS system: read the grant CCWs, map each LCN through the
band plan, and retune to the assigned voice channel in step with the fielded radios.
Sources
-
Enhanced Digital Access Communications System — Wikipedia, on the GE/Ericsson EDACS trunking system and its control channel. ↩
-
BCH code — Wikipedia, on the error-correcting code family that protects the CCW. ↩