Skip to content

Commit 67834b6

Browse files
WiFi Should Reconnect For Most Reasons
See also issue espressif#7210
1 parent a5f03a8 commit 67834b6

File tree

2 files changed

+25
-16
lines changed

2 files changed

+25
-16
lines changed

Diff for: libraries/WiFi/src/WiFiGeneric.cpp

+21-15
Original file line numberDiff line numberDiff line change
@@ -960,26 +960,26 @@ esp_err_t WiFiGenericClass::_eventCallback(arduino_event_t *event)
960960
WiFiSTAClass::_setStatus(WL_DISCONNECTED);
961961
}
962962
clearStatusBits(STA_CONNECTED_BIT | STA_HAS_IP_BIT | STA_HAS_IP6_BIT);
963-
if(first_connect && ((reason == WIFI_REASON_AUTH_EXPIRE) ||
964-
(reason >= WIFI_REASON_BEACON_TIMEOUT)))
965-
{
966-
log_d("WiFi Reconnect Running");
967-
WiFi.disconnect();
968-
WiFi.begin();
963+
964+
bool DoReconnect = false;
965+
if(reason == WIFI_REASON_ASSOC_LEAVE) { //Voluntarily disconnected. Don't reconnect!
966+
}
967+
else if(first_connect) { //Retry once for all failure reasons
969968
first_connect = false;
969+
DoReconnect = true;
970+
log_d("WiFi Reconnect Running");
970971
}
971-
else if(WiFi.getAutoReconnect()){
972-
if((reason == WIFI_REASON_AUTH_EXPIRE) ||
973-
(reason >= WIFI_REASON_BEACON_TIMEOUT && reason != WIFI_REASON_AUTH_FAIL))
974-
{
975-
log_d("WiFi AutoReconnect Running");
976-
WiFi.disconnect();
977-
WiFi.begin();
978-
}
972+
else if(WiFi.getAutoReconnect() && _isReconnectableReason(reason)) {
973+
DoReconnect = true;
974+
log_d("WiFi AutoReconnect Running");
979975
}
980-
else if (reason == WIFI_REASON_ASSOC_FAIL){
976+
else if(reason == WIFI_REASON_ASSOC_FAIL) {
981977
WiFiSTAClass::_setStatus(WL_CONNECT_FAILED);
982978
}
979+
if(DoReconnect) {
980+
WiFi.disconnect();
981+
WiFi.begin();
982+
}
983983
} else if(event->event_id == ARDUINO_EVENT_WIFI_STA_GOT_IP) {
984984
#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG
985985
uint8_t * ip = (uint8_t *)&(event->event_info.got_ip.ip_info.ip.addr);
@@ -1063,6 +1063,12 @@ esp_err_t WiFiGenericClass::_eventCallback(arduino_event_t *event)
10631063
return ESP_OK;
10641064
}
10651065

1066+
bool WiFiGenericClass::_isReconnectableReason(uint8_t reason) {
1067+
return (reason == WIFI_REASON_AUTH_EXPIRE) ||
1068+
(reason == WIFI_REASON_ASSOC_EXPIRE) ||
1069+
(reason >= WIFI_REASON_BEACON_TIMEOUT);
1070+
}
1071+
10661072
/**
10671073
* Return the current channel associated with the network
10681074
* @return channel (1-13)

Diff for: libraries/WiFi/src/WiFiGeneric.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,10 @@ class WiFiGenericClass
206206

207207
static int setStatusBits(int bits);
208208
static int clearStatusBits(int bits);
209-
209+
210+
private:
211+
static bool _isReconnectableReason(uint8_t reason);
212+
210213
public:
211214
static int hostByName(const char *aHostname, IPAddress &aResult);
212215

0 commit comments

Comments
 (0)