@@ -770,6 +770,127 @@ WiFiGenericClass::WiFiGenericClass()
770770{
771771}
772772
773+ /* *
774+ * @brief Convert wifi_err_reason_t to a string.
775+ * @param [in] reason The reason to be converted.
776+ * @return A string representation of the error code.
777+ * @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.
778+ */
779+ const char * WiFiGenericClass::disconnectReasonName (wifi_err_reason_t reason) {
780+ switch (reason) {
781+ // ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(2,0,7)
782+ case WIFI_REASON_UNSPECIFIED: return " UNSPECIFIED" ;
783+ case WIFI_REASON_AUTH_EXPIRE: return " AUTH_EXPIRE" ;
784+ case WIFI_REASON_AUTH_LEAVE: return " AUTH_LEAVE" ;
785+ case WIFI_REASON_ASSOC_EXPIRE: return " ASSOC_EXPIRE" ;
786+ case WIFI_REASON_ASSOC_TOOMANY: return " ASSOC_TOOMANY" ;
787+ case WIFI_REASON_NOT_AUTHED: return " NOT_AUTHED" ;
788+ case WIFI_REASON_NOT_ASSOCED: return " NOT_ASSOCED" ;
789+ case WIFI_REASON_ASSOC_LEAVE: return " ASSOC_LEAVE" ;
790+ case WIFI_REASON_ASSOC_NOT_AUTHED: return " ASSOC_NOT_AUTHED" ;
791+ case WIFI_REASON_DISASSOC_PWRCAP_BAD: return " DISASSOC_PWRCAP_BAD" ;
792+ case WIFI_REASON_DISASSOC_SUPCHAN_BAD: return " DISASSOC_SUPCHAN_BAD" ;
793+ case WIFI_REASON_BSS_TRANSITION_DISASSOC: return " BSS_TRANSITION_DISASSOC" ;
794+ case WIFI_REASON_IE_INVALID: return " IE_INVALID" ;
795+ case WIFI_REASON_MIC_FAILURE: return " MIC_FAILURE" ;
796+ case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT: return " 4WAY_HANDSHAKE_TIMEOUT" ;
797+ case WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT: return " GROUP_KEY_UPDATE_TIMEOUT" ;
798+ case WIFI_REASON_IE_IN_4WAY_DIFFERS: return " IE_IN_4WAY_DIFFERS" ;
799+ case WIFI_REASON_GROUP_CIPHER_INVALID: return " GROUP_CIPHER_INVALID" ;
800+ case WIFI_REASON_PAIRWISE_CIPHER_INVALID: return " PAIRWISE_CIPHER_INVALID" ;
801+ case WIFI_REASON_AKMP_INVALID: return " AKMP_INVALID" ;
802+ case WIFI_REASON_UNSUPP_RSN_IE_VERSION: return " UNSUPP_RSN_IE_VERSION" ;
803+ case WIFI_REASON_INVALID_RSN_IE_CAP: return " INVALID_RSN_IE_CAP" ;
804+ case WIFI_REASON_802_1X_AUTH_FAILED: return " 802_1X_AUTH_FAILED" ;
805+ case WIFI_REASON_CIPHER_SUITE_REJECTED: return " CIPHER_SUITE_REJECTED" ;
806+ case WIFI_REASON_TDLS_PEER_UNREACHABLE: return " TDLS_PEER_UNREACHABLE" ;
807+ case WIFI_REASON_TDLS_UNSPECIFIED: return " TDLS_UNSPECIFIED" ;
808+ case WIFI_REASON_SSP_REQUESTED_DISASSOC: return " SSP_REQUESTED_DISASSOC" ;
809+ case WIFI_REASON_NO_SSP_ROAMING_AGREEMENT: return " NO_SSP_ROAMING_AGREEMENT" ;
810+ case WIFI_REASON_BAD_CIPHER_OR_AKM: return " BAD_CIPHER_OR_AKM" ;
811+ case WIFI_REASON_NOT_AUTHORIZED_THIS_LOCATION: return " NOT_AUTHORIZED_THIS_LOCATION" ;
812+ case WIFI_REASON_SERVICE_CHANGE_PERCLUDES_TS: return " SERVICE_CHANGE_PERCLUDES_TS" ;
813+ case WIFI_REASON_UNSPECIFIED_QOS: return " UNSPECIFIED_QOS" ;
814+ case WIFI_REASON_NOT_ENOUGH_BANDWIDTH: return " NOT_ENOUGH_BANDWIDTH" ;
815+ case WIFI_REASON_MISSING_ACKS: return " MISSING_ACKS" ;
816+ case WIFI_REASON_EXCEEDED_TXOP: return " EXCEEDED_TXOP" ;
817+ case WIFI_REASON_STA_LEAVING: return " STA_LEAVING" ;
818+ case WIFI_REASON_END_BA: return " END_BA" ;
819+ case WIFI_REASON_UNKNOWN_BA: return " UNKNOWN_BA" ;
820+ case WIFI_REASON_TIMEOUT: return " TIMEOUT" ;
821+ case WIFI_REASON_PEER_INITIATED: return " PEER_INITIATED" ;
822+ case WIFI_REASON_AP_INITIATED: return " AP_INITIATED" ;
823+ case WIFI_REASON_INVALID_FT_ACTION_FRAME_COUNT: return " INVALID_FT_ACTION_FRAME_COUNT" ;
824+ case WIFI_REASON_INVALID_PMKID: return " INVALID_PMKID" ;
825+ case WIFI_REASON_INVALID_MDE: return " INVALID_MDE" ;
826+ case WIFI_REASON_INVALID_FTE: return " INVALID_FTE" ;
827+ case WIFI_REASON_TRANSMISSION_LINK_ESTABLISH_FAILED: return " TRANSMISSION_LINK_ESTABLISH_FAILED" ;
828+ case WIFI_REASON_ALTERATIVE_CHANNEL_OCCUPIED: return " ALTERATIVE_CHANNEL_OCCUPIED" ;
829+ case WIFI_REASON_BEACON_TIMEOUT: return " BEACON_TIMEOUT" ;
830+ case WIFI_REASON_NO_AP_FOUND: return " NO_AP_FOUND" ;
831+ case WIFI_REASON_AUTH_FAIL: return " AUTH_FAIL" ;
832+ case WIFI_REASON_ASSOC_FAIL: return " ASSOC_FAIL" ;
833+ case WIFI_REASON_HANDSHAKE_TIMEOUT: return " HANDSHAKE_TIMEOUT" ;
834+ case WIFI_REASON_CONNECTION_FAIL: return " CONNECTION_FAIL" ;
835+ case WIFI_REASON_AP_TSF_RESET: return " AP_TSF_RESET" ;
836+ case WIFI_REASON_ROAMING: return " ROAMING" ;
837+ case WIFI_REASON_ASSOC_COMEBACK_TIME_TOO_LONG: return " ASSOC_COMEBACK_TIME_TOO_LONG" ;
838+ default : return " " ;
839+ }
840+ }
841+
842+ /* *
843+ * @brief Convert arduino_event_id_t to a C string.
844+ * @param [in] id The event id to be converted.
845+ * @return A string representation of the event id.
846+ * @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.
847+ */
848+ const char * WiFiGenericClass::eventName (arduino_event_id_t id) {
849+ switch (id) {
850+ case ARDUINO_EVENT_WIFI_READY: return " WIFI_READY" ;
851+ case ARDUINO_EVENT_WIFI_SCAN_DONE: return " SCAN_DONE" ;
852+ case ARDUINO_EVENT_WIFI_STA_START: return " STA_START" ;
853+ case ARDUINO_EVENT_WIFI_STA_STOP: return " STA_STOP" ;
854+ case ARDUINO_EVENT_WIFI_STA_CONNECTED: return " STA_CONNECTED" ;
855+ case ARDUINO_EVENT_WIFI_STA_DISCONNECTED: return " STA_DISCONNECTED" ;
856+ case ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE: return " STA_AUTHMODE_CHANGE" ;
857+ case ARDUINO_EVENT_WIFI_STA_GOT_IP: return " STA_GOT_IP" ;
858+ case ARDUINO_EVENT_WIFI_STA_GOT_IP6: return " STA_GOT_IP6" ;
859+ case ARDUINO_EVENT_WIFI_STA_LOST_IP: return " STA_LOST_IP" ;
860+ case ARDUINO_EVENT_WIFI_AP_START: return " AP_START" ;
861+ case ARDUINO_EVENT_WIFI_AP_STOP: return " AP_STOP" ;
862+ case ARDUINO_EVENT_WIFI_AP_STACONNECTED: return " AP_STACONNECTED" ;
863+ case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED: return " AP_STADISCONNECTED" ;
864+ case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED: return " AP_STAIPASSIGNED" ;
865+ case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED: return " AP_PROBEREQRECVED" ;
866+ case ARDUINO_EVENT_WIFI_AP_GOT_IP6: return " AP_GOT_IP6" ;
867+ case ARDUINO_EVENT_WIFI_FTM_REPORT: return " FTM_REPORT" ;
868+ case ARDUINO_EVENT_ETH_START: return " ETH_START" ;
869+ case ARDUINO_EVENT_ETH_STOP: return " ETH_STOP" ;
870+ case ARDUINO_EVENT_ETH_CONNECTED: return " ETH_CONNECTED" ;
871+ case ARDUINO_EVENT_ETH_DISCONNECTED: return " ETH_DISCONNECTED" ;
872+ case ARDUINO_EVENT_ETH_GOT_IP: return " ETH_GOT_IP" ;
873+ case ARDUINO_EVENT_ETH_GOT_IP6: return " ETH_GOT_IP6" ;
874+ case ARDUINO_EVENT_WPS_ER_SUCCESS: return " WPS_ER_SUCCESS" ;
875+ case ARDUINO_EVENT_WPS_ER_FAILED: return " WPS_ER_FAILED" ;
876+ case ARDUINO_EVENT_WPS_ER_TIMEOUT: return " WPS_ER_TIMEOUT" ;
877+ case ARDUINO_EVENT_WPS_ER_PIN: return " WPS_ER_PIN" ;
878+ case ARDUINO_EVENT_WPS_ER_PBC_OVERLAP: return " WPS_ER_PBC_OVERLAP" ;
879+ case ARDUINO_EVENT_SC_SCAN_DONE: return " SC_SCAN_DONE" ;
880+ case ARDUINO_EVENT_SC_FOUND_CHANNEL: return " SC_FOUND_CHANNEL" ;
881+ case ARDUINO_EVENT_SC_GOT_SSID_PSWD: return " SC_GOT_SSID_PSWD" ;
882+ case ARDUINO_EVENT_SC_SEND_ACK_DONE: return " SC_SEND_ACK_DONE" ;
883+ case ARDUINO_EVENT_PROV_INIT: return " PROV_INIT" ;
884+ case ARDUINO_EVENT_PROV_DEINIT: return " PROV_DEINIT" ;
885+ case ARDUINO_EVENT_PROV_START: return " PROV_START" ;
886+ case ARDUINO_EVENT_PROV_END: return " PROV_END" ;
887+ case ARDUINO_EVENT_PROV_CRED_RECV: return " PROV_CRED_RECV" ;
888+ case ARDUINO_EVENT_PROV_CRED_FAIL: return " PROV_CRED_FAIL" ;
889+ case ARDUINO_EVENT_PROV_CRED_SUCCESS: return " PROV_CRED_SUCCESS" ;
890+ default : return " " ;
891+ }
892+ }
893+
773894const char * WiFiGenericClass::getHostname ()
774895{
775896 return get_esp_netif_hostname ();
@@ -908,33 +1029,15 @@ void WiFiGenericClass::removeEvent(wifi_event_id_t id)
9081029 * callback for WiFi events
9091030 * @param arg
9101031 */
911- #if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG
912- const char * arduino_event_names[] = {
913- " WIFI_READY" ,
914- " SCAN_DONE" ,
915- " STA_START" , " STA_STOP" , " STA_CONNECTED" , " STA_DISCONNECTED" , " STA_AUTHMODE_CHANGE" , " STA_GOT_IP" , " STA_GOT_IP6" , " STA_LOST_IP" ,
916- " AP_START" , " AP_STOP" , " AP_STACONNECTED" , " AP_STADISCONNECTED" , " AP_STAIPASSIGNED" , " AP_PROBEREQRECVED" , " AP_GOT_IP6" ,
917- " FTM_REPORT" ,
918- " ETH_START" , " ETH_STOP" , " ETH_CONNECTED" , " ETH_DISCONNECTED" , " ETH_GOT_IP" , " ETH_GOT_IP6" ,
919- " WPS_ER_SUCCESS" , " WPS_ER_FAILED" , " WPS_ER_TIMEOUT" , " WPS_ER_PIN" , " WPS_ER_PBC_OVERLAP" ,
920- " SC_SCAN_DONE" , " SC_FOUND_CHANNEL" , " SC_GOT_SSID_PSWD" , " SC_SEND_ACK_DONE" ,
921- " PROV_INIT" , " PROV_DEINIT" , " PROV_START" , " PROV_END" , " PROV_CRED_RECV" , " PROV_CRED_FAIL" , " PROV_CRED_SUCCESS"
922- };
923- #endif
924- #if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_WARN
925- 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" };
926- #define reason2str (r ) ((r>176 )?system_event_reasons[r-176 ]:system_event_reasons[r-1 ])
927- #endif
9281032esp_err_t WiFiGenericClass::_eventCallback (arduino_event_t *event)
9291033{
9301034 static bool first_connect = true ;
9311035
932- if (event-> event_id < ARDUINO_EVENT_MAX) {
933- log_d ( " Arduino Event: %d - %s " , event-> event_id , arduino_event_names[event-> event_id ]);
934- }
1036+ if (! event) return ESP_OK; // Null would crash this function
1037+
1038+ log_d ( " Arduino Event: %d - %s " , event-> event_id , WiFi. eventName (event-> event_id ));
9351039 if (event->event_id == ARDUINO_EVENT_WIFI_SCAN_DONE) {
9361040 WiFiScanClass::_scanDone ();
937-
9381041 } else if (event->event_id == ARDUINO_EVENT_WIFI_STA_START) {
9391042 WiFiSTAClass::_setStatus (WL_DISCONNECTED);
9401043 setStatusBits (STA_STARTED_BIT);
@@ -954,7 +1057,7 @@ esp_err_t WiFiGenericClass::_eventCallback(arduino_event_t *event)
9541057 // Reason 0 causes crash, use reason 1 (UNSPECIFIED) instead
9551058 if (!reason)
9561059 reason = WIFI_REASON_UNSPECIFIED;
957- log_w (" Reason: %u - %s" , reason, reason2str ( reason));
1060+ log_w (" Reason: %u - %s" , reason, WiFi. disconnectReasonName (( wifi_err_reason_t ) reason));
9581061 if (reason == WIFI_REASON_NO_AP_FOUND) {
9591062 WiFiSTAClass::_setStatus (WL_NO_SSID_AVAIL);
9601063 } else if ((reason == WIFI_REASON_AUTH_FAIL) && !first_connect){
0 commit comments