# 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
	depends on CRC
	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
