#
#   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_WIFI
	bool "Enable nrfconnect Wi-Fi support"
	default y if SHIELD_NRF7002EK || BOARD_NRF7002DK_NRF5340_CPUAPP || SHIELD_NRF7002EB || BOARD_NRF7002DK_NRF7001_NRF5340_CPUAPP
	select WIFI_NRF700X
	select WIFI
	select WPA_SUPP
	imply NORDIC_SECURITY_BACKEND
	imply MBEDTLS_ENTROPY_C
	imply MBEDTLS_PSA_CRYPTO_C
	imply NET_STATISTICS
	imply NET_L2_ETHERNET
	imply NET_PKT_TXTIME
	imply NET_PKT_TIMESTAMP
	imply MBEDTLS_PROMPTLESS
	imply BUILD_OUTPUT_META
	imply USE_DT_CODE_PARTITION # might be removed when the OTA is enabled
	imply NET_IPV6_ND # enable Neighbor Discovery to handle Router Advertisements
	imply NET_IPV6_NBR_CACHE
	imply NET_STATISTICS_IPV6
	imply NET_STATISTICS_USER_API

config CHIP_QSPI_NOR
	bool "Enable QSPI NOR feature set"
	imply NORDIC_QSPI_NOR
	help
	  Enables QSPI NOR flash with a set of options for configuring pages and
	  buffer sizes.

if CHIP_QSPI_NOR

config NORDIC_QSPI_NOR_STACK_WRITE_BUFFER_SIZE
	default 16

endif # CHIP_QSPI_NOR

config CHIP_SPI_NOR
	bool "Enable SPI NOR feature set"
	imply SPI
	imply SPI_NOR
	imply MULTITHREADING
	imply PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
	help
	  Enables SPI NOR flash with a set of options for configuring pages and
	  buffer sizes.

if CHIP_SPI_NOR

config SPI_NOR_FLASH_LAYOUT_PAGE_SIZE
	default 4096

endif # CHIP_SPI_NOR

config CHIP_MEMORY_PROFILING
	bool "Enable features for tracking memory usage"
	# Matter stack
	select CHIP_STATISTICS
	# Heap
	select CHIP_MALLOC_SYS_HEAP_WATERMARKS_SUPPORT if CHIP_MALLOC_SYS_HEAP
	select SYS_HEAP_RUNTIME_STATS if CHIP_MALLOC_SYS_HEAP	
	# Crypto
	select MBEDTLS_MEMORY_DEBUG if !CHIP_CRYPTO_PSA
	# Network
	select NET_STATISTICS
	select NET_SHELL
	select NET_BUF_POOL_USAGE
	select OPENTHREAD_SHELL if !CHIP_WIFI
	# Zephyr
	select KERNEL_SHELL
	help
	  Enables features for tracking memory usage in Matter.

config CHIP_NUS
	bool "Enable Nordic UART service for Matter purposes"
	select BT_NUS
	select BT_SMP
	select BT_NUS_AUTHEN
	help
	  Enables Nordic UART service (NUS) for Matter samples.
	  Using NUS service you can control a Matter sample using pre-defined BLE commands 
	  and do defined operations. The CHIP NUS service can be useful to keep communication
	  with a smart home device when a connection within Matter network is lost.

if CHIP_NUS

# Requires providing a PIN for each pair request
config BT_BONDABLE
	default n

config BT_RX_STACK_SIZE
	default 1536

config SYSTEM_WORKQUEUE_STACK_SIZE
	default 2048

config BT_DEVICE_APPEARANCE
	default 833

if !LOG

config BT_FIXED_PASSKEY
	default y

endif

config CHIP_NUS_MAX_COMMAND_LEN
	int "Maximum length of single command in Bytes"
	default 10
	help
	  Maximum length of single command. This command will be send via Bluetooth LE to
	  a paired smart home device.

config CHIP_NUS_FIXED_PASSKEY
	int "Define the default passkey for NUS"
	depends on BT_FIXED_PASSKEY
	default 123456
	help
	  Define the default password for pairing with the Bluetooth LE device.

config CHIP_NUS_MAX_COMMANDS
	int "Define maximum NUS commands amount"
	default 2
	help
	  Define the maximum number of NUS commands to declare by user.

endif


config CHIP_DFU_OVER_BT_SMP
	bool "Enable DFU over Bluetooth LE SMP feature set"
	imply CHIP_QSPI_NOR if BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF52840DK_NRF52840
	imply CHIP_SPI_NOR if BOARD_NRF7002DK_NRF5340_CPUAPP || BOARD_NRF7002DK_NRF7001_NRF5340_CPUAPP
	imply BOOTLOADER_MCUBOOT
	select MCUMGR
	select MCUMGR_TRANSPORT_BT
	select IMG_MANAGER
	select STREAM_FLASH
	select ZCBOR
	select MCUMGR_GRP_IMG
	select MCUMGR_GRP_OS
	# Enable custom SMP request to erase settings partition.
	select MCUMGR_GRP_ZBASIC
	select MCUMGR_GRP_ZBASIC_STORAGE_ERASE
	help
	  Enables Device Firmware Upgrade over Bluetooth LE with SMP and configures
	  the set of options related to that feature.

if CHIP_DFU_OVER_BT_SMP

# MCU Manager and SMP configuration
config MCUMGR_TRANSPORT_BT_AUTHEN
	default n

config MCUMGR_TRANSPORT_NETBUF_COUNT
	default 6

config MCUMGR_MGMT_NOTIFICATION_HOOKS
	bool
	default y

config MCUMGR_GRP_IMG_UPLOAD_CHECK_HOOK
	bool
	default y

config MCUMGR_SMP_COMMAND_STATUS_HOOKS
	bool
	default y

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

config BT_BUF_ACL_RX_SIZE
	default 502

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

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

if SOC_SERIES_NRF53X

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

config MCUMGR_GRP_ZBASIC_STORAGE_ERASE
	default y

endif # SOC_SERIES_NRF53X

endif # CHIP_DFU_OVER_BT_SMP

config CHIP_WIFI_CONNECTION_RECOVERY_MINIMUM_INTERVAL
	int "Define the minimum connection recovery time interval in milliseconds"
	depends on CHIP_WIFI
	default 500
	help
	  Specifies the minimum connection recovery interval (in milliseconds).

config CHIP_WIFI_CONNECTION_RECOVERY_MAXIMUM_INTERVAL
	int "Define the maximum connection recovery time interval in milliseconds"
	depends on CHIP_WIFI
	default 3600000 # 1 hour
	help
	  Specifies the maximum connection recovery interval (in milliseconds).

config CHIP_WIFI_CONNECTION_RECOVERY_MAX_RETRIES_NUMBER
	int "Define the maximum amount of connection recovery occurrences"
	depends on CHIP_WIFI
	default 0
	help
	  Specifies the maximum number of connection recovery attempts.
	  If set to 0, no limitation is applied and attempts
	  to recover the connection are performed indefinitely.

config CHIP_WIFI_CONNECTION_RECOVERY_JITTER
	int "Define the connection recovery jitter in milliseconds"
	depends on CHIP_WIFI
	default 2000
	help
	  Specifies the maximum connection recovery jitter interval (in milliseconds).
	  Once the wait time reaches the current maximum value (defined by CHIP_WIFI_CONNECTION_RECOVERY_MAXIMUM_INTERVAL),
	  a random jitter interval is added to it to avoid periodicity. The random jitter is selected
	  within range [-JITTER; +JITTER].

choice CHIP_LAST_FABRIC_REMOVED_ACTION
	prompt "An action to perform after removing the last fabric"
	default CHIP_LAST_FABRIC_REMOVED_ERASE_AND_REBOOT

	config CHIP_LAST_FABRIC_REMOVED_NONE
	bool "After removing the last fabric do not perform any action"
	help
	  After removing the last fabric the device will not perform factory reset
	  or reboot. The current state will be left as it is and the BLE advertising
	  will not start automatically.

	config CHIP_LAST_FABRIC_REMOVED_ERASE_AND_REBOOT
	bool "After removing the last fabric erase NVS and reboot"
	help
	  After removing the last fabric the device will perform the factory reset and
	  then reboot. The current RAM state will be removed and the new commissioning to
	  the new fabric will use the initial fabric index. This option is the most safe.

	config CHIP_LAST_FABRIC_REMOVED_ERASE_AND_PAIRING_START
	bool "After removing the last fabric erase NVS and start Bluetooth LE advertising"
	help
	  After removing the last fabric the device will perform the factory reset without 
	  rebooting and start the Bluetooth LE advertisement automatically.
	  The current RAM state will be saved and the new commissioning to the next 
	  fabric will use the next possible fabric index. This option should not be used for
	  devices that normally do not advertise Bluetooth LE on boot to keep their original 
	  behavior.

	config CHIP_LAST_FABRIC_REMOVED_ERASE_ONLY
	bool "After removing the last fabric erase NVS only"
	help
	  After removing the last fabric the device will perform the factory reset only without
	  rebooting. The current RAM state will be saved and the new commissioning to the next 
	  fabric will use the next possible fabric index.

endchoice

config CHIP_LAST_FABRIC_REMOVED_ACTION_DELAY
	int "After removing the last fabric wait defined time [in milliseconds] to perform an action"
	depends on !CHIP_LAST_FABRIC_REMOVED_NONE
	default 1000
	help
	  After removing the last fabric the device will wait for the defined time and then perform
	  an action chosen by the CHIP_LAST_FABRIC_REMOVED_ACTION option. This schedule will allow for
	  avoiding race conditions before the device removes non-volatile data.

endif # CHIP
