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

menuconfig WIFI_ESP_AT
	bool "Espressif AT Command support"
	select MODEM
	select MODEM_CONTEXT
	select MODEM_CMD_HANDLER
	select MODEM_IFACE_UART
	select NET_L2_WIFI_MGMT
	select WIFI_OFFLOAD
	help
	  Enable Espressif AT Command offloaded WiFi driver. It is supported on
	  any serial capable platform and communicates with Espressif chips
	  running ESP-AT firmware (https://github.com/espressif/esp-at).

if WIFI_ESP_AT

config WIFI_ESP_AT_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_AT_RX_THREAD_PRIORITY
	int "Priority of RX thread"
	default 7
	help
	  Priority of thread used for processing RX data.

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

config WIFI_ESP_AT_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_AT_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_AT_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_AT_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_AT_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_AT_IP_DHCP
	help
	  Choose whether to use an IP assigned by DHCP Server or
	  configure a static IP Address.

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

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

endchoice

if WIFI_ESP_AT_IP_STATIC

config WIFI_ESP_AT_IP_ADDRESS
	string "ESP Station mode IP Address"

config WIFI_ESP_AT_IP_GATEWAY
	string "Gateway Address"

config WIFI_ESP_AT_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_AT_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_AT
