# 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 management group of
# of MCUmgr subsystem and provides Kconfig options to configure
# group commands behaviour and other aspects.
#
# Options defined in this file should be prefixed:
#  MCUMGR_GRP_SHELL_ -- general group options;
#
# When adding Kconfig options, that control the same feature,
# try to group them together by the same stem after prefix.

menuconfig MCUMGR_GRP_SHELL
	bool "Mcumgr handlers for shell management"
	depends on SHELL
	select SHELL_BACKEND_DUMMY
	select MCUMGR_SMP_CBOR_MIN_DECODING_LEVEL_2
	help
	  Enables mcumgr handlers for shell management. The handler will utilize
	  the dummy backend to execute shell commands and capture the output to
	  an internal memory buffer. This way, there is no interaction with
	  physical interfaces outside of the scope of the user.
	  It is possible to use additional shell backends in coordination
	  with this handler and they will not interfere.
	  The MCUMGR_GRP_SHELL_BACKEND_DUMMY_BUF_SIZE will affect how many characters
	  will be returned from command output, if your output gets cut, then
	  increase the value. Remember to set MCUMGR_TRANSPORT_NETBUF_SIZE accordingly.
	  Note that maximum length of shell command accepted is regulated by
	  the CONFIG_SHELL_CMD_BUFF_SIZE, and a buffer for a command is allocated
	  on a stack, by the mcumgr, so enabling MCUMGR_GRP_SHELL and
	  changes to the CONFIG_SHELL_CMD_BUFF_SIZE may increase stack size
	  requirements.

if MCUMGR_GRP_SHELL

# Show dummy shell buffer size here, will show help text of original prompt so
# nothing extra is needed here, nor a default value.
config SHELL_BACKEND_DUMMY_BUF_SIZE
	int "Shell output buffer size (Size of dummy buffer size)"

config MCUMGR_GRP_SHELL_LEGACY_RC_RETURN_CODE
	bool "Legacy behaviour: Use rc field for shell function return code"
	help
	  Enabling this options brings back legacy behaviour where the shell
	  return code is returned, incorrectly, in the rc field that was
	  originally designated for returning SMP processing errors. When
	  disabled, there will be an additional ret field which contains the
	  shell command exit code, and rc will be used for SMP processing
	  error codes.

module = MCUMGR_GRP_SHELL
module-str = mcumgr_grp_shell
source "subsys/logging/Kconfig.template.log_config"

endif # MCUMGR_GRP_SHELL
