Fix some WiFi issues (#5395)
* Add back ARDUINO_EVENT_WIFI_READY Fixes: https://github.com/espressif/arduino-esp32/issues/5315 * use strncpy and strncmp for WiFi SSID and Password in AP and STA Fixes: https://github.com/espressif/arduino-esp32/issues/5367 * Implement timeout for waitForConnectResult Fixes: https://github.com/espressif/arduino-esp32/issues/5330 * Remove old definition of "reverse" from stdlib_noniso Fixes: https://github.com/espressif/arduino-esp32/issues/5045 * Make "reverse" noniso conditional on ESP_DSP
This commit is contained in:
parent
cf6ab9c8a3
commit
dd25e2b9d6
@ -28,7 +28,9 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "stdlib_noniso.h"
|
#include "stdlib_noniso.h"
|
||||||
|
#include "esp_system.h"
|
||||||
|
|
||||||
|
#if !CONFIG_DSP_ANSI && !CONFIG_DSP_OPTIMIZED
|
||||||
void reverse(char* begin, char* end) {
|
void reverse(char* begin, char* end) {
|
||||||
char *is = begin;
|
char *is = begin;
|
||||||
char *ie = end - 1;
|
char *ie = end - 1;
|
||||||
@ -40,6 +42,9 @@ void reverse(char* begin, char* end) {
|
|||||||
--ie;
|
--ie;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
void reverse(char* begin, char* end);
|
||||||
|
#endif
|
||||||
|
|
||||||
char* ltoa(long value, char* result, int base) {
|
char* ltoa(long value, char* result, int base) {
|
||||||
if(base < 2 || base > 16) {
|
if(base < 2 || base > 16) {
|
||||||
|
@ -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)
|
static bool softap_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs)
|
||||||
{
|
{
|
||||||
if(strcmp(reinterpret_cast<const char*>(lhs.ap.ssid), reinterpret_cast<const char*>(rhs.ap.ssid)) != 0) {
|
if(strncmp(reinterpret_cast<const char*>(lhs.ap.ssid), reinterpret_cast<const char*>(rhs.ap.ssid), 32) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(strcmp(reinterpret_cast<const char*>(lhs.ap.password), reinterpret_cast<const char*>(rhs.ap.password)) != 0) {
|
if(strncmp(reinterpret_cast<const char*>(lhs.ap.password), reinterpret_cast<const char*>(rhs.ap.password), 64) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(lhs.ap.channel != rhs.ap.channel) {
|
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.password[0] = 0;
|
||||||
wifi_config->ap.ftm_responder = ftm_responder;
|
wifi_config->ap.ftm_responder = ftm_responder;
|
||||||
if(ssid != NULL && ssid[0] != 0){
|
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);
|
wifi_config->ap.ssid_len = strlen(ssid);
|
||||||
if(password != NULL && password[0] != 0){
|
if(password != NULL && password[0] != 0){
|
||||||
wifi_config->ap.authmode = authmode;
|
wifi_config->ap.authmode = authmode;
|
||||||
wifi_config->ap.pairwise_cipher = WIFI_CIPHER_TYPE_CCMP; // Disable by default enabled insecure TKIP and use just CCMP.
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -567,6 +567,11 @@ bool wifiLowLevelInit(bool persistent){
|
|||||||
if(!persistent){
|
if(!persistent){
|
||||||
lowLevelInitDone = esp_wifi_set_storage(WIFI_STORAGE_RAM) == ESP_OK;
|
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;
|
return lowLevelInitDone;
|
||||||
}
|
}
|
||||||
|
@ -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.ssid[0] = 0;
|
||||||
wifi_config->sta.password[0] = 0;
|
wifi_config->sta.password[0] = 0;
|
||||||
if(ssid != NULL && ssid[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){
|
if(password != NULL && password[0] != 0){
|
||||||
wifi_config->sta.threshold.authmode = WIFI_AUTH_WEP;
|
wifi_config->sta.threshold.authmode = WIFI_AUTH_WEP;
|
||||||
if(strlen(password) == 64){
|
strncpy((char*)wifi_config->sta.password, password, 64);
|
||||||
memcpy((char*)wifi_config->sta.password, password, 64);
|
|
||||||
} else {
|
|
||||||
snprintf((char*)wifi_config->sta.password, 64, password);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(bssid != NULL){
|
if(bssid != NULL){
|
||||||
wifi_config->sta.bssid_set = 1;
|
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;
|
wifi_config_t conf;
|
||||||
memset(&conf, 0, sizeof(wifi_config_t));
|
memset(&conf, 0, sizeof(wifi_config_t));
|
||||||
strcpy(reinterpret_cast<char*>(conf.sta.ssid), ssid);
|
strncpy(reinterpret_cast<char*>(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
|
conf.sta.scan_method = WIFI_ALL_CHANNEL_SCAN; //force full scan to be able to choose the nearest / strongest AP
|
||||||
|
|
||||||
if(passphrase) {
|
if(passphrase) {
|
||||||
if (strlen(passphrase) == 64){ // it's not a passphrase, is the PSK
|
strncpy(reinterpret_cast<char*>(conf.sta.password), passphrase, 64);
|
||||||
memcpy(reinterpret_cast<char*>(conf.sta.password), passphrase, 64);
|
|
||||||
} else {
|
|
||||||
strcpy(reinterpret_cast<char*>(conf.sta.password), passphrase);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wifi_config_t current_conf;
|
wifi_config_t current_conf;
|
||||||
@ -370,14 +362,14 @@ bool WiFiSTAClass::getAutoReconnect()
|
|||||||
* returns the status reached or disconnect if STA is off
|
* returns the status reached or disconnect if STA is off
|
||||||
* @return wl_status_t
|
* @return wl_status_t
|
||||||
*/
|
*/
|
||||||
uint8_t WiFiSTAClass::waitForConnectResult()
|
uint8_t WiFiSTAClass::waitForConnectResult(unsigned long timeoutLength)
|
||||||
{
|
{
|
||||||
//1 and 3 have STA enabled
|
//1 and 3 have STA enabled
|
||||||
if((WiFiGenericClass::getMode() & WIFI_MODE_STA) == 0) {
|
if((WiFiGenericClass::getMode() & WIFI_MODE_STA) == 0) {
|
||||||
return WL_DISCONNECTED;
|
return WL_DISCONNECTED;
|
||||||
}
|
}
|
||||||
int i = 0;
|
unsigned long start = millis();
|
||||||
while((!status() || status() >= WL_DISCONNECTED) && i++ < 100) {
|
while((!status() || status() >= WL_DISCONNECTED) && (millis() - start) < timeoutLength) {
|
||||||
delay(100);
|
delay(100);
|
||||||
}
|
}
|
||||||
return status();
|
return status();
|
||||||
|
@ -56,7 +56,7 @@ public:
|
|||||||
bool setAutoReconnect(bool autoReconnect);
|
bool setAutoReconnect(bool autoReconnect);
|
||||||
bool getAutoReconnect();
|
bool getAutoReconnect();
|
||||||
|
|
||||||
uint8_t waitForConnectResult();
|
uint8_t waitForConnectResult(unsigned long timeoutLength = 60000);
|
||||||
|
|
||||||
// STA network info
|
// STA network info
|
||||||
IPAddress localIP();
|
IPAddress localIP();
|
||||||
|
Loading…
Reference in New Issue
Block a user