# 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))"
	select SERIAL
	select RING_BUFFER
	help
	  Enable serial backend.

if SHELL_BACKEND_SERIAL

config SHELL_BACKEND_SERIAL_INIT_PRIORITY
	int "Initialization priority"
	default APPLICATION_INIT_PRIORITY
	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.

config SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN
	bool "Interrupt driven"
	default y if !UART_NATIVE_PTY
	depends on SERIAL_SUPPORT_INTERRUPT

config SHELL_ASYNC_API
	bool "Asynchronous shell API"
	default n
	depends on UART_ASYNC_API
	help
	  This option enables asynchronous shell API.

choice SHELL_BACKEND_SERIAL_API
	prompt "Mode"
	default SHELL_BACKEND_SERIAL_API_ASYNC if SHELL_ASYNC_API
	default SHELL_BACKEND_SERIAL_API_INTERRUPT_DRIVEN if SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN
	default SHELL_BACKEND_SERIAL_API_POLLING

config SHELL_BACKEND_SERIAL_API_POLLING
	prompt "Polling"

config SHELL_BACKEND_SERIAL_API_INTERRUPT_DRIVEN
	bool "Interrupt driven"
	depends on SERIAL_SUPPORT_INTERRUPT
	select UART_INTERRUPT_DRIVEN


config SHELL_BACKEND_SERIAL_API_ASYNC
	bool "Asynchronous"
	depends on SERIAL_SUPPORT_ASYNC
	select UART_ASYNC_RX_HELPER

endchoice

config SHELL_BACKEND_SERIAL_FORCE_TX_BLOCKING_MODE
	bool "Force blocking mode for TX"
	help
	  Force blocking mode for TX.

config SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE
	int "Set TX ring buffer size"
	default 8
	depends on SHELL_BACKEND_SERIAL_API_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"
	depends on SHELL_BACKEND_SERIAL_API_INTERRUPT_DRIVEN || SHELL_BACKEND_SERIAL_API_POLLING
	default 256 if MCUMGR_TRANSPORT_SHELL
	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.

if SHELL_BACKEND_SERIAL_API_ASYNC

config SHELL_BACKEND_SERIAL_ASYNC_RX_TIMEOUT
	int "RX inactivity timeout (in microseconds)"
	default 10000
	help
	  Inactivity timeout after which received data is reported.

config SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_COUNT
	int "Number of RX buffers"
	default 4
	range 2 64
	help
	  Number of RX buffers. Some UART driver implementations changes buffers
	  on timeout so this number should be big enough to cover handling on
	  time incoming data. 4 should be enough for almost all the cases unless
	  CPU load is high and there is very high shell thread latency.

config SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_SIZE
	int "Size of the RX buffer"
	default 16
	help
	  Size of a single RX buffer. Together with buffer count it defines the
	  space that can hold RX data. It may be decreased if shell input is
	  slow and may need to be increased if long messages are pasted directly
	  to the shell prompt.

endif # SHELL_BACKEND_SERIAL_API_ASYNC

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

config SHELL_BACKEND_SERIAL_CHECK_DTR
	bool "Check DTR signal before TX"
	depends on SHELL_BACKEND_SERIAL_API_INTERRUPT_DRIVEN
	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 = 512
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
	select SEGGER_RTT_CUSTOM_LOCKING
	depends on USE_SEGGER_RTT
	# RTT backend can only be called from thread context.
	depends on !(SHELL_LOG_BACKEND && LOG_MODE_IMMEDIATE)
	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_BACKEND_RTT_BUFFER
	int "Buffer number used for shell input and output."
	range 0 SEGGER_RTT_MAX_NUM_UP_BUFFERS
	default 0
	help
	  Select index of up-buffer used for shell output, by default it uses
	  terminal up-buffer and its settings.

config SHELL_BACKEND_RTT_RETRY_CNT
	int "Number of retries"
	default 4
	help
	  Number of TX retries before dropping the data and assuming that
	  RTT session is inactive.

config SHELL_BACKEND_RTT_RETRY_DELAY_MS
	int "Delay between TX retries in milliseconds"
	default 5
	help
	  Sleep period between TX retry attempts. During RTT session, host pulls
	  data periodically. Period starts from 1-2 milliseconds and can be
	  increased if traffic on RTT increases (also from host to device). In
	  case of heavy traffic data can be lost and it may be necessary to
	  increase delay or number of retries.

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 = 512
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_CONNECTION_MANAGER
	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 $(UINT16_MAX)
	default 256
	help
	  Buffer size for the MQTT data transmission.

config SHELL_MQTT_CONNECT_TIMEOUT_MS
	int "MQTT connect timeout [ms]"
	default 2000
	help
	  Time to await MQTT connect acknowledge in milliseconds.

config SHELL_MQTT_WORK_DELAY_MS
	int "MQTT work delay [ms]"
	default 1000
	help
	  Period between MQTT work in milliseconds.

config SHELL_MQTT_LISTEN_TIMEOUT_MS
	int "MQTT listen timeout [ms]"
	default 500
	help
	  Time to listen for incoming packets in milliseconds.

config SHELL_MQTT_TOPIC_RX_ID
	string "MQTT topic receive identifier"
	default "/sh/rx"
	help
	  String used as receive identifier in the MQTT topic.

config SHELL_MQTT_TOPIC_TX_ID
	string "MQTT topic transmit identifier"
	default "/sh/tx"
	help
	  String used as transmit identifier in the MQTT topic.

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

default-size = 512
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_RPMSG
	bool "RPMsg backend."
	depends on OPENAMP
	help
	  Enable RPMsg backend.

if SHELL_BACKEND_RPMSG

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

config SHELL_RPMSG_SERVICE_NAME
	string "Service name"
	default "rpmsg-tty"
	help
	  The service name associated with the RPMsg endpoint.

config SHELL_RPMSG_SRC_ADDR
	hex "Local address"
	default 0xffffffff # The ANY address
	help
	  Local address of the RPMsg endpoint.

config SHELL_RPMSG_DST_ADDR
	hex "Remote address"
	default 0xffffffff # The ANY address
	help
	  Target address of the RPMsg endpoint.

config SHELL_RPMSG_MAX_RX
	int "Receive buffer size"
	default 10
	help
	  The maximum number of received messages to be queued.

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

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

choice
	prompt "Initial log level limit"
	default SHELL_RPMSG_INIT_LOG_LEVEL_DEFAULT

config SHELL_RPMSG_INIT_LOG_LEVEL_DEFAULT
	bool "System limit (LOG_MAX_LEVEL)"

config SHELL_RPMSG_INIT_LOG_LEVEL_DBG
	bool "Debug"

config SHELL_RPMSG_INIT_LOG_LEVEL_INF
	bool "Info"

config SHELL_RPMSG_INIT_LOG_LEVEL_WRN
	bool "Warning"

config SHELL_RPMSG_INIT_LOG_LEVEL_ERR
	bool "Error"

config SHELL_RPMSG_INIT_LOG_LEVEL_NONE
	bool "None"

endchoice # SHELL_RPMSG_INIT_LOG_LEVEL

config SHELL_RPMSG_INIT_LOG_LEVEL
	int
	default 0 if SHELL_RPMSG_INIT_LOG_LEVEL_NONE
	default 1 if SHELL_RPMSG_INIT_LOG_LEVEL_ERR
	default 2 if SHELL_RPMSG_INIT_LOG_LEVEL_WRN
	default 3 if SHELL_RPMSG_INIT_LOG_LEVEL_INF
	default 4 if SHELL_RPMSG_INIT_LOG_LEVEL_DBG
	default 5 if SHELL_RPMSG_INIT_LOG_LEVEL_DEFAULT

module = SHELL_RPMSG
module-str = RPMsg shell backend
source "subsys/logging/Kconfig.template.log_config"

endif # SHELL_BACKEND_RPMSG

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

if SHELL_BACKEND_TELNET

config SHELL_TELNET_INIT_PRIORITY
	int "Initialization priority"
	default 95
	range 0 99
	help
	  Initialization priority for telnet shell backend. This must be higher
	  than socket service initialization priority, as socket service has to
	  be initialized earlier.

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. It does have support for echo and "character
	  at a time" mode, which enable the history and line-editing features
	  of the shell.
	  IMPORTANT: This will increase network usage as a TCP packet will be
	  sent each time a character is typed in the telnet client.

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

default-size = 512
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_WEBSOCKET
	bool "Websocket backend."
	depends on HTTP_SERVER_WEBSOCKET
	depends on NET_NATIVE_IP
	select NET_SOCKETS_SERVICE
	select NET_SOCKETS
	help
	  Enable Websocket backend.

if SHELL_BACKEND_WEBSOCKET

config SHELL_WEBSOCKET_BACKEND_COUNT
	int "How many Webconsole sessions are supported"
	default 2
	range 1 8
	help
	  Each connection consumes memory so select the value according to your
	  needs. Also note that each console session needs unique HTTP endpoint
	  configured.
	  Note that if you have only one HTTP endpoint for the websocket console,
	  setting the this value to 2, allows latter console session to kick out
	  the previous one. If set this value to 1, then the latter connecting
	  webconsole session will fail. If you have multiple HTTP endpoints, then
	  This value should be increased accordingly.

config SHELL_WEBSOCKET_PROMPT
	string "Displayed prompt name"
	default ""
	help
	  Displayed prompt name for Websocket backend. If prompt is set, the shell will
	  send two newlines during initialization.

config SHELL_WEBSOCKET_ENDPOINT_URL
	string "Websocket endpoint URL"
	default "console"
	help
	  What is the HTTP endpoint URL where the client should connect to.

config SHELL_WEBSOCKET_IP_ADDR
	string "Websocket IP listen address"
	default ""
	help
	  This option is used to configure on which IP address and network interface
	  the HTTP server is listening. If left empty, then all network interfaces are
	  listened.

config SHELL_WEBSOCKET_PORT
	int "Websocket port number"
	default 443 if NET_SOCKETS_SOCKOPT_TLS
	default 80
	help
	  This option is used to configure on which port websocket is going
	  to be bound.

config SHELL_WEBSOCKET_LINE_BUF_SIZE
	int "Websocket line buffer size"
	default 100
	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_WEBSOCKET_SEND_TIMEOUT
	int "Websocket 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.

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

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

choice
	prompt "Initial log level limit"
	default SHELL_WEBSOCKET_INIT_LOG_LEVEL_DEFAULT

config SHELL_WEBSOCKET_INIT_LOG_LEVEL_DEFAULT
	bool "System limit (LOG_MAX_LEVEL)"

config SHELL_WEBSOCKET_INIT_LOG_LEVEL_DBG
	bool "Debug"

config SHELL_WEBSOCKET_INIT_LOG_LEVEL_INF
	bool "Info"

config SHELL_WEBSOCKET_INIT_LOG_LEVEL_WRN
	bool "Warning"

config SHELL_WEBSOCKET_INIT_LOG_LEVEL_ERR
	bool "Error"

config SHELL_WEBSOCKET_INIT_LOG_LEVEL_NONE
	bool "None"

endchoice

config SHELL_WEBSOCKET_INIT_LOG_LEVEL
	int
	default 0 if SHELL_WEBSOCKET_INIT_LOG_LEVEL_NONE
	default 1 if SHELL_WEBSOCKET_INIT_LOG_LEVEL_ERR
	default 2 if SHELL_WEBSOCKET_INIT_LOG_LEVEL_WRN
	default 3 if SHELL_WEBSOCKET_INIT_LOG_LEVEL_INF
	default 4 if SHELL_WEBSOCKET_INIT_LOG_LEVEL_DBG
	default 5 if SHELL_WEBSOCKET_INIT_LOG_LEVEL_DEFAULT

module = SHELL_WEBSOCKET
module-str = Websocket shell backend
source "subsys/logging/Kconfig.template.log_config"

endif # SHELL_WEBSOCKET_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 400 if LOG_PRINTK
	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.

choice
	prompt "Initial log level limit"
	default SHELL_DUMMY_INIT_LOG_LEVEL_INF

config SHELL_DUMMY_INIT_LOG_LEVEL_DEFAULT
	bool "System limit (LOG_MAX_LEVEL)"

config SHELL_DUMMY_INIT_LOG_LEVEL_DBG
	bool "Debug"

config SHELL_DUMMY_INIT_LOG_LEVEL_INF
	bool "Info"

config SHELL_DUMMY_INIT_LOG_LEVEL_WRN
	bool "Warning"

config SHELL_DUMMY_INIT_LOG_LEVEL_ERR
	bool "Error"

config SHELL_DUMMY_INIT_LOG_LEVEL_NONE
	bool "None"

endchoice

config SHELL_DUMMY_INIT_LOG_LEVEL
	int
	default 0 if SHELL_DUMMY_INIT_LOG_LEVEL_NONE
	default 1 if SHELL_DUMMY_INIT_LOG_LEVEL_ERR
	default 2 if SHELL_DUMMY_INIT_LOG_LEVEL_WRN
	default 3 if SHELL_DUMMY_INIT_LOG_LEVEL_INF
	default 4 if SHELL_DUMMY_INIT_LOG_LEVEL_DBG
	default 5 if SHELL_DUMMY_INIT_LOG_LEVEL_DEFAULT

endif # SHELL_BACKEND_DUMMY

config SHELL_BACKEND_ADSP_MEMORY_WINDOW
	bool "Shell backend implemented over mapped memory window."
	depends on SOC_FAMILY_INTEL_ADSP
	help
	  Enable ADSP memory window backend which can be used to execute commands
	  from remote host processor that has access to the same memory window.

if SHELL_BACKEND_ADSP_MEMORY_WINDOW

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

config SHELL_BACKEND_ADSP_MEMORY_WINDOW_POLL_INTERVAL
	int "Poll interval (in microseconds)"
	default 100
	help
	  This option can be used to modify the poll interval the backend uses
	  to check for new commands.

endif # SHELL_BACKEND_ADSP_MEMORY_WINDOW

endif # SHELL_BACKENDS
