Also known as: DSC, digital selective calling, ITU-R M.493
The DSC message format is Digital Selective Calling as defined by ITU-R M.493 — the SOLAS-mandated digital calling protocol on marine VHF channel 70 (156.525 MHz) and the MF/HF distress channels, used for distress, urgency and safety alerts, ship-to-ship paging, and the routine call-up that precedes a voice working-frequency hand-off.1 On the air it is a 1200-baud FFSK stream (tones 1300 and 2100 Hz) of 7-bit data symbols, each wrapped in a short error-detecting code and sent twice for redundancy.2
How it works
By the time symbols reach GopherTrunk’s dsc.Decode, the bit-stream layer above has already
handled sync, the per-character BCH check, and the redundancy merge, so each symbol is one
clean 7-bit value 0..127. The decoder reads the first symbol as the format specifier, then
walks the fields that format prescribes. A distress alert carries the sender’s own MMSI
immediately (no separate target), followed by a nature-of-distress symbol, a five-symbol
position, and an HH:MM time; a non-distress call carries a target MMSI, a category, then the
sender’s MMSI. Malformed or short sequences never error — they return with FormatUnknown
and the raw symbols preserved, because a real receiver sees noisy half-frames constantly.
Format, category and nature tables
The leading symbols classify the call. GopherTrunk encodes the ITU-R M.493 code points directly:
| Format | Code | Category | Code | Nature (distress) | Code |
|---|---|---|---|---|---|
| Distress | 112 | Distress | 112 | Fire / explosion | 100 |
| All-ships | 116 | Urgency | 110 | Flooding | 101 |
| Group | 114 | Safety | 108 | Collision | 102 |
| Individual | 120 | Routine | 100 | Sinking | 105 |
| Geographic | 102 | Man overboard | 110 | ||
| Auto-individual | 123 | EPIRB emission | 112 |
The “all-ships” and “distress-relay” formats share the same 116 code point and are told apart by the category. The nature table continues through grounding, listing, disabled-and-adrift, abandoning ship and piracy.
MMSI and position codec
Addresses and coordinates are packed as pairs of decimal digits per symbol. An MMSI is five symbols: each of the first four contributes two of the nine digits, and the fifth symbol’s high digit is the ninth MMSI digit while its low digit is a format-extension byte. A position is also five symbols — one quadrant digit (0 = NE, 1 = NW, 2 = SE, 3 = SW), four latitude digits (DDMM) and five longitude digits (DDDMM); GopherTrunk collapses the spec’s all-9s sentinel to “position unknown” and applies the quadrant as sign (bit 0 = West, bit 1 = South).
The detect-only BCH(10,7)
Despite the “BCH” label the spec uses, DSC’s per-character code has a minimum Hamming
distance of only 2. Each 10-bit character is 7 data bits followed by 3 check bits computed as
a CRC-3 with generator g(x) = x³ + x + 1 (binary 0x0B). Distance-2 means a single flipped bit
is reliably detected but cannot be reliably corrected — legal codewords sit only one bit
apart, so “correcting” a corrupted word could silently produce a different valid one.
GopherTrunk’s BCHCheck therefore returns only a pass/fail syndrome; the real error correction
comes from DX/RX redundancy, the M.493 scheme of sending every character twice and merging
the two copies, which the bit-stream layer performs before symbols reach the decoder.
Sources
-
Digital selective calling — Wikipedia, on the ITU-R M.493 marine calling protocol and its distress functions. ↩
-
Maritime Mobile Service Identity — Wikipedia, on the 9-digit MMSI a DSC sequence addresses. ↩