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

menuconfig SETTINGS
	bool "Enable settings subsystem with non-volatile storage"
	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.

if SETTINGS
module = SETTINGS
module-str = settings
source "subsys/logging/Kconfig.template.log_config"
endif

config SETTINGS_RUNTIME
	bool "runtime storage back-end"
	depends on SETTINGS
	help
	  Enables runtime storage back-end.

# Hidden option to enable encoding length into settings entry
config SETTINGS_ENCODE_LEN
	depends on SETTINGS
	bool

config SETTINGS_USE_BASE64
	bool "encoding value using base64"
	depends on SETTINGS
	select BASE64
	help
	  Enables values encoding using Base64.

choice
	prompt "Storage back-end"
	optional
	default SETTINGS_FCB if FCB
	default SETTINGS_NONE
	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
	select SETTINGS_ENCODE_LEN
	help
	  Use a file system as a settings storage back-end.

config SETTINGS_CUSTOM
	bool "CUSTOM"
	help
	  Use a custom settings storage back-end.

config SETTINGS_NONE
	bool "NONE"
	help
	  No storage back-end.
endchoice

config SETTINGS_FCB_NUM_AREAS
	int "Number of flash areas used by the settings subsystem"
	default 8
	depends on SETTINGS && SETTINGS_FCB
	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 "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_FS_DIR
	string "Serialization directory"
	default "/settings"
	depends on SETTINGS && SETTINGS_FS
	help
	  Directory where the settings data is stored

config SETTINGS_FS_FILE
	string "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 "Compression threshold"
	default 32
	depends on SETTINGS && SETTINGS_FS
	help
	  Limit how many items stored in a file before compressing
