dump1090_rs icon indicating copy to clipboard operation
dump1090_rs copied to clipboard

Multi-SDR supported Rust translation of the popular dump1090 project for ADS-B demodulation

dump1090_rs

Actions Status dependency status

Demodulate a ADS-B signal from a software defined radio device tuned at 1090mhz and forward the bytes to applications such as adsb_deku/radar.

See quickstart-guide for a quick installation guide.

See rsadsb-v0.5.0 for latest major release details.

Tested Support

Through the use of the rust-soapysdr project, we support many different software defined radio devices. If you have tested this project on devices not listed below, let me know! (you will need to add gain settings to config.toml or use --custom-config)

Device Supported/Tested Recommend argument
rtlsdr x x --driver rtlsdr
HackRF x --driver hackrf
uhd(USRP) x --driver uhd

Usage

Minimum Supported Rust Version: 1.63.0

Build

Install soapysdr drivers and library and libclang-dev.

Note

Using debug builds will result in SDR overflows, always using --release for production.

Ubuntu

> apt install libsoapysdr-dev libclang-dev

Cross Compile

Use hub.docker.com/r/rsadsb for cross compiling to the following archs. These images already have soapysdr installed with the correct cross compilers. This uses cross-rs.

> cargo install cross
> cross build --workspace --target x86_64-unknown-linux-gnu --relese

# Used for example in Raspberry Pi (raspios) 32 bit
> cross build --workspace --target armv7-unknown-linux-gnueabihf --release

# Used for example in Raspberry Pi (raspios) 64 bit
> cross build --workspace --target aarm64-unknown-linux-gnu --release

Release Builds from CI

Check the latest release for binaries built from the CI.

Run

Run the software using the default rtlsdr.

> cargo r --release

help

See --help for detailed information.

dump1090_rs 0.5.1
wcampbell0x2a
ADS-B Demodulator and Server

USAGE:
    dump1090_rs [OPTIONS]

OPTIONS:
        --custom-config <CUSTOM_CONFIG>    Filepath for config.toml file overriding or adding sdr config values for soapysdr
        --driver <DRIVER>                  Soapysdr driver name (sdr device) from default `config.toml` or `--custom-config` [default: rtlsdr]
    -h, --help                             Print help information
        --host <HOST>                      Ip Address to bind with for client connections [default: 127.0.0.1]
        --port <PORT>                      Port to bind with for client connections [default: 30002]
    -V, --version                          Print version information

Performance tricks

To enable maximum performance, instruct rustc to use features specific to your cpu.

> RUSTFLAGS="-C target-cpu=native" cargo r --release

Always use the latest rust releases including nightly, currently this gives around a 5-10% performance boost.

Testing

> cargo t --workspace --release

Benchmark

Reading from a 512KB iq sample to ADS-B bytes takes ~3.0 ms, but feel free to run benchmarks on your own computer.

> RUSTFLAGS="-C target-cpu=native" cargo bench --workspace

Intel i7-7700K CPU @ 4.20GHz

stable (rustc 1.62.0 (a8314ef7d 2022-06-27))

01                      time:   [3.0255 ms 3.0315 ms 3.0391 ms]
02                      time:   [2.9595 ms 2.9647 ms 2.9710 ms]
03                      time:   [2.8904 ms 2.8931 ms 2.8960 ms]

nightly (rustc 1.64.0-nightly (87588a2af 2022-07-13))

01                      time:   [3.0763 ms 3.0919 ms 3.1202 ms]
02                      time:   [3.0075 ms 3.0113 ms 3.0157 ms]
03                      time:   [2.9437 ms 2.9465 ms 2.9495 ms]

Changes

See CHANGELOG.md