1+ flowchart TD
2+ Start ([ " User Sketch Starts" ]) --> Init [ " Create NetWizard instance<br />NW = NetWizard(&server)" ]
3+ Init --> Config [ " Optional Setup:<br />setStrategy, setHostname,<br />setAuthentication, addParameters,<br />register callbacks" ]
4+ Config --> AC [ " autoConnect(apSSID, apPass)" ]
5+
6+ AC --> LoadCreds [ " Load saved WiFi credentials<br />from NVS / Preferences" ]
7+ LoadCreds --> HasCreds { " Saved credentials<br />exist?" }
8+
9+ HasCreds -- Yes --> TryConnect [ " Connect to saved WiFi<br />with retry up to connectTimeout" ]
10+ TryConnect --> Connected { " Connected?" }
11+ Connected -- Yes --> Done [ " WiFi Connected" ]
12+ Connected -- No --> NeedPortal [ " Start Captive Portal" ]
13+
14+ HasCreds -- No --> NeedPortal
15+
16+ NeedPortal --> PortalStart [ " Start Captive Portal<br />WiFi AP+STA mode<br />DNS Server + HTTP Server + WiFi Scan" ]
17+
18+ subgraph Portal [ "Captive Portal Active"]
19+ direction TB
20+ PortalUI [ " User opens portal webpage<br />192.168.4.1" ]
21+ PortalUI --> SelectWiFi [ " Selects WiFi network<br />+ enters password + config params" ]
22+ SelectWiFi --> Submit [ " Submits via /netwizard/save" ]
23+ Submit --> TryNew [ " Portal tries connecting<br />to submitted credentials" ]
24+ TryNew --> NewResult { " Connected?" }
25+ NewResult -- Yes --> SaveCreds [ " Save credentials to NVS<br />State = SUCCESS" ]
26+ NewResult -- No / Timeout --> RetryOrFail [ " State = TIMEOUT<br />User can try again" ]
27+ RetryOrFail --> PortalUI
28+ end
29+
30+ PortalStart --> Portal
31+
32+ subgraph Strategy [ "Execution Strategy"]
33+ direction LR
34+ Blocking [ " BLOCKING<br />Waits here until<br />portal completes" ]
35+ NonBlocking [ " NON_BLOCKING<br />Returns immediately" ]
36+ end
37+
38+ PortalStart --> Strategy
39+
40+ SaveCreds --> StopPortal [ " Stop Portal<br />Stop DNS + HTTP + SoftAP" ]
41+ StopPortal --> Reconnect { " Has saved<br />credentials?" }
42+ Reconnect -- Yes --> STAMode [ " Switch to STA mode<br />Connect to saved WiFi" ]
43+ Reconnect -- No --> Off [ " Turn WiFi off" ]
44+ STAMode --> Done
45+ Off --> Idle [ " Idle - No WiFi" ]
46+
47+ Done --> MainLoop ([ " loop - must be called repeatedly" ])
48+ Idle --> MainLoop
49+
50+ MainLoop --> M1 [ " Process DNS + HTTP requests" ]
51+ M1 --> M2 [ " Update WiFi connection status" ]
52+ M2 --> M3 [ " Run portal state machine<br />if portal is active" ]
53+ M3 --> M4 [ " Check portal timeout<br />Default: 5 minutes" ]
54+ M4 --> M5 [ " Fire status/state<br />change callbacks" ]
55+ M5 --> MainLoop
56+
57+ classDef green fill :#4CAF50 , stroke :#388E3C , color :#fff
58+ classDef blue fill :#2196F3 , stroke :#1565C0 , color :#fff
59+ classDef orange fill :#FF9800 , stroke :#E65100 , color :#fff
60+ classDef purple fill :#9C27B0 , stroke :#6A1B9A , color :#fff
61+ classDef red fill :#f44336 , stroke :#c62828 , color :#fff
62+
63+ class Done ,SaveCreds green
64+ class PortalStart ,Portal blue
65+ class TryConnect ,TryNew orange
66+ class MainLoop purple
67+ class RetryOrFail ,Off red
0 commit comments