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

menuconfig SETTINGS
	bool
	default n
	prompt "Enable settings subsystem with non-volatile storage"
	# Only NFFS is currently supported as FS.
	# The reason in that FatFs doesn't implement the fs_rename() API
	depends on (FILE_SYSTEM && FILE_SYSTEM_NFFS) || (FCB && FLASH_PAGE_LAYOUT)
	select BASE64
	help
	  The settings subsystem allows its users to serialize and
	  deserialize state in memory into and from non-volatile memory.
	  It supports several back-ends to store and load serialized data from
	  and it can do so atomically for all involved modules.

choice
	prompt "Storage back-end"
	default SETTINGS_FCB if FCB
	depends on SETTINGS
	help
	  Storage back-end to be used by the settings subsystem.

config SETTINGS_FCB
	bool "FCB"
	depends on FCB
	help
	  Use FCB as a settings storage back-end.

config SETTINGS_FS
	bool "File System"
	depends on FILE_SYSTEM
	help
	  Use a file system as a settings storage back-end.
endchoice

config SETTINGS_FCB_NUM_AREAS
	int
	default 8
	depends on SETTINGS && SETTINGS_FCB
	prompt "Number of flash areas used by the settings subsystem "
	help
	  Number of areas to allocate in the settings FCB. A smaller number is
	  used if the flash hardware cannot support this value.

config SETTINGS_FCB_MAGIC
	hex
	prompt "FCB magic for the settings subsystem"
	default 0xc0ffeeee
	depends on SETTINGS && SETTINGS_FCB
	help
	  Magic 32-bit word for to identify valid settings area

config SETTINGS_FCB_FLASH_AREA
	int
	prompt "Flash area id used for settings"
	default 4
	depends on SETTINGS && SETTINGS_FCB
	help
	  Id of the Flash area where FCB instance used for settings is
	  expected to operate.

config SETTINGS_FS_DIR
	string
	prompt "Serialization directory"
	default "/settings"
	depends on SETTINGS && SETTINGS_FS
	help
	  Directory where the settings data is stored

config SETTINGS_FS_FILE
	string
	prompt "Default settings file"
	default "/settings/run"
	depends on SETTINGS && SETTINGS_FS
	help
	  Full path to the default settings file.

config SETTINGS_FS_MAX_LINES
	int
	prompt "Compression threshold"
	default 32
	depends on SETTINGS && SETTINGS_FS
	help
	  'Limit how many items stored in a file before compressing'
