Fork of the Flightaware dump1090 code base with an additional branch for integration with the EOSS SDR system.
Go to file
Oliver Jowett c421c31152 Overhaul of message scoring & error correction.
Major changes:

Try to error-correct all messages that potentially could be DF11/17/18
even if the original DF value is different. This allows messages with
correctable damage in the first 5 bits to be correctable.

Track recently-seen DF18 addresses separately to DF17 addresses.
DF18 does not imply Mode S support, so we don't want to treat it like
a known Mode S emitter, but once we've heard some DF18 for an aircraft
we can be more confident about future DF18 messages for the same
address.

Rework the scoring system so it's just a big enum that lists all the
possible outcomes in the order that we want. This makes the relative
ordering of different messages clearer, and makes it easier to move
messages above/below the accept thresholds as needed.

Don't accept 2-bit-error-corrected messages that are from aircraft we
have not previously seen. This greatly reduces the number of garbage
messages when using 2-bit error correction.

Overall results are:

 * more CPU required for decoding (approx 30% increase in my tests)
   as we're doing a lot more speculative CRC-checking work
 * no significant change to message rates with error correction off
 * about 5% more 1-bit-corrected DF17 decodes, with a
   disproportionate increase in those messages contributing to
   successful position decodes / unique aircraft counts
 * _fewer_ decodes with 2-bit correction (versus old code with 2-bit
   correction), but the message quality is substantially improved,
   the rate of garbage decodes / phantom aircraft is greatly reduced

sample stats:

1-bit correction, old code:
    141158 total usable messages
    137852 accepted with correct CRC
      3306 accepted with 1-bit error repaired
     27446 DF17 messages
        51 unique aircraft tracks

1-bit correction, new code:
    141296 total usable messages
    137854 accepted with correct CRC
      3442 accepted with 1-bit error repaired
     27528 DF17 messages
        55 unique aircraft tracks

2-bit correction, old code:
    142656 total usable messages
    137809 accepted with correct CRC
      3283 accepted with 1-bit error repaired
      1564 accepted with 2-bit error repaired
     28803 DF17 messages
       349 unique aircraft tracks (<- note that most of these are garbage)

2-bit correction, new code:
    142426 total usable messages
    137822 accepted with correct CRC
      3420 accepted with 1-bit error repaired
      1184 accepted with 2-bit error repaired
     28666 DF17 messages
        55 unique aircraft tracks
2021-02-09 20:10:55 +08:00
bladerf bladeRF docs and custom bitstream. 2017-02-03 00:36:41 +00:00
compat Try to clean up the compat stuff a bit 2020-08-07 15:08:45 +08:00
cpu_features Move all converters to starch-based implementations (#97) 2021-01-21 19:45:00 +08:00
debian Version changes to 5.0~dev 2021-02-07 01:26:43 +00:00
debian-jessie Disable non-generic starch build on stretch/jessie 2021-02-08 23:55:57 +08:00
debian-stretch Disable non-generic starch build on stretch/jessie 2021-02-08 23:55:57 +08:00
dsp Regenerate starch-generated code for starch update & aarch64 wisdom 2021-02-09 14:16:12 +08:00
oneoff Move all converters to starch-based implementations (#97) 2021-01-21 19:45:00 +08:00
public_html Italicize filter count text 2021-02-09 04:42:02 +00:00
starch Update starch to upstream commit f76162205fa082d4c9a75b89eb4295e03f5f68fd 2021-02-09 14:05:05 +08:00
testfiles Initial commit of Dump1090, a simple Mode S decoder. 2013-01-05 13:52:25 +01:00
tools Overhaul of message scoring & error correction. 2021-02-09 20:10:55 +08:00
wisdom Starch: Changed aarch64 flavor to use simd 2021-02-08 10:10:44 -07:00
.gitattributes Compress vrs.csv since it's basically readonly. 2016-09-10 17:43:10 +01:00
.gitignore Move all converters to starch-based implementations (#97) 2021-01-21 19:45:00 +08:00
.travis.yml More build deps 2019-03-04 15:43:45 +00:00
COPYING GPL. 2015-01-20 16:49:01 +00:00
Jenkinsfile Remove dump1090.deb reference in Jenkinsfile breaking builds 2020-09-11 22:12:24 +00:00
LICENSE GPL. 2015-01-20 16:49:01 +00:00
Makefile Merge pull request #108 from gtjoseph/dev-fa-starch-aarch64 2021-02-09 14:08:52 +08:00
Makefile.cpufeatures Starch: Changed aarch64 flavor to use simd 2021-02-08 10:10:44 -07:00
README-json.md Expose modea_hit / modec_hit in aircraft.json 2020-08-24 15:03:17 +08:00
README.md Update FreeBSD instructions to use pkg not ports for pkgconf 2020-08-24 14:15:09 +08:00
ais_charset.c Put ais_charset in its own file to make building commb tests a little easier 2019-05-02 17:24:26 +08:00
ais_charset.h Put ais_charset in its own file to make building commb tests a little easier 2019-05-02 17:24:26 +08:00
anet.c IPv6 support (in theory). 2016-02-16 13:00:55 +00:00
anet.h IPv6 support (in theory). 2016-02-16 13:00:55 +00:00
comm_b.c Remove comm-b "consistency" bonuses, look at inconsistent data only. 2019-05-02 18:19:27 +08:00
comm_b.h WIP: More Comm-B & ADS-B decoding. 2017-06-15 18:07:40 +01:00
convert.c Move all converters to starch-based implementations (#97) 2021-01-21 19:45:00 +08:00
convert.h Whitespace changes only: cleaning up trailing whitespace at EOL 2017-06-15 18:17:07 +01:00
cpr.c fix -Wmissing-declaration warnings 2020-06-29 16:42:21 -07:00
cpr.h Whitespace changes only: cleaning up trailing whitespace at EOL 2017-06-15 18:17:07 +01:00
cprtests.c Whitespace changes only: cleaning up trailing whitespace at EOL 2017-06-15 18:17:07 +01:00
cpu.c Starch: Changed aarch64 flavor to use simd 2021-02-08 10:10:44 -07:00
cpu.h Starch: Changed aarch64 flavor to use simd 2021-02-08 10:10:44 -07:00
crc.c Overhaul of message scoring & error correction. 2021-02-09 20:10:55 +08:00
crc.h Overhaul of message scoring & error correction. 2021-02-09 20:10:55 +08:00
demod_2400.c Overhaul of message scoring & error correction. 2021-02-09 20:10:55 +08:00
demod_2400.h Whitespace changes only: cleaning up trailing whitespace at EOL 2017-06-15 18:17:07 +01:00
dsp-types.h Increase alignment requirements of uc8_t to avoid warnings when interpreting as uint16_t 2021-02-01 11:26:39 +08:00
dump1090.c Write final stats.json on exit 2021-02-04 16:36:13 +08:00
dump1090.h Support --stats-every with intervals <60 seconds. Add --json-stats-every option 2021-02-01 15:18:42 +08:00
faup1090.c Clean up linkage of struct Modes to actually make sense. 2020-06-06 21:52:04 +08:00
fifo.c Fix a stupid fifo bug that would orphan enqueued data. 2021-02-02 17:51:25 +08:00
fifo.h Factor out FIFO handling; reimplement as a linked list, not a circular buffer. 2020-08-05 19:50:38 +08:00
icao_filter.c Overhaul of message scoring & error correction. 2021-02-09 20:10:55 +08:00
icao_filter.h Overhaul of message scoring & error correction. 2021-02-09 20:10:55 +08:00
interactive.c Merge branch 'dev' into fix-interactive-ttl 2021-02-01 11:48:07 +08:00
mode_ac.c More WIP 2017-12-07 10:34:08 -06:00
mode_s.c Overhaul of message scoring & error correction. 2021-02-09 20:10:55 +08:00
mode_s.h Overhaul of message scoring & error correction. 2021-02-09 20:10:55 +08:00
net_io.c Increase default stats json buffer size to 8k. Retry with a larger buffer if we run out of space, like we do with aircraft.json 2021-02-07 22:22:01 +08:00
net_io.h faup1090: write _v on every line, bump TSV_VERSION 2019-03-19 18:10:38 +00:00
prepare-build.sh Drop wheezy support. 2020-08-06 13:44:07 +08:00
sdr.c Handle builds with no SDR support better. 2020-08-11 12:55:17 +08:00
sdr.h Factor out sdr thread CPU monitoring 2020-08-05 19:50:38 +08:00
sdr_bladerf.c Clean up the bladerf driver a bit 2020-08-05 19:50:38 +08:00
sdr_bladerf.h Whitespace changes only: cleaning up trailing whitespace at EOL 2017-06-15 18:17:07 +01:00
sdr_hackrf.c Fix hackrf compilation when uint64_t is not a long 2020-08-05 19:50:38 +08:00
sdr_hackrf.h Added support for HackRF One 2019-12-09 18:55:40 -03:00
sdr_ifile.c Factor out FIFO handling; reimplement as a linked list, not a circular buffer. 2020-08-05 19:50:38 +08:00
sdr_ifile.h Whitespace changes only: cleaning up trailing whitespace at EOL 2017-06-15 18:17:07 +01:00
sdr_limesdr.c limesdr: use --gain (in dB) if --limesdr-gain was not specified 2020-10-01 13:53:50 +08:00
sdr_limesdr.h limesdr: basic implementation of LimeSDR support 2020-07-29 23:09:27 +03:00
sdr_rtlsdr.c Use a bounce buffer for rtlsdr on ARM to work around zero-copy problems. 2020-08-05 19:50:38 +08:00
sdr_rtlsdr.h Whitespace changes only: cleaning up trailing whitespace at EOL 2017-06-15 18:17:07 +01:00
stats.c Collect stats on messages received by DF type 2021-02-04 16:33:26 +08:00
stats.h Collect stats on messages received by DF type 2021-02-04 16:33:26 +08:00
track.c Add missed expiry code for emergency / nac_v fields; initialize emergency_valid. 2021-01-15 18:20:50 +08:00
track.h Interactive mode updates 2020-09-29 06:23:55 -06:00
util.c normalize_timespec: handle tv_nsec == 1000000000 correctly 2020-11-17 19:59:47 +08:00
util.h fix a trivial copy-paste typo in comments 2020-08-31 22:53:14 +03:00
view1090.c fix merge indentation 2021-02-01 11:50:43 +08:00
wisdom.aarch64 Add temporary wisdom.aarch64 2021-02-09 14:15:05 +08:00
wisdom.arm Move all converters to starch-based implementations (#97) 2021-01-21 19:45:00 +08:00
wisdom.generic Move all converters to starch-based implementations (#97) 2021-01-21 19:45:00 +08:00
wisdom.x86 Move all converters to starch-based implementations (#97) 2021-01-21 19:45:00 +08:00

README.md

dump1090-fa Debian/Raspbian packages

dump1090-fa is a ADS-B, Mode S, and Mode 3A/3C demodulator and decoder that will receive and decode aircraft transponder messages received via a directly connected software defined radio, or from data provided over a network connection.

It is the successor to dump1090-mutability and is maintained by FlightAware.

It can provide a display of locally received aircraft data in a terminal or via a browser map. Together with PiAware it can be used to contribute crowd-sourced flight tracking data to FlightAware.

It is designed to build as a Debian package, but should also be buildable on many other Linux or Unix-like systems.

Building under buster

$ sudo apt-get install build-essential debhelper librtlsdr-dev pkg-config dh-systemd libncurses5-dev libbladerf-dev libhackrf-dev liblimesuite-dev
$ dpkg-buildpackage -b --no-sign

Building under stretch

$ sudo apt-get install build-essential debhelper librtlsdr-dev pkg-config dh-systemd libncurses5-dev libbladerf-dev
$ dpkg-buildpackage -b --no-sign

Building under jessie

Dependencies - bladeRF

You will need a build of libbladeRF. You can build packages from source:

$ git clone https://github.com/Nuand/bladeRF.git  
$ cd bladeRF  
$ git checkout 2017.12-rc1  
$ dpkg-buildpackage -b

Or Nuand has some build/install instructions including an Ubuntu PPA at https://github.com/Nuand/bladeRF/wiki/Getting-Started:-Linux

Or FlightAware provides armhf packages as part of the piaware repository; see https://flightaware.com/adsb/piaware/install

Dependencies - rtlsdr

This is packaged with jessie. sudo apt-get install librtlsdr-dev

Actually building it

Nothing special, just build it (dpkg-buildpackage -b)

Building with limited dependencies

The package supports some build profiles to allow building without all required SDR libraries being present. This will produce a package with limited SDR support only.

Pass --build-profiles to dpkg-buildpackage with a comma-separated list of profiles. The list of profiles should include custom and zero or more of rtlsdr, bladerf, hackrf, limesdr depending on what you want:

$ dpkg-buildpackage -b --no-sign --build-profiles=custom,rtlsdr          # builds with rtlsdr support only
$ dpkg-buildpackage -b --no-sign --build-profiles=custom,rtlsdr,bladerf  # builds with rtlsdr and bladeRF support
$ dpkg-buildpackage -b --no-sign --build-profiles=custom                 # builds with _no_ SDR support (network support only)

Building manually

You can probably just run "make" after installing the required dependencies. Binaries are built in the source directory; you will need to arrange to install them (and a method for starting them) yourself.

make BLADERF=no will disable bladeRF support and remove the dependency on libbladeRF.

make RTLSDR=no will disable rtl-sdr support and remove the dependency on librtlsdr.

make HACKRF=no will disable HackRF support and remove the dependency on libhackrf.

make LIMESDR=no will disable LimeSDR support and remove the dependency on libLimeSuite.

Building on OSX

Minimal testing on Mojave 10.14.6, YMMV.

$ brew install librtlsdr
$ brew install libbladerf
$ brew install hackrf
$ brew install pkg-config
$ make

Building on FreeBSD

Minimal testing on 12.1-RELEASE, YMMV.

# pkg install gmake
# pkg install pkgconf
# pkg install rtl-sdr
# pkg install bladerf
# pkg install hackrf
$ gmake