#
#   Copyright (c) 2022 Project CHIP Authors
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#

# The purpose of this file is to define Kconfig options enabling specific features.
# Feature options will define defaults for settings that are related to the specific feature.

if CHIP

config CHIP_QSPI_NOR
	bool "Enable QSPI NOR feature set"
	help
		Enables QSPI NOR with the set of options
		configuring pages and buffer sizes.

if CHIP_QSPI_NOR

config NORDIC_QSPI_NOR
	bool
	default y

config NORDIC_QSPI_NOR_STACK_WRITE_BUFFER_SIZE
	int
	default 16

endif # CHIP_QSPI_NOR

config CHIP_DFU_OVER_BT_SMP
	bool "Enable DFU over Bluetooth LE SMP feature set"
	imply CHIP_QSPI_NOR
	imply BOOTLOADER_MCUBOOT
	help
		Enables Device Firmware Upgrade over Bluetoot LE with SMP
		and configures set of options related to that feature.

if CHIP_DFU_OVER_BT_SMP

# MCU Manager and SMP configuration
config MCUMGR
	bool
	default y

config MCUMGR_CMD_IMG_MGMT
	bool
	default y

config MCUMGR_CMD_OS_MGMT
	bool
	default y

config MCUMGR_SMP_BT
	bool
	default y

config MCUMGR_SMP_BT_AUTHEN
	bool
	default n

config MCUMGR_BUF_COUNT
	int
	default 6

# Increase BT MTU and RX buffer for big size DFU messages
config BT_L2CAP_TX_MTU
	int
	default 498

config BT_BUF_ACL_RX_SIZE
	int
	default 502

# Increase MCUMGR_BUF_SIZE, as it must be big enough to fit MAX MTU + overhead and for single-image DFU default is 384 B
config MCUMGR_BUF_SIZE
	int
	default 1024

# Increase system workqueue size, as SMP is processed within it
config SYSTEM_WORKQUEUE_STACK_SIZE
	int
	default 2800

if SOC_SERIES_NRF53X

# FLASH nop device is enabled to prevent bus faults when mcumgr tries to access
# simulated partition with network core image data.
config FLASH_NOP_DEVICE
	bool
	default y

# Enable custom SMP request to erase settings partition.
config MCUMGR_GRP_ZEPHYR_BASIC
	bool
	default y

config MCUMGR_GRP_BASIC_CMD_STORAGE_ERASE
	bool
	default y

endif # SOC_SERIES_NRF53X

endif # CHIP_DFU_OVER_BT_SMP

endif # CHIP
