1
2menu "Wi-Fi"
3    visible if !IDF_TARGET_ESP32H2
4
5    config ESP32_WIFI_ENABLED
6        bool
7        default "y" if !IDF_TARGET_ESP32H2 # TODO: replace with SOC_CAPS_SUPPORT_WIFI after IDF-2223 is done
8
9    config ESP32_WIFI_SW_COEXIST_ENABLE
10        bool "Software controls WiFi/Bluetooth coexistence"
11        depends on ESP32_WIFI_ENABLED && BT_ENABLED
12        default y
13        help
14            If enabled, WiFi & Bluetooth coexistence is controlled by software rather than hardware.
15            Recommended for heavy traffic scenarios. Both coexistence configuration options are
16            automatically managed, no user intervention is required.
17            If only Bluetooth is used, it is recommended to disable this option to reduce binary file
18            size.
19
20    config ESP32_WIFI_STATIC_RX_BUFFER_NUM
21        int "Max number of WiFi static RX buffers"
22        range 2 25
23        default 10 if !SPIRAM_TRY_ALLOCATE_WIFI_LWIP
24        default 16 if SPIRAM_TRY_ALLOCATE_WIFI_LWIP
25        help
26            Set the number of WiFi static RX buffers. Each buffer takes approximately 1.6KB of RAM.
27            The static rx buffers are allocated when esp_wifi_init is called, they are not freed
28            until esp_wifi_deinit is called.
29
30            WiFi hardware use these buffers to receive all 802.11 frames.
31            A higher number may allow higher throughput but increases memory use. If ESP32_WIFI_AMPDU_RX_ENABLED
32            is enabled, this value is recommended to set equal or bigger than ESP32_WIFI_RX_BA_WIN in order to
33            achieve better throughput and compatibility with both stations and APs.
34
35    config ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM
36        int "Max number of WiFi dynamic RX buffers"
37        range 0 128 if !LWIP_WND_SCALE
38        range 0 1024 if LWIP_WND_SCALE
39        default 32
40        help
41            Set the number of WiFi dynamic RX buffers, 0 means unlimited RX buffers will be allocated
42            (provided sufficient free RAM). The size of each dynamic RX buffer depends on the size of
43            the received data frame.
44
45            For each received data frame, the WiFi driver makes a copy to an RX buffer and then delivers
46            it to the high layer TCP/IP stack. The dynamic RX buffer is freed after the higher layer has
47            successfully received the data frame.
48
49            For some applications, WiFi data frames may be received faster than the application can
50            process them. In these cases we may run out of memory if RX buffer number is unlimited (0).
51
52            If a dynamic RX buffer limit is set, it should be at least the number of static RX buffers.
53
54    choice ESP32_WIFI_TX_BUFFER
55        prompt "Type of WiFi TX buffers"
56        default ESP32_WIFI_DYNAMIC_TX_BUFFER
57        help
58            Select type of WiFi TX buffers:
59
60            If "Static" is selected, WiFi TX buffers are allocated when WiFi is initialized and released
61            when WiFi is de-initialized. The size of each static TX buffer is fixed to about 1.6KB.
62
63            If "Dynamic" is selected, each WiFi TX buffer is allocated as needed when a data frame is
64            delivered to the Wifi driver from the TCP/IP stack. The buffer is freed after the data frame
65            has been sent by the WiFi driver. The size of each dynamic TX buffer depends on the length
66            of each data frame sent by the TCP/IP layer.
67
68            If PSRAM is enabled, "Static" should be selected to guarantee enough WiFi TX buffers.
69            If PSRAM is disabled, "Dynamic" should be selected to improve the utilization of RAM.
70
71        config ESP32_WIFI_STATIC_TX_BUFFER
72            bool "Static"
73        config ESP32_WIFI_DYNAMIC_TX_BUFFER
74            bool "Dynamic"
75            depends on !SPIRAM_USE_MALLOC
76    endchoice
77
78    config ESP32_WIFI_TX_BUFFER_TYPE
79        int
80        default 0 if ESP32_WIFI_STATIC_TX_BUFFER
81        default 1 if ESP32_WIFI_DYNAMIC_TX_BUFFER
82
83    config ESP32_WIFI_STATIC_TX_BUFFER_NUM
84        int "Max number of WiFi static TX buffers"
85        depends on ESP32_WIFI_STATIC_TX_BUFFER
86        range 1 64
87        default 16
88        help
89            Set the number of WiFi static TX buffers. Each buffer takes approximately 1.6KB of RAM.
90            The static RX buffers are allocated when esp_wifi_init() is called, they are not released
91            until esp_wifi_deinit() is called.
92
93            For each transmitted data frame from the higher layer TCP/IP stack, the WiFi driver makes a
94            copy of it in a TX buffer.  For some applications especially UDP applications, the upper
95            layer can deliver frames faster than WiFi layer can transmit. In these cases, we may run out
96            of TX buffers.
97
98    config ESP32_WIFI_CACHE_TX_BUFFER_NUM
99        int "Max number of WiFi cache TX buffers"
100        depends on (ESP32_SPIRAM_SUPPORT || ESP32S2_SPIRAM_SUPPORT || ESP32S3_SPIRAM_SUPPORT)
101        range 16 128
102        default 32
103        help
104            Set the number of WiFi cache TX buffer number.
105
106            For each TX packet from uplayer, such as LWIP etc, WiFi driver needs to allocate a static TX
107            buffer and makes a copy of uplayer packet. If WiFi driver fails to allocate the static TX buffer,
108            it caches the uplayer packets to a dedicated buffer queue, this option is used to configure the
109            size of the cached TX queue.
110
111    config ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM
112        int "Max number of WiFi dynamic TX buffers"
113        depends on ESP32_WIFI_DYNAMIC_TX_BUFFER
114        range 1 128
115        default 32
116        help
117            Set the number of WiFi dynamic TX buffers. The size of each dynamic TX buffer is not fixed,
118            it depends on the size of each transmitted data frame.
119
120            For each transmitted frame from the higher layer TCP/IP stack, the WiFi driver makes a copy
121            of it in a TX buffer. For some applications, especially UDP applications, the upper layer
122            can deliver frames faster than WiFi layer can transmit. In these cases, we may run out of TX
123            buffers.
124
125    config ESP32_WIFI_CSI_ENABLED
126        bool "WiFi CSI(Channel State Information)"
127        default n
128        help
129            Select this option to enable CSI(Channel State Information) feature. CSI takes about
130            CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM KB of RAM. If CSI is not used, it is better to disable
131            this feature in order to save memory.
132
133    config ESP32_WIFI_AMPDU_TX_ENABLED
134        bool "WiFi AMPDU TX"
135        default y
136        help
137            Select this option to enable AMPDU TX feature
138
139
140    config ESP32_WIFI_TX_BA_WIN
141        int "WiFi AMPDU TX BA window size"
142        depends on ESP32_WIFI_AMPDU_TX_ENABLED
143        range 2 32
144        default 6
145        help
146            Set the size of WiFi Block Ack TX window. Generally a bigger value means higher throughput but
147            more memory. Most of time we should NOT change the default value unless special reason, e.g.
148            test the maximum UDP TX throughput with iperf etc. For iperf test in shieldbox, the recommended
149            value is 9~12.
150
151    config ESP32_WIFI_AMPDU_RX_ENABLED
152        bool "WiFi AMPDU RX"
153        default y
154        help
155            Select this option to enable AMPDU RX feature
156
157    config ESP32_WIFI_RX_BA_WIN
158        int "WiFi AMPDU RX BA window size"
159        depends on ESP32_WIFI_AMPDU_RX_ENABLED
160        range 2 32
161        default 6 if !SPIRAM_TRY_ALLOCATE_WIFI_LWIP
162        default 16 if SPIRAM_TRY_ALLOCATE_WIFI_LWIP
163        help
164            Set the size of WiFi Block Ack RX window. Generally a bigger value means higher throughput and better
165            compatibility but more memory. Most of time we should NOT change the default value unless special
166            reason, e.g. test the maximum UDP RX throughput with iperf etc. For iperf test in shieldbox, the
167            recommended value is 9~12. If PSRAM is used and WiFi memory is prefered to allocat in PSRAM first,
168            the default and minimum value should be 16 to achieve better throughput and compatibility with both
169            stations and APs.
170
171    config ESP32_WIFI_AMSDU_TX_ENABLED
172        bool "WiFi AMSDU TX"
173        depends on (ESP32_SPIRAM_SUPPORT || ESP32S2_SPIRAM_SUPPORT || ESP32S3_SPIRAM_SUPPORT)
174        default n
175        help
176            Select this option to enable AMSDU TX feature
177
178    config ESP32_WIFI_NVS_ENABLED
179        bool "WiFi NVS flash"
180        default y
181        help
182            Select this option to enable WiFi NVS flash
183
184    choice ESP32_WIFI_TASK_CORE_ID
185        depends on !FREERTOS_UNICORE
186        prompt "WiFi Task Core ID"
187        default ESP32_WIFI_TASK_PINNED_TO_CORE_0
188        help
189            Pinned WiFi task to core 0 or core 1.
190
191        config ESP32_WIFI_TASK_PINNED_TO_CORE_0
192            bool "Core 0"
193        config ESP32_WIFI_TASK_PINNED_TO_CORE_1
194            bool "Core 1"
195    endchoice
196
197    config ESP32_WIFI_SOFTAP_BEACON_MAX_LEN
198        int "Max length of WiFi SoftAP Beacon"
199        range 752 1256
200        default 752
201        help
202            ESP-MESH utilizes beacon frames to detect and resolve root node conflicts (see documentation). However the
203            default length of a beacon frame can simultaneously hold only five root node identifier structures,
204            meaning that a root node conflict of up to five nodes can be detected at one time. In the occurence of
205            more root nodes conflict involving more than five root nodes, the conflict resolution process will detect
206            five of the root nodes, resolve the conflict, and re-detect more root nodes. This process will repeat
207            until all root node conflicts are resolved. However this process can generally take a very long time.
208
209            To counter this situation, the beacon frame length can be increased such that more root nodes can be
210            detected simultaneously. Each additional root node will require 36 bytes and should be added ontop of the
211            default beacon frame length of
212            752 bytes. For example, if you want to detect 10 root nodes simultaneously, you need to set the beacon
213            frame length as
214            932 (752+36*5).
215
216            Setting a longer beacon length also assists with debugging as the conflicting root nodes can be identified
217            more quickly.
218
219    config ESP32_WIFI_MGMT_SBUF_NUM
220        int "WiFi mgmt short buffer number"
221        range 6 32
222        default 32
223        help
224            Set the number of WiFi management short buffer.
225
226    config ESP32_WIFI_IRAM_OPT
227        bool "WiFi IRAM speed optimization"
228        default n if (BT_ENABLED && ESP32_SPIRAM_SUPPORT)
229        default y
230        help
231            Select this option to place frequently called Wi-Fi library functions in IRAM.
232            When this option is disabled, more than 10Kbytes of IRAM memory will be saved
233            but Wi-Fi throughput will be reduced.
234
235    config ESP32_WIFI_RX_IRAM_OPT
236        bool "WiFi RX IRAM speed optimization"
237        default n if (BT_ENABLED && ESP32_SPIRAM_SUPPORT)
238        default y
239        help
240            Select this option to place frequently called Wi-Fi library RX functions in IRAM.
241            When this option is disabled, more than 17Kbytes of IRAM memory will be saved
242            but Wi-Fi performance will be reduced.
243
244    config ESP32_WIFI_ENABLE_WPA3_SAE
245        bool "Enable WPA3-Personal"
246        default y
247        depends on WPA_MBEDTLS_CRYPTO
248        help
249            Select this option to allow the device to establish a WPA3-Personal connection with eligible AP's.
250            PMF (Protected Management Frames) is a prerequisite feature for a WPA3 connection, it needs to be
251            explicitly configured before attempting connection. Please refer to the Wi-Fi Driver API Guide for details.
252
253    config ESP_WIFI_SLP_IRAM_OPT
254        bool "WiFi SLP IRAM speed optimization"
255        select PM_SLP_DEFAULT_PARAMS_OPT
256        help
257            Select this option to place called Wi-Fi library TBTT process and receive beacon functions in IRAM.
258            Some functions can be put in IRAM either by ESP32_WIFI_IRAM_OPT and ESP32_WIFI_RX_IRAM_OPT, or this one.
259            If already enabled ESP32_WIFI_IRAM_OPT, the other 7.3KB IRAM memory would be taken by this option.
260            If already enabled ESP32_WIFI_RX_IRAM_OPT, the other 1.3KB IRAM memory would be taken by this option.
261            If neither of them are enabled, the other 7.4KB IRAM memory would be taken by this option.
262            Wi-Fi power-save mode average current would be reduced if this option is enabled.
263
264    config ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME
265        int "Minimum active time"
266        range 8 60
267        default 50
268        depends on ESP_WIFI_SLP_IRAM_OPT
269        help
270            The minimum timeout for waiting to receive data, unit: milliseconds.
271
272    config ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME
273        int "Maximum keep alive time"
274        range 10 60
275        default 10
276        depends on ESP_WIFI_SLP_IRAM_OPT
277        help
278            The maximum time that wifi keep alive, unit: seconds.
279
280    config ESP_WIFI_FTM_ENABLE
281        bool "WiFi FTM"
282        default n
283        depends on (IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3)
284        help
285            Enable feature Fine Timing Measurement for calculating WiFi Round-Trip-Time (RTT).
286
287    config ESP_WIFI_FTM_INITIATOR_SUPPORT
288        bool "FTM Initiator support"
289        default y
290        depends on ESP_WIFI_FTM_ENABLE
291
292    config ESP_WIFI_FTM_RESPONDER_SUPPORT
293        bool "FTM Responder support"
294        default y
295        depends on ESP_WIFI_FTM_ENABLE
296
297    config ESP_WIFI_STA_DISCONNECTED_PM_ENABLE
298        bool "Power Management for station at disconnected"
299        help
300            Select this option to enable power_management for station when disconnected.
301            Chip will do modem-sleep when rf module is not in use any more.
302
303    config ESP_WIFI_EXTERNAL_COEXIST_ENABLE
304        bool "WiFi External Coexistence"
305        default n
306        depends on (!BT_ENABLED && (IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32C3))
307        help
308            If enabled, HW External coexistence arbitration is managed by GPIO pins.
309            It can support three types of wired combinations so far which are 1-wired/2-wired/3-wired.
310            User can select GPIO pins in application code with configure interfaces.
311
312            This function depends on BT-off
313            because currently we don't support external coex and internal coex simultaneously.
314
315    config ESP_WIFI_GCMP_SUPPORT
316        bool "WiFi GCMP Support(GCMP128 and GCMP256)"
317        default n
318        depends on (IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3)
319        help
320            Select this option to enable GCMP support. GCMP support is compulsory for WiFi Suite-B support.
321
322    config ESP_WIFI_GMAC_SUPPORT
323        bool "WiFi GMAC Support(GMAC128 and GMAC256)"
324        default n
325        help
326            Select this option to enable GMAC support. GMAC support is compulsory for WiFi 192 bit certification.
327
328    config ESP_WIFI_SOFTAP_SUPPORT
329        bool "WiFi SoftAP Support"
330        default y
331        help
332            WiFi module can be compiled without SoftAP to save code size.
333
334endmenu  # Wi-Fi
335