# 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_MDM_RING_BUF_SIZE
	int "Modem ring buffer size"
	default 1024
	help
	  Ring buffer size used by modem UART interface handler.

config WIFI_ESP_MDM_RX_BUF_COUNT
	int "Modem RX buffer count"
	default 30
	help
	  Number of preallocated RX buffers used by modem command handler.

config WIFI_ESP_MDM_RX_BUF_SIZE
	int "Modem RX buffer size"
	default 128
	help
	  Size of preallocated RX buffers used by modem command handler.

config WIFI_ESP_PASSIVE_MODE
	bool "Use passive mode"
	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.

config WIFI_ESP_RESET_TIMEOUT
	int "Reset timeout"
	default 3000
	help
	  How long to wait for device to become ready after AT+RST has been
	  sent. This can vary with chipset (ESP8266/ESP32) and firmware
	  version. This is ignored if a reset pin is configured.

config WIFI_ESP_RX_NET_PKT_ALLOC_TIMEOUT
	int "Network interface RX packet allocation timeout"
	default 5000
	help
	  Network interface RX net_pkt allocation timeout in milliseconds.

choice
	prompt "ESP IP Address configuration"
	default WIFI_ESP_IP_DHCP
	help
	  Choose whether to use an IP assigned by DHCP Server or
	  configure a static IP Address.

config WIFI_ESP_IP_DHCP
	bool "DHCP"
	help
	  Use DHCP to get an IP Address.

config WIFI_ESP_IP_STATIC
	bool "Static"
	help
	  Setup Static IP Address.

endchoice

if WIFI_ESP_IP_STATIC

config WIFI_ESP_IP_ADDRESS
	string "ESP Station mode IP Address"

config WIFI_ESP_IP_GATEWAY
	string "Gateway Address"

config WIFI_ESP_IP_MASK
	string "Network Mask"

endif

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

config WIFI_ESP_DNS_USE
	bool "Use DNS from ESP"
	depends on DNS_RESOLVER
	help
	  Fetch DNS servers from ESP chip with AT+CIPDNS? command and apply that
	  list to system DNS resolver.

endif # WIFI_ESP
