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

menu "MSC sample options"

config APP_WIPE_STORAGE
	bool "Option to clear the flash area before mounting"
	help
	  Use this to force an existing file system to be created.

choice
	prompt "Storage and file system type used by the application"
	default APP_MSC_STORAGE_NONE
	help
	  Specify the type of storage and file system.

config APP_MSC_STORAGE_NONE
	bool "Use RAM disk as block device"

config APP_MSC_STORAGE_RAM
	bool "Use RAM disk and FAT file system"
	imply FILE_SYSTEM
	imply FAT_FILESYSTEM_ELM

config APP_MSC_STORAGE_FLASH_FATFS
	bool "Use FLASH disk and FAT file system"
	imply DISK_DRIVER_FLASH
	imply FILE_SYSTEM
	imply FAT_FILESYSTEM_ELM

config APP_MSC_STORAGE_FLASH_LITTLEFS
	bool "Use FLASH disk and LittleFS"
	imply DISK_DRIVER_FLASH
	imply FILE_SYSTEM
	imply FILE_SYSTEM_LITTLEFS

config APP_MSC_STORAGE_SDCARD
	bool "Use SDHC and FAT file system"
	imply DISK_DRIVER_SDMMC
	imply FILE_SYSTEM
	imply FAT_FILESYSTEM_ELM

endchoice

config MASS_STORAGE_DISK_NAME
	default "NAND" if DISK_DRIVER_FLASH
	default "RAM" if DISK_DRIVER_RAM
	default "SD" if DISK_DRIVER_SDMMC

if DISK_DRIVER_FLASH

config FLASH_MAP
	default y

config FLASH_PAGE_LAYOUT
	default y

config FLASH_LOG_LEVEL
	default 3

if NORDIC_QSPI_NOR

config NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE
	default 4096

endif # NORDIC_QSPI_NOR

endif # DISK_DRIVER_FLASH

endmenu

# Source common USB sample options used to initialize new experimental USB
# device stack. The scope of these options is limited to USB samples in project
# tree, you cannot use them in your own application.
source "samples/subsys/usb/common/Kconfig.sample_usbd"

source "Kconfig.zephyr"
