Files
7fcbbe15d0 Add the Nodara nRF52840 board (#12211)
* Add the Nodara nRF52840 board skeleton with e-ink init.

* Fix the Nodara e-ink driver leak and rename the board macro to NODARA.

* Nodara: use the stock S140 v6 linker script

The board-specific script had the same flash layout as
nrf52840_s140_v6.ld (app 0x26000-0xEA000) and differed only in the RAM
origin (0x20006000 vs 0x20004000). The SoftDevice's RAM requirement is
set by the shared Bluefruit config, not the board, so the extra 8 KB was
unused. Tested on hardware: BLE comes up, and a phone connects and syncs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Nodara: build the same modules as other nRF52 boards

Drop the variant's module exclusions and the -<mqtt/> source filter.
nRF52 boards keep MQTT for the phone client proxy, and audio/paxcounter
are already excluded for the whole platform in nrf52.ini. Flash use is
89.5%, in line with t-echo (88.7%).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Nodara: probe SX1262/SX1268 and TCXO/XTAL at boot

Define both radio types and TCXO_OPTIONAL so initLoRa() picks whichever
chip answers (RadioLib tells them apart by the version string) and
falls back from a DIO3 TCXO to the crystal. The boot log reports the
result. The test unit reports "SX1262 init success, XTAL, Vref 0.0V".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Nodara: map the six keys to the trackball and cancel buttons

Use the existing trackball driver for up/down/left/right/select (B key)
and CANCEL_BUTTON_PIN for the A key, which also gets the SENSE wake from
System OFF. Same pattern as the Wio Tracker L1 e-ink.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Nodara: power on/off through the power MCU

Nodara's power button goes to an always-on power MCU, which reports it
as Modbus RTU frames on a receive-only 1200 baud line (Serial2, P1.00).
Handle it in extra_variants: a shutdown request takes the standard
shutdownAtMsec path, and on a power-on reset boot waits up to 5.5 s for
the power-on confirm the MCU sends once the button has been held long
enough. Also give Serial2 a valid TX pin so the core doesn't index the
pin map with -1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Nodara: fix cppcheck and millis() deadline lint in the power MCU link

Zero-initialize the frame buffers and use Throttle::deadlinePassed()
for the power-on wait.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Nodara: report the NODARA hardware model

Map NODARA to meshtastic_HardwareModel_NODARA and add the flasher
metadata (hw model 151, slug, display name, tags, support level).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Nodara: power MCU link review fixes

Scan every buffered frame for the power-on confirm, poll the idle line
every 250 ms instead of 20 ms, and name the boot wait as the uptime
deadline it is.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Nodara: menu shutdown points at the power button

A software shutdown leaves the board powered, since the power MCU only
cuts power on its own button. Add POWER_BUTTON_SHUTDOWN_HINT: when a
variant defines it, the Shutdown menu shows it as a notification instead
of the confirmation. Nodara sets it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: steve.su <steve.su@sainstore.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 16:10:13 +00:00
..