# DFU support configuration options

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

#
# DFU
#

menuconfig IMG_MANAGER
	bool "DFU image manager"
	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"
	select FLASH_MAP
	help
	  Enable support for managing DFU image downloaded using mcuboot.

endchoice

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 FLASH_PAGE_LAYOUT
	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.

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

endif # IMG_MANAGER
