mirror of
https://github.com/misadeks/tetra-bluestation.git
synced 2026-09-02 00:59:01 +00:00
The MS stack is receive-timed: MessageRouter::run_stack_ms only ticks the entities once the PHY recovers a downlink slot (DL-synchronized). Before the MS syncs to a base station no tick runs, so MM's control-command path (poll_control in tick_start) never executes and management GetConfig/SetConfig/ ApplyConfig requests sit unserviced -- the UI sees an empty/absent config. Add a pre-tick offline-servicing path so config read/staging works as soon as the control link is up, independent of registration/service state: - TetraEntityTrait::drive_offline_control (default no-op); MessageRouter calls it on every run_stack_ms iteration that recovers no slot. - MmMs overrides it to service only the offline-safe management subset (GetConfig/SetConfig/ApplyConfig/GetState/GetInterfaceVersion) -- none inject SAP traffic needing the stack clock or a serving cell. Every other command (TNMM requests, scan-list toggles) is buffered in deferred_control and replayed, in arrival order, on the first real tick, so registration and on-air behaviour are byte-identical to never having run offline. No config schema change, no secret-handling change (******** redaction/restore preserved), no on-air/registration behaviour change. ApplyConfig staging/ restart semantics kept as-is. Tests: 4 new lib tests (offline GetConfig round-trip, offline SetConfig persist +restart flag, offline secret redaction, TNMM registration deferral-until-tick). 316 lib + all integration tests pass; bluestation-bs builds clean. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>