This release is a pre-release and may not be stable for production use.
Tools for the Duro GNSS receiver
Python tools for the Duro GNSS receiver. This repository includes a variety of command line utilities (firmware bootloader, serial port data logging, etc.).
Versioning
duro_tools versioning scheme is guided by the supported version of
libsbp. The following major version schemes map to the supported versions of libsbp:
| duro_tools version | libsbp version |
|---|---|
| v2.x.x | libsbp v4.1.1 |
| v1.x.x | libsbp v2.7.4 |
Building and Installing
duro_toolsuses poetry to organize dependencies and generate distributions.
You can find more information on using potery has a packaging and dependency manager at https://python-poetry.org/.
Installing Poetry
project version: 1.8.3
installation: poetry installation docs
Building and Installing
It is advised to install duro_tools inside a virtual environment to avoid modifying system packages.
$ poetry build # build distributions
$ poetry install # install into local environment
Usage
Settings
For reading, writing and saving Duro settings/configuration
usage: python -m duro_tools.settings [-h] [-p PORT] [-b BAUD] [--rtscts] [-t] [-f] [--file] [--json] [--playback] [-v] [--timeout TIMEOUT] [-s] {save,reset,read,all,write,read_to_file,write_from_file} ...
Duro Settings Tool
positional arguments:
{save,reset,read,all,write,read_to_file,write_from_file}
save save all the current settings to flash
reset reset settings to factory defaults
read read the current setting
all read all the settings
write write the current setting
read_to_file read the current settings file from device
write_from_file write settings file to device
options:
-h, --help show this help message and exit
-p PORT, --port PORT specify the serial port to use
-b BAUD, --baud BAUD specify the baud rate to use
--rtscts enable Hardware Flow Control (RTS/CTS)
-t, --tcp use a TCP connection instead of a local serial port (if TCP is selected, the port is interpreted as host:port)
-f, --ftdi use pylibftdi instead of pyserial.
--file read with a filedriver rather than pyserial.
--json input is SBP JSON
--playback emulate real input
-v, --verbose print extra debugging information.
--timeout TIMEOUT timeout for settings calls in seconds (default: 0.5)
-s, --save_after_write
save settings to flash after successful write or write_from_file
Returns:
0: Upon success
1: Runtime error or invalid settings request.
2: Improper usage
File IO
For transferring files to and from the Duro
usage: python -m duro_tools.fileio [-h] [-w SOURCE DEST] [-r SOURCE [DEST ...]] [-l LIST] [-d DELETE] [-p PORT] [-b BAUD] [-t] [-v] [-x] [-f]
Duro File I/O Utility
options:
-h, --help show this help message and exit
-w SOURCE DEST, --write SOURCE DEST
write a file from local SOURCE to remote destination DEST
-r SOURCE [DEST ...], --read SOURCE [DEST ...]
read a file from remote SOURCE to local DEST. If no DEST is provided, file is read to stdout.
-l LIST, --list LIST list a directory
-d DELETE, --delete DELETE
delete a file
-p PORT, --port PORT specify the serial port to use
-b BAUD, --baud BAUD specify the baud rate to use
-t, --tcp use a TCP connection instead of a local serial port (if TCP is selected, the port is interpreted as host:port)
-v, --verbose print extra debugging information
-x, --hex output in hex dump format
-f, --ftdi use pylibftdi instead of pyserial
Bootload
For updating Duro firmware
usage: python -m duro_tools.bootload_v3 [-h] [-p PORT] [-b BAUD] [--rtscts] [-t] [-f] [--file] [--json] [--playback] [-v] firmware
Duro Bootloader
positional arguments:
firmware the image set file to write to flash
options:
-h, --help show this help message and exit
-p PORT, --port PORT specify the serial port to use
-b BAUD, --baud BAUD specify the baud rate to use
--rtscts enable Hardware Flow Control (RTS/CTS)
-t, --tcp use a TCP connection instead of a local serial port (if TCP is selected, the port is interpreted as host:port)
-f, --ftdi use pylibftdi instead of pyserial
--file read with a filedriver rather than pyserial
--json input is SBP JSON
--playback emulate real input
-v, --verbose print extra debugging information
USB issues on OS X
The ftdi USB drivers are finicky on some versions of OS X. See their docs <http://pylibftdi.readthedocs.io/en/latest/troubleshooting.html#where-did-my-ttyusb-devices-go>__ for help debugging (tl;dr if you try to plug in multiple USB devices to the same port, the subsequent ones may not appear through ftdi even if they appear in the result of sudo dmesg. Only restarting your machine will fix this.)
License
Copyright (C) 2025 Carnegie Robotics LLC.
Metadata
Release files for duro-tools 2.0.0.dev1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| duro_tools-2.0.0.dev1.tar.gz | 32.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| duro_tools-2.0.0.dev1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 76.4 kB
Release files / duro_tools-2.0.0.dev1.tar.gz
| Download URL | duro_tools-2.0.0.dev1.tar.gz |
|---|---|
| Size | 32.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c87c81cef2f335c35a8e477f211d896542d52cab9d96bef465815fbc461aa9c6
|
|
BLAKE2b-256 checksum How to use checksums |
074059688fe42f76b753cbb629a00ea3483bd5ffe9b363e9b698911e88ef91ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2025.
Transparency logRelease files / duro_tools-2.0.0.dev1-py3-none-any.whl
| Download URL | duro_tools-2.0.0.dev1-py3-none-any.whl |
|---|---|
| Size | 43.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a92adb8eb6d2f3ad6d596763fcaccb8e547e91a7347cb9dd359d52774da0f326
|
|
BLAKE2b-256 checksum How to use checksums |
2ae2a9f3ae62779749f66e595d63bcceebd3f41ae26c5398ad51f0f4289b2ee4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2025.
Transparency log