44 lines
1.1 KiB
Markdown
44 lines
1.1 KiB
Markdown
|
|
# Airspy protocol
|
||
|
|
|
||
|
|
## Ports
|
||
|
|
|
||
|
|
* ??: server -> client feed
|
||
|
|
|
||
|
|
## Format
|
||
|
|
|
||
|
|
Textual format, similar to [raw](raw.md), but extended with MLAT and signal
|
||
|
|
level data. Unlike raw format, lines are terminated with `0x0d 0x0a` (`\r\n`).
|
||
|
|
|
||
|
|
|
||
|
|
## Frame structure
|
||
|
|
* `0x2a` (`*`)
|
||
|
|
* 7 or 14 byte frame (see [raw](raw.md))
|
||
|
|
* `0x3b` (`;`)
|
||
|
|
* 4 byte MLAT timestamp (see below)
|
||
|
|
* `0x3b` (`;`)
|
||
|
|
* 1 byte MLAT precision (see below)
|
||
|
|
* `0x3b` (`;`)
|
||
|
|
* 2 byte big-endian RSSI
|
||
|
|
* `0x3b 0x0d 0x0a` (`;\r\n`)
|
||
|
|
|
||
|
|
|
||
|
|
## MLAT timestamp
|
||
|
|
The MLAT timestamp included in each frame is the big-endian value of a counter
|
||
|
|
at the time of packet reception. The counter runs at a rate determined by the
|
||
|
|
precision value multiplied by 2 MHz (e.g. `0x0a` means `10 * 2 MHz = 20 MHz`).
|
||
|
|
This counter isn't calibrated to external time, but receiving software can
|
||
|
|
calculate its offset from other receiving stations across multiple packets, and
|
||
|
|
then use the differences between station receive timing to calculate signal
|
||
|
|
source position.
|
||
|
|
|
||
|
|
|
||
|
|
## Examples
|
||
|
|
|
||
|
|
* `*5DA7DA1CE30DE5;D03B5A4B;0A;7AF3;\r\n`
|
||
|
|
* `*8DA07CD89915908778A01E4B4C86;D03D33F9;0A;8437;\r\n`
|
||
|
|
|
||
|
|
|
||
|
|
## Implementations
|
||
|
|
|
||
|
|
* [Airspy ADSB decoder](http://airspy.com/download/)
|