Also known as: OSP, outbound signalling packet, TSBK opcode
A P25 TSBK opcode is the 6-bit field that names the message type carried in a TSBK on the control channel.1 Every standard opcode is an OSP (Outbound Signalling Packet) — a message the fixed network equipment sends outbound to radios — enumerated in the TIA-102.AABC-D Table 7-1 registry. The opcode tells the decoder how to read the eight argument bytes that follow: a Group Voice Channel Grant carries a talkgroup and a channel number, while a Network Status Broadcast carries the WACN, system ID, and control-channel identity.
The standard OSP opcodes
The table below lists the opcodes GopherTrunk names in
internal/radio/p25/phase1/opcodes.go, with the canonical TIA mnemonic and what each
message carries. Hex values are the 6-bit opcode.
| Opcode | Mnemonic | Carries |
|---|---|---|
0x00 |
GRP_V_CH_GRANT | Group voice grant: service options, channel, talkgroup, source unit |
0x02 |
GRP_V_CH_GRANT_UPDT | Up to two active (channel, talkgroup) pairs |
0x03 |
GRP_V_CH_GRANT_UPDT_EXP | Explicit-channel group update (grant-shaped payload) |
0x04 |
UU_V_CH_GRANT | Unit-to-unit grant: channel, target unit, source unit |
0x05 |
UU_ANS_REQ | Answer request for a private call (no channel yet) |
0x08 |
TELE_INT_CH_GRANT | Telephone-interconnect grant + call timer |
0x14 |
SNDCP_DAT_CH_GRANT | Packet-data (SNDCP) channel grant |
0x1F |
CALL_ALRT | Call-alert page to a unit |
0x20 |
ACK_RSP_FNE | Acknowledge response from the network |
0x27 |
DENY_RSP | Service denied |
0x28 |
GRP_AFF_RSP | Group affiliation response |
0x2B |
LOC_REG_RSP | Location registration response (RFSS + site) |
0x2C |
U_REG_RSP | Unit registration response (system ID + WUID) |
0x2F |
U_DE_REG_ACK | Deregistration acknowledgement |
0x30 |
SYNC_BCST | System synchronisation broadcast |
0x33 |
IDEN_UP_TDMA | Band-plan slot, Phase 2 TDMA form |
0x34 |
IDEN_UP_VU | Band-plan slot, VHF/UHF form |
0x38 |
SYS_SRV_BCST | System-service capability broadcast |
0x39 |
SCCB | Secondary control-channel broadcast |
0x3A |
RFSS_STS_BCST | Camped RFSS + site identity |
0x3B |
NET_STS_BCST | WACN, system ID, control channel |
0x3C |
ADJ_STS_BCST | Adjacent (neighbour) site + its control channel |
0x3D |
IDEN_UP | Band-plan slot, 700/800/900 MHz form |
The grant opcodes drive a scanner’s trunk-following: a
channel grant points radios (and a monitor) at a voice
channel, and the Identifier Update opcodes
(0x3D/0x34/0x33) supply the base frequency and spacing needed to turn the grant’s
channel number into a tunable frequency.
Namespace and dispatch
The opcode alone is not enough to decode a block — the same 6-bit value means different
things under different manufacturers. The TSBK’s MFID (manufacturer ID) header byte selects
the namespace: MFID 0x00/0x01 is the standard OSP table above, while MFID 0x90
(Motorola) and 0xA4 (Harris) reinterpret the opcode against the
vendor table. GopherTrunk dispatches on MFID first,
then opcode, so a Motorola opcode 0x02 decodes as a patch-group grant rather than a
standard group-voice update.
Relevance to SDR
GopherTrunk’s Opcode type and its String() method render each block in spec terms
(GRP_V_CH_GRANT, NET_STS_BCST, …) so logs read the way the standard documents do;
unnamed opcodes fall back to OSP(0xNN). The trunking engine acts on the grant and update
opcodes to follow calls, folds the status-broadcast opcodes into a running picture of the
system’s identity and neighbours, and feeds the Identifier Update opcodes into the band
plan. Decoding this opcode set correctly is the core of following a P25 trunked system.
Sources
-
Project 25 — Wikipedia, on the P25 standard and its control-channel signalling. Opcode values follow TIA-102.AABC-D Table 7-1. ↩