Archived
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c2f6894ef5
|
||
|
|
943f2615f3
|
No files matched your search
@@ -1,5 +1,18 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [0.2.3] - 2026-04-06
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- README: clarify that the bridge relays raw LoRa packets and works with any
|
||||||
|
protocol (Meshtastic, MeshCore, etc.) simultaneously.
|
||||||
|
|
||||||
|
## [0.2.2] - 2026-04-06
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- TUI now fits in 80-column terminals (was 86).
|
||||||
|
|
||||||
## [0.2.1] - 2026-04-06
|
## [0.2.1] - 2026-04-06
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
Generated
+1
-1
@@ -906,7 +906,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "donglora-bridge"
|
name = "donglora-bridge"
|
||||||
version = "0.2.1"
|
version = "0.2.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"blake3",
|
"blake3",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "donglora-bridge"
|
name = "donglora-bridge"
|
||||||
version = "0.2.1"
|
version = "0.2.3"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
authors = ["Stephen Waits <steve@waits.net>"]
|
authors = ["Stephen Waits <steve@waits.net>"]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|||||||
@@ -4,16 +4,19 @@
|
|||||||
[](LICENSE)
|
[](LICENSE)
|
||||||

|

|
||||||
|
|
||||||
**donglora-bridge** connects LoRa radios to the internet so packets heard by one
|
**donglora-bridge** relays raw LoRa packets over the internet. Every packet your
|
||||||
radio can be retransmitted by another radio anywhere in the world.
|
radio hears is forwarded to every other bridge running the same passphrase, and
|
||||||
|
their radios retransmit it locally. Because it operates on raw packets, it works
|
||||||
|
with any protocol built on LoRa --
|
||||||
|
[Meshtastic](https://meshtastic.org/),
|
||||||
|
[MeshCore](https://github.com/rocketgithub/meshcore-firmware),
|
||||||
|
or anything else -- simultaneously and without configuration. If your radio can
|
||||||
|
hear it, the bridge will relay it.
|
||||||
|
|
||||||
[LoRa](https://en.wikipedia.org/wiki/LoRa) is a long-range, low-power wireless
|
[LoRa](https://en.wikipedia.org/wiki/LoRa) is a long-range, low-power wireless
|
||||||
protocol used by off-grid mesh networks like
|
modulation used by off-grid mesh networks. A single radio might cover a few
|
||||||
[MeshCore](https://github.com/rocketgithub/meshcore-firmware). A single LoRa
|
kilometers. This bridge removes that limit, extending a local LoRa network
|
||||||
radio might cover a few kilometers. This bridge removes that limit: any packet
|
across a larger geographic area.
|
||||||
your radio hears gets relayed over the internet to every other bridge running the
|
|
||||||
same passphrase, and their radios retransmit it locally. The result is a single
|
|
||||||
mesh network across a larger geographic area.
|
|
||||||
|
|
||||||
There is no central server. Bridges discover each other automatically using the
|
There is no central server. Bridges discover each other automatically using the
|
||||||
[Mainline DHT](https://en.wikipedia.org/wiki/Mainline_DHT) and communicate
|
[Mainline DHT](https://en.wikipedia.org/wiki/Mainline_DHT) and communicate
|
||||||
|
|||||||
+3
-3
@@ -245,8 +245,8 @@ fn draw_ui(
|
|||||||
series: &TimeSeries,
|
series: &TimeSeries,
|
||||||
) {
|
) {
|
||||||
// Minimum terminal size for the 3-column layout.
|
// Minimum terminal size for the 3-column layout.
|
||||||
if area.width < 86 || area.height < 12 {
|
if area.width < 80 || area.height < 12 {
|
||||||
let msg = format!("Terminal too small ({}x{}), need 86x12+", area.width, area.height);
|
let msg = format!("Terminal too small ({}x{}), need 80x12+", area.width, area.height);
|
||||||
frame.render_widget(
|
frame.render_widget(
|
||||||
Paragraph::new(msg).alignment(Alignment::Center).style(Style::default().fg(C_RATE_DROP)),
|
Paragraph::new(msg).alignment(Alignment::Center).style(Style::default().fg(C_RATE_DROP)),
|
||||||
area,
|
area,
|
||||||
@@ -266,7 +266,7 @@ fn draw_ui(
|
|||||||
// Packet log columns: Age=5 Hash=8 RF=4 Net=4 Size=6 RSSI=6 SNR=5 Act=5 = 43 + 2 border + 1 pad = 46
|
// Packet log columns: Age=5 Hash=8 RF=4 Net=4 Size=6 RSSI=6 SNR=5 Act=5 = 43 + 2 border + 1 pad = 46
|
||||||
let cols = Layout::default()
|
let cols = Layout::default()
|
||||||
.direction(Direction::Horizontal)
|
.direction(Direction::Horizontal)
|
||||||
.constraints([Constraint::Length(30), Constraint::Length(46), Constraint::Min(10)])
|
.constraints([Constraint::Length(30), Constraint::Length(46), Constraint::Min(4)])
|
||||||
.split(rows[1]);
|
.split(rows[1]);
|
||||||
|
|
||||||
// Left column: Network, Radio, Stats stacked.
|
// Left column: Network, Radio, Stats stacked.
|
||||||
|
|||||||
Reference in new issue
Block a user