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

menuconfig WIFI_ESP_AT
	bool "Espressif AT Command support"
	default y
	depends on DT_HAS_ESPRESSIF_ESP_AT_ENABLED
	select MODEM
	select MODEM_CONTEXT
	select MODEM_CMD_HANDLER
	select MODEM_IFACE_UART
	select NET_L2_WIFI_MGMT
	select WIFI_OFFLOAD
	imply UART_USE_RUNTIME_CONFIGURE
	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.

config WIFI_ESP_AT_CIPDINFO_USE
	bool "Use CIPDINFO to get peer ip and port"
	help
	  Enable AT+CIPDINFO got get peer ip-address and port.

config WIFI_ESP_AT_FETCH_VERSION
	bool "Fetch and log ESP-AT firmware version"
	default y
	depends on LOG
	help
	  Fetch information about ESP-AT firmware version. This includes AT
	  command version, SDK (ESP-IDF), board and compile time.

endif # WIFI_ESP_AT
