This repository has been archived on 2026-08-31 . You can view files and clone it. You cannot open issues or pull requests or push a commit.
b2e8b1d3666f4b981b757c97c1ed04425a327ab6
The cobs_decode() function had a bogus 'strip trailing zero' step that removed the last byte if it was 0x00. The Ping command IS tag byte 0x00, so its decoded payload was stripped to empty, causing from_bytes to return None. The COBS standard algorithm doesn't produce spurious trailing zeros — the post-processing was simply wrong. Also fix read_frame to skip bare 0x00 sentinels on fresh USB connects.
DongLoRa
Transparent LoRa radio over USB. Plug in a supported board, talk LoRa from your host. The firmware is a dumb pipe — it exposes clean LoRa parameters (frequency, bandwidth, spreading factor, coding rate, TX power) and gets out of the way. No mesh logic, no protocol opinions, no config files.
Quick Start
- Get a supported board
- Install toolchain (see Building)
- Build and flash:
just flash heltec_v4 - Run an example:
uv run examples/simple_rx.py - See packets
Supported Boards
| Board | MCU | Radio | Display |
|---|---|---|---|
| Heltec V3 | ESP32-S3 | SX1262 | SSD1306 OLED |
| Heltec V4 | ESP32-S3 | SX1262 | SSD1315 OLED |
| RAK WisBlock 4631 | nRF52840 | SX1262 | SSD1306 OLED (optional) |
Protocol
DongLoRa speaks a binary protocol over USB CDC-ACM: COBS-framed postcard messages. 8 commands, 6 response types — everything you need to configure the radio, transmit, and receive.
See docs/PROTOCOL.md for the complete wire format specification with worked examples.
Examples
All examples use uv for dependency management:
| Script | Description |
|---|---|
simple_rx.py |
Configure radio, receive and print packets |
simple_tx.py |
Transmit a single packet |
ping_pong.py |
Two-dongle demo (--role tx / --role rx) |
meshcore/ |
Full MeshCore packet decoder (advanced example) |
Building
Requires just and Rust.
just build-all # build firmware for all boards (skips unavailable toolchains)
just build heltec_v4 # build a specific board
just check-all # compile-check only (no firmware output)
just flash heltec_v4 # build + flash
just clippy heltec_v4 # lint
Xtensa boards (Heltec V3/V4)
Requires the ESP toolchain:
cargo install espup
espup install --toolchain-version 1.82.0.3
ARM boards (RAK 4631)
Stock Rust stable. Targets are installed automatically.
Board Roadmap
Next Up
| Board | MCU | Radio |
|---|---|---|
| Heltec V2 | ESP32 | SX1276 |
| Heltec Wireless Tracker | ESP32-S3 | SX1262 |
| Heltec Vision Master E213/E290 | ESP32-S3 | SX1262 |
| LilyGo T-Beam (SX1262) | ESP32 | SX1262 |
| LilyGo T-Beam Supreme | ESP32-S3 | SX1262 |
| LilyGo T-Echo | nRF52840 | SX1262 |
| LilyGo T3 S3 | ESP32-S3 | SX1262 |
| Seeed Studio Xiao nRF52 WIO | nRF52840 | SX1262 |
Future
| Board | MCU | Radio |
|---|---|---|
| Elecrow ThinkNode M1-M6 | various | various |
| Heltec Wireless Paper / MeshPocket / T114 | various | SX1262 |
| LilyGo T-Deck / T-Echo Lite / LoRa32 | various | various |
| RAK WisBlock 3112 / WisMesh variants | various | SX1262 |
| RPI Pico 2040 + WaveShare SX1262 | RP2040 | SX1262 |
| Seeed Studio SenseCAP / Xiao variants | various | SX1262 |
Contributing
See CONTRIBUTING.md.
License
MIT — Stephen Waits