Skip to content

Releases: jrl290/RTNode-HeltecV4

v1.0.42

Choose a tag to compare

@jrl290 jrl290 released this 08 Jul 16:24

Changes

  • Whitelist dedup: wl1_push()/wl2_push() helpers enforce uniqueness — no more duplicate WL entries
  • Startup LAN probe: Sends path request on LoRa at boot to discover local devices immediately
  • FWD-CHECK format: Now shows FROM interface + zone, TO dest + zone — no more ambiguous fields
  • Heap report: Periodic heap stats every 30s (WL dump suppressed)
  • Stack increase: Loop task stack 8KB → 16KB for stability
  • Logging overhaul: Unified [TYPE] - FROM: (zone) - TO: (zone) format across all packet log lines

v1.0.41 — Firewall bidirectional forwarding, link-proof relay

Choose a tag to compare

@jrl290 jrl290 released this 06 Jul 20:10

v1.0.41 — Firewall bidirectional forwarding, link-proof relay

Fixes

  • Link-proof forwarding: PROOF packets on established links now forwarded through firewall
  • Reverse hash whitelisting: Both forwarding sites now whitelist truncated_hash for return path
  • Proof firewall exemption: PROOF packets from backbone bypass whitelist check entirely
  • Announce rebroadcast: Announces go to ALL interfaces (no attached_interface restriction)
  • Timestamp-on-load reset: All saved paths marked stale on boot (no NTP dependency)
  • Static frame_buf: TcpInterface stack allocation moved to BSS (prevents stack overflow)
  • Echo prevention: TcpInterface skips sender client to prevent loopbacks

Architectural

  • DISCOVERY_ADD system fully removed in FIREWALL_MODE
  • All upstream mode dependencies stripped (no boundary/roaming checks)
  • Boundary→Firewall rename complete across codebase
  • WATCH_LOG system for targeted watched-destination diagnostics
  • Interface::isConnected() virtual added

Assets

  • rtnode_heltec_v3.bin, rtnode_heltec_v3_merged.bin
  • rtnode_heltec_v4.bin, rtnode_heltec_v4_merged.bin

v1.0.40 — Multi-Path Path Table, MODE_FULL, Heap Fixes

Choose a tag to compare

@jrl290 jrl290 released this 30 Jun 18:46

Changes

Multi-Path Path Table

  • PathEntry struct with score-based selection (bitrate / (hops+1))
  • Up to 3 paths per destination (WiFi + LoRa coexist)
  • Old 80-line quality gate replaced with 2-line anti-replay check
  • Targeted failover: mark_path_unresponsive preserves backup paths when a link fails on one interface

Interface Modes

  • All interfaces set to MODE_FULL — removes mode-based announce blocking

Heap Fixes

  • std::set → std::vector migration (eliminates tree-node fragmentation: ~23KB overhead removed)
  • std::map<Bytes,T> → flat vector migration for path_requests, reverse_table, announce_rate_table, discovery_path_requests
  • Path request culling timeout: 24h → 40s (entries were accumulating unnecessarily)
  • Firewall gate on backbone path requests for non-whitelisted destinations
  • clear_caches_in_memory() for heap pressure relief

Other

  • Link::attached_interface() const getter added (was declared but not implemented)

Flash Options

File Usage
rtnode_heltec_v3.bin Heltec V3 — firmware update only
rtnode_heltec_v3_merged.bin Heltec V3 — full wipe + install
rtnode_heltec_v4.bin Heltec V4 — firmware update only
rtnode_heltec_v4_merged.bin Heltec V4 — full wipe + install

v1.0.39

v1.0.39 Pre-release
Pre-release

Choose a tag to compare

@jrl290 jrl290 released this 03 Jun 02:40

RTNode v1.0.39 (Beta)

This release supersedes and replaces v1.0.38, which is being withdrawn. It includes the v1.0.38 user-visible display/WAN updates plus the boundary-mode transport hardening validated in the latest firmware testing.

Highlights

  • Boundary ingress now evaluates packet-level whitelisted addresses, so transport control packets and referenced local destinations are classified correctly.
  • Backbone path-request noise no longer accumulates useless retained discovery state for non-local destinations.
  • Boundary logging now annotates packet and path-request handling with whitelist state for live diagnosis.
  • Includes the earlier v1.0.38 line items: multiple backbone interfaces, WAN status denominator improvements, and display polish.

Included Artifacts

  • rtnode_firmware.zip (v3 + v4, update + merged images)
  • rtnode_heltec_v3.bin
  • rtnode_heltec_v3_merged.bin
  • rtnode_heltec_v4.bin
  • rtnode_heltec_v4_merged.bin

Notes

  • Release track remains Beta and is lightly tested unless explicitly marked stable.
  • Use merged images for first install or recovery; use app-only images for in-place updates.

Full Changelog: v1.0.36...v1.0.39

v1.0.36

v1.0.36 Pre-release
Pre-release

Choose a tag to compare

@jrl290 jrl290 released this 02 Jun 01:52

Version consistency fix: download tag and on-device display now match (v1.0.36). Includes prior 4-backbone + boundary-mode fixes.

v1.0.33 Beta — mixed-path proof routing and harnesses

Choose a tag to compare

@jrl290 jrl290 released this 10 May 19:41

Beta release. Numeric tags stay versioned for tooling compatibility; user-facing release surfaces are labeled Beta.

Highlights:

  • Restores mixed-path proof routing across local TCP and LoRa/WAN paths.
  • Tightens boundary filtering with separate local and mentioned-address whitelists.
  • Adds proof probe tooling and four named harness scenarios for repeatable transport validation.
  • Ships both app-only and merged Heltec V3/V4 binaries in the release archive and direct assets.

Validation:

  • Firmware compiled for rtnode_heltec_v3 and rtnode_heltec_v4.
  • Merged binaries generated for both boards.
  • Hardware transport scenarios previously validated: local TCP to local TCP, LoRa to local TCP, local TCP to WAN, WAN to local TCP.

v1.0.30 — Heltec V4 boot reliability (DIO image header)

Choose a tag to compare

@jrl290 jrl290 released this 01 May 21:22

Fixes a bootloop affecting some Heltec V4 boards (reported on V4.3) caused by the v1.0.29 V4 binary having its image header marked QIO. The ESP32-S3 ROM bootloader trusts that header byte and configures the SPI controller for QIO before any of our code runs; if the flash chip / board strapping doesn't actually support QIO, the bootloader hangs in flash init and TG0 watchdog resets (rst:0x7 TG0WDT_SYS_RST, Saved PC inside ROM).

Fix: image header is now built as DIO (universally safe). The IDF 2nd-stage bootloader still runs bootloader_enable_qio_mode() which probes the flash chip's SFDP / Quad Enable bits at runtime and upgrades the SPI controller to QIO when the chip genuinely supports it. Steady-state flash throughput is unchanged on capable parts; cold boot adds ~50 ms for the probe.

Changes

  • platformio.inirtnode_heltec_v4 env: flash_mode = dio, arduino.memory_type = dio_qspi (PSRAM stays QSPI). V3 env: explanatory comment only.
  • flash.py — V4 board profile flash_mode qio→dio, so esptool merge_bin doesn't rewrite the header byte and undo the fix when packaging releases.
  • docs/index.html (web flasher) — Detect step now logs chip Variant (getChipDescription) and Flash ID (JEDEC mfg/dev) alongside Chip / Features / Flash size, so future bug reports include enough info to identify chip package and flash chip without guessing.

Notes for users

  • Web flasher: open https://jrl290.github.io/RTNode-HeltecV4/, click Detect, then Full install (since the bootloader image is being replaced).
  • CLI: python flash.py --board v4 --full.
  • Existing V3 boards: no functional change. Same binary behavior; refreshed image only because it's part of the same build.

v1.0.29 — Heltec V4.3 boot/RX fix

Choose a tag to compare

@jrl290 jrl290 released this 28 Apr 21:40

v1.0.29 — Heltec V4.3 boot/RX fix

Mirrors the V4.3 (KCT8103L FEM) support from upstream markqvist/RNode_Firmware 1.86. Addresses reports of V4.3 boards entering a USB reconnect loop with no display after flashing v1.0.26–v1.0.28.

Likely root causes addressed

  • OCP_TUNED 0x18 → 0x28 — over-current protection limit was too low for the V4.3 PA path, causing the radio to brown out the 3V3 rail during boot.
  • SX1262 errata 15.4 — IQ polarity register bit was being reset to the wrong value on every SetPacketParams, causing silent RX failure (TX still worked).
  • SX1262 errata 15.1 — modem sensitivity register now correctly toggled for the active LoRa bandwidth.
  • FEM detection — settle time bumped 1 ms → 5 ms before reading CSD pull level.
  • Per-FEM LNA gain & PA gain table — KCT8103L now uses LNA gain 21 (vs 17 for GC1109) and a different PA gain table for accurate TX power calibration.

Compatibility

  • A single rtnode_heltec_v4 binary continues to work on both V4.2 (GC1109) and V4.3 (KCT8103L) — FEM model is auto-detected at boot.
  • V3 binaries unchanged in behaviour (rebuilt for tag consistency).

Files

  • rtnode_heltec_v4.bin — V4.2 / V4.3 update (16 MB, qio, 80 MHz)
  • rtnode_heltec_v4_merged.bin — full flash image for V4
  • rtnode_heltec_v3.bin — V3 update (8 MB, dio, 80 MHz)
  • rtnode_heltec_v3_merged.bin — full flash image for V3

Web flasher: https://jrl290.github.io/RTNode-HeltecV4/

v1.0.28 — Fix LoRa routing (MODE_FULL)

Choose a tag to compare

@jrl290 jrl290 released this 28 Apr 18:14

v1.0.28 — Fix LoRa routing

Restores packet routing between LoRa and local TCP clients.

What's fixed

  • LoRa interface was MODE_ACCESS_POINT which blocks all outbound announce broadcasts. LoRa devices could not learn backbone paths and local TCP clients could not learn LoRa paths, breaking routing in both directions.
  • Switch LoRa to MODE_FULL so announces propagate freely between LoRa, local TCP clients, and the backbone — matching standard Reticulum transport node behaviour.
  • The boundary firewall (BOUNDARY_MODE inbound filter) is independent of interface modes and continues to gate all backbone (WAN) traffic using the local/mentioned address whitelists. LAN devices (LoRa + local TCP) retain free reign; WAN traffic is filtered as before.
  • Update local TCP server log message and portal description to reflect it uses MODE_GATEWAY (already correct in code, now correct in strings too).

Files

  • rtnode_heltec_v4.bin — V4.2 / V4.3 update (16MB, qio, 80MHz)
  • rtnode_heltec_v4_merged.bin — full flash image for V4
  • rtnode_heltec_v3.bin — V3 update (8MB, dio, 80MHz)
  • rtnode_heltec_v3_merged.bin — full flash image for V3

v1.0.27 — Configurable LoRa airtime limits

Choose a tag to compare

@jrl290 jrl290 released this 27 Apr 03:27

v1.0.27 — Configurable LoRa airtime (duty-cycle) limits

Adds two new fields to the LoRa section of the WiFi config portal:

  • 15s limit (%) — short-term airtime cap (rolling ~15 second window)
  • 1hr limit (%) — long-term airtime cap (rolling ~1 hour window)

When the measured LoRa airtime exceeds either threshold, TX is paused
until the rolling window drops back below the limit. Range 0–25 %
with 0.1 % resolution. 0 = disabled (default).

Useful for self-imposed regional duty-cycle budgets — e.g. EU868 users
can set 1.0 on the 1hr limit.

Settings are persisted to EEPROM and survive reboots.

Files

  • rtnode_heltec_v4.bin — V4.2 / V4.3 update (16 MB, qio, 80 MHz)
  • rtnode_heltec_v4_merged.bin — full flash image for V4
  • rtnode_heltec_v3.bin — V3 update (8 MB, dio, 80 MHz)
  • rtnode_heltec_v3_merged.bin — full flash image for V3

Web flasher: https://jrl290.github.io/RTNode-HeltecV4/