From 4e41afa2fb73d1fca94ce1913e481a083f3b3f64 Mon Sep 17 00:00:00 2001 From: Gunar Schorcht <gunar@schorcht.net> Date: Sat, 26 Jan 2019 17:33:28 +0100 Subject: [PATCH] cpu/esp8266: readable disconn reasons in esp_wifi --- cpu/esp8266/esp-wifi/esp_wifi_netdev.c | 53 +++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/cpu/esp8266/esp-wifi/esp_wifi_netdev.c b/cpu/esp8266/esp-wifi/esp_wifi_netdev.c index 7a2f77e0b5..0eeb3c3e3b 100644 --- a/cpu/esp8266/esp-wifi/esp_wifi_netdev.c +++ b/cpu/esp8266/esp-wifi/esp_wifi_netdev.c @@ -233,6 +233,41 @@ void IRAM _esp_wifi_recv_cb(struct pbuf *pb, struct netif *netif) critical_exit(); } +#define BEACON_TIMEOUT (200) +#define HANDSHAKE_TIMEOUT (204) + +static const char *_esp_wifi_disc_reasons [] = { + "INVALID", /* 0 */ + "UNSPECIFIED", /* 1 */ + "AUTH_EXPIRE", /* 2 */ + "AUTH_LEAVE", /* 3 */ + "ASSOC_EXPIRE", /* 4 */ + "ASSOC_TOOMANY", /* 5 */ + "NOT_AUTHED", /* 6 */ + "NOT_ASSOCED", /* 7 */ + "ASSOC_LEAVE", /* 8 */ + "ASSOC_NOT_AUTHED", /* 9 */ + "DISASSOC_PWRCAP_BAD", /* 10 (11h) */ + "DISASSOC_SUPCHAN_BAD", /* 11 (11h) */ + "IE_INVALID", /* 13 (11i) */ + "MIC_FAILURE", /* 14 (11i) */ + "4WAY_HANDSHAKE_TIMEOUT", /* 15 (11i) */ + "GROUP_KEY_UPDATE_TIMEOUT", /* 16 (11i) */ + "IE_IN_4WAY_DIFFERS", /* 17 (11i) */ + "GROUP_CIPHER_INVALID", /* 18 (11i) */ + "PAIRWISE_CIPHER_INVALID", /* 19 (11i) */ + "AKMP_INVALID", /* 20 (11i) */ + "UNSUPP_RSN_IE_VERSION", /* 21 (11i) */ + "INVALID_RSN_IE_CAP", /* 22 (11i) */ + "802_1X_AUTH_FAILED", /* 23 (11i) */ + "CIPHER_SUITE_REJECTED", /* 24 (11i) */ + "BEACON_TIMEOUT", /* 200 */ + "NO_AP_FOUND", /* 201 */ + "AUTH_FAIL", /* 202 */ + "ASSOC_FAIL", /* 203 */ + "HANDSHAKE_TIMEOUT" /* 204 */ +}; + /** * @brief Event handler for esp system events. */ @@ -240,19 +275,33 @@ static void _esp_wifi_handle_event_cb(System_Event_t *evt) { ESP_WIFI_DEBUG("event %d", evt->event); + uint8_t reason; + const char* reason_str = "UNKNOWN"; + switch (evt->event) { case EVENT_STAMODE_CONNECTED: ESP_WIFI_LOG_INFO("connected to ssid %s, channel %d", evt->event_info.connected.ssid, evt->event_info.connected.channel); _esp_wifi_dev.state = ESP_WIFI_CONNECTED; + _esp_wifi_dev.event = EVENT_STAMODE_CONNECTED; + _esp_wifi_dev.netdev.event_callback(&_esp_wifi_dev.netdev, NETDEV_EVENT_ISR); break; case EVENT_STAMODE_DISCONNECTED: - ESP_WIFI_LOG_INFO("disconnected from ssid %s, reason %d", + reason = evt->event_info.disconnected.reason; + if (reason < REASON_BEACON_TIMEOUT) { + reason_str = _esp_wifi_disc_reasons[reason]; + } + else if (reason <= REASON_HANDSHAKE_TIMEOUT) { + reason_str = _esp_wifi_disc_reasons[reason - REASON_BEACON_TIMEOUT]; + } + ESP_WIFI_LOG_INFO("disconnected from ssid %s, reason %d (%s)", evt->event_info.disconnected.ssid, - evt->event_info.disconnected.reason); + evt->event_info.disconnected.reason, reason_str); _esp_wifi_dev.state = ESP_WIFI_DISCONNECTED; + _esp_wifi_dev.event = EVENT_STAMODE_DISCONNECTED; + _esp_wifi_dev.netdev.event_callback(&_esp_wifi_dev.netdev, NETDEV_EVENT_ISR); break; case EVENT_SOFTAPMODE_STACONNECTED: -- GitLab