DongLoRa USB Multiplexer — share one dongle with multiple applications
Project description
DongLoRa Mux (Python)
USB multiplexer daemon — lets multiple applications share one DongLoRa
dongle simultaneously. Speaks the DongLoRa Protocol v2 wire protocol
(see PROTOCOL.md).
What It Does
- Owns the USB serial connection exclusively (flock-protected).
- Exposes a Unix domain socket and optional TCP listener speaking the DongLoRa Protocol v2 frame format.
- Tag-correlated solicited responses — concurrent commands from
multiple clients are routed back to the originator via a mux-allocated
device-tag map (
PROTOCOL.md §13.6). RXfan-out — every over-the-air RX is broadcast to all clients.- TX loopback (
§13.4) — a successful TX from one client is delivered to every other client as anRXevent withorigin = LOCAL_LOOPBACK. - Smart
SET_CONFIGarbitration (§13.2) — the first successful call locks the config; cross-client calls getALREADY_MATCHED/LOCKED_MISMATCHwith the lock owner's params echoed. A single connected client can still retune freely (scanner mode). RX_START/RX_STOPref-counting — the radio stays in RX as long as any client wants it.
Running
just run # start the mux daemon
just verbose # start with verbose logging
just run --tcp 5741 --port /dev/ttyACM0 # with options
Depends On
donglora(>= 1.0) — the Python client library. Provides the wire-level frame codec, event parsers, and USB discovery helpers this mux is built on.
Relationship to donglora-mux (Rust)
This package is a Python port of the Rust
donglora-mux daemon. The two
implementations are functionally equivalent — they speak the same
DongLoRa Protocol v2 wire protocol, implement the same §13.2 / §13.4 multi-client
semantics, and are drop-in interchangeable in front of the same dongle.
Pick whichever fits your ops environment:
- Rust (
cargo install donglora-mux) — single binary, no runtime deps, ~5 MB release build. Better for production / embedded Linux. - Python (
pip install donglora-mux) — easy to hack on, integrates with a Python toolchain, useful when Rust isn't an option.
If you find a behavioural divergence between the two, that's a bug — please file it.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file donglora_mux-1.0.0.tar.gz.
File metadata
- Download URL: donglora_mux-1.0.0.tar.gz
- Upload date:
- Size: 43.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b90d2830040fb34060c5e356274474318375e7a6c893f9b6d49cf38fa17f5837
|
|
| MD5 |
ee0d0baaac6eebd3394f3f9dffa7aa1b
|
|
| BLAKE2b-256 |
b20f1a91e1e503482c06fc3980b1c47bc29904122a31207a7e4c6b5107f5957e
|
Provenance
The following attestation bundles were made for donglora_mux-1.0.0.tar.gz:
Publisher:
ci.yml on donglora/mux-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
donglora_mux-1.0.0.tar.gz -
Subject digest:
b90d2830040fb34060c5e356274474318375e7a6c893f9b6d49cf38fa17f5837 - Sigstore transparency entry: 1358371319
- Sigstore integration time:
-
Permalink:
donglora/mux-py@e81cb9dc2093776be08ea2287673f6e1c55e04d9 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/donglora
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@e81cb9dc2093776be08ea2287673f6e1c55e04d9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file donglora_mux-1.0.0-py3-none-any.whl.
File metadata
- Download URL: donglora_mux-1.0.0-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d44fd943fd30c43cd3681bc938a708a1070c9d80cb78d4e8f55b4e5d0b2db4b5
|
|
| MD5 |
beade50b1b928bc5c5e4f2dd6e720bae
|
|
| BLAKE2b-256 |
b7e8780bb41e6de6d42c55a5a6f0d6330d9fc778b7852514a31af555ee87b623
|
Provenance
The following attestation bundles were made for donglora_mux-1.0.0-py3-none-any.whl:
Publisher:
ci.yml on donglora/mux-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
donglora_mux-1.0.0-py3-none-any.whl -
Subject digest:
d44fd943fd30c43cd3681bc938a708a1070c9d80cb78d4e8f55b4e5d0b2db4b5 - Sigstore transparency entry: 1358371439
- Sigstore integration time:
-
Permalink:
donglora/mux-py@e81cb9dc2093776be08ea2287673f6e1c55e04d9 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/donglora
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@e81cb9dc2093776be08ea2287673f6e1c55e04d9 -
Trigger Event:
push
-
Statement type: