Skip to content

Prototype dual-radio channels on RadioMaster Nomad - #11160

Closed
h3lix1 wants to merge 7 commits into
meshtastic:nomad-geminifrom
h3lix1:codex/radiomaster-nomad-dual-radio
Closed

h3lix1 wants to merge 7 commits into
meshtastic:nomad-geminifrom
h3lix1:codex/radiomaster-nomad-dual-radio

Conversation

@h3lix1

@h3lix1 h3lix1 commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Summary

This draft prototypes both LR1121s in the RadioMaster Nomad as independent Meshtastic PHYs:

  • the primary radio follows config.lora and was tested as US MediumFast at 913.125 MHz
  • logical channel 1 uses the second LR1121 with a fixed US ShortTurbo profile at 926.750 MHz
  • both paths may transmit, with a nominal 10 dBm hard cap and one-at-a-time TX coordination
  • the peer radio enters standby before TX, APC2 is serialized, and both paths return to receive afterward
  • two-slot RadioLib ISR dispatch and an alternate LoRa transport tag support the two radio instances
  • GPIO2 fan control remains available through lora.pa_fan_disabled

This is an experimental continuation of the Nomad bring-up in #5318 and the hardening delta in #11141.

Why

Meshtastic currently exposes one router-facing radio interface, while logical channels are cryptographic namespaces rather than per-channel PHY configurations. This composite interface is a small test vehicle for assigning one logical channel to each physical LR1121 before attempting a true cross-channel bridge.

Current limitations

  • This does not bridge channel 0 traffic into channel 1. A bridge would need an explicit decrypt, clone, re-encrypt, and loop-control policy.
  • Secondary selection uses Meshtastic's 8-bit encrypted channel hash, so a collision is possible.
  • PKI direct messages still use channel zero.
  • The external PA table and antenna-port isolation are not calibrated.
  • No external ShortTurbo peer acknowledged the channel-1 test packet.
  • Simultaneous TX and high-power testing are intentionally excluded.

Validation

  • trunk fmt
  • git diff --check
  • Clean pio run -e radiomaster_nomad_gemini from commit defe8b60f7973ee94950ebe893d88bb0ed3e06c2
  • Factory image flashed to the ESP32-PICO-D4 with esptool hash verification
  • Exact artifact booted as 2.8.0.defe8b6
  • Both LR1121s initialized: MediumFast 913.125 MHz and ShortTurbo 926.750 MHz
  • Live MediumFast packets received with RSSI/SNR data; node database reached 120 entries
  • Primary traceroute completed:
    • outbound: !5868023a -> 0b45f21f -> a0352604 -> !4703f8ab
    • return: !4703f8ab -> 273c3874 -> !5868023a
  • Channel-1 packet 0x78bac82c was selected for ShortTurbo and reported TX-done on each retry
  • Wi-Fi rejoined the configured network, obtained 192.168.1.252, answered ICMP, and served the TCP API on port 4403
  • Fan disable and enable settings both wrote and read back; final state commands the fan on

The repository test wrapper is blocked on macOS by Bash mapfile and BSD find lacking -printf. Direct native tests are independently blocked by existing macOS-incompatible VLAs and linux/input.h; neither failure reaches the Nomad-specific code.

Review focus

  • composite ownership and Router-facing behavior
  • dual-instance ISR dispatch
  • SPI, standby, APC2, and TX-arbiter sequencing
  • logical-channel selection and relay-path preservation
  • whether the prototype constraints are sufficient before any calibrated RF work

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f4a0221a-2c8e-4602-a00a-59d1fb77a2a1

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

⚡ Try this PR in the Web Flasher

Note

Building this pull request… the flash button, badges and supported-board
list will appear here automatically once CI finishes.

@thebentern

Copy link
Copy Markdown
Contributor

Super neat!

@caveman99 caveman99 added the enhancement New feature or request label Aug 10, 2026 — with Claude
@h3lix1

h3lix1 commented Sep 18, 2026

Copy link
Copy Markdown
Contributor Author

Closing this one out - Does not seem to have much traction

@h3lix1 h3lix1 closed this Sep 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants