# Copyright (c) 2019 Tobias Svehagen
# SPDX-License-Identifier: Apache-2.0

menuconfig WIFI_ESP
	bool "Espressif ESP8266 and ESP32 support"
	select MODEM
	select MODEM_CONTEXT
	select MODEM_CMD_HANDLER
	select MODEM_IFACE_UART
	select NET_L2_WIFI_MGMT
	select WIFI_OFFLOAD

if WIFI_ESP

config WIFI_ESP_NAME
	string "Driver name"
	default "esp-wifi-modem"

config WIFI_ESP_RX_STACK_SIZE
	int "Stack size for the Espressif esp wifi driver RX thread"
	default 1024
	help
	  This stack is used by the Espressif ESP RX thread.

config WIFI_ESP_RX_THREAD_PRIORITY
	int "Priority of RX thread"
	default 7
	help
	  Priority of thread used for processing RX data.

config WIFI_ESP_WORKQ_STACK_SIZE
	int "Stack size for the esp driver work queue"
	default 2048
	help
	  This stack is used by the work queue to pass off net_pkt data
	  to the rest of the network stack, letting the rx thread continue
	  processing data.

config WIFI_ESP_WORKQ_THREAD_PRIORITY
	int "Priority of work queue thread"
	default 7
	help
	  Priority of thread used for processing driver work queue items.

config WIFI_ESP_PASSIVE_TCP
	bool "Use passive TCP"
	help
	  This lets the ESP handle the TCP window so that data can flow
	  at a rate that the driver can handle. Without this, data might get
	  lost if the driver cannot empty the device buffer quickly enough.

choice WIFI_ESP_AT_VERSION
	prompt "AT version"
	default WIFI_ESP_AT_VERSION_2_0
	help
	  Select which version of AT command set should be used.

config WIFI_ESP_AT_VERSION_1_7
	bool "AT version 1.7"
	help
	  Use AT command set version 1.7.

config WIFI_ESP_AT_VERSION_2_0
	bool "AT version 2.0"
	help
	  Use AT command set version 2.0.

endchoice

endif # WIFI_ESP
