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

menuconfig SETTINGS
	bool "Settings"
	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.

config SETTINGS_DYNAMIC_HANDLERS
	bool "dynamic settings handlers"
	depends on SETTINGS
	default y
	help
	  Enables the use of dynamic settings handlers

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

choice SETTINGS_BACKEND
	prompt "Storage back-end"
	default SETTINGS_NVS if NVS
	default SETTINGS_FCB if FCB
	default SETTINGS_FS if FILE_SYSTEM
	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_NVS
	bool "NVS non-volatile storage support"
	depends on NVS
	depends on FLASH_MAP
	help
	  Enables NVS storage support

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

config SETTINGS_NVS_SECTOR_SIZE_MULT
	int "Sector size of the NVS settings area"
	default 1
	depends on SETTINGS && SETTINGS_NVS
	help
	  The sector size to use for the NVS settings area as a multiple of
	  FLASH_ERASE_BLOCK_SIZE.

config SETTINGS_NVS_SECTOR_COUNT
	int "Sector count of the NVS settings area"
	default 8
	depends on SETTINGS && SETTINGS_NVS
	help
	  Number of sectors used for the NVS settings area

config SETTINGS_SHELL
	bool "Settings shell"
	depends on SETTINGS && SHELL
	help
	  Enable shell commands for listing and reading the settings. Note that
	  reading the settings requires quite a big stack buffer, so the stack
	  size of the shell thread may need to be increased to accommodate this
	  feature.
