fix: SDK-SoftAP-Parameter löschen
C2: tls_wifi_softap_create() setzt das SOFTAP-Bit (IEEE80211_MODE_AP = 4) in TLS_PARAM_ID_WPROTOCOL und schreibt es in den Flash; tls_wifi_softap_destroy() löscht es nie wieder. Solange das Bit gesetzt bleibt, erstellt sys_net_status_changed() (sdk/Platform/Sys/tls_sys.c:519-525) bei jedem NETIF_IP_NET_UP über tls_auto_reconnect_softap() erneut den Onboarding-AP mit den SDK-eigenen (öffentlichen Default-)Parametern - unabhängig vom Auto-Connect-Flag. Nach jedem Onboarding/Fallback käme der AP `ninlight-<mac4>` mit dem öffentlichen Default-Passwort bei jedem Reconnect/Reboot zurück, offen fürs LAN (SDK-NAPT). Verifiziert in sdk/Platform/Sys/tls_sys.c, sdk/Include/Platform/wm_params.h und sdk/Platform/Common/Params/wm_param.c: - TLS_PARAM_ID_WPROTOCOL (10) ist ein u8, TLS_PARAM_IEEE80211_SOFTAP == 4 == IEEE80211_MODE_AP (sdk/Include/WiFi/wm_wifi.h). - tls_param_get()/tls_param_set(id, argv, to_flash) - genau die Signaturen aus dem Finding. - tls_param_to_default() (tls_param_load_factory_default() + param_to_flash()) arbeitet ausschließlich auf `struct tls_sys_param` (Wi-Fi/Netzwerk-Konfig); es liest/schreibt nirgends die MAC-Adresse oder RF-Kalibrierdaten - die liegen in einer komplett getrennten, efuse-gestützten FT_PARAM_ST-Struktur in sdk/Platform/Drivers/efuse/wm_efuse.c. tls_param_to_default() ist damit für den Werksreset sicher. Fix (nl_wifi_w600.c): 1. clear_softap_param(): liest TLS_PARAM_ID_WPROTOCOL, löscht bei gesetztem IEEE80211_MODE_AP-Bit und persistiert das (to_flash=TRUE). Aufgerufen in nl_wifi_start() (vor allem anderen) und nach jedem tls_wifi_softap_destroy(). 2. nl_wifi_start(): zerstört einen bereits vom SDK selbst erzeugten SoftAP (tls_wifi_softap_get_state() != WM_WIFI_DISCONNECTED), bevor unsere eigene State Machine startet. 3. Backstop im Netzwerk-Task: NETIF_WIFI_SOFTAP_SUCCESS, während die State Machine sagt, der AP solle unten sein (s_sm.ap_up == false) -> AP wieder zerstören und Param erneut löschen (geloggt). 4. Werksreset (nl_app_factory_reset, src/app_main.c): setzt zusätzlich tls_param_to_default() (siehe Verifikation oben) und dokumentiert das inline. Nebenbei im selben Treiber erledigt, weil sie denselben Codepfad betreffen: - M2: connect_station() loggt den Rückgabewert von tls_wifi_connect(), wenn er nicht WM_SUCCESS ist. - M3: start_ap() merkt sich einen fehlgeschlagenen tls_wifi_softap_create() (`s_ap_create_pending`) und wiederholt ihn alle 5 s, solange die State Machine den AP oben haben will. Nicht host-testbar (bindet SDK-Header ein); über den Firmware-Build verifiziert (baut sauber für evk, keine neuen Warnungen).
This commit is contained in:
@@ -107,6 +107,13 @@ void nl_app_factory_reset(void)
|
||||
nl_state_log_erase();
|
||||
nl_resetcnt_clear();
|
||||
store_unlock();
|
||||
/* C2: also wipe the SDK's own Wi-Fi params (SSID/key/WPROTOCOL, incl. any leftover
|
||||
* softap bit) - verified in sdk/Platform/Common/Params/wm_param.c that
|
||||
* tls_param_to_default() (tls_param_load_factory_default() + param_to_flash()) only
|
||||
* touches struct tls_sys_param (Wi-Fi/network config); it never touches the MAC
|
||||
* address or RF calibration data, which live in a separate efuse-backed FT_PARAM_ST
|
||||
* area (sdk/Platform/Drivers/efuse/wm_efuse.c) that this call never reads or writes. */
|
||||
tls_param_to_default();
|
||||
tls_sys_reset();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user