diff --git a/protocols/proto.md b/protocols/proto.md new file mode 100644 index 0000000..7b8bf01 --- /dev/null +++ b/protocols/proto.md @@ -0,0 +1,27 @@ +# Protobuf protocol + +This protocol was created by adsb-tools. This specification is official. + +## Format + +[Protocol buffer](https://developers.google.com/protocol-buffers/docs/overview) encoding. +Proto definition is [here](https://github.com/flamingcowtv/adsb-tools/blob/master/proto/adsb.proto). +Stream is a series of Adsb records with length encoded in a prefix (protobuf isn't self +delimiting). The prefix is structured such that an entire stream is a valid AdsbStream +record. + +First frame must always be an AdsbHeader; frames can otherwise appear in any order, including +additional headers. + +## Prefix +* `0x0a`: in protobuf encoding, field #1, type 2 (length-encoded bytes); (1 << 3) | 2 +* Length of packet not including prefix, encoded as a [base 128 varint](https://developers.google.com/protocol-buffers/docs/encoding#varints) + +## Packet +See [definition file](https://github.com/flamingcowtv/adsb-tools/blob/master/proto/adsb.proto) +for details. + +## Tips + +To decode a stream file: +`$ protoc-c --proto_path=adsb-tools/proto --decode=AdsbStream adsb-tools/proto/adsb.proto < streamfile`