From a07f9842af1cbc49f0484b5c957616d5f3843879 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 24 Mar 2017 13:20:31 +0200 Subject: [PATCH] Fix SmartConfig not saving the correct config Fixes: https://github.com/espressif/arduino-esp32/issues/275 --- libraries/WiFi/src/WiFiSTA.cpp | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp index 60d7125d..6fcdbbb6 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -41,6 +41,7 @@ extern "C" { #include "lwip/err.h" #include "lwip/dns.h" #include +#include } // ----------------------------------------------------------------------------------------------------------------------- @@ -524,6 +525,7 @@ bool WiFiSTAClass::beginSmartConfig() { return false; } + esp_wifi_disconnect(); esp_err_t err; err = esp_smartconfig_start(reinterpret_cast(&WiFiSTAClass::_smartConfigCallback), 1); @@ -556,17 +558,39 @@ bool WiFiSTAClass::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) { 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(result); - - esp_wifi_set_config(WIFI_IF_AP, (wifi_config_t *)sta_conf); - esp_wifi_disconnect(); + log_d("SSID: %s", (char *)(sta_conf->ssid)); + esp_wifi_set_config(WIFI_IF_STA, (wifi_config_t *)sta_conf); esp_wifi_connect(); - _smartConfigDone = true; } 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(); } }