# 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_SCAN_PASSIVE
	bool "Passive scan"
	help
	  Use passive scanning.

config WIFI_ESP_AT_SCAN_MAC_ADDRESS
	bool "MAC address in scan response"
	help
	  Get mac address in scan response.

config WIFI_ESP_AT_SCAN_RESULT_RSSI_ORDERED
	bool "Scan result ordering based on RSSI"
	help
	  Order based on RSSI.

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_1
	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.

config WIFI_ESP_AT_VERSION_2_1
	bool "AT version 2.1"
	help
	  Use AT command set version 2.1.

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
