Fix SmartConfig not saving the correct config
Fixes: https://github.com/espressif/arduino-esp32/issues/275
This commit is contained in:
		
							parent
							
								
									dda89947a7
								
							
						
					
					
						commit
						a07f9842af
					
				| @ -41,6 +41,7 @@ extern "C" { | |||||||
| #include "lwip/err.h" | #include "lwip/err.h" | ||||||
| #include "lwip/dns.h" | #include "lwip/dns.h" | ||||||
| #include <esp_smartconfig.h> | #include <esp_smartconfig.h> | ||||||
|  | #include <tcpip_adapter.h> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // -----------------------------------------------------------------------------------------------------------------------
 | // -----------------------------------------------------------------------------------------------------------------------
 | ||||||
| @ -524,6 +525,7 @@ bool WiFiSTAClass::beginSmartConfig() { | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     esp_wifi_disconnect(); | ||||||
| 
 | 
 | ||||||
|     esp_err_t err; |     esp_err_t err; | ||||||
|     err = esp_smartconfig_start(reinterpret_cast<sc_callback_t>(&WiFiSTAClass::_smartConfigCallback), 1); |     err = esp_smartconfig_start(reinterpret_cast<sc_callback_t>(&WiFiSTAClass::_smartConfigCallback), 1); | ||||||
| @ -556,17 +558,39 @@ bool WiFiSTAClass::smartConfigDone() { | |||||||
|     return _smartConfigDone; |     return _smartConfigDone; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG | ||||||
|  | const char * sc_status_strings[] = { | ||||||
|  |     "WAIT", | ||||||
|  |     "FIND_CHANNEL", | ||||||
|  |     "GETTING_SSID_PSWD", | ||||||
|  |     "LINK", | ||||||
|  |     "LINK_OVER" | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const char * sc_type_strings[] = { | ||||||
|  |     "ESPTOUCH", | ||||||
|  |     "AIRKISS", | ||||||
|  |     "ESPTOUCH_AIRKISS" | ||||||
|  | }; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| void WiFiSTAClass::_smartConfigCallback(uint32_t st, void* result) { | void WiFiSTAClass::_smartConfigCallback(uint32_t st, void* result) { | ||||||
|     smartconfig_status_t status = (smartconfig_status_t) st; |     smartconfig_status_t status = (smartconfig_status_t) st; | ||||||
|     if (status == SC_STATUS_LINK) { |     log_d("Status: %s", sc_status_strings[st % 5]); | ||||||
|  |     if (status == SC_STATUS_GETTING_SSID_PSWD) { | ||||||
|  |         smartconfig_type_t * type = (smartconfig_type_t *)result; | ||||||
|  |         log_d("Type: %s", sc_type_strings[*type % 3]); | ||||||
|  |     } else if (status == SC_STATUS_LINK) { | ||||||
|         wifi_sta_config_t *sta_conf = reinterpret_cast<wifi_sta_config_t *>(result); |         wifi_sta_config_t *sta_conf = reinterpret_cast<wifi_sta_config_t *>(result); | ||||||
| 
 |         log_d("SSID: %s", (char *)(sta_conf->ssid)); | ||||||
|         esp_wifi_set_config(WIFI_IF_AP, (wifi_config_t *)sta_conf); |         esp_wifi_set_config(WIFI_IF_STA, (wifi_config_t *)sta_conf); | ||||||
|         esp_wifi_disconnect(); |  | ||||||
|         esp_wifi_connect(); |         esp_wifi_connect(); | ||||||
| 
 |  | ||||||
|         _smartConfigDone = true; |         _smartConfigDone = true; | ||||||
|     } else if (status == SC_STATUS_LINK_OVER) { |     } else if (status == SC_STATUS_LINK_OVER) { | ||||||
|  |         if(result){ | ||||||
|  |             ip4_addr_t * ip = (ip4_addr_t *)result; | ||||||
|  |             log_d("Sender IP: " IPSTR, IP2STR(ip)); | ||||||
|  |         } | ||||||
|         WiFi.stopSmartConfig(); |         WiFi.stopSmartConfig(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user