Setting a longer beacon length also assists with debugging as the conflicting root nodes can be identified more quickly.
+config ESP32_WIFI_DEBUG_LOG_ENABLE
+ bool "Enable WiFi debug log"
+ default n
+ help
+ Select this option to enable WiFi debug log
+
+choice ESP32_WIFI_DEBUG_LOG_LEVEL
+ depends on ESP32_WIFI_DEBUG_LOG_ENABLE
+ prompt "WiFi debug log level"
+ default ESP32_WIFI_LOG_DEBUG
+ help
+ The WiFi log is divided into the following levels: ERROR,WARNING,INFO,DEBUG,VERBOSE.
+ The ERROR,WARNING,INFO levels are enabled by default, and the DEBUG,VERBOSE levels can be enabled here.
+
+config ESP32_WIFI_DEBUG_LOG_DEBUG
+ bool "WiFi Debug Log Debug"
+config ESP32_WIFI_DEBUG_LOG_VERBOSE
+ bool "WiFi Debug Log Verbose"
+endchoice
+
+choice ESP32_WIFI_DEBUG_LOG_MODULE
+ depends on ESP32_WIFI_DEBUG_LOG_ENABLE
+ prompt "WiFi debug log module"
+ default ESP32_WIFI_DEBUG_LOG_MODULE_WIFI
+ help
+ The WiFi log module contains three parts: WIFI,COEX,MESH.
+ The WIFI module indicates the logs related to WiFi, the COEX module indicates the logs related to WiFi and BT(or BLE) coexist,
+ the MESH module indicates the logs related to Mesh. When ESP32_WIFI_LOG_MODULE_ALL is enabled, all modules are selected.
+
+config ESP32_WIFI_DEBUG_LOG_MODULE_ALL
+ bool "WiFi Debug Log Module All"
+config ESP32_WIFI_DEBUG_LOG_MODULE_WIFI
+ bool "WiFi Debug Log Module WiFi"
+config ESP32_WIFI_DEBUG_LOG_MODULE_COEX
+ bool "WiFi Debug Log Module Coex"
+config ESP32_WIFI_DEBUG_LOG_MODULE_MESH
+ bool "WiFi Debug Log Module Mesh"
+endchoice
+
+config ESP32_WIFI_DEBUG_LOG_SUBMODULE
+ depends on ESP32_WIFI_DEBUG_LOG_ENABLE
+ bool "WiFi debug log submodule"
+ default n
+ help
+ Enable this option to set the WiFi debug log submodule.
+ Currently the log submodule contains the following parts: INIT,IOCTL,CONN,SCAN.
+ The INIT submodule indicates the initialization process.The IOCTL submodule indicates the API calling process.
+ The CONN submodule indicates the connecting process.The SCAN submodule indicates the scaning process.
+
+config ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL
+ depends on ESP32_WIFI_DEBUG_LOG_SUBMODULE
+ bool "WiFi Debug Log Submodule All"
+ default n
+ help
+ When this option is enabled, all debug submodules are selected.
+
+config ESP32_WIFI_DEBUG_LOG_SUBMODULE_INIT
+ depends on ESP32_WIFI_DEBUG_LOG_SUBMODULE && (!ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL)
+ bool "WiFi Debug Log Submodule Init"
+ default n
+
+config ESP32_WIFI_DEBUG_LOG_SUBMODULE_IOCTL
+ depends on ESP32_WIFI_DEBUG_LOG_SUBMODULE && (!ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL)
+ bool "WiFi Debug Log Submodule Ioctl"
+ default n
+
+config ESP32_WIFI_DEBUG_LOG_SUBMODULE_CONN
+ depends on ESP32_WIFI_DEBUG_LOG_SUBMODULE && (!ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL)
+ bool "WiFi Debug Log Submodule Conn"
+ default n
+
+config ESP32_WIFI_DEBUG_LOG_SUBMODULE_SCAN
+ depends on ESP32_WIFI_DEBUG_LOG_SUBMODULE && (!ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL)
+ bool "WiFi Debug Log Submodule Scan"
+ default n
+
endmenu # Wi-Fi
menu PHY
}\
} while(0)
+typedef struct {
+ int err;
+ const char *reason;
+} wifi_reason_t;
+
+static const wifi_reason_t wifi_reason[] =
+{
+ {0, "wifi reason: other reason"},
+ {WIFI_REASON_UNSPECIFIED, "wifi reason: unspecified"},
+ {WIFI_REASON_AUTH_EXPIRE, "wifi reason: auth expire"},
+ {WIFI_REASON_AUTH_LEAVE, "wifi reason: auth leave"},
+ {WIFI_REASON_ASSOC_EXPIRE, "wifi reason: assoc expire"},
+ {WIFI_REASON_ASSOC_TOOMANY, "wifi reason: assoc too many"},
+ {WIFI_REASON_NOT_AUTHED, "wifi reason: not authed"},
+ {WIFI_REASON_NOT_ASSOCED, "wifi reason: not assoced"},
+ {WIFI_REASON_ASSOC_LEAVE, "wifi reason: assoc leave"},
+ {WIFI_REASON_ASSOC_NOT_AUTHED, "wifi reason: assoc not authed"},
+ {WIFI_REASON_BEACON_TIMEOUT, "wifi reason: beacon timeout"},
+ {WIFI_REASON_NO_AP_FOUND, "wifi reason: no ap found"},
+ {WIFI_REASON_AUTH_FAIL, "wifi reason: auth fail"},
+ {WIFI_REASON_ASSOC_FAIL, "wifi reason: assoc fail"},
+ {WIFI_REASON_HANDSHAKE_TIMEOUT, "wifi reason: hanshake timeout"},
+ {WIFI_REASON_DISASSOC_PWRCAP_BAD, "wifi reason: bad Power Capability, disassoc"},
+ {WIFI_REASON_DISASSOC_SUPCHAN_BAD, "wifi reason: bad Supported Channels, disassoc"},
+ {WIFI_REASON_IE_INVALID, "wifi reason: invalid IE"},
+ {WIFI_REASON_MIC_FAILURE, "wifi reason: MIC failure"},
+ {WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT, "wifi reason: 4-way keying handshake timeout"},
+ {WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT, "wifi reason: Group key handshake"},
+ {WIFI_REASON_IE_IN_4WAY_DIFFERS, "wifi reason: IE in 4-way differs"},
+ {WIFI_REASON_GROUP_CIPHER_INVALID, "wifi reason: invalid group cipher"},
+ {WIFI_REASON_PAIRWISE_CIPHER_INVALID, "wifi reason: invalid pairwise cipher"},
+ {WIFI_REASON_AKMP_INVALID, "wifi reason: invalid AKMP"},
+ {WIFI_REASON_UNSUPP_RSN_IE_VERSION, "wifi reason: unsupported RSN IE version"},
+ {WIFI_REASON_INVALID_RSN_IE_CAP, "wifi reason: invalid RSN IE capability"},
+ {WIFI_REASON_802_1X_AUTH_FAILED, "wifi reason: 802.1x auth failed"},
+ {WIFI_REASON_CIPHER_SUITE_REJECTED, "wifi reason: cipher suite rejected"}
+};
+
+const char* wifi_get_reason(int err)
+{
+ int i=0;
+
+ for (i=0; i< sizeof(wifi_reason)/sizeof(wifi_reason_t); i++){
+ if (err == wifi_reason[i].err){
+ return wifi_reason[i].reason;
+ }
+ }
+
+ return wifi_reason[0].reason;
+}
+
typedef esp_err_t (*system_event_handler_t)(system_event_t *e);
static esp_err_t system_event_ap_start_handle_default(system_event_t *event);
}
case SYSTEM_EVENT_STA_DISCONNECTED: {
system_event_sta_disconnected_t *disconnected = &event->event_info.disconnected;
- ESP_LOGD(TAG, "SYSTEM_EVENT_STA_DISCONNECTED, ssid:%s, ssid_len:%d, bssid:" MACSTR ", reason:%d", \
- disconnected->ssid, disconnected->ssid_len, MAC2STR(disconnected->bssid), disconnected->reason);
+ ESP_LOGD(TAG, "SYSTEM_EVENT_STA_DISCONNECTED, ssid:%s, ssid_len:%d, bssid:" MACSTR ", reason:%d,%s", \
+ disconnected->ssid, disconnected->ssid_len, MAC2STR(disconnected->bssid), disconnected->reason, wifi_get_reason(disconnected->reason));
break;
}
case SYSTEM_EVENT_STA_AUTHMODE_CHANGE: {
void *storage; /**< storage for FreeRTOS queue */
} wifi_static_queue_t;
+/**
+ * @brief WiFi log level
+ *
+ */
+typedef enum {
+ WIFI_LOG_ERROR = 0, /*enabled by default*/
+ WIFI_LOG_WARNING, /*enabled by default*/
+ WIFI_LOG_INFO, /*enabled by default*/
+ WIFI_LOG_DEBUG, /*can be set in menuconfig*/
+ WIFI_LOG_VERBOSE, /*can be set in menuconfig*/
+} wifi_log_level_t;
+
+/**
+ * @brief WiFi log module definition
+ *
+ */
+typedef enum {
+ WIFI_LOG_MODULE_ALL = 0, /*all log modules */
+ WIFI_LOG_MODULE_WIFI, /*logs related to WiFi*/
+ WIFI_LOG_MODULE_COEX, /*logs related to WiFi and BT(or BLE) coexist*/
+ WIFI_LOG_MODULE_MESH, /*logs related to Mesh*/
+} wifi_log_module_t;
+
+/**
+ * @brief WiFi log submodule definition
+ *
+ */
+#define WIFI_LOG_SUBMODULE_ALL (0) /*all log submodules*/
+#define WIFI_LOG_SUBMODULE_INIT (1) /*logs related to initialization*/
+#define WIFI_LOG_SUBMODULE_IOCTL (1<<1) /*logs related to API calling*/
+#define WIFI_LOG_SUBMODULE_CONN (1<<2) /*logs related to connecting*/
+#define WIFI_LOG_SUBMODULE_SCAN (1<<3) /*logs related to scaning*/
+
+
/**
* @brief Initialize Wi-Fi Driver
* Alloc resource for WiFi driver, such as WiFi control structure, RX/TX buffer,
*/
esp_err_t esp_wifi_internal_update_mac_time( uint32_t time_delta );
+/**
+ * @brief Set current WiFi log level
+ *
+ * @param level Log level.
+ *
+ * @return
+ * - ESP_OK: succeed
+ * - ESP_FAIL: level is invalid
+ */
+esp_err_t esp_wifi_internal_set_log_level(wifi_log_level_t level);
+
+/**
+ * @brief Set current log module and submodule
+ *
+ * @param module Log module
+ * @param submodule Log submodule
+ * @param enable enable or disable
+ * If module == 0 && enable == 0, all log modules are disabled.
+ * If module == 0 && enable == 1, all log modules are enabled.
+ * If submodule == 0 && enable == 0, all log submodules are disabled.
+ * If submodule == 0 && enable == 1, all log submodules are enabled.
+ *
+ * @return
+ * - ESP_OK: succeed
+ * - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
+ * - ESP_ERR_WIFI_ARG: invalid argument
+ */
+esp_err_t esp_wifi_internal_set_log_mod(wifi_log_module_t module, uint32_t submodule, bool enable);
+
+/**
+ * @brief Get current WiFi log info
+ *
+ * @param log_level the return log level.
+ * @param log_mod the return log module and submodule
+ *
+ * @return
+ * - ESP_OK: succeed
+ */
+esp_err_t esp_wifi_internal_get_log(wifi_log_level_t *log_level, uint32_t *log_mod);
+
#ifdef __cplusplus
}
#endif
-Subproject commit b16383705d7844e125f5063cb642f5964f2d8ff4
+Subproject commit e33ab451f5a95537be2c486172ddaffa64f3dcac
esp_log_level_set("wifi", CONFIG_LOG_DEFAULT_LEVEL);
}
+static void esp_wifi_set_debug_log()
+{
+ /* set WiFi log level and module */
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE
+ uint32_t g_wifi_log_level = WIFI_LOG_INFO;
+ uint32_t g_wifi_log_module = 0;
+ uint32_t g_wifi_log_submodule = 0;
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_DEBUG
+ g_wifi_log_level = WIFI_LOG_DEBUG;
+#endif
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_VERBOSE
+ g_wifi_log_level = WIFI_LOG_VERBOSE;
+#endif
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_MODULE_ALL
+ g_wifi_log_module = WIFI_LOG_MODULE_ALL;
+#endif
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_MODULE_WIFI
+ g_wifi_log_module = WIFI_LOG_MODULE_WIFI;
+#endif
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_MODULE_COEX
+ g_wifi_log_module = WIFI_LOG_MODULE_COEX;
+#endif
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_MODULE_MESH
+ g_wifi_log_module = WIFI_LOG_MODULE_MESH;
+#endif
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL
+ g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_ALL;
+#endif
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_SUBMODULE_INIT
+ g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_INIT;
+#endif
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_SUBMODULE_IOCTL
+ g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_IOCTL;
+#endif
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_SUBMODULE_CONN
+ g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_CONN;
+#endif
+#if CONFIG_ESP32_WIFI_DEBUG_LOG_SUBMODULE_SCAN
+ g_wifi_log_submodule |= WIFI_LOG_SUBMODULE_SCAN;
+#endif
+ esp_wifi_internal_set_log_level(g_wifi_log_level);
+ esp_wifi_internal_set_log_mod(g_wifi_log_module, g_wifi_log_submodule, true);
+
+#endif /* CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE*/
+
+}
+
esp_err_t esp_wifi_init(const wifi_init_config_t *config)
{
#ifdef CONFIG_PM_ENABLE
}
#endif
esp_event_set_default_wifi_handlers();
- return esp_wifi_init_internal(config);
+ esp_err_t result = esp_wifi_init_internal(config);
+ esp_wifi_set_debug_log();
+
+ return result;
}
#ifdef CONFIG_PM_ENABLE