Fix SmartConfig not saving the correct config

Fixes: https://github.com/espressif/arduino-esp32/issues/275
This commit is contained in:
me-no-dev 2017-03-24 13:20:31 +02:00
parent dda89947a7
commit a07f9842af

View File

@ -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();
} }
} }