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

menuconfig MCUMGR
	bool "mcumgr Support"
	select NET_BUF
	select ZCBOR
	select CRC
	help
	  This option enables the mcumgr management library.

if MCUMGR

module = MCUMGR
module-str = mcumgr
source "subsys/logging/Kconfig.template.log_config"

config MCUMGR_SMP_WORKQUEUE_STACK_SIZE
	int "MCUMGR SMP workqueue stack size"
	default 2048
	help
	  Stack size of the MCUMGR SMP work queue.

config MCUMGR_SMP_WORKQUEUE_THREAD_PRIO
	int "MCUMGR SMP workqueue thread priority"
	default 3
	help
	  Scheduling priority of the MCUMGR SMP work queue.

rsource "mgmt/Kconfig"

config MGMT_MAX_MAIN_MAP_ENTRIES
	int "Number of predicted maximum entries to main response map"
	default 15
	help
	  This is number of predicted entries in main response map,
	  the one that encapsulates everything within response.
	  This value is used by zcbor to predict needed map encoding,
	  and does not affect memory allocation or usage.
	  Builtin command processors rarely add large amounts of
	  data directly to main map, creating sub-maps instead so
	  the default value works fine with them.
	  If your app directly adds fields to main map, without
	  encapsulating them, you may want to increase this value
	  in case when encoding starts to fail.

config MGMT_MIN_DECODING_LEVELS
	int
	help
	  Minimal decoding levels, map/list encapsulation, required
	  to be supported by zcbor decoding of SMP responses
	  is auto genereated from MGMT_MIN_DECODING_LEVEL_? options.
	  A group or command that adds additional maps/lists above the
	  base map, which is already taken into account, should
	  select one of the MGMT_MIN_DECODING_LEVEL_?.
	default 5 if MGMT_MIN_DECODING_LEVEL_5
	default 4 if MGMT_MIN_DECODING_LEVEL_4
	default 3 if MGMT_MIN_DECODING_LEVEL_3
	default 2 if MGMT_MIN_DECODING_LEVEL_2
	default 1 if MGMT_MIN_DECODING_LEVEL_1
	default 0


config MGMT_MIN_DECODING_LEVEL_1
	bool

config MGMT_MIN_DECODING_LEVEL_2
	bool

config MGMT_MIN_DECODING_LEVEL_3
	bool

config MGMT_MIN_DECODING_LEVEL_4
	bool

config MGMT_MIN_DECODING_LEVEL_5
	bool

config MGMT_MAX_DECODING_LEVELS
	int "Number of map/list encapsulations allowed by SMP encoding"
	range MGMT_MIN_DECODING_LEVELS 15
	default MGMT_MIN_DECODING_LEVELS
	help
	  This is a maximum number of levels of maps/lists that will
	  be expected to be decoded within different command groups.
	  SMP commands/groups that provide no CBOR encoded payload
	  have no requirements.
	  Commands that provide CBOR payload require at least 1 level,
	  and additional levels for each map/list encapsulation.
	  For example if command accepts payload of map of parameters
	  it will need 2 levels.
	  This number translates to zcbor backup states, it increases
	  size of cbor_nb_reader structure by zcbor_state_t size per
	  one unit selected here.

config MCUMGR_MGMT_NOTIFICATION_HOOKS
	bool "MCUmgr notification hook support"
	help
	  With this enabled, applications and parts of code can register for MCUmgr event
	  notifications which will result in callbacks when a registered event occurs. Note that
	  this enables the base notification functionality but itself does not enable any
	  notifications, which must be enabled by selecting other Kconfig options.

	  To enable notifications in code, mgmt_callback_register() must be called with the
	  callback function and events that want to be received. Multiple handlers can be
	  registered and will all be called when registered events occur.

	  Some callbacks support notifying the calling function of a status, in which to accept
	  or decline the current operation, by returning false this will signal to the calling
	  function that the request should be denied, for informal-only notifications or
	  acceptable, true must be returned by all the registered notification handlers.

config MCUMGR_SMP_COMMAND_STATUS_HOOKS
	bool "SMP command status hooks"
	depends on MCUMGR_MGMT_NOTIFICATION_HOOKS
	help
	  This will enable SMP command status notification hooks for when an SMP message is
	  received or processed.

menu "Command Handlers"

rsource "grp/Kconfig"

endmenu

menu "Transports and Transport Related Configuration Options"

rsource "transport/Kconfig"

endmenu

module = MCUMGR_SMP
module-str = mcumgr_smp
source "subsys/logging/Kconfig.template.log_config"

endif # MCUMGR
