@@ -72,6 +72,7 @@ void wifi_station_wps_msg_timeout(void *data, void *user_ctx);
7272void wifi_station_wps_eapol_start_handle (void * data , void * user_ctx );
7373void wifi_station_wps_success (void * data , void * user_ctx );
7474void wifi_station_wps_timeout (void * data , void * user_ctx );
75+ int wps_delete_timer (void );
7576
7677struct wps_sm * gWpsSm = NULL ;
7778static wps_factory_information_t * s_factory_info = NULL ;
@@ -623,14 +624,14 @@ int wps_process_wps_mX_req(u8 *ubuf, int len, enum wps_process_res *res)
623624 if (expd -> opcode != WSC_Start ) {
624625 wpa_printf (MSG_DEBUG , "EAP-WSC: Unexpected Op-Code %d "
625626 "in WAIT_START state" , expd -> opcode );
626- return ESP_FAIL ;
627+ return ESP_ERR_INVALID_STATE ;
627628 }
628629 wpa_printf (MSG_DEBUG , "EAP-WSC: Received start" );
629630 sm -> state = WPA_MESG ;
630631 } else if (expd -> opcode == WSC_Start ) {
631632 wpa_printf (MSG_DEBUG , "EAP-WSC: Unexpected Op-Code %d" ,
632633 expd -> opcode );
633- return ESP_FAIL ;
634+ return ESP_ERR_INVALID_STATE ;
634635 }
635636
636637 flag = * (u8 * )(ubuf + sizeof (struct eap_expand ));
@@ -834,7 +835,8 @@ int wps_finish(void)
834835 if (sm -> wps -> state == WPS_FINISHED ) {
835836 wpa_printf (MSG_DEBUG , "wps finished------>" );
836837 wps_set_status (WPS_STATUS_SUCCESS );
837- wps_stop_connection_timers (sm );
838+ /* WPS finished, dequeue all timers */
839+ wps_delete_timer ();
838840
839841 if (sm -> ap_cred_cnt == 1 ) {
840842 wifi_config_t * config = os_zalloc (sizeof (wifi_config_t ));
@@ -844,6 +846,7 @@ int wps_finish(void)
844846 }
845847
846848 esp_wifi_get_config (WIFI_IF_STA , config );
849+ esp_wifi_disconnect ();
847850 os_memcpy (config -> sta .ssid , sm -> creds [0 ].ssid , sm -> creds [0 ].ssid_len );
848851 os_memcpy (config -> sta .password , sm -> creds [0 ].key , sm -> creds [0 ].key_len );
849852 os_memcpy (config -> sta .bssid , sm -> bssid , ETH_ALEN );
@@ -857,6 +860,7 @@ int wps_finish(void)
857860 config -> sta .bssid_set = 0 ;
858861 config -> sta .sae_pwe_h2e = 0 ;
859862 esp_wifi_set_config (WIFI_IF_STA , config );
863+ esp_wifi_connect ();
860864
861865 os_free (config );
862866 }
@@ -1092,6 +1096,8 @@ int wps_sm_rx_eapol_internal(u8 *src_addr, u8 *buf, u32 len)
10921096 wpa_printf (MSG_DEBUG , "sm->wps->state = %d" , sm -> wps -> state );
10931097 wps_start_msg_timer ();
10941098 }
1099+ } else if (ret == ESP_ERR_INVALID_STATE ) {
1100+ ret = ESP_OK ;
10951101 } else {
10961102 ret = ESP_FAIL ;
10971103 }
@@ -1654,6 +1660,7 @@ wifi_wps_scan_done(void *arg, ETS_STATUS status)
16541660 esp_wifi_set_config (0 , & wifi_config );
16551661
16561662 wpa_printf (MSG_DEBUG , "WPS: neg start" );
1663+ wifi_config .sta .failure_retry_cnt = 2 ;
16571664 esp_wifi_connect ();
16581665 sm -> state = WAIT_START ;
16591666 eloop_cancel_timeout (wifi_station_wps_msg_timeout , NULL , NULL );
0 commit comments