fix: Onboarding-Test trennt die Verbindung
I1: fail_test() kehrte ohne gespeicherte Zugangsdaten stillschweigend nach AP_ONBOARDING zurück, ohne den Stationsversuch zu trennen; ein danach doch noch eintreffendes CONNECTED wurde in AP_ONBOARDING ignoriert, aber der Treiber rief nl_mdns_on_ip_up() unabhängig vom Zustand auf - die Lampe landete offen im LAN, ohne dass Zugangsdaten gespeichert wurden. nl_wifi_actions_t bekommt ein neues Feld `disconnect`: - fail_test() ohne Zugangsdaten setzt es (Timeout/Fehler beendet den Stationsversuch). - Ein CONNECTED-Event in AP_ONBOARDING gilt als Ausreißer eines bereits gescheiterten Versuchs und wird ebenfalls getrennt (Zustand bleibt unverändert). - M1: nl_wifi_sm_onboard() trennt jetzt immer vor dem Testverbindungsaufbau, damit veraltete Events eines vorherigen Versuchs nicht mehr zählen; der Treiber (nl_wifi_request_onboard) meldet zusätzlich "wifi busy" (503), solange bereits ein Onboarding-Test läuft. Der Treiber (src/net/nl_wifi_w600.c) führt `disconnect` vor `connect` aus und ruft nl_mdns_on_ip_up() nur noch, wenn der Zustand nach der Verarbeitung tatsächlich STA_CONNECTED ist. Tests (test_wifi_sm.c): Timeout/Fehler ohne Zugangsdaten -> disconnect; CONNECTED während AP_ONBOARDING -> disconnect, Zustand unverändert; erneutes Onboarding während laufendem Test -> disconnect vor dem neuen connect.
This commit is contained in:
@@ -50,6 +50,7 @@ static void fail_test(nl_wifi_sm_t *sm, nl_wifi_error_t err, uint32_t now, nl_wi
|
||||
sm->connect_at = now;
|
||||
} else {
|
||||
sm->state = NL_WIFI_ST_AP_ONBOARDING;
|
||||
a->disconnect = true; /* I1: no stored creds -> drop the stray station attempt */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,6 +115,9 @@ nl_wifi_actions_t nl_wifi_sm_event(nl_wifi_sm_t *sm, nl_wifi_event_t ev, nl_wifi
|
||||
}
|
||||
break;
|
||||
case NL_WIFI_ST_AP_ONBOARDING:
|
||||
if (ev == NL_WIFI_EV_CONNECTED)
|
||||
a.disconnect = true; /* I1: stray success of a timed-out/failed attempt */
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -169,6 +173,7 @@ nl_wifi_actions_t nl_wifi_sm_onboard(nl_wifi_sm_t *sm, uint32_t now)
|
||||
sm->deadline = now + NL_WIFI_ONBOARD_TIMEOUT_MS;
|
||||
sm->retry_armed = false;
|
||||
sm->ap_stop_armed = false;
|
||||
a.disconnect = true; /* M1: drop any stale station attempt so its events don't count */
|
||||
a.connect = true;
|
||||
a.use_test_creds = true;
|
||||
return a;
|
||||
|
||||
@@ -30,6 +30,7 @@ typedef struct {
|
||||
bool connect; /* connect the station ... */
|
||||
bool use_test_creds; /* ... with the onboarding credentials instead of the stored ones */
|
||||
bool save_test_creds; /* onboarding succeeded: persist the onboarding credentials */
|
||||
bool disconnect; /* drop a stray/failed station attempt (before any connect in the same set) */
|
||||
bool pulse_on;
|
||||
bool pulse_off;
|
||||
} nl_wifi_actions_t;
|
||||
|
||||
Reference in New Issue
Block a user