Skip to main content
Pre-release

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)

Source distribution for duro-tools 2.0.0.dev1
File Size Uploaded
duro_tools-2.0.0.dev1.tar.gz 32.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for duro-tools 2.0.0.dev1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

2.0.0.dev1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page