Field Guide · term

Also known as: MFID, manufacturer TSBK, vendor opcode

P25 vendor TSBK opcodes are manufacturer-specific control-channel messages that live in the same 6-bit opcode space as the standard OSP opcodes but are selected by a non-standard MFID (manufacturer ID) byte.1 The same opcode value decodes differently depending on the MFID: under MFID 0x90 (Motorola) opcode 0x02 is a patch-group voice grant, while under the standard MFID it is a plain group-voice update. The two vendors GopherTrunk decodes are Motorola (0x90) and L3Harris (0xA4); both are common on public-safety systems built on Motorola or Harris infrastructure.

MFID byte 0x00/0x01 standard OSP 0x90 Motorola patch / regroup 0xA4 Harris dynamic regroup the same 6-bit opcode is read against the branch the MFID selects
The MFID byte routes a block into the standard or a vendor opcode table; GopherTrunk dispatches on MFID before opcode, so a vendor block is never misread as a standard one.

MFID dispatch

Every TSBK begins with an MFID byte that GopherTrunk parses before the opcode. IsVendorMFID reports whether it is a recognised vendor (0x90 or 0xA4); the vendor accessors (AsMotorolaPatchGroup, AsHarrisRegroup, …) each re-check the MFID and opcode before decoding, so a standard block can never fall through a vendor path. This keeps the vendor layouts — which are the project’s working model rather than published spec — confined to one file, internal/radio/p25/phase1/tsbk_vendor.go, where a correction stays local.

Notable vendor opcodes

MFID Opcode Name Carries
0x90 0x00 Motorola Patch Group Add Super-group address + up to 3 member talkgroups
0x90 0x01 Motorola Patch Group Delete Super-group address to cancel
0x90 0x02 Motorola Patch Group Channel Grant Patch (super-group) voice grant; grant-shaped payload
0x90 0x03 Motorola Patch Group Grant Update Two (channel, super-group) activity pairs
0x90 0x05 Motorola Traffic Channel ID Raw payload only — not field-decoded
0x90 0x09 Motorola System Loading Raw payload only — not field-decoded
0x90/0xA4 0x15 Vendor Talker Alias One fragment of a radio’s display name
0xA4 0x00 Harris Dynamic Regroup Regroup talkgroup + target unit

The Motorola patch opcodes carry a multigroup / patch super-group — several member talkgroups temporarily merged so they share one call. The patch-grant opcodes reuse the standard group-voice grant and update layouts exactly, differing only in that the group address is a super-group. The talker-alias opcode 0x15 is MFID-agnostic, carrying one block of a radio’s human-readable name to be reassembled across several TSBKs.

Provenance

TIA-102 does not publish the vendor extensions, so these layouts are reverse-engineered against the two mature open decoders, OP25 and SDRTrunk, and cross-checked against field captures where a ground-truth event is known (for example the Motorola patch-grant layout was confirmed against MMR/CBD captures in issue #376). Two Motorola opcodes — Traffic Channel ID (0x05) and System Loading (0x09) — are emitted continuously but have no trustworthy field layout in either reference decoder, so GopherTrunk names them for the probe log and captures the raw bytes but decodes no fields. GopherTrunk mirrors SDRTrunk’s per-manufacturer taxonomy (standard / Motorola / Harris / unknown) so an unrecognised vendor block is reported with its MFID rather than silently misdecoded.

Sources

  1. Project 25 — Wikipedia, on the P25 standard. Vendor opcode layouts are reverse-engineered against OP25 and SDRTrunk and are the project’s working model. 

See also