From 7e432b0720a8cbf99e35520971c8dda064cdfeab Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 16 Jul 2021 13:10:18 +0300 Subject: [PATCH 1/5] Add back ARDUINO_EVENT_WIFI_READY Fixes: https://github.com/espressif/arduino-esp32/issues/5315 --- libraries/WiFi/src/WiFiGeneric.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 42c9d256788..1ec6cf26084 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -567,6 +567,11 @@ bool wifiLowLevelInit(bool persistent){ if(!persistent){ lowLevelInitDone = esp_wifi_set_storage(WIFI_STORAGE_RAM) == ESP_OK; } + if(lowLevelInitDone){ + arduino_event_t arduino_event; + arduino_event.event_id = ARDUINO_EVENT_WIFI_READY; + postArduinoEvent(&arduino_event); + } } return lowLevelInitDone; } From 92b2046203f21959e29d5b22081b170909be9506 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 16 Jul 2021 13:35:50 +0300 Subject: [PATCH 2/5] use strncpy and strncmp for WiFi SSID and Password in AP and STA Fixes: https://github.com/espressif/arduino-esp32/issues/5367 --- libraries/WiFi/src/WiFiAP.cpp | 8 ++++---- libraries/WiFi/src/WiFiSTA.cpp | 16 ++++------------ 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/libraries/WiFi/src/WiFiAP.cpp b/libraries/WiFi/src/WiFiAP.cpp index c008cfcbdce..5bdf13a9d73 100644 --- a/libraries/WiFi/src/WiFiAP.cpp +++ b/libraries/WiFi/src/WiFiAP.cpp @@ -60,10 +60,10 @@ static bool softap_config_equal(const wifi_config_t& lhs, const wifi_config_t& r */ static bool softap_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs) { - if(strcmp(reinterpret_cast(lhs.ap.ssid), reinterpret_cast(rhs.ap.ssid)) != 0) { + if(strncmp(reinterpret_cast(lhs.ap.ssid), reinterpret_cast(rhs.ap.ssid), 32) != 0) { return false; } - if(strcmp(reinterpret_cast(lhs.ap.password), reinterpret_cast(rhs.ap.password)) != 0) { + if(strncmp(reinterpret_cast(lhs.ap.password), reinterpret_cast(rhs.ap.password), 64) != 0) { return false; } if(lhs.ap.channel != rhs.ap.channel) { @@ -98,12 +98,12 @@ void wifi_softap_config(wifi_config_t *wifi_config, const char * ssid=NULL, cons wifi_config->ap.password[0] = 0; wifi_config->ap.ftm_responder = ftm_responder; if(ssid != NULL && ssid[0] != 0){ - snprintf((char*)wifi_config->ap.ssid, 32, ssid); + strncpy((char*)wifi_config->ap.ssid, ssid, 32); wifi_config->ap.ssid_len = strlen(ssid); if(password != NULL && password[0] != 0){ wifi_config->ap.authmode = authmode; wifi_config->ap.pairwise_cipher = WIFI_CIPHER_TYPE_CCMP; // Disable by default enabled insecure TKIP and use just CCMP. - snprintf((char*)wifi_config->ap.password, 64, password); + strncpy((char*)wifi_config->ap.password, password, 64); } } } diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp index 9d14ce58aa7..7fd81a74957 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -82,14 +82,10 @@ static void wifi_sta_config(wifi_config_t * wifi_config, const char * ssid=NULL, wifi_config->sta.ssid[0] = 0; wifi_config->sta.password[0] = 0; if(ssid != NULL && ssid[0] != 0){ - snprintf((char*)wifi_config->sta.ssid, 32, ssid); + strncpy((char*)wifi_config->sta.ssid, ssid, 32); if(password != NULL && password[0] != 0){ wifi_config->sta.threshold.authmode = WIFI_AUTH_WEP; - if(strlen(password) == 64){ - memcpy((char*)wifi_config->sta.password, password, 64); - } else { - snprintf((char*)wifi_config->sta.password, 64, password); - } + strncpy((char*)wifi_config->sta.password, password, 64); } if(bssid != NULL){ wifi_config->sta.bssid_set = 1; @@ -165,15 +161,11 @@ wl_status_t WiFiSTAClass::begin(const char* ssid, const char *passphrase, int32_ wifi_config_t conf; memset(&conf, 0, sizeof(wifi_config_t)); - strcpy(reinterpret_cast(conf.sta.ssid), ssid); + strncpy(reinterpret_cast(conf.sta.ssid), ssid, 32); conf.sta.scan_method = WIFI_ALL_CHANNEL_SCAN; //force full scan to be able to choose the nearest / strongest AP if(passphrase) { - if (strlen(passphrase) == 64){ // it's not a passphrase, is the PSK - memcpy(reinterpret_cast(conf.sta.password), passphrase, 64); - } else { - strcpy(reinterpret_cast(conf.sta.password), passphrase); - } + strncpy(reinterpret_cast(conf.sta.password), passphrase, 64); } wifi_config_t current_conf; From acb1155a3628bdcadae1dcc3db81f1bafeaf1f0d Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 16 Jul 2021 13:56:47 +0300 Subject: [PATCH 3/5] Implement timeout for waitForConnectResult Fixes: https://github.com/espressif/arduino-esp32/issues/5330 --- libraries/WiFi/src/WiFiSTA.cpp | 6 +++--- libraries/WiFi/src/WiFiSTA.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp index 7fd81a74957..7a51b3a3132 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -362,14 +362,14 @@ bool WiFiSTAClass::getAutoReconnect() * returns the status reached or disconnect if STA is off * @return wl_status_t */ -uint8_t WiFiSTAClass::waitForConnectResult() +uint8_t WiFiSTAClass::waitForConnectResult(unsigned long timeoutLength) { //1 and 3 have STA enabled if((WiFiGenericClass::getMode() & WIFI_MODE_STA) == 0) { return WL_DISCONNECTED; } - int i = 0; - while((!status() || status() >= WL_DISCONNECTED) && i++ < 100) { + unsigned long start = millis(); + while((!status() || status() >= WL_DISCONNECTED) && (millis() - start) < timeoutLength) { delay(100); } return status(); diff --git a/libraries/WiFi/src/WiFiSTA.h b/libraries/WiFi/src/WiFiSTA.h index 3efff426795..afd641f7eb3 100644 --- a/libraries/WiFi/src/WiFiSTA.h +++ b/libraries/WiFi/src/WiFiSTA.h @@ -56,7 +56,7 @@ class WiFiSTAClass bool setAutoReconnect(bool autoReconnect); bool getAutoReconnect(); - uint8_t waitForConnectResult(); + uint8_t waitForConnectResult(unsigned long timeoutLength = 60000); // STA network info IPAddress localIP(); From be2a341c3f39ba7c024a73a4412b9f50f76b93ca Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 16 Jul 2021 14:00:06 +0300 Subject: [PATCH 4/5] Remove old definition of "reverse" from stdlib_noniso Fixes: https://github.com/espressif/arduino-esp32/issues/5045 --- cores/esp32/stdlib_noniso.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/cores/esp32/stdlib_noniso.c b/cores/esp32/stdlib_noniso.c index e7920489037..6f196568d7e 100644 --- a/cores/esp32/stdlib_noniso.c +++ b/cores/esp32/stdlib_noniso.c @@ -29,18 +29,6 @@ #include #include "stdlib_noniso.h" -void reverse(char* begin, char* end) { - char *is = begin; - char *ie = end - 1; - while(is < ie) { - char tmp = *ie; - *ie = *is; - *is = tmp; - ++is; - --ie; - } -} - char* ltoa(long value, char* result, int base) { if(base < 2 || base > 16) { *result = 0; From de25b5ebbd3910a9c1c5066786e013dc4b51fc51 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 16 Jul 2021 14:30:22 +0300 Subject: [PATCH 5/5] Make "reverse" noniso conditional on ESP_DSP --- cores/esp32/stdlib_noniso.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/cores/esp32/stdlib_noniso.c b/cores/esp32/stdlib_noniso.c index 6f196568d7e..e68c92d0513 100644 --- a/cores/esp32/stdlib_noniso.c +++ b/cores/esp32/stdlib_noniso.c @@ -28,6 +28,23 @@ #include #include #include "stdlib_noniso.h" +#include "esp_system.h" + +#if !CONFIG_DSP_ANSI && !CONFIG_DSP_OPTIMIZED +void reverse(char* begin, char* end) { + char *is = begin; + char *ie = end - 1; + while(is < ie) { + char tmp = *ie; + *ie = *is; + *is = tmp; + ++is; + --ie; + } +} +#else +void reverse(char* begin, char* end); +#endif char* ltoa(long value, char* result, int base) { if(base < 2 || base > 16) {