Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mutability/dump978

Experimental demodulator/decoder for UAT on 978MHz
https://github.com/mutability/dump978

Last synced: about 2 months ago
JSON representation

Experimental demodulator/decoder for UAT on 978MHz

Awesome Lists containing this project

README

        

# dump978

Experimental demodulator/decoder for 978MHz UAT signals.

# This repository is unmaintained

Please use https://github.com/flightaware/dump978 instead of this repository.

## Demodulator

dump978 is the demodulator. It expects 8-bit I/Q samples on stdin at
2.083334MHz, for example:

````
$ rtl_sdr -f 978000000 -s 2083334 -g 48 - | ./dump978
````

It outputs one one line per demodulated message, in the form:

````
+012345678..; this is an uplink message
-012345678..; this is a downlink message
````

For parsers: ignore everything between the first semicolon and newline that
you don't understand, it will be used for metadata later. See reader.[ch] for
a reference implementation.

## Decoder

To decode messages into a readable form use uat2text:

````
$ rtl_sdr -f 978000000 -s 2083334 -g 48 - | ./dump978 | ./uat2text
````

## Sample data

Around 1100 sample messages are in the file sample-data.txt.gz. They are the
output of the demodulator from various RF captures I have on hand. This file
can be fed to uat2text etc:

$ zcat sample-data.txt.gz | ./uat2text

When testing, this is much easier on your CPU (and disk space!) than starting
from the raw RF captures.

## Filtering for just uplink or downlink messages

As the uplink and downlink messages start with different characters, you can
filter for just one type of message very easily with grep:

````
# Uplink messages only:
$ zcat sample-data.txt.gz | grep "^+" | ./uat2text
# Downlink messages only:
$ zcat sample-data.txt.gz | grep "^-" | ./uat2text
````

## Map generation via uat2json

uat2json writes aircraft.json files in the format expected by *my fork* of
[dump1090](https://github.com/mutability/dump1090)'s map html/javascript.

To set up a live map feed:

1) Get a copy of [this dump1090 repository](https://github.com/mutability/dump1090).
We're going to reuse its mapping html/javascript:

````
$ git clone https://github.com/mutability/dump1090 dump1090-copy
````

2) Put the html/javascript somewhere your webserver can reach:

````
$ mkdir /var/www/dump978map
$ cp -a dump1090-copy/public_html/* /var/www/dump978map/
````

3) Create an empty "data" subdirectory

````
$ mkdir /var/www/dump978map/data
````

4) Feed uat2json from dump978:

````
$ rtl_sdr -f 978000000 -s 2083334 -g 48 - | \
./dump978 | \
./uat2json /var/www/dump978map/data
````

5) Go look at http://localhost/dump978map/

## uat2esnt: convert UAT ADS-B messages to Mode S ADS-B messages.

Warning: This one is particularly experimental.

uat2esnt accepts 978MHz UAT downlink messages on stdin and
generates 1090MHz Extended Squitter messages on stdout.

The generated messages mostly use DF18 with CF=6, which is
for rebroadcasts of ADS-B messages (ADS-R).

The output format is the "AVR" text format; this can be
fed to dump1090 on port 30001 by default. Other ADS-B tools
may accept it too - e.g. VRS seems to accept most of it (though
it ignores DF18 CF=5 messages which are generated for
non-ICAO-address callsign/squawk information.

You'll want a pipeline like this:

````
$ rtl_sdr -f 978000000 -s 2083334 -g 48 - | \
./dump978 | \
./uat2esnt | \
nc -q1 localhost 30001
````