diff --git a/README.md b/README.md index 8103e59..2161ef3 100644 --- a/README.md +++ b/README.md @@ -72,19 +72,24 @@ One role per firmware image; you choose it when you flash. All of this is local behaviour. Nothing here changes the wire protocol, so mixed meshes work fine. -- **A CPU that sleeps.** Everything is event-driven; there is no `loop()` spinning between packets. - **Self-tuning retransmit timing.** Repeaters measure how crowded their neighbourhood is and space their retransmits to match, instead of using fixed `txdelay` values. ([ADR 0007](docs/adr/0007-adaptive-contention-window.md)) - **Adaptive listen-before-talk.** Channel-activity detection calibrates itself to the local noise. ([ADAPTIVE_CAD.md](docs/ADAPTIVE_CAD.md)) -- **Optional RX duty cycle.** The radio naps between preamble checks to cut receive current, on radios - that support it. ([ADR 0006](docs/adr/0006-sx126x-rx-duty-cycle-and-busy-gating.md)) +- **Optional RX duty cycle.** The radio chip itself naps between preamble checks to cut receive current, + on radios that support it. ([ADR 0006](docs/adr/0006-sx126x-rx-duty-cycle-and-busy-gating.md)) - **Mesh time sync.** Nodes without GPS can agree on the time. Off by default. ([MESHTIMESYNC.md](docs/MESHTIMESYNC.md)) -- **WiFi firmware updates** for ESP32 repeaters, so the node on the roof can stay on the roof. +- **An observer role.** A listen-only node that publishes everything it hears to MQTT over WiFi (ESP32). +- **MQTT uplink on a repeater.** An ESP32 repeater can report what it hears to MQTT over WiFi while it + keeps repeating. +- **LEDs you control.** Turn them all off with `set leds off`, or choose what each one shows: blink on + transmit, on receive or both, and a heartbeat that can signal unread messages. The receive blink tells + you at a glance whether a repeater is hearing anything. +- **2.4 GHz on LR2021 boards.** Set a 2.4 GHz frequency and the radio switches to its high-band path on + its own. - **Runs on Linux too.** The same code runs as a normal process on a Raspberry Pi or Femtofox with a real SX1262 attached. ([LINUX_NATIVE.md](docs/LINUX_NATIVE.md)) -- **Newer radios.** LR1110 and LR2021 alongside SX126x and SX127x. ## Hardware diff --git a/zephcore/adapters/datastore/ZephyrDataStore.cpp b/zephcore/adapters/datastore/ZephyrDataStore.cpp index 458ee01..04b350c 100644 --- a/zephcore/adapters/datastore/ZephyrDataStore.cpp +++ b/zephcore/adapters/datastore/ZephyrDataStore.cpp @@ -252,7 +252,7 @@ bool ZephyrDataStore::hasPrefs() const * causing settings_load() to hang and blocking bt_enable(). */ void ZephyrDataStore::formatNVSOnly() { -#if FIXED_PARTITION_EXISTS(storage_partition) +#if PARTITION_EXISTS(storage_partition) const struct flash_area *fap; int rc = flash_area_open(PARTITION_ID(storage_partition), &fap); if (rc == 0) { diff --git a/zephcore/adapters/datastore/ZephyrFsFormat.c b/zephcore/adapters/datastore/ZephyrFsFormat.c index 094f4ff..abec2c1 100644 --- a/zephcore/adapters/datastore/ZephyrFsFormat.c +++ b/zephcore/adapters/datastore/ZephyrFsFormat.c @@ -37,7 +37,7 @@ static void flatten(uint8_t id, const char *tag) flash_area_close(fap); } -#if FIXED_PARTITION_EXISTS(qspi_storage_partition) +#if PARTITION_EXISTS(qspi_storage_partition) /* qspi-ext.dtsi makes the flash under /ext zephyr,deferred-init, so nothing * probes it at boot. The flash sits behind a GPIO-switched rail on several * boards, and the boot-time JEDEC read went out before a cold rail had come @@ -49,7 +49,7 @@ static void flatten(uint8_t id, const char *tag) * earlier call already ran the init, whatever the result was. */ static void ext_flash_init(void) { - const struct device *dev = FIXED_PARTITION_DEVICE(qspi_storage_partition); + const struct device *dev = PARTITION_DEVICE(qspi_storage_partition); if (!device_is_ready(dev)) { int rc = device_init(dev); @@ -108,17 +108,17 @@ bool zephcore_fs_format_all(bool *out_ext_mounted) fs_unmount(&FS_FSTAB_ENTRY(DT_NODELABEL(qspi_lfs))); #endif -#if FIXED_PARTITION_EXISTS(lfs_partition) +#if PARTITION_EXISTS(lfs_partition) flatten(PARTITION_ID(lfs_partition), "lfs_partition"); #endif -#if FIXED_PARTITION_EXISTS(storage_partition) +#if PARTITION_EXISTS(storage_partition) /* BLE bonds (NVS). A factory reset should clear them too; the caller * reboots so NVS and the BT stack re-init clean. */ flatten(PARTITION_ID(storage_partition), "storage_partition"); #endif -#if FIXED_PARTITION_EXISTS(qspi_storage_partition) +#if PARTITION_EXISTS(qspi_storage_partition) /* A repeater never mounts /ext, so its flash is still uninitialised. */ ext_flash_init(); flatten(PARTITION_ID(qspi_storage_partition), "qspi_storage_partition"); diff --git a/zephcore/tools/formatter/boards/thinknode_m6/board.overlay b/zephcore/tools/formatter/boards/thinknode_m6/board.overlay index 1a39716..ca6d5e2 100644 --- a/zephcore/tools/formatter/boards/thinknode_m6/board.overlay +++ b/zephcore/tools/formatter/boards/thinknode_m6/board.overlay @@ -5,7 +5,7 @@ * chip fitted, so the board dropped &qspi, its partition, the P0.21 enable * regulator and the qspi-ext.dtsi (/ext) include together (see the note in * thinknode_m6.dts). There is therefore no /ext LittleFS instance to drop - * and no QSPI enable to hog here; main.c's FIXED_PARTITION_EXISTS() checks + * and no QSPI enable to hog here; main.c's PARTITION_EXISTS() checks * simply skip the QSPI erase. If the board ever restores QSPI, restore the * "/delete-node/ &qspi_lfs;" and the P0.21 hog that used to live here. * diff --git a/zephcore/tools/formatter/src/main.c b/zephcore/tools/formatter/src/main.c index 57112dc..990bd4c 100644 --- a/zephcore/tools/formatter/src/main.c +++ b/zephcore/tools/formatter/src/main.c @@ -8,7 +8,7 @@ * - SDv6: covers RAK4631, ThinkNode M1/M3/M6, ProMicro LR2021, RAK WisMesh Tag * - SDv7: covers T1000-E, Wio Tracker L1, Ikoka Nano 30dBm * - * Internal flash uses DTS FIXED_PARTITION_EXISTS — partition layout is identical + * Internal flash uses DTS PARTITION_EXISTS — partition layout is identical * across all boards with the same SoftDevice version. * * QSPI external flash uses bare-metal register probing (qspi_probe.c) — no @@ -108,15 +108,15 @@ int main(void) led_on(); /* ── LittleFS partition (all platforms) ── */ -#if FIXED_PARTITION_EXISTS(lfs_partition) - if (erase_partition(FIXED_PARTITION_ID(lfs_partition), "LittleFS (/lfs)")) { +#if PARTITION_EXISTS(lfs_partition) + if (erase_partition(PARTITION_ID(lfs_partition), "LittleFS (/lfs)")) { errors++; } #endif /* ── NVS storage partition (ESP32 etc.) ── */ -#if FIXED_PARTITION_EXISTS(storage_partition) - if (erase_partition(FIXED_PARTITION_ID(storage_partition), "NVS (storage)")) { +#if PARTITION_EXISTS(storage_partition) + if (erase_partition(PARTITION_ID(storage_partition), "NVS (storage)")) { errors++; } #endif