@@ -770,6 +770,127 @@ WiFiGenericClass::WiFiGenericClass()
770
770
{
771
771
}
772
772
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
+
773
894
const char * WiFiGenericClass::getHostname ()
774
895
{
775
896
return get_esp_netif_hostname ();
@@ -908,33 +1029,15 @@ void WiFiGenericClass::removeEvent(wifi_event_id_t id)
908
1029
* callback for WiFi events
909
1030
* @param arg
910
1031
*/
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
928
1032
esp_err_t WiFiGenericClass::_eventCallback (arduino_event_t *event)
929
1033
{
930
1034
static bool first_connect = true ;
931
1035
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 ));
935
1039
if (event->event_id == ARDUINO_EVENT_WIFI_SCAN_DONE) {
936
1040
WiFiScanClass::_scanDone ();
937
-
938
1041
} else if (event->event_id == ARDUINO_EVENT_WIFI_STA_START) {
939
1042
WiFiSTAClass::_setStatus (WL_DISCONNECTED);
940
1043
setStatusBits (STA_STARTED_BIT);
@@ -954,7 +1057,7 @@ esp_err_t WiFiGenericClass::_eventCallback(arduino_event_t *event)
954
1057
// Reason 0 causes crash, use reason 1 (UNSPECIFIED) instead
955
1058
if (!reason)
956
1059
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));
958
1061
if (reason == WIFI_REASON_NO_AP_FOUND) {
959
1062
WiFiSTAClass::_setStatus (WL_NO_SSID_AVAIL);
960
1063
} else if ((reason == WIFI_REASON_AUTH_FAIL) && !first_connect){
0 commit comments