# Copyright 2020 Espressif Systems (Shanghai) PTE LTD menuconfig WIFI_ESP32 bool "ESP32 SoC WiFi support" default y depends on DT_HAS_ESPRESSIF_ESP32_WIFI_ENABLED depends on ZEPHYR_HAL_ESPRESSIF_MODULE_BLOBS depends on !SMP select THREAD_CUSTOM_DATA select NET_L2_WIFI_MGMT select WIFI_USE_NATIVE_NETWORKING select MBEDTLS select THREAD_STACK_INFO select DYNAMIC_THREAD select DYNAMIC_THREAD_ALLOC help Enable ESP32 SoC WiFi support. Only supported in single core mode because the network stack is not aware of SMP stuff. if WIFI_ESP32 config HEAP_MEM_POOL_ADD_SIZE_WIFI int default 4096 help Make sure there is a minimal heap available for Wi-Fi driver. config NET_TCP_WORKQ_STACK_SIZE default 2048 config NET_RX_STACK_SIZE default 2048 config NET_MGMT_EVENT_STACK_SIZE default 2048 config ESP32_WIFI_STA_AUTO_DHCPV4 bool "Automatically starts DHCP4 negotiation" depends on NET_DHCPV4 depends on NET_IPV4 help WiFi driver will automatically initiate DHCPV4 negotiation when connected. config ESP32_WIFI_AP_STA_MODE bool "Activates the Station/AP co-existence mode." depends on WIFI_NM help The Station/AP coexistence mode allows the ESP32 to operate as both a station and an access point simultaneously. This mode is not enabled by default. config ESP32_WIFI_STA_RECONNECT bool "WiFi connection retry" help Set auto WiFI reconnection when disconnected. config ESP32_WIFI_SW_COEXIST_ENABLE bool help Software controls WiFi/Bluetooth coexistence. Not supported yet. config ESP32_WIFI_NET_ALLOC_SPIRAM bool "Allocate memory of WiFi and NET in SPIRAM" depends on ESP_SPIRAM help Allocate memory of WiFi and NET stack in SPIRAM, increasing available RAM memory space for application stack. config ESP32_WIFI_STATIC_RX_BUFFER_NUM int "Max number of WiFi static RX buffers" range 2 25 default 10 help Set the number of WiFi static RX buffers. Each buffer takes approximately 1.6KB of RAM. The static rx buffers are allocated when esp_wifi_init is called, they are not freed until esp_wifi_deinit is called. WiFi hardware use these buffers to receive all 802.11 frames. A higher number may allow higher throughput but increases memory use. If ESP32_WIFI_AMPDU_RX_ENABLED is enabled, this value is recommended to set equal or bigger than ESP32_WIFI_RX_BA_WIN in order to achieve better throughput and compatibility with both stations and APs. config ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM int "Max number of WiFi dynamic RX buffers" range 0 128 default 32 help Set the number of WiFi dynamic RX buffers, 0 means unlimited RX buffers will be allocated (provided sufficient free RAM). The size of each dynamic RX buffer depends on the size of the received data frame. For each received data frame, the WiFi driver makes a copy to an RX buffer and then delivers it to the high layer TCP/IP stack. The dynamic RX buffer is freed after the higher layer has successfully received the data frame. For some applications, WiFi data frames may be received faster than the application can process them. In these cases we may run out of memory if RX buffer number is unlimited (0). If a dynamic RX buffer limit is set, it should be at least the number of static RX buffers. choice ESP32_WIFI_TX_BUFFER prompt "Type of WiFi TX buffers" default ESP32_WIFI_DYNAMIC_TX_BUFFER help Select type of WiFi TX buffers: If "Static" is selected, WiFi TX buffers are allocated when WiFi is initialized and released when WiFi is de-initialized. The size of each static TX buffer is fixed to about 1.6KB. If "Dynamic" is selected, each WiFi TX buffer is allocated as needed when a data frame is delivered to the Wifi driver from the TCP/IP stack. The buffer is freed after the data frame has been sent by the WiFi driver. The size of each dynamic TX buffer depends on the length of each data frame sent by the TCP/IP layer. If PSRAM is enabled, "Static" should be selected to guarantee enough WiFi TX buffers. If PSRAM is disabled, "Dynamic" should be selected to improve the utilization of RAM. config ESP32_WIFI_STATIC_TX_BUFFER bool "Static" config ESP32_WIFI_DYNAMIC_TX_BUFFER bool "Dynamic" endchoice config ESP32_WIFI_TX_BUFFER_TYPE int default 0 if ESP32_WIFI_STATIC_TX_BUFFER default 1 if ESP32_WIFI_DYNAMIC_TX_BUFFER config ESP32_WIFI_STATIC_TX_BUFFER_NUM int "Max number of WiFi static TX buffers" depends on ESP32_WIFI_STATIC_TX_BUFFER range 1 64 default 16 help Set the number of WiFi static TX buffers. Each buffer takes approximately 1.6KB of RAM. The static RX buffers are allocated when esp_wifi_init() is called, they are not released until esp_wifi_deinit() is called. For each transmitted data frame from the higher layer TCP/IP stack, the WiFi driver makes a copy of it in a TX buffer. For some applications especially UDP applications, the upper layer can deliver frames faster than WiFi layer can transmit. In these cases, we may run out of TX buffers. config ESP32_WIFI_CACHE_TX_BUFFER_NUM int "Max number of WiFi cache TX buffers" depends on ESP_SPIRAM range 16 128 default 32 help Set the number of WiFi cache TX buffer number. For each TX packet from uplayer, such as LWIP etc, WiFi driver needs to allocate a static TX buffer and makes a copy of uplayer packet. If WiFi driver fails to allocate the static TX buffer, it caches the uplayer packets to a dedicated buffer queue, this option is used to configure the size of the cached TX queue. config ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM int "Max number of WiFi dynamic TX buffers" depends on ESP32_WIFI_DYNAMIC_TX_BUFFER range 1 128 default 32 help Set the number of WiFi dynamic TX buffers. The size of each dynamic TXbuffer is not fixed, it depends on the size of each transmitted data frame. For each transmitted frame from the higher layer TCP/IP stack, the WiFi driver makes a copy of it in a TX buffer. For some applications, especially UDP applications, the upper layer can deliver frames faster than WiFi layer can transmit. In these cases, we may run out of TX buffers. choice ESP32_WIFI_MGMT_RX_BUFFER prompt "Type of WiFi RX MGMT buffers" default ESP32_WIFI_STATIC_RX_MGMT_BUFFER help Select type of WiFi RX MGMT buffers: If "Static" is selected, WiFi RX MGMT buffers are allocated when WiFi is initialized and released when WiFi is de-initialized. The size of each static RX MGMT buffer is fixed to about 500 Bytes. If "Dynamic" is selected, each WiFi RX MGMT buffer is allocated as needed when a MGMT data frame is received. The MGMT buffer is freed after the MGMT data frame has been processed by the WiFi driver. config ESP32_WIFI_STATIC_RX_MGMT_BUFFER bool "Static" config ESP32_WIFI_DYNAMIC_RX_MGMT_BUFFER bool "Dynamic" endchoice config ESP32_WIFI_DYNAMIC_RX_MGMT_BUF int default 0 if ESP32_WIFI_STATIC_RX_MGMT_BUFFER default 1 if ESP32_WIFI_DYNAMIC_RX_MGMT_BUFFER config ESP32_WIFI_RX_MGMT_BUF_NUM_DEF int "Max number of WiFi RX MGMT buffers" range 1 10 default 5 help Set the number of WiFi RX_MGMT buffers. For Management buffers, the number of dynamic and static management buffers is the same. In order to prevent memory fragmentation, the management buffer type should be set to static first. config ESP32_WIFI_CSI_ENABLED bool "WiFi CSI(Channel State Information)" default n help Select this option to enable CSI(Channel State Information) feature. CSI takes about CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM KB of RAM. If CSI is not used, it is better to disable this feature in order to save memory. config ESP32_WIFI_AMPDU_TX_ENABLED bool "WiFi AMPDU TX" default y help Select this option to enable AMPDU TX feature. It improves transmission error checking and overall network performance with the cost of processing speed. Helpful when the device is operating in crowded wireless area. config ESP32_WIFI_TX_BA_WIN int "WiFi AMPDU TX BA window size" depends on ESP32_WIFI_AMPDU_TX_ENABLED range 2 32 default 6 help Set the size of WiFi Block Ack TX window. Generally a bigger value means higher throughput but more memory. Most of time we should NOT change the default value unless special reason, e.g. test the maximum UDP TX throughput with iperf etc. For iperf test in shieldbox, the recommended value is 9~12. config ESP32_WIFI_AMPDU_RX_ENABLED bool "WiFi AMPDU RX" default y help Select this option to enable AMPDU RX feature. It improves transmission error checking and overall network performance with the cost of processing speed. Helpful when the device is operating in crowded wireless area. config ESP32_WIFI_RX_BA_WIN int "WiFi AMPDU RX BA window size" depends on ESP32_WIFI_AMPDU_RX_ENABLED range 2 32 default 6 help Set the size of WiFi Block Ack RX window. Generally a bigger value means higher throughput and better compatibility but more memory. Most of time we should NOT change the default value unless special reason, e.g. test the maximum UDP RX throughput with iperf etc. For iperf test in shieldbox, the recommended value is 9~12. If PSRAM is used and WiFi memory is preferred to be allocated in PSRAM first, the default and minimum value should be 16 to achieve better throughput and compatibility with both stations and APs. config ESP32_WIFI_AMSDU_TX_ENABLED bool "WiFi AMSDU TX" depends on ESP_SPIRAM default n help Select this option to enable AMSDU TX feature config ESP32_WIFI_MGMT_SBUF_NUM int "WiFi mgmt short buffer number" range 6 32 default 32 help Set the number of WiFi management short buffer. config ESP32_WIFI_IRAM_OPT bool "WiFi IRAM speed optimization" default n if (BT && ESP_SPIRAM && SOC_SERIES_ESP32) default y help Select this option to place frequently called Wi-Fi library functions in IRAM. When this option is disabled, more than 10Kbytes of IRAM memory will be saved but Wi-Fi throughput will be reduced. config ESP32_WIFI_RX_IRAM_OPT bool "WiFi RX IRAM speed optimization" default n if (BT && ESP_SPIRAM && SOC_SERIES_ESP32) help Select this option to place frequently called Wi-Fi library RX functions in IRAM. When this option is disabled, more than 17Kbytes of IRAM memory will be saved but Wi-Fi performance will be reduced. config ESP32_WIFI_MAX_THREAD_PRIORITY int "Maximum work queue thread priority" default 7 help Maximum priority of thread used for processing driver work queue items. config ESP32_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME int "Minimum active time" range 8 60 default 50 help Only for station in WIFI_PS_MIN_MODEM or WIFI_PS_MAX_MODEM. When the station enters the active state, it will work for at least ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME. If a data packet is received or sent during this period, the time will be refreshed. If the time is up, but the station still has packets to receive or send, the time will also be refreshed. unit: milliseconds. config ESP32_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME int "Maximum keep alive time" range 10 60 default 10 help Only for station in WIFI_PS_MIN_MODEM or WIFI_PS_MAX_MODEM. If no packet has been sent within ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME, a null data packet will be sent to maintain the connection with the AP. unit: seconds. config ESP32_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME int "Minimum wait broadcast data time" range 10 30 default 15 help Only for station in WIFI_PS_MIN_MODEM or WIFI_PS_MAX_MODEM. When the station knows through the beacon that AP will send broadcast packet, it will wait for ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME before entering the sleep process. If a broadcast packet is received with more data bits, the time will refreshed. unit: milliseconds. choice ESP_WIFI_HEAP prompt "Wifi adapter heap in use" default ESP_WIFI_HEAP_RUNTIME config ESP_WIFI_HEAP_RUNTIME bool "Wifi adapter use ESP runtime heap" depends on ESP_HEAP_RUNTIME config ESP_WIFI_HEAP_SPIRAM bool "Wifi adapter use SPIRAM heap" depends on ESP_SPIRAM config ESP_WIFI_HEAP_SYSTEM bool "Wifi adapter use system heap" endchoice # ESP_WIFI_HEAP config ESP32_WIFI_FTM_ENABLE bool "WiFi FTM" default n depends on SOC_SERIES_ESP32C2 || SOC_SERIES_ESP32C3 || SOC_SERIES_ESP32C6 || SOC_SERIES_ESP32S2 || SOC_SERIES_ESP32S3 help Enable feature Fine Timing Measurement for calculating WiFi Round-Trip-Time (RTT). config ESP32_WIFI_FTM_INITIATOR_SUPPORT bool "FTM Initiator support" default y depends on ESP32_WIFI_FTM_ENABLE config ESP32_WIFI_FTM_RESPONDER_SUPPORT bool "FTM Responder support" default y depends on ESP32_WIFI_FTM_ENABLE config ESP32_WIFI_SOFTAP_SUPPORT bool default y help Hidden option to enable Wi-Fi SoftAP functions in WPA supplicant and RF libraries. config ESP32_WIFI_MBEDTLS_CRYPTO bool "Use MbedTLS crypto APIs" default n select MBEDTLS_ECP_C select MBEDTLS_ECDH_C select MBEDTLS_ECDSA_C select MBEDTLS_PKCS5_C select MBEDTLS_PK_WRITE_C select MBEDTLS_CIPHER_MODE_CTR_ENABLED select MBEDTLS_CMAC select MBEDTLS_ENTROPY_C help Select this option to use MbedTLS crypto APIs which utilize hardware acceleration. config ESP32_WIFI_ENABLE_WPA3_SAE bool "WPA3-Personal" default n select ESP32_WIFI_MBEDTLS_CRYPTO help Select this option to allow the device to establish a WPA3-Personal connection. config ESP32_WIFI_ENABLE_WPA3_OWE_STA bool "OWE STA" default y depends on ESP32_WIFI_ENABLE_WPA3_SAE help Select this option to allow the device to establish OWE connection with eligible AP's. config ESP32_WIFI_ENABLE_SAE_PK bool "SAE-PK" default y depends on ESP32_WIFI_ENABLE_WPA3_SAE help Select this option to enable SAE-PK config ESP32_WIFI_DEBUG_PRINT bool "Print debug messages from WPA Supplicant" default n help Select this option to print logging information from WPA supplicant, this includes handshake information and key hex dumps depending on the project logging level. Enabling this could increase the build size ~60kb depending on the project logging level. endif # WIFI_ESP32