2016-02-13 22:38:40 +00:00
|
|
|
# Beast protocol
|
|
|
|
|
|
|
|
|
|
## Ports
|
|
|
|
|
|
|
|
|
|
* 30005: server -> client feed
|
|
|
|
|
|
2016-02-13 22:56:41 +00:00
|
|
|
## Format
|
|
|
|
|
|
2016-02-13 22:58:09 +00:00
|
|
|
All data is escaped: `0x1a` -> `0x1a 0x1a`. Note that synchronization is still
|
2016-02-13 22:56:41 +00:00
|
|
|
complex, since `0x1a 0x31` may be the start of a frame or mid-data, depending
|
|
|
|
|
on what preceded it. To synchronize, you must see, in order:
|
2016-02-13 22:58:09 +00:00
|
|
|
* != `0x1a`
|
|
|
|
|
* `0x1a`
|
|
|
|
|
* {`0x31`, `0x32`, `0x33`}
|
|
|
|
|
|
2016-02-13 22:56:41 +00:00
|
|
|
Escaping makes frame length for a given type variable, up to
|
2016-02-13 22:58:09 +00:00
|
|
|
`2 + (2 * data_length_sum)`
|
|
|
|
|
|
2016-02-13 22:56:41 +00:00
|
|
|
|
2016-02-13 23:12:48 +00:00
|
|
|
## Frame structure
|
|
|
|
|
* `0x1a`
|
|
|
|
|
* Frame type (see types below)
|
|
|
|
|
* 6 byte MLAT timestamp (see below)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Frame types
|
|
|
|
|
* 0x31: Mode-AC frame
|
2016-02-13 22:56:41 +00:00
|
|
|
* 1 byte signal level (TODO: units?)
|
|
|
|
|
* 2 byte Mode-AC data
|
2016-02-13 23:12:48 +00:00
|
|
|
* 0x32: Mode-S short frame
|
2016-02-13 22:56:41 +00:00
|
|
|
* 1 byte signal level (TODO: units?)
|
|
|
|
|
* 7 byte Mode-S short data
|
2016-02-13 23:12:48 +00:00
|
|
|
* 0x33: Mode-S long frame
|
2016-02-13 22:56:41 +00:00
|
|
|
* 1 byte signal level (TODO: units?)
|
|
|
|
|
* 14 byte Mode-S long data
|
2016-02-13 23:12:48 +00:00
|
|
|
* 0x34: Status data
|
2016-02-13 22:59:14 +00:00
|
|
|
* *Appears to only be used by Mode-S Beast hardware later versions*
|
2016-02-13 22:56:41 +00:00
|
|
|
* ?? byte status data
|
|
|
|
|
* ?? byte DIP switch configuration
|
|
|
|
|
|
2016-02-13 23:12:48 +00:00
|
|
|
|
|
|
|
|
## MLAT timestamp
|
|
|
|
|
The MLAT timestamp included in each frame is the value of a 12 MHz counter at
|
|
|
|
|
the of packet reception. 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.
|
|
|
|
|
|
|
|
|
|
|
2016-02-13 22:38:40 +00:00
|
|
|
## Implementations
|
|
|
|
|
|
|
|
|
|
* [Mode-S Beast hardware](http://modesbeast.com/scope.html)
|
|
|
|
|
* [FlightAware dump1090 fork](https://flightaware.com/adsb/piaware/install)
|
|
|
|
|
|
|
|
|
|
## References
|
|
|
|
|
|
|
|
|
|
* [Original description](http://wiki.modesbeast.com/Mode-S_Beast:Data_Output_Formats)
|