# mcumgr configuration options

# Copyright Runtime.io 2018. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

menu "Management"

config MCUMGR_SMP_BT
	bool "Bluetooth mcumgr SMP transport"
	select MCUMGR
	select BT
	select BT_PERIPHERAL
	select BT_GATT_DYNAMIC_DB
	help
	  Enables handling of SMP commands received over Bluetooth.

config MCUMGR_SMP_SHELL
	bool "Shell mcumgr SMP transport"
	select MCUMGR
	select SHELL
	select SHELL_BACKEND_SERIAL
	select 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_SMP_SHELL
config MCUMGR_SMP_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_SMP_SHELL_MTU <= MCUMGR_BUF_SIZE + 2
endif


config MCUMGR_SMP_UART
	bool "UART mcumgr SMP transport"
	select MCUMGR
	select UART_MCUMGR
	select BASE64
	help
	  Enables handling of SMP commands received over UART.  This is a
	  lightweight alternative to MCUMGR_SMP_SHELL.  It allows mcumgr
	  commands to be received over UART without requiring an additional
	  thread.

if MCUMGR_SMP_UART
config MCUMGR_SMP_UART_MTU
	int "UART SMP MTU"
	default 256
	help
	  Maximum size of SMP frames sent and received over UART, in bytes.
	  This value must satisfy the following relation:
	  MCUMGR_SMP_UART_MTU <= MCUMGR_BUF_SIZE + 2

endif

source "subsys/mgmt/Kconfig.mcumgr"

if MCUMGR
config MCUMGR_BUF_COUNT
	int "Number of mcumgr buffers"
	default 4
	help
	  The number of net_bufs to allocate for mcumgr.  These buffers are
	  used for both requests and responses.

config MCUMGR_BUF_SIZE
	int "Size of each mcumgr buffer"
	default 384
	help
	  The size, in bytes, of each mcumgr buffer.  This value must satisfy
	  the following relation:
	  MCUMGR_BUF_SIZE >= transport-specific-MTU + transport-overhead

config MCUMGR_BUF_USER_DATA_SIZE
	int "Size of mcumgr buffer user data"
	default 4
	help
	  The size, in bytes, of user data to allocate for each mcumgr buffer.
	  Different mcumgr transports impose different requirements for this
	  setting.  A value of 4 is sufficient for UART, shell, and bluetooth.

endif # MCUMGR
endmenu
