Patrick Lidstone
Self-hosted

ACARS — native message layer + Inmarsat AERO framing

The character-oriented aircraft datalink (ARINC-618): mode, registration, label, block-id, message sequence, flight and text, sealed by a reflected CRC-16 block-check — one message layer shared by VHF ACARS, VDL and the satellite AERO services — plus AERO framing that carries it over the already-native Inmarsat-C FEC chain.

Rafe project · app/radio/acars.py, test_acars.py · build + parse + AERO encode/decode · message format and BCS transcribed from ARINC-618, validated self-consistently; 7-bit parity conventions and the AERO burst PHY are the on-air interop steps


Abstract

ACARS is the short-message system of commercial aviation: position reports, weather requests, engine data, gate assignments — a few hundred characters at a time, addressed by aircraft registration. The message layer is identical whether the transport is 2400 bps MSK on VHF (131.550 MHz and friends), VDL Mode 2, or the Inmarsat/Iridium satellite links (AERO). Rafe implements that common layer — build and parse with the block-check sequence — and the AERO path, which reuses the Inmarsat-C scramble/Viterbi/ interleave/unique-word chain wholesale (ACARS over AERO is a sibling service of STD-C on the same satellites).

1. Message format

build() produces, and parse() consumes, this byte layout:

SOH(0x01) · mode(1) · registration(7, left-padded '.') · ack(1)
         · label(2) · block-id(1) · STX(0x02)
         · MSN(4) · flight(6) · text(…) · ETX(0x03)
         · BCS(2, little-endian) · DEL(0x7F)
Field Default Notes
mode "2" ACARS mode character
registration "G-ABCD"".G-ABCD" right-justified to 7 with .; parse strips the padding
ack/NAK 0x15 (NAK) technical acknowledgement byte
label "H1" 2-char message type (Q0 link test, H1 ADS/engine, 5Z airline, …)
block id "1" single character
MSN "M01A" message sequence number, 4 chars
flight "BA0123" 6 chars
text "" free text (ASCII)

BCS coverage: every byte between (not including) SOH and the BCS itself — i.e. from the mode character through ETX inclusive.

parse() rejects: missing SOH, missing DEL, BCS mismatch ({"error": "bcs"}), missing STX/ETX — then returns all fields with the registration padding stripped.

2. The block-check sequence

CRC-16 in the reflected (LSB-first) form of the CCITT polynomial — process each byte low-bit-first with 0x8408 (the bit-reverse of 0x1021), init 0, no final XOR, transmitted low byte first. This is the same polynomial family as AX.25's FCS (AIS/APRS) with different init/XOR dressing — one more member of the "CRC-16 is a family" table in Commonalities B.3.

3. AERO framing

aero_encode(acars_bytes) / aero_decode(soft_bits, n_bytes) are thin adapters onto the Inmarsat-C STD-C chain: bytes → bits → stdc_encode (scramble → r=1/2 K=7 convolve → 64-column interleave → 24-bit unique word), and the reverse through the soft-input Viterbi. Everything said in the Inmarsat-C spec about that chain — constants, UW 0xB1CB4E, caveats — applies verbatim here.

4. Validation

Test Asserts
test_message_roundtrip all header fields + text recovered exactly
test_various_messages registrations/labels/texts across three realistic messages
test_bcs_detects_corruption one flipped bit in the registration → {"error": "bcs"}
test_bcs_function BCS deterministic and input-sensitive
test_aero_fec_chain_clean message → AERO frame → decode → identical text
test_aero_fec_chain_noisy 17-sample stream offset + ~3 % bit flips → exact text

5. Limitations and interop caveats

  • Character conventions. Real ACARS characters are 7-bit with a parity bit; this layer works in clean 8-bit ASCII. The parity convention is the named interop step for off-air captures.
  • No VHF PHY yet. The 2400 bps MSK modem (classic VHF ACARS) and VDL2's D8PSK/AVLC are separate future layers — this module is transport-agnostic above the bit level.
  • AERO burst structure. Real AERO carries ACARS inside its own burst/ packet formats over A-BPSK; the framing here demonstrates the FEC path end-to-end and awaits the burst-timing layer for on-air interop.
  • Uplink/downlink asymmetries (block formats, multi-block messages, ETB continuation) are not modelled; single-block ETX messages only.

Related: Inmarsat-C (the reused FEC chain), AIS/APRS (the same CRC family), and ADS-B (the other aircraft downlink in the catalogue).