u-blox GPS receivers use a UBX binary protocol to transmit GPS data to a host computer using asynchronous serial ports. This project provides a definition all the messages as well as wrapping transport framing used by u-blox 5/6/7/8/9 devices.
The protocol is defined in multiple schema files using CommsDSL. The commsds2comms code generator from commsdsl project is used to generate C++11 code of the protocol implementation.
The code generators from the commsdsl repository generate full CMake projects. Some of these generated projects are hosted as separate repositories that can be viewed and used independently.
- cc.ublox.generated - Protocol definition
- cc.ublox_protocol.cc_tools_plugin - Protocol plugin for the CommsChampion Tools.
The examples directory contains following example applications:
- simple_pos - simple application that communicates to u-blox receiver over USB serial link and polls for NAV-POSLLH messages. When latter is received, the position is printed to standard output.
Please read License section from commsdsl project.
This project uses CMake as its build system. Please open main CMakeLists.txt file and review available options as well as mentioned available parameters, which can be used in addition to standard ones provided by CMake itself, to modify the default build.
Note that UBX protocol is huge and it may be impractical to support all the messages, especially if some extra applications for testing and/or bindings to other languages is needed. It is highly recommended to provide a list of required messages using UBLOX_SCHEMA_FILES_LIST_FILE cmake parameter.
This project also has external dependencies, it requires an access to the COMMS Library and code generators from commsdsl projects. These dependencies are expected to be built independenty and access to them provided via standard CMAKE_PREFIX_PATH and/or CMAKE_PROGRAM_PATH (for the binaries of the code generators). There are also scripts ( script/prepare_externals.sh for Linux and script/prepare_externals.bat for Windows) which can help in preparation of these dependencies. They are also used in configuration of the github actions.
The project's cmake configuration options allow building bindings to other high level programming languages using swig and emscripten, see relevant commsdsl's documentation pages for details.
The example applications use Boost
to parse their command line parameters as well as manage their asynchronous I/O.
In case Boost libraries are not installed in expected default location
(mostly happens on Windows systems), use variables described in
CMake documentation
to help CMake find required libraries and headers.
It is recommended to use -DBoost_USE_STATIC_LIBS=ON
parameter to force
linkage with static Boost libraries.
$> cd /source/of/this/project
$> mkdir build && cd build
$> BUILD_DIR=$PWD CC=gcc CXX=g++ COMMON_INSTALL_DIR=$PWD/install COMMON_BUILD_TYPE=Release ../script/prepare_externals.sh
$> cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/install -DCMAKE_PREFIX_PATH=$PWD/install
$> make install
$> cd C:\source\of\this\project
$> mkdir build && cd build
$> set BUILD_DIR=%cd%
$> set GENERATOR="NMake Makefiles"
$> set QTDIR=C:\Qt\5.15.2
$> set COMMON_INSTALL_DIR=%cd%/install
$> ..\script\prepare_externals.bat
$> cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX=%cd%/install -DCMAKE_PREFIX_PATH=%cd%\install ^
-DBOOST_ROOT="C:\Libraries\boost_1_65_1" -DBoost_USE_STATIC_LIBS=ON
$> nmake install
Please read Supported Compilers info from commsdsl project.
Please read the Generated CMake Project Walkthrough documentation page for details on the generated project internals.
The release artifacts contain doxygen generated documentation of the protocol definition.
For bug reports, feature requests, or any other question you may open an issue here in github or e-mail me directly to: arobenko@gmail.com. I usually respond within 24 hours.