# Shell backends configuration options

# Copyright (c) 2018 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

menuconfig SHELL_BACKENDS
	bool "Shell backends"
	default y
	help
	  Enable shell backends.

if SHELL_BACKENDS

# Workaround for not being able to have commas in macro arguments
DT_CHOSEN_Z_SHELL_UART := zephyr,shell-uart

config SHELL_BACKEND_SERIAL
	bool "Serial backend"
	default "$(dt_chosen_enabled,$(DT_CHOSEN_Z_SHELL_UART))" if HAS_DTS
	default y if !HAS_DTS
	select SERIAL
	select RING_BUFFER
	help
	  Enable serial backend.

if SHELL_BACKEND_SERIAL

config SHELL_BACKEND_SERIAL_INIT_PRIORITY
	int "Initialization priority"
	default 0
	range 0 99
	help
	  Initialization priority for UART backend. This must be bigger than
	  the initialization priority of the used serial device.

config SHELL_PROMPT_UART
	string "Displayed prompt name"
	default "uart:~$ "
	help
	  Displayed prompt name for UART backend. If prompt is set, the shell will
	  send two newlines during initialization.

# Internal config to enable UART interrupts if supported.
config SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN
	bool "Interrupt driven"
	default y
	depends on SERIAL_SUPPORT_INTERRUPT
	select UART_INTERRUPT_DRIVEN

config SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE
	int "Set TX ring buffer size"
	default 8
	depends on SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN
	help
	  If UART is utilizing DMA transfers then increasing ring buffer size
	  increases transfers length and reduces number of interrupts.

config SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE
	int "Set RX ring buffer size"
	default 64
	help
	  RX ring buffer size impacts accepted latency of handling incoming
	  bytes by shell. If shell input is coming from the keyboard then it is
	  usually enough if ring buffer is few bytes (more than one due to
	  escape sequences). However, if bulk data is transferred it may be
	  required to increase it.

config SHELL_BACKEND_SERIAL_RX_POLL_PERIOD
	int "RX polling period (in milliseconds)"
	default 10
	depends on !SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN
	help
	  Determines how often UART is polled for RX byte.

config SHELL_BACKEND_SERIAL_CHECK_DTR
	bool "Check DTR signal before TX"
	depends on UART_LINE_CTRL
	help
	  Check DTR signal before TX.

module = SHELL_BACKEND_SERIAL
default-timeout = 100
source "subsys/shell/Kconfig.template.shell_log_queue_timeout"

default-size = 10
source "subsys/shell/Kconfig.template.shell_log_queue_size"

choice
	prompt "Initial log level limit"
	default SHELL_BACKEND_SERIAL_LOG_LEVEL_DEFAULT

config SHELL_BACKEND_SERIAL_LOG_LEVEL_DEFAULT
	bool "System limit (LOG_MAX_LEVEL)"

config SHELL_BACKEND_SERIAL_LOG_LEVEL_DBG
	bool "Debug"

config SHELL_BACKEND_SERIAL_LOG_LEVEL_INF
	bool "Info"

config SHELL_BACKEND_SERIAL_LOG_LEVEL_WRN
	bool "Warning"

config SHELL_BACKEND_SERIAL_LOG_LEVEL_ERR
	bool "Error"

config SHELL_BACKEND_SERIAL_LOG_LEVEL_NONE
	bool "None"

endchoice

config SHELL_BACKEND_SERIAL_LOG_LEVEL
	int
	default 0 if SHELL_BACKEND_SERIAL_LOG_LEVEL_NONE
	default 1 if SHELL_BACKEND_SERIAL_LOG_LEVEL_ERR
	default 2 if SHELL_BACKEND_SERIAL_LOG_LEVEL_WRN
	default 3 if SHELL_BACKEND_SERIAL_LOG_LEVEL_INF
	default 4 if SHELL_BACKEND_SERIAL_LOG_LEVEL_DBG
	default 5 if SHELL_BACKEND_SERIAL_LOG_LEVEL_DEFAULT

endif # SHELL_BACKEND_SERIAL

config SHELL_BACKEND_RTT
	bool "RTT backend"
	select CONSOLE
	select RTT_CONSOLE
	depends on USE_SEGGER_RTT
	help
	  Enable RTT backend.

if SHELL_BACKEND_RTT

config SHELL_PROMPT_RTT
	string "Displayed prompt name"
	default "rtt:~$ "
	help
	  Displayed prompt name for RTT backend. If prompt is set, the shell will
	  send two newlines during initialization.

