# 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

if MCUMGR_CMD_IMG_MGMT
	config IMG_MGMT_UL_CHUNK_SIZE
	int "Maximum chunk size for image uploads"
	default 512
	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.
endif

menuconfig MCUMGR_CMD_LOG_MGMT
	bool "Enable mcumgr handlers for log management"
	help
	  Enables mcumgr handlers for log management

if MCUMGR_CMD_LOG_MGMT
config LOG_MGMT_CHUNK_SIZE
	int "Maximum chunk size for log downloads"
	default 512
	help
	  Limits the maximum chunk size for log downloads, in bytes.  A buffer of
	  this size gets allocated on the stack during handling of the log show command.

config LOG_MGMT_NAME_LEN
	int "Maximum log name length"
	default 64
	help
	  Limits the maximum length of log names, in bytes.  If a log's name length
	  exceeds this number, it gets truncated in management responses.  A buffer
	  of this size gets allocated on the stack during handling of all log
	  management commands.

config LOG_MGMT_BODY_LEN
	int "Maximum log body length"
	default 128
	help
	  Limits the maximum length of log entry bodies, in bytes.  If a log
	  entry's body length exceeds this number, it gets truncated in management
	  responses.  A buffer of this size gets allocated on the stack during
	  handling of the log show command.
endif

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.

if MCUMGR_CMD_STAT_MGMT
config STAT_MGMT_MAX_NAME_LEN
	int "Maximum stat group name length"
	default 32
	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.
endif
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
