#
#   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
	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"
	help
	  Enables QSPI NOR flash with a set of options for configuring pages and
	  buffer sizes.

if CHIP_QSPI_NOR

config NORDIC_QSPI_NOR
	default y

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"
	select CHIP_STATISTICS
	select CHIP_MALLOC_SYS_HEAP_WATERMARKS_SUPPORT if CHIP_MALLOC_SYS_HEAP
	select MBEDTLS_MEMORY_DEBUG if !CHIP_CRYPTO_PSA
	select SYS_HEAP_RUNTIME_STATS if CHIP_MALLOC_SYS_HEAP
	select KERNEL_SHELL
	select NET_STATISTICS
	select NET_SHELL
	select NET_BUF_POOL_USAGE
	select OPENTHREAD_SHELL if !CHIP_WIFI
	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
	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
