Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 32f38f0

Browse filesBrowse files
mrengineer7777me-no-dev
authored andcommitted
WFG Crashfix (espressif#8043)
1 parent 13f15e9 commit 32f38f0
Copy full SHA for 32f38f0

File tree

2 files changed

+126
-22
lines changed
Filter options

2 files changed

+126
-22
lines changed

‎libraries/WiFi/src/WiFiGeneric.cpp

Copy file name to clipboardExpand all lines: libraries/WiFi/src/WiFiGeneric.cpp
+124-22Lines changed: 124 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,126 @@ WiFiGenericClass::WiFiGenericClass()
768768
{
769769
}
770770

771+
/**
772+
* @brief Convert wifi_err_reason_t to a string.
773+
* @param [in] reason The reason to be converted.
774+
* @return A string representation of the error code.
775+
* @note: wifi_err_reason_t values as of Mar 2023 (arduino-esp32 r2.0.7) are: (1-39, 46-51, 67-68, 200-208) and are defined in /tools/sdk/esp32/include/esp_wifi/include/esp_wifi_types.h.
776+
*/
777+
const char * WiFiGenericClass::disconnectReasonName(wifi_err_reason_t reason) {
778+
switch(reason) {
779+
//ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(2,0,7)
780+
case WIFI_REASON_UNSPECIFIED: return "UNSPECIFIED";
781+
case WIFI_REASON_AUTH_EXPIRE: return "AUTH_EXPIRE";
782+
case WIFI_REASON_AUTH_LEAVE: return "AUTH_LEAVE";
783+
case WIFI_REASON_ASSOC_EXPIRE: return "ASSOC_EXPIRE";
784+
case WIFI_REASON_ASSOC_TOOMANY: return "ASSOC_TOOMANY";
785+
case WIFI_REASON_NOT_AUTHED: return "NOT_AUTHED";
786+
case WIFI_REASON_NOT_ASSOCED: return "NOT_ASSOCED";
787+
case WIFI_REASON_ASSOC_LEAVE: return "ASSOC_LEAVE";
788+
case WIFI_REASON_ASSOC_NOT_AUTHED: return "ASSOC_NOT_AUTHED";
789+
case WIFI_REASON_DISASSOC_PWRCAP_BAD: return "DISASSOC_PWRCAP_BAD";
790+
case WIFI_REASON_DISASSOC_SUPCHAN_BAD: return "DISASSOC_SUPCHAN_BAD";
791+
case WIFI_REASON_BSS_TRANSITION_DISASSOC: return "BSS_TRANSITION_DISASSOC";
792+
case WIFI_REASON_IE_INVALID: return "IE_INVALID";
793+
case WIFI_REASON_MIC_FAILURE: return "MIC_FAILURE";
794+
case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT: return "4WAY_HANDSHAKE_TIMEOUT";
795+
case WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT: return "GROUP_KEY_UPDATE_TIMEOUT";
796+
case WIFI_REASON_IE_IN_4WAY_DIFFERS: return "IE_IN_4WAY_DIFFERS";
797+
case WIFI_REASON_GROUP_CIPHER_INVALID: return "GROUP_CIPHER_INVALID";
798+
case WIFI_REASON_PAIRWISE_CIPHER_INVALID: return "PAIRWISE_CIPHER_INVALID";
799+
case WIFI_REASON_AKMP_INVALID: return "AKMP_INVALID";
800+
case WIFI_REASON_UNSUPP_RSN_IE_VERSION: return "UNSUPP_RSN_IE_VERSION";
801+
case WIFI_REASON_INVALID_RSN_IE_CAP: return "INVALID_RSN_IE_CAP";
802+
case WIFI_REASON_802_1X_AUTH_FAILED: return "802_1X_AUTH_FAILED";
803+
case WIFI_REASON_CIPHER_SUITE_REJECTED: return "CIPHER_SUITE_REJECTED";
804+
case WIFI_REASON_TDLS_PEER_UNREACHABLE: return "TDLS_PEER_UNREACHABLE";
805+
case WIFI_REASON_TDLS_UNSPECIFIED: return "TDLS_UNSPECIFIED";
806+
case WIFI_REASON_SSP_REQUESTED_DISASSOC: return "SSP_REQUESTED_DISASSOC";
807+
case WIFI_REASON_NO_SSP_ROAMING_AGREEMENT: return "NO_SSP_ROAMING_AGREEMENT";
808+
case WIFI_REASON_BAD_CIPHER_OR_AKM: return "BAD_CIPHER_OR_AKM";
809+
case WIFI_REASON_NOT_AUTHORIZED_THIS_LOCATION: return "NOT_AUTHORIZED_THIS_LOCATION";
810+
case WIFI_REASON_SERVICE_CHANGE_PERCLUDES_TS: return "SERVICE_CHANGE_PERCLUDES_TS";
811+
case WIFI_REASON_UNSPECIFIED_QOS: return "UNSPECIFIED_QOS";
812+
case WIFI_REASON_NOT_ENOUGH_BANDWIDTH: return "NOT_ENOUGH_BANDWIDTH";
813+
case WIFI_REASON_MISSING_ACKS: return "MISSING_ACKS";
814+
case WIFI_REASON_EXCEEDED_TXOP: return "EXCEEDED_TXOP";
815+
case WIFI_REASON_STA_LEAVING: return "STA_LEAVING";
816+
case WIFI_REASON_END_BA: return "END_BA";
817+
case WIFI_REASON_UNKNOWN_BA: return "UNKNOWN_BA";
818+
case WIFI_REASON_TIMEOUT: return "TIMEOUT";
819+
case WIFI_REASON_PEER_INITIATED: return "PEER_INITIATED";
820+
case WIFI_REASON_AP_INITIATED: return "AP_INITIATED";
821+
case WIFI_REASON_INVALID_FT_ACTION_FRAME_COUNT: return "INVALID_FT_ACTION_FRAME_COUNT";
822+
case WIFI_REASON_INVALID_PMKID: return "INVALID_PMKID";
823+
case WIFI_REASON_INVALID_MDE: return "INVALID_MDE";
824+
case WIFI_REASON_INVALID_FTE: return "INVALID_FTE";
825+
case WIFI_REASON_TRANSMISSION_LINK_ESTABLISH_FAILED: return "TRANSMISSION_LINK_ESTABLISH_FAILED";
826+
case WIFI_REASON_ALTERATIVE_CHANNEL_OCCUPIED: return "ALTERATIVE_CHANNEL_OCCUPIED";
827+
case WIFI_REASON_BEACON_TIMEOUT: return "BEACON_TIMEOUT";
828+
case WIFI_REASON_NO_AP_FOUND: return "NO_AP_FOUND";
829+
case WIFI_REASON_AUTH_FAIL: return "AUTH_FAIL";
830+
case WIFI_REASON_ASSOC_FAIL: return "ASSOC_FAIL";
831+
case WIFI_REASON_HANDSHAKE_TIMEOUT: return "HANDSHAKE_TIMEOUT";
832+
case WIFI_REASON_CONNECTION_FAIL: return "CONNECTION_FAIL";
833+
case WIFI_REASON_AP_TSF_RESET: return "AP_TSF_RESET";
834+
case WIFI_REASON_ROAMING: return "ROAMING";
835+
default: return "";
836+
}
837+
}
838+
839+
/**
840+
* @brief Convert arduino_event_id_t to a C string.
841+
* @param [in] id The event id to be converted.
842+
* @return A string representation of the event id.
843+
* @note: arduino_event_id_t values as of Mar 2023 (arduino-esp32 r2.0.7) are: 0-39 (ARDUINO_EVENT_MAX=40) and are defined in WiFiGeneric.h.
844+
*/
845+
const char * WiFiGenericClass::eventName(arduino_event_id_t id) {
846+
switch(id) {
847+
case ARDUINO_EVENT_WIFI_READY: return "WIFI_READY";
848+
case ARDUINO_EVENT_WIFI_SCAN_DONE: return "SCAN_DONE";
849+
case ARDUINO_EVENT_WIFI_STA_START: return "STA_START";
850+
case ARDUINO_EVENT_WIFI_STA_STOP: return "STA_STOP";
851+
case ARDUINO_EVENT_WIFI_STA_CONNECTED: return "STA_CONNECTED";
852+
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED: return "STA_DISCONNECTED";
853+
case ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE: return "STA_AUTHMODE_CHANGE";
854+
case ARDUINO_EVENT_WIFI_STA_GOT_IP: return "STA_GOT_IP";
855+
case ARDUINO_EVENT_WIFI_STA_GOT_IP6: return "STA_GOT_IP6";
856+
case ARDUINO_EVENT_WIFI_STA_LOST_IP: return "STA_LOST_IP";
857+
case ARDUINO_EVENT_WIFI_AP_START: return "AP_START";
858+
case ARDUINO_EVENT_WIFI_AP_STOP: return "AP_STOP";
859+
case ARDUINO_EVENT_WIFI_AP_STACONNECTED: return "AP_STACONNECTED";
860+
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED: return "AP_STADISCONNECTED";
861+
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED: return "AP_STAIPASSIGNED";
862+
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED: return "AP_PROBEREQRECVED";
863+
case ARDUINO_EVENT_WIFI_AP_GOT_IP6: return "AP_GOT_IP6";
864+
case ARDUINO_EVENT_WIFI_FTM_REPORT: return "FTM_REPORT";
865+
case ARDUINO_EVENT_ETH_START: return "ETH_START";
866+
case ARDUINO_EVENT_ETH_STOP: return "ETH_STOP";
867+
case ARDUINO_EVENT_ETH_CONNECTED: return "ETH_CONNECTED";
868+
case ARDUINO_EVENT_ETH_DISCONNECTED: return "ETH_DISCONNECTED";
869+
case ARDUINO_EVENT_ETH_GOT_IP: return "ETH_GOT_IP";
870+
case ARDUINO_EVENT_ETH_GOT_IP6: return "ETH_GOT_IP6";
871+
case ARDUINO_EVENT_WPS_ER_SUCCESS: return "WPS_ER_SUCCESS";
872+
case ARDUINO_EVENT_WPS_ER_FAILED: return "WPS_ER_FAILED";
873+
case ARDUINO_EVENT_WPS_ER_TIMEOUT: return "WPS_ER_TIMEOUT";
874+
case ARDUINO_EVENT_WPS_ER_PIN: return "WPS_ER_PIN";
875+
case ARDUINO_EVENT_WPS_ER_PBC_OVERLAP: return "WPS_ER_PBC_OVERLAP";
876+
case ARDUINO_EVENT_SC_SCAN_DONE: return "SC_SCAN_DONE";
877+
case ARDUINO_EVENT_SC_FOUND_CHANNEL: return "SC_FOUND_CHANNEL";
878+
case ARDUINO_EVENT_SC_GOT_SSID_PSWD: return "SC_GOT_SSID_PSWD";
879+
case ARDUINO_EVENT_SC_SEND_ACK_DONE: return "SC_SEND_ACK_DONE";
880+
case ARDUINO_EVENT_PROV_INIT: return "PROV_INIT";
881+
case ARDUINO_EVENT_PROV_DEINIT: return "PROV_DEINIT";
882+
case ARDUINO_EVENT_PROV_START: return "PROV_START";
883+
case ARDUINO_EVENT_PROV_END: return "PROV_END";
884+
case ARDUINO_EVENT_PROV_CRED_RECV: return "PROV_CRED_RECV";
885+
case ARDUINO_EVENT_PROV_CRED_FAIL: return "PROV_CRED_FAIL";
886+
case ARDUINO_EVENT_PROV_CRED_SUCCESS: return "PROV_CRED_SUCCESS";
887+
default: return "";
888+
}
889+
}
890+
771891
const char * WiFiGenericClass::getHostname()
772892
{
773893
return get_esp_netif_hostname();
@@ -906,33 +1026,15 @@ void WiFiGenericClass::removeEvent(wifi_event_id_t id)
9061026
* callback for WiFi events
9071027
* @param arg
9081028
*/
909-
#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG
910-
const char * arduino_event_names[] = {
911-
"WIFI_READY",
912-
"SCAN_DONE",
913-
"STA_START", "STA_STOP", "STA_CONNECTED", "STA_DISCONNECTED", "STA_AUTHMODE_CHANGE", "STA_GOT_IP", "STA_GOT_IP6", "STA_LOST_IP",
914-
"AP_START", "AP_STOP", "AP_STACONNECTED", "AP_STADISCONNECTED", "AP_STAIPASSIGNED", "AP_PROBEREQRECVED", "AP_GOT_IP6",
915-
"FTM_REPORT",
916-
"ETH_START", "ETH_STOP", "ETH_CONNECTED", "ETH_DISCONNECTED", "ETH_GOT_IP", "ETH_GOT_IP6",
917-
"WPS_ER_SUCCESS", "WPS_ER_FAILED", "WPS_ER_TIMEOUT", "WPS_ER_PIN", "WPS_ER_PBC_OVERLAP",
918-
"SC_SCAN_DONE", "SC_FOUND_CHANNEL", "SC_GOT_SSID_PSWD", "SC_SEND_ACK_DONE",
919-
"PROV_INIT", "PROV_DEINIT", "PROV_START", "PROV_END", "PROV_CRED_RECV", "PROV_CRED_FAIL", "PROV_CRED_SUCCESS"
920-
};
921-
#endif
922-
#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_WARN
923-
const char * system_event_reasons[] = { "UNSPECIFIED", "AUTH_EXPIRE", "AUTH_LEAVE", "ASSOC_EXPIRE", "ASSOC_TOOMANY", "NOT_AUTHED", "NOT_ASSOCED", "ASSOC_LEAVE", "ASSOC_NOT_AUTHED", "DISASSOC_PWRCAP_BAD", "DISASSOC_SUPCHAN_BAD", "UNSPECIFIED", "IE_INVALID", "MIC_FAILURE", "4WAY_HANDSHAKE_TIMEOUT", "GROUP_KEY_UPDATE_TIMEOUT", "IE_IN_4WAY_DIFFERS", "GROUP_CIPHER_INVALID", "PAIRWISE_CIPHER_INVALID", "AKMP_INVALID", "UNSUPP_RSN_IE_VERSION", "INVALID_RSN_IE_CAP", "802_1X_AUTH_FAILED", "CIPHER_SUITE_REJECTED", "BEACON_TIMEOUT", "NO_AP_FOUND", "AUTH_FAIL", "ASSOC_FAIL", "HANDSHAKE_TIMEOUT", "CONNECTION_FAIL" };
924-
#define reason2str(r) ((r>176)?system_event_reasons[r-176]:system_event_reasons[r-1])
925-
#endif
9261029
esp_err_t WiFiGenericClass::_eventCallback(arduino_event_t *event)
9271030
{
9281031
static bool first_connect = true;
9291032

930-
if(event->event_id < ARDUINO_EVENT_MAX) {
931-
log_d("Arduino Event: %d - %s", event->event_id, arduino_event_names[event->event_id]);
932-
}
1033+
if(!event) return ESP_OK; //Null would crash this function
1034+
1035+
log_d("Arduino Event: %d - %s", event->event_id, WiFi.eventName(event->event_id));
9331036
if(event->event_id == ARDUINO_EVENT_WIFI_SCAN_DONE) {
9341037
WiFiScanClass::_scanDone();
935-
9361038
} else if(event->event_id == ARDUINO_EVENT_WIFI_STA_START) {
9371039
WiFiSTAClass::_setStatus(WL_DISCONNECTED);
9381040
setStatusBits(STA_STARTED_BIT);
@@ -952,7 +1054,7 @@ esp_err_t WiFiGenericClass::_eventCallback(arduino_event_t *event)
9521054
// Reason 0 causes crash, use reason 1 (UNSPECIFIED) instead
9531055
if(!reason)
9541056
reason = WIFI_REASON_UNSPECIFIED;
955-
log_w("Reason: %u - %s", reason, reason2str(reason));
1057+
log_w("Reason: %u - %s", reason, WiFi.disconnectReasonName((wifi_err_reason_t)reason));
9561058
if(reason == WIFI_REASON_NO_AP_FOUND) {
9571059
WiFiSTAClass::_setStatus(WL_NO_SSID_AVAIL);
9581060
} else if((reason == WIFI_REASON_AUTH_FAIL) && !first_connect){

‎libraries/WiFi/src/WiFiGeneric.h

Copy file name to clipboardExpand all lines: libraries/WiFi/src/WiFiGeneric.h
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ class WiFiGenericClass
188188

189189
static bool setDualAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2, wifi_rx_ant_t rx_mode, wifi_tx_ant_t tx_mode);
190190

191+
const char * disconnectReasonName(wifi_err_reason_t reason);
192+
const char * eventName(arduino_event_id_t id);
191193
static const char * getHostname();
192194
static bool setHostname(const char * hostname);
193195
static bool hostname(const String& aHostname) { return setHostname(aHostname.c_str()); }

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.