SCNP25 supports two completely different ways of routing voice. Each channel in a codeplug is one or the other, controlled by its conventional flag.
The choice changes everything about how a transmission is set up, who hears it, and what the control channel has to do.
| Conventional | Trunked | |
|---|---|---|
conventional flag |
true |
false |
| Routing key | Frequency | Talkgroup ID |
| Control channel involvement | None | Required for affiliation and channel grants |
| Affiliation required? | No | Yes |
| Voice frequency | Fixed by the channel | Allocated per call from a system-wide pool |
| Who hears the call | Anyone tuned to the same frequency / NAC | Anyone affiliated to the same talkgroup |
| Emergency declaration | Disabled (falls back to a tone-out) | Allowed, raised on the affiliated talkgroup |
| Per-call collision tracking | A UUID per transmission (currentConventionalKey) |
Tracked by control channel as voice channel state |
A conventional channel transmits and receives on a fixed frequency. There is no concept of affiliation — every radio tuned to the same frequency and NAC will hear the call. PTT triggers the client to broadcast a radiolink:conventionalTx event directly to the system, and a fresh per-transmission UUID is generated so the receiving side can detect when the call ends.
Conventional repeaters can be configured to listen on one frequency and rebroadcast on another; if the talker is in range of a repeater whose uplink matches the channel's frequency, the radio also fires radiolink:repeaterTx so the repeater's coverage area receives the call.
Because conventional channels bypass the control channel:
A trunked channel routes voice through the control channel. The user selects a channel whose talkgroupID is the routing target; the radio affiliates to that talkgroup, and on PTT requests a voice channel from the control channel. The control channel picks a free voice frequency (or a hangtime channel for that talkgroup) and announces it to every radio affiliated to the talkgroup.
This means a trunked call: