1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

cpu/esp_common: Add missing disconnect reasons

This commit is contained in:
Florian Lentz 2023-03-09 02:12:26 +01:00 committed by Flole998
parent 1a787d4669
commit 48e7b34c32

View File

@ -383,41 +383,99 @@ esp_err_t _esp_wifi_rx_cb(void *buffer, uint16_t len, void *eb)
}
#ifndef MODULE_ESP_WIFI_AP
#define REASON_BEACON_TIMEOUT (200)
#define REASON_HANDSHAKE_TIMEOUT (204)
#define INDEX_BEACON_TIMEOUT (REASON_BEACON_TIMEOUT - 24)
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 */
"DISASSOC_SUPCHAN_BAD", /* 11 */
"BSS_TRANSITION_DISASSOC", /* 12 */
"IE_INVALID", /* 13 */
"MIC_FAILURE", /* 14 */
"4WAY_HANDSHAKE_TIMEOUT", /* 15 */
"GROUP_KEY_UPDATE_TIMEOUT", /* 16 */
"IE_IN_4WAY_DIFFERS", /* 17 */
"GROUP_CIPHER_INVALID", /* 18 */
"PAIRWISE_CIPHER_INVALID", /* 19 */
"AKMP_INVALID", /* 20 */
"UNSUPP_RSN_IE_VERSION", /* 21 */
"INVALID_RSN_IE_CAP", /* 22 */
"802_1X_AUTH_FAILED", /* 23 */
"CIPHER_SUITE_REJECTED", /* 24 */
"TDLS_PEER_UNREACHABLE", /* 25 */
"TDLS_UNSPECIFIED", /* 26 */
"SSP_REQUESTED_DISASSOC", /* 27 */
"NO_SSP_ROAMING_AGREEMENT", /* 28 */
"BAD_CIPHER_OR_AKM", /* 29 */
"NOT_AUTHORIZED_THIS_LOCATION", /* 30 */
"SERVICE_CHANGE_PERCLUDES_TS", /* 31 */
"UNSPECIFIED_QOS", /* 32 */
"NOT_ENOUGH_BANDWIDTH", /* 33 */
"MISSING_ACKS", /* 34 */
"EXCEEDED_TXOP", /* 35 */
"STA_LEAVING", /* 36 */
"END_BA", /* 37 */
"UNKNOWN_BA", /* 38 */
"TIMEOUT", /* 39 */
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 */
"PEER_INITIATED", /* 46 */
"AP_INITIATED", /* 47 */
"INVALID_FT_ACTION_FRAME_COUNT", /* 48 */
"INVALID_PMKID", /* 49 */
"INVALID_MDE", /* 50 */
"INVALID_FTE", /* 51 */
"TRANSMISSION_LINK_ESTABLISH_FAILED", /* 67 */
"ALTERATIVE_CHANNEL_OCCUPIED", /* 68 */
"BEACON_TIMEOUT", /* 200 */
"NO_AP_FOUND", /* 201 */
"AUTH_FAIL", /* 202 */
"ASSOC_FAIL", /* 203 */
"HANDSHAKE_TIMEOUT", /* 204 */
"CONNECTION_FAIL", /* 205 */
"AP_TSF_RESET", /* 206 */
"ROAMING", /* 207 */
"WIFI_REASON_ASSOC_COMEBACK_TIME_TOO_LONG" /* 208 */
};
typedef struct _esp_wifi_valid_disc_reason_codes {
uint8_t from;
uint8_t to;
} _esp_wifi_valid_disc_reason_codes_t;
static const _esp_wifi_valid_disc_reason_codes_t _esp_wifi_valid_disc_reasons[] = {
/* From, To */
{ 0, 39 },
{ 46, 51 },
{ 67, 68 },
{ 200, 208 },
};
static const char *_esp_wifi_get_disc_reason(uint8_t code)
{
uint8_t offset = 0;
uint8_t valid_reasons_len = ARRAY_SIZE(_esp_wifi_valid_disc_reasons);
for (uint8_t i = 0; i < valid_reasons_len; i++) {
if ((_esp_wifi_valid_disc_reasons[i].from <= code) &&
(_esp_wifi_valid_disc_reasons[i].to >= code))
{
return _esp_wifi_disc_reasons[code - offset];
}
else if (i < (valid_reasons_len - 1)) {
offset += (_esp_wifi_valid_disc_reasons[i + 1].from - 1) -
_esp_wifi_valid_disc_reasons[i].to;
}
}
return "UNKNOWN";
}
#endif /* MODULE_ESP_WIFI_AP */
/* indicator whether the WiFi interface is started */
@ -437,7 +495,6 @@ static esp_err_t IRAM_ATTR _esp_system_event_handler(void *ctx, system_event_t *
esp_err_t result;
uint8_t reason;
const char* reason_str = "UNKNOWN";
#endif /* MODULE_ESP_WIFI_AP */
switch (event->event_id) {
@ -513,15 +570,9 @@ static esp_err_t IRAM_ATTR _esp_system_event_handler(void *ctx, system_event_t *
case SYSTEM_EVENT_STA_DISCONNECTED:
reason = event->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 - INDEX_BEACON_TIMEOUT];
}
ESP_WIFI_LOG_INFO("WiFi disconnected from ssid %s, reason %d (%s)",
event->event_info.disconnected.ssid,
event->event_info.disconnected.reason, reason_str);
reason, _esp_wifi_get_disc_reason(reason));
/* unregister RX callback function */
esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_STA, NULL);