# DFU support configuration options

# Copyright (c) 2017 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

#
# DFU
#

menuconfig IMG_MANAGER
	bool "DFU image manager"
	depends on STREAM_FLASH
	help
	  Enable support for managing DFU image.

if IMG_MANAGER

choice
	prompt "Image manager"
	default MCUBOOT_IMG_MANAGER
	help
	  Choice support for managing DFU image.
	  So far only mcuboot support is available.

config MCUBOOT_IMG_MANAGER
	bool "Image manager for mcuboot"
	depends on FLASH_MAP
	select MCUBOOT_BOOTUTIL_LIB
	help
	  Enable support for managing DFU image downloaded using mcuboot.

endchoice

config MCUBOOT_SHELL
	bool "MCUboot shell"
	default y
	depends on MCUBOOT_IMG_MANAGER
	depends on SHELL
	help
	  Enable shell module, which provides information about image slots and
	  allows to perform such operations as: confirm, erase and request
	  upgrade.

config MCUBOOT_TRAILER_SWAP_TYPE
	bool "use trailer's swap_type field"
	default y
	depends on MCUBOOT_IMG_MANAGER
	help
	  Enables usage swap type field which is required after
	  "Fix double swap on interrupted revert"  mcuboot patch
	  (https://github.com/JuulLabs-OSS/mcuboot/pull/485)
	  Disable this option if need to be compatible with earlier version
	  of MCUBoot.

config IMG_BLOCK_BUF_SIZE
	int "Image writer buffer size"
	depends on MCUBOOT_IMG_MANAGER
	default 512
	help
	  Size (in Bytes) of buffer for image writer. Must be a multiple of
	  the access alignment required by used flash driver.

config IMG_ERASE_PROGRESSIVELY
	bool "Erase flash progressively when receiving new firmware"
	depends on MCUBOOT_IMG_MANAGER
	select STREAM_FLASH_ERASE
	help
	  If enabled, flash is erased as necessary when receiving new firmware,
	  instead of erasing the whole image slot at once. This is necessary
	  on some hardware that has long erase times, to prevent long wait
	  times at the beginning of the DFU process.

config IMG_ENABLE_IMAGE_CHECK
	bool "Image check functions"
	depends on MCUBOOT_IMG_MANAGER
	select FLASH_AREA_CHECK_INTEGRITY
	help
	  If enabled, there will be available the function to check flash
	  integrity.  It can be used to verify flash integrity after received
	  a new firmware.  This is useful to avoid firmware reboot and test.
	  Another use is to ensure that firmware upgrade routines from internet
	  server to flash slot are performing properly.

module = IMG_MANAGER
module-str = image manager
source "subsys/logging/Kconfig.template.log_config"

if !MCUBOOT
config UPDATEABLE_IMAGE_NUMBER
	int "Number of updateable images"
	default 1
	range 1 2
	help
	  If value is set to 2 or greater then, this enables support needed when
	  application is combined with MCUboot multi-image boot.
endif

endif # IMG_MANAGER