config SHELL_RTT_RX_POLL_PERIOD
	int "RX polling period (in milliseconds)"
	default 10
	help
	  Determines how often RTT is polled for RX byte.

module = SHELL_BACKEND_RTT
default-timeout = 100
source "subsys/shell/Kconfig.template.shell_log_queue_timeout"

default-size = 10
source "subsys/shell/Kconfig.template.shell_log_queue_size"

choice
	prompt "Initial log level limit"
	default SHELL_RTT_INIT_LOG_LEVEL_DEFAULT

config SHELL_RTT_INIT_LOG_LEVEL_DEFAULT
	bool "System limit (LOG_MAX_LEVEL)"

config SHELL_RTT_INIT_LOG_LEVEL_DBG
	bool "Debug"

config SHELL_RTT_INIT_LOG_LEVEL_INF
	bool "Info"

config SHELL_RTT_INIT_LOG_LEVEL_WRN
	bool "Warning"

config SHELL_RTT_INIT_LOG_LEVEL_ERR
	bool "Error"

config SHELL_RTT_INIT_LOG_LEVEL_NONE
	bool "None"

endchoice

config SHELL_RTT_INIT_LOG_LEVEL
	int
	default 0 if SHELL_RTT_INIT_LOG_LEVEL_NONE
	default 1 if SHELL_RTT_INIT_LOG_LEVEL_ERR
	default 2 if SHELL_RTT_INIT_LOG_LEVEL_WRN
	default 3 if SHELL_RTT_INIT_LOG_LEVEL_INF
	default 4 if SHELL_RTT_INIT_LOG_LEVEL_DBG
	default 5 if SHELL_RTT_INIT_LOG_LEVEL_DEFAULT

module = SHELL_RTT
module-str = RTT shell backend
source "subsys/logging/Kconfig.template.log_config"

endif # SHELL_BACKEND_RTT

config SHELL_BACKEND_MQTT
	bool "MQTT backend"
	depends on NET_TCP
	depends on NET_IPV4
	depends on NETWORKING
	select DNS_RESOLVER
	select HWINFO
	select MQTT_LIB
	select NET_MGMT
	select NET_MGMT_EVENT
	help
	  Enable MQTT backend.

if SHELL_BACKEND_MQTT

config SHELL_MQTT_SERVER_ADDR
	string "MQTT server address"
	default "192.168.0.100"
	help
	  MQTT server address.

config SHELL_MQTT_SERVER_PORT
	int "MQTT server port"
	default 1883
	help
	  MQTT server port.

config SHELL_MQTT_SERVER_USERNAME
	string "MQTT server username"
	help
	  MQTT server username.

config SHELL_MQTT_SERVER_PASSWORD
	string "MQTT server password"
	help
	  MQTT server password.

config SHELL_MQTT_RX_BUF_SIZE
	int "RX buffer size"
	default 256
	help
	  Buffer size for the MQTT data reception.

config SHELL_MQTT_TX_BUF_SIZE
	int "TX buffer size"
	range 32 65535
	default 256
	help
	  Buffer size for the MQTT data transmission.

module = SHELL_BACKEND_MQTT
default-timeout = 100
source "subsys/shell/Kconfig.template.shell_log_queue_timeout"

default-size = 10
source "subsys/shell/Kconfig.template.shell_log_queue_size"

choice
	prompt "Initial log level limit"
	default SHELL_MQTT_INIT_LOG_LEVEL_DEFAULT

config SHELL_MQTT_INIT_LOG_LEVEL_DEFAULT
	bool "System limit (LOG_MAX_LEVEL)"

config SHELL_MQTT_INIT_LOG_LEVEL_DBG
	bool "Debug"

config SHELL_MQTT_INIT_LOG_LEVEL_INF
	bool "Info"

config SHELL_MQTT_INIT_LOG_LEVEL_WRN
	bool "Warning"

config SHELL_MQTT_INIT_LOG_LEVEL_ERR
	bool "Error"

config SHELL_MQTT_INIT_LOG_LEVEL_NONE
	bool "None"

endchoice # SHELL_MQTT_INIT_LOG_LEVEL

config SHELL_MQTT_INIT_LOG_LEVEL
	int
	default 0 if SHELL_MQTT_INIT_LOG_LEVEL_NONE
	default 1 if SHELL_MQTT_INIT_LOG_LEVEL_ERR
	default 2 if SHELL_MQTT_INIT_LOG_LEVEL_WRN
	default 3 if SHELL_MQTT_INIT_LOG_LEVEL_INF
	default 4 if SHELL_MQTT_INIT_LOG_LEVEL_DBG
	default 5 if SHELL_MQTT_INIT_LOG_LEVEL_DEFAULT

module = SHELL_MQTT
module-str = MQTT shell backend
source "subsys/logging/Kconfig.template.log_config"

endif # SHELL_BACKEND_MQTT

config SHELL_BACKEND_TELNET
	bool "TELNET backend."
	depends on NET_TCP
	depends on NET_IPV4 || NET_IPV6
	help
	  Enable TELNET backend.

if SHELL_BACKEND_TELNET

config SHELL_PROMPT_TELNET
	string "Displayed prompt name"
	default "~$ "
	help
	  Displayed prompt name for TELNET backend. If prompt is set, the shell will
	  send two newlines during initialization.

config SHELL_TELNET_PORT
	int "Telnet port number"
	default 23
	help
	  This option is used to configure on which port telnet is going
	  to be bound.

config SHELL_TELNET_LINE_BUF_SIZE
	int "Telnet line buffer size"
	default 80
	help
	  This option can be used to modify the size of the buffer storing
	  shell output line, prior to sending it through the network.
	  Of course an output line can be longer than such size, it just
	  means sending it will start as soon as it reaches this size.
	  It really depends on what type of output is expected.
	  A lot of short lines: better reduce this value. On the contrary,
	  raise it.

config SHELL_TELNET_SEND_TIMEOUT
	int "Telnet line send timeout"
	default 100
	help
	  This option can be used to modify the duration of the timer that kick
	  in when a line buffer is not empty but did not yet meet the line feed.

config SHELL_TELNET_SUPPORT_COMMAND
	bool "Add support for telnet commands (IAC) [EXPERIMENTAL]"
	select EXPERIMENTAL
	help
	  Current support is so limited it's not interesting to enable it.
	  However, if proven to be needed at some point, it will be possible
	  to extend such support.

module = SHELL_TELNET
default-timeout = 100
source "subsys/shell/Kconfig.template.shell_log_queue_timeout"

default-size = 10
source "subsys/shell/Kconfig.template.shell_log_queue_size"

choice
	prompt "Initial log level limit"
	default SHELL_TELNET_INIT_LOG_LEVEL_DEFAULT

config SHELL_TELNET_INIT_LOG_LEVEL_DEFAULT
	bool "System limit (LOG_MAX_LEVEL)"

config SHELL_TELNET_INIT_LOG_LEVEL_DBG
	bool "Debug"

config SHELL_TELNET_INIT_LOG_LEVEL_INF
	bool "Info"

config SHELL_TELNET_INIT_LOG_LEVEL_WRN
	bool "Warning"

config SHELL_TELNET_INIT_LOG_LEVEL_ERR
	bool "Error"

config SHELL_TELNET_INIT_LOG_LEVEL_NONE
	bool "None"

endchoice

config SHELL_TELNET_INIT_LOG_LEVEL
	int
	default 0 if SHELL_TELNET_INIT_LOG_LEVEL_NONE
	default 1 if SHELL_TELNET_INIT_LOG_LEVEL_ERR
	default 2 if SHELL_TELNET_INIT_LOG_LEVEL_WRN
	default 3 if SHELL_TELNET_INIT_LOG_LEVEL_INF
	default 4 if SHELL_TELNET_INIT_LOG_LEVEL_DBG
	default 5 if SHELL_TELNET_INIT_LOG_LEVEL_DEFAULT

module = SHELL_TELNET
module-str = TELNET shell backend
source "subsys/logging/Kconfig.template.log_config"

endif # SHELL_TELNET_BACKEND

config SHELL_BACKEND_DUMMY
	bool "Dummy backend."
	help
	  Enable dummy backend which can be used to execute commands with no
	  need for physical transport interface.

if SHELL_BACKEND_DUMMY

config SHELL_PROMPT_DUMMY
	string "Displayed prompt name"
	default "~$ "
	help
	  Displayed prompt name for DUMMY backend. If prompt is set, the shell will
	  send two newlines during initialization.

config SHELL_BACKEND_DUMMY_BUF_SIZE
	int "Size of dummy buffer size"
	default 300
	help
	  This is size of output buffer that will be used by dummy backend, this limits number of
	  characters that will be captured from command output.

endif # SHELL_BACKEND_DUMMY

endif # SHELL_BACKENDS
