# Copyright Runtime.io 2018. All rights reserved.
# Copyright Nordic Semiconductor ASA 2020-2022. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

# The Kconfig file is dedicated to shell transport of MCUmgr
# subsystem and provides Kconfig options to control aspects of
# the transport.
#
# Options defined in this file should be prefixed:
#  MCUMGR_TRANSPORT_SHELL_

menuconfig MCUMGR_TRANSPORT_SHELL
	bool "Shell mcumgr SMP transport"
	depends on SHELL
	depends on BASE64
	help
	  Enables handling of SMP commands received over shell.  This allows
	  the shell to be use for both mcumgr commands and shell commands.

if MCUMGR_TRANSPORT_SHELL

config MCUMGR_TRANSPORT_SHELL_MTU
	int "Shell SMP MTU"
	default 256
	help
	  Maximum size of SMP frames sent and received over shell.  This value
	  must satisfy the following relation:
	  MCUMGR_TRANSPORT_SHELL_MTU <= MCUMGR_TRANSPORT_NETBUF_SIZE + 2

config MCUMGR_TRANSPORT_SHELL_RX_BUF_COUNT
	int "Shell SMP RX buffer count"
	default 2
	help
	  Number of buffers used for receiving SMP fragments over shell.

config MCUMGR_TRANSPORT_SHELL_INPUT_TIMEOUT
	bool "Shell input expiration"
	help
	  If enabled, will time out a partial or erroneous MCUmgr command
	  received via the shell transport after a given time. This prevents
	  the shell from becoming locked if it never receives the full packet
	  that a header indicated it would receive.

config MCUMGR_TRANSPORT_SHELL_INPUT_TIMEOUT_TIME
	int "Shell input expiration timeout"
	depends on MCUMGR_TRANSPORT_SHELL_INPUT_TIMEOUT
	default 3000
	help
	  Time (in msec) after receiving a valid MCUmgr header on the serial
	  transport before considering it as timed out and returning the shell
	  to normal operation.

endif # MCUMGR_TRANSPORT_SHELL
