Specification and Bindings for Swift Binary Protocol
The Swift Navigation Binary Protocol (SBP) is a fast, simple, and minimal binary protocol for communicating with Swift devices. It is the native binary protocol used by the Piksi GPS receiver to transmit solutions, observations, status and debugging messages, as well as receive messages from the host operating system, such as differential corrections and the almanac.
This project provides language-agnostic specification and documentation for messages used with SBP, a compiler for generating message bindings, and client libraries in a variety of languages. This repository is organized into the following directory structure:
docs
: Protocol documentation and message definitions.spec
: Machine readable protocol specification in YAML.generator
: Simple, template-based generator for different languages.python
: Python client and examples.c
: C client library and examples.haskell
: Haskell client and examples.java
: Java client library and examples.javascript
: JavaScript client library and examples.
Except for the generator
, all of the above are generated and should not be modified directly.
Building / installing
Installing from package managers
Some bindings are available on package managers:
python
: available on piphaskell
: available on Hackagejavascript
: available on NPM
Installing development Python versions
To install the Python binding from source (using pip) run the following command:
pip install 'file:///path/to/libsbp#subdirectory=python'
Or via setuptools directly:
cd /path/to/libsbp
cd python
python setup.py
Adding development version as a pip dependency
Run the following command:
pip install git+https://github.com/swift-nav/libsbp@<GIT_REVISION>#egg=sbp&subdirectory=python
Or add this to requirements.txt
:
git+https://github.com/swift-nav/libsbp@<GIT_REVISION>#egg=sbp&subdirectory=python
Installing from source
You can build one binding at a time or update all at once:
make python
or
make all
are both valid. To see a list of all valid targets, run make help
.
Python version notes:
- by default the Python targets
make python
andmake test-python
(as well asmake all
) run tests on all Python versions officially supported by the libsbp Python bindings, currently 2.7, 3.5, and 3.7, skipping any versions not installed. To run tests on just specific Python version(s), specify theTOXENV
environment variable, e.g.,TOXENV=py27,py35 make python
. Travis runs Python tests on all supported versions. - by default the code generators are run on the system's (or virtual env's)
default Python interpreter. Currently Python versions 2.7, 3.5, and 3.7
are officially supported, other versions may or may not work. The generated
libsbp bindings should be the same on all supported Python versions. To use
a different version than your default Python interpreter, specify the
GENENV
environment variable, e.g.,GENENV=py27 make all
(you must have that version of Python installed beforehand). - to run both the generator and the Python tests on specific Python versions,
specify both envs, e.g.,
GENENV=py37 TOXENV=py27,py37 make python
SBP Protocol Specification
SBP consists of two pieces: (i) an over-the-wire message framing format and (ii) structured payload definitions. As of Version 1.0, the packet consists of a 6-byte binary header section, a variable-sized payload field, and a 16-bit CRC value. SBP uses the CCITT CRC16 (XMODEM implementation) for error detection.
Please see the docs for a full description of the packet structure and the message types. Developer documentatation for the language-specific sbp libraries is here. Please refer to the changelog for more information about the evolution of the library and its messages.
LICENSE
Copyright © 2015 Swift Navigation
Distributed under LGPLv3.0.