@@ -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+
771891const 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
9261029esp_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){
0 commit comments