mirror of
https://github.com/ALLFATHER-BV/wadamesh.git
synced 2026-11-13 10:57:36 +00:00
On units whose C6 runs LilyGo's factory ESP-AT image, Wi-Fi died after about an hour: scans came back empty, Connect did nothing, and only a reboot helped. The AT worker brought the SDIO link up once at boot and never again, so a C6 that wedged mid-session left every command timing out for the rest of the session. Link health: AT commands now report OK / ERROR / TIMEOUT / BUSY. A timeout or busy reply asks for a plain "AT" ping; a ping that times out, or three command timeouts in a row with no answer between them, is a stall. ERROR replies are answers and never count. Connects to dead hosts (CIPSTART) and missing CIPSEND prompts only ask for a ping. The decision logic lives in c6_link_health.h with a host test. Recovery: on a stall the worker takes the link down at once (queued requests fail fast, links read closed so the TCP/WS companion servers prune them), then runs sdio_bring_down + the XL9535 C6 reset + c6at_begin, the same path as boot. Resets back off 30 s, 60 s, 120 s, 240 s, then every 5 min; 10 min of a healthy link resets the ladder. After a successful reset it rejoins the last network and the kept listener want-flag re-arms AT+CIPSERVER, so port 5000 comes back without app-side changes. The Wi-Fi status reads "reconnecting" meanwhile, and main.cpp no longer treats the reset as "radio off". Join/disconnect: one latest-wins slot instead of the 6-deep queue, so the user's Connect can no longer be dropped behind 10 s retry pairs and a stale CWQAP can no longer undo a fresh join. c6at_join_busy() gates main.cpp's retry while a join is pending or running. Bring-up now also sends AT+SLEEP=0 and sets AT+CWRECONNCFG=5,0 when the AT build supports it (query first; ERROR on old images is ignored). The esp-hosted build is unchanged: everything is in the c6_at component or behind !TDP4_C6_HOSTED. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>