mirror of
https://github.com/liquidraver/ZephCore.git
synced 2026-10-15 06:49:52 +00:00
server roles, event loops, companion transports, storage and prefs.json
Server roles (slice 7) - CommonCLI split into upstream's shape; region CLI moved into CommonCLI; ClientACL, RegionMap, TransportKeyStore and both server meshes in upstream shape over an Arduino compat shim (helpers/compat: Arduino.h, Stream/Print, Serial, SHA256, FILESYSTEM/File over Zephyr fs) - room server processAck port; `get acl` prints as upstream - room: default name Room-XXXX, display/input rotation, live radio UI refresh Event loops (slice 7b) - repeater and room server share server_main_common with a ServerRole descriptor; shared event bits in src/mesh_events.h - room server deadline-driven (idle wakes 2.2/s -> 0.08/s); companion loop() runs on housekeeping (closes the lazy contact-flush gap) - `get loop.wakes` in debug builds (CONFIG_ZEPHCORE_LOOP_WAKE_STATS) Companion transports and WiFi (slice 8) - upstream MultiSerialInterface: BLE, USB/UART and TCP are each a BaseSerialInterface, every connected transport gets every frame; CompanionSerial holds a lossless reply; shared frame_txq for BLE/TCP - SerialCompanionTransport and LinuxTCPTransport replaced by TcpCompanionTransport; ZephyrBLE split (gatt layout, DFU) - WiFi companion (upstream wifi.ssid/pwd/enabled CLI, TCP port 5000) on boards declaring `capabilities: wifi` in zephcore.yml: the PSRAM ESP32-S3 boards, plus Heltec V3 (140 contacts), Wireless Tracker (130) and both C6 boards (280); ESP32-S3 without PSRAM gets bounded WiFi buffers and a measured 72 KB heap; PSRAM boards' internal heap 72 KB - TCP queues: own depth (ZEPHCORE_TCP_QUEUE_SIZE=8), RX waits instead of dropping - RAM: companion ClientACL dropped; main/BT-TX/TCP stacks sized from measured peaks (-7 KB nRF companions, -9 KB ESP32 companions) - ESP32 WiFi stopped working under ~200 frames/s unicast. Fixed by: patches/zephyr/0017 never block the WiFi task in the RX callback; patches/zephyr/0018 lock shared_multi_heap (heap corruption with the WiFi heap in PSRAM); patches/modules/hal_espressif/0001 backport of hal_espressif af97fb02df (PSRAM realloc) Storage and prefs (slice 9) - prefs are now prefs.json through upstream's ConfigSerializer (ported verbatim), with upstream's key names for shared fields and ZephCore's own under "zc"; on first boot the binary new_prefs / repeater prefs is migrated and kept, so a downgrade still boots with the old settings - helpers/PrefsCodec: both legacy binary layouts (companion 272 B, server 311 B) as Zephyr-free codecs; sanitizeNodePrefs is the only validator - fix: server prefs could be replaced by a truncated file when a write failed; identity, prefs and channel writes go through one checked atomic replace (ZephyrFsUtil) - fix: a corrupt cad_auto byte turned adaptive CAD off instead of the default on - fix: a deliberate 300 s GPS duty on a repeater was rewritten to 48 h on every boot (that migration now runs on legacy files only) - one identity loader for all roles (IdentityFile); an unusable key file is always parked as .bad before regenerating - server store no longer stamps repeater defaults on room server and observer; companion first-boot volume policy moved into the store (adoptVolume) - ZephyrDataStore 1435 -> ~850 lines
This commit is contained in:
@@ -40,6 +40,7 @@ LOG_MODULE_REGISTER(zephcore_observer_main, CONFIG_ZEPHCORE_MAIN_LOG_LEVEL);
|
||||
#include <ZephyrMQTTPublisher.h>
|
||||
#include "observer_creds.h"
|
||||
#include <helpers/boot_prefs.h>
|
||||
#include <src/mesh_events.h>
|
||||
|
||||
/* ========== LED (optional) ========== */
|
||||
|
||||
@@ -51,10 +52,9 @@ static const struct gpio_dt_spec led0 = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
|
||||
|
||||
/* ========== Event loop bits ========== */
|
||||
|
||||
#define MESH_EVENT_LORA_RX BIT(0)
|
||||
#define MESH_EVENT_CLI_RX BIT(1)
|
||||
#define MESH_EVENT_STATUS BIT(2)
|
||||
#define MESH_EVENT_MQTT_CONNECT BIT(3) /* MQTT (re)connected — publish status+self-advert on main */
|
||||
/* The shared bits are in mesh_events.h; these are the observer's own. */
|
||||
#define MESH_EVENT_STATUS BIT(MESH_EVENT_ROLE_BASE) /* 300 s status publish */
|
||||
#define MESH_EVENT_MQTT_CONNECT BIT(MESH_EVENT_ROLE_BASE + 1) /* MQTT (re)connected — publish status+self-advert on main */
|
||||
#define MESH_EVENT_ALL (MESH_EVENT_LORA_RX | MESH_EVENT_CLI_RX | MESH_EVENT_STATUS | MESH_EVENT_MQTT_CONNECT)
|
||||
|
||||
static struct k_event mesh_events;
|
||||
@@ -354,8 +354,8 @@ int main(void)
|
||||
NodePrefs *prefs = observer_mesh.getNodePrefs();
|
||||
/* "Observer" is deliberately NOT in this list: it is a name a user can set,
|
||||
* and regenerating it here made `set name Observer` silently revert on every
|
||||
* reboot. "Repeater" is the name the shared store writes on first boot, so
|
||||
* it still counts as unset. */
|
||||
* reboot. "Repeater" is the name the shared store wrote on first boot
|
||||
* until 2026-09, so it still counts as unset. */
|
||||
if (strlen(prefs->node_name) == 0 ||
|
||||
strcmp(prefs->node_name, "Repeater") == 0) {
|
||||
/* Use first 4 bytes of pubkey for uniqueness */
|
||||
@@ -392,7 +392,7 @@ int main(void)
|
||||
print_banner();
|
||||
|
||||
/* Start WiFi (non-blocking — MQTT thread waits for WIFI_READY_BIT) */
|
||||
zc_wifi_station_start(&s_creds, time_sync_cb);
|
||||
zc_wifi_station_start(s_creds.wifi_ssid, s_creds.wifi_psk, time_sync_cb);
|
||||
|
||||
/* Start MQTT publisher thread */
|
||||
char client_id[64];
|
||||
|
||||
Reference in New Issue
Block a user