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

config MCUMGR
	bool "mcumgr Support"
	select NET_BUF
	select TINYCBOR
	help
	  This option enables the mcumgr management library.

if MCUMGR

menu "Command handlers"

menuconfig MCUMGR_CMD_FS_MGMT
	bool "Enable mcumgr handlers for file management"
	depends on FILE_SYSTEM
	help
	  Enables mcumgr handlers for file management

if MCUMGR_CMD_FS_MGMT
config FS_MGMT_UL_CHUNK_SIZE
	int "Maximum chunk size for file uploads"
	default 512
	help
	  Limits the maximum chunk size for file uploads, in bytes.  A buffer of
	  this size gets allocated on the stack during handling of a file upload command.

config FS_MGMT_DL_CHUNK_SIZE
	int "Maximum chunk size for file downloads"
	default 512
	help
	  Limits the maximum chunk size for file downloads, in bytes.  A buffer of
	  this size gets allocated on the stack during handling of a file download
	  command.

config FS_MGMT_PATH_SIZE
	int "Maximum file path length"
	default 64
	help
	  Limits the maximum path length for file operations, in bytes.  A buffer
	  of this size gets allocated on the stack during handling of file upload
	  and download commands.
endif

menuconfig MCUMGR_CMD_IMG_MGMT
	bool "Enable mcumgr handlers for image management"
	select FLASH
	select MPU_ALLOW_FLASH_WRITE if CPU_HAS_MPU
	select IMG_MANAGER
	help
	  Enables mcumgr handlers for image management

config IMG_MGMT_UL_CHUNK_SIZE
	int "Maximum chunk size for image uploads"
	default 512
	depends on MCUMGR_CMD_IMG_MGMT
	help
	  Limits the maximum chunk size for image uploads, in bytes.  A buffer of
	  this size gets allocated on the stack during handling of a image upload
	  command.

menuconfig MCUMGR_CMD_OS_MGMT
	bool "Enable mcumgr handlers for OS management"
	select REBOOT
	help
	  Enables mcumgr handlers for OS management

if MCUMGR_CMD_OS_MGMT
config OS_MGMT_RESET_MS
	int "Delay before executing reset command (ms)"
	default 250
	help
	  When a reset command is received, the system waits this many milliseconds
	  before performing the reset.  This delay allows time for the mcumgr
	  response to be delivered.

config OS_MGMT_TASKSTAT
	bool "Support for taskstat command"
	default y

config OS_MGMT_ECHO
	bool "Support for echo command"
	default y
endif


menuconfig MCUMGR_CMD_STAT_MGMT
	bool "Enable mcumgr handlers for statistics management"
	depends on STATS
	help
	  Enables mcumgr handlers for statistics management.

config STAT_MGMT_MAX_NAME_LEN
	int "Maximum stat group name length"
	default 32
	depends on MCUMGR_CMD_STAT_MGMT
	help
	  Limits the maximum stat group name length in mcumgr requests, in bytes.
	  A buffer of this size gets allocated on the stack during handling of all
	  stat read commands.  If a stat group's name exceeds this limit, it will
	  be impossible to retrieve its values with a stat show command.

endmenu

config APP_LINK_WITH_MCUMGR
	bool "Link 'app' with MCUMGR"
	default y
	help
	  Add MCUMGR header files to the 'app' include path. It may be
	  disabled if the include paths for MCUMGR are causing aliasing
	  issues for 'app'.

endif
