dump978-fa¶
Decoder for 978 MHz UAT, the second ADS-B link -- US general aviation below 18,000 ft
- Version recorded: 11.1
- Categories:
aircraft - Upstream: https://github.com/flightaware/dump978
What it does¶
dump978-fa decodes UAT, the ADS-B link on 978 MHz, from an SDR through SoapySDR. It listens on the frequency, demodulates the bursts, corrects their errors and serves what it hears: raw messages on a TCP port (--raw-port, 30978 by FlightAware's convention), decoded JSON on another (--json-port), or either on standard output. The second program, skyaware978, connects to that raw port and keeps an aircraft.json and its history up to date in a directory, the files a web map reads. Receive only.
Why you would want it¶
In the United States, aircraft flying below 18,000 feet may carry UAT instead of the 1090 MHz transponder link, and many light aircraft do. readsb (in this profile) hears 1090 MHz only, so without this a US receiver misses those aircraft; UAT also carries the FIS-B weather and TIS-B traffic the ground stations broadcast. Outside the US there is usually nothing on 978 MHz to hear. readsb can take dump978-fa's raw port as a second input (--net-connector 127.0.0.1,30978,uat_in) and show both links in one set of JSON.
Before it will work¶
An SDR that tunes 978 MHz -- an RTL-SDR is the usual one -- with an antenna cut for 978 MHz, and the SoapySDR module for that receiver: soapysdr-module-rtlsdr for an RTL-SDR (the rtl-sdr hardware entry lists it). FlightAware's package starts it as dump978-fa --sdr driver=rtlsdr --format CS8 --raw-port 30978 --json-port 30979 (debian/dump978-fa.default in the tree); run by hand, write the ports as 127.0.0.1:30978 and 127.0.0.1:30979 unless you mean other machines to reach them.
How it installs¶
- git (make) — https://github.com/flightaware/dump978 at
v11.1(commitf40aa9a0d2d0a0067c0c628b44ba316f7049b8ce) - build dependencies:
build-essential,git,pkg-config,libboost-program-options-dev,libboost-regex-dev,libboost-filesystem-dev,libsoapysdr-dev - the project's build system has no install rule; the binaries listed below are copied into the prefix instead
- Built on 2026-10-01 in a rootless debian:13 container the way this block runs it --
make -j 2in the checkout as an unprivileged user, with the build_depends above: exit 0, 59 s wall, 873 MiB peak for the largest compiler process, no compiler warnings (the Makefile builds with -Werror). dump978-fa is 15 MB and skyaware978 12 MB, both linking Boost and dump978-fa SoapySDR. The build dependencies came to 107 packages and about 650 MB on a bare debian:13 image. The same build in a kali-rolling container (Boost 1.90) took 82 s, 806 MiB peak, also with no warnings, and decoded the same sample to the same 21 aircraft.
Binaries this produces:
dump978-faskyaware978
Known problems¶
It needs its own receiver. A dongle on 978 MHz cannot also be listening on 1090 MHz, so UAT and 1090 together means two dongles, and any program already holding the device stops it starting. A port given without a host listens on every interface: --raw-port 30978 serves what your receiver hears to the whole network, so name 127.0.0.1 unless that is the intent. Nothing in this build starts at boot: FlightAware's package adds a systemd service, an account and a lighttpd page (SkyAware978), and this manifest installs only the two programs. The web page itself is not installed.
What was measured: built on Debian 13 and Kali; both programs print their help (--help, exit status 64). Upstream's own sample of 1,143 raw UAT messages (439 from aircraft, the rest ground uplinks), stamped with the current time and served on a loopback port in dump978-fa's raw format, was decoded by skyaware978 into an aircraft.json of 21 aircraft; skyaware978 discards messages more than 15 seconds old, so the unstamped sample decodes to nothing. With --raw-port 30978 --json-port 127.0.0.1:30979 the container's /proc/net/tcp showed 0.0.0.0:30978 and 127.0.0.1:30979. The same sample, fed to Debian's readsb with --net-connector 127.0.0.1,30978,uat_in, came out in readsb's JSON as the same 21 aircraft. Not measured: an SDR, a live 978 MHz signal, FIS-B uplink decoding, or SkyAware978's web page, which is not installed.
Keeping it current¶
- probe: github tags (
flightaware/dump978) - strategy: rebuild
- FlightAware tags with each PiAware release (v10.0 2025-02 to v11.1 2026-07). Move the tag and its commit together. The Makefile builds with -Werror, so a newer compiler or Boost can turn a warning into a failed build: rebuild on the newest target before moving.
Where to get help with the software itself¶
FlightAware's repository: issues at the URL above, and the README, which lists the options. The PiAware forum at flightaware.com covers it as part of their receiver software. Licence: BSD-2-Clause.
Source: catalog/packages/dump978-fa.yaml