#
#   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 new default values of settings used when building Matter samples.
# This file only changes defaults and thus all symbols here must be promptless
# and safeguarded so that they only are applied when building Matter.

if CHIP

# ==============================================================================
# System configuration
# ==============================================================================

choice LIBC_IMPLEMENTATION
    default NEWLIB_LIBC
endchoice

config ASSERT
    default y

config ASSERT_NO_COND_INFO
    default y

config ASSERT_NO_MSG_INFO
    default y

config HW_STACK_PROTECTION
    default y

config POSIX_MAX_FDS
    default 16

config MAIN_STACK_SIZE
    default 6144

config INIT_STACKS
    default y

config SYSTEM_WORKQUEUE_STACK_SIZE
    default 2560 if CHIP_WIFI
    default 2048 if CHIP_ICD_LIT_SUPPORT

config HEAP_MEM_POOL_SIZE
    default 110720 if CHIP_WIFI

config HEAP_MEM_POOL_IGNORE_MIN
    default y if CHIP_WIFI

config CHIP_MALLOC_SYS_HEAP_SIZE
    default 10240 if SOC_SERIES_NRF54LX # nRF54L requires more memory due to crypto backend
    default 8192 if NET_L2_OPENTHREAD

config MPSL_WORK_STACK_SIZE
    default 2048 if SOC_SERIES_NRF54LX # nRF54L requires more memory due to crypto backend

# We use sys_heap based allocators, so make sure we don't reserve unused libc heap anyway
config COMMON_LIBC_MALLOC_ARENA_SIZE
    default -1

config NVS_LOOKUP_CACHE_SIZE
    default 512 if NVS

config ZMS_LOOKUP_CACHE_SIZE
    default 512 if ZMS

# ==============================================================================
# Zephyr networking configuration
# ==============================================================================

config NET_IPV6_MLD
    default y

config NET_IPV6_NBR_CACHE
    default y if CHIP_WIFI
    default n if NET_L2_OPENTHREAD

config NET_IF_UNICAST_IPV6_ADDR_COUNT
    default 6

config NET_IF_MCAST_IPV6_ADDR_COUNT
    default 14

config NET_IF_IPV6_PREFIX_COUNT
    default NET_IF_UNICAST_IPV6_ADDR_COUNT if CHIP_WIFI

config NET_PKT_RX_COUNT
    default 8

config NET_PKT_TX_COUNT
    default 8

config NET_BUF_RX_COUNT
    default 16

config NET_BUF_TX_COUNT
    default 16

config NET_SOCKETS_POLL_MAX
    default 6 if CHIP_WIFI

# ==============================================================================
# Bluetooth Low Energy configuration
# ==============================================================================

config BT
    default y

config BT_PERIPHERAL
    default y

config BT_PERIPHERAL_PREF_MIN_INT
    default 36

config BT_PERIPHERAL_PREF_MAX_INT
    default 36

# Increase BT timeout to 5 s to improve connection reliability and avoid fast drop outs.
config BT_PERIPHERAL_PREF_TIMEOUT
    default 500

config BT_GAP_AUTO_UPDATE_CONN_PARAMS
    default y

# Decrease connection parameters update time, as some Matter controllers request
# enabling IP networking faster than BT connection parameters are updated, what may result
# in commissioning instabilities.
config BT_CONN_PARAM_UPDATE_TIMEOUT
    default 1000

config BT_GATT_DYNAMIC_DB
    default y

config BT_DEVICE_NAME_DYNAMIC
    default y

config BT_DEVICE_NAME_MAX
    default 15

config BT_MAX_CONN
    default 1

config BT_L2CAP_TX_MTU
    default 247

config BT_BUF_ACL_RX_SIZE
    default 251

config BT_BUF_ACL_TX_SIZE
    default 251

# It is set based on BT_BUF_ACL_RX_COUNT_EXTRA = 6 - (BT_MAX_CONN + 1)
config BT_BUF_ACL_RX_COUNT_EXTRA
    default 4

config BT_RX_STACK_SIZE
    default 1200

# Increase maximum data length of PDU supported in the Controller
config BT_CTLR_DATA_LENGTH_MAX
    default 251 if SOC_SERIES_NRF52X

config BT_CTLR_ECDH
    default n

config BT_CTLR_LE_ENC
    default n

config BT_DEVICE_NAME_GATT_WRITABLE
    default n

config BT_GATT_CACHING
    default n

# Disable 2M PHY due to interoperability issues.
config BT_CTLR_PHY_2M
    default n

config MPSL_FEM_NRF21540_RUNTIME_PA_GAIN_CONTROL
    default y if MPSL_FEM

# ==============================================================================
# NFC Onboarding Payload configuration
# ==============================================================================

config CHIP_NFC_ONBOARDING_PAYLOAD
    default y

# Disable not needed NFC callback to save flash
config NFC_THREAD_CALLBACK
    default n

# ==============================================================================
# DFU configuration
# ==============================================================================

config CHIP_OTA_REQUESTOR
    default y

# All boards except nRF7002DK use QSPI NOR external flash
config CHIP_QSPI_NOR
    default y if BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF52840DK_NRF52840

# nRF7002DK uses SPI NOR external flash

if BOARD_NRF7002DK_NRF5340_CPUAPP || BOARD_NRF7002DK_NRF7001_NRF5340_CPUAPP || BOARD_NRF54L15DK

config CHIP_SPI_NOR
    default y

endif # BOARD_NRF7002DK_NRF5340_CPUAPP || BOARD_NRF7002DK_NRF7001_NRF5340_CPUAPP || BOARD_NRF54L15DK

config BOOT_IMAGE_ACCESS_HOOKS
    default y if SOC_SERIES_NRF53X

config UPDATEABLE_IMAGE_NUMBER
    default 3 if NRF_WIFI_PATCHES_EXT_FLASH_STORE
    default 2 if SOC_SERIES_NRF53X

config DFU_MULTI_IMAGE_MAX_IMAGE_COUNT
    default 3 if NRF_WIFI_PATCHES_EXT_FLASH_STORE

config NRF_WIFI_FW_PATCH_DFU
    default y if NRF_WIFI_PATCHES_EXT_FLASH_STORE

# ==============================================================================
# OpenThread configuration
# ==============================================================================

config NET_L2_OPENTHREAD
    default y if !WIFI_NRF70 && NETWORKING

if NET_L2_OPENTHREAD

# Increase the default RX stack size
config IEEE802154_NRF5_RX_STACK_SIZE
    default 1024

config OPENTHREAD_THREAD_STACK_SIZE
    default 6144 if (PSA_CRYPTO_DRIVER_CC3XX && PSA_CRYPTO_DRIVER_OBERON) || PSA_CRYPTO_DRIVER_CRACEN
    default 4096

config OPENTHREAD_DEFAULT_TX_POWER
    default 20 if MPSL_FEM
    default 3 if SOC_SERIES_NRF53X
    default 8 if SOC_SERIES_NRF52X || SOC_SERIES_NRF54LX

endif # NET_L2_OPENTHREAD

# ==============================================================================
# Wi-Fi configuration
# ==============================================================================

if CHIP_WIFI

choice WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_CHOICE
    default WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_ERR
endchoice

# it saves us 20kB of FLASH
config WIFI_NM_WPA_SUPPLICANT_NO_DEBUG
    default y

config NRF70_LOG_VERBOSE
    default n

choice WIFI_NRF70_LOG_LEVEL_CHOICE
    default WIFI_NRF70_LOG_LEVEL_OFF
endchoice

config NRF_WIFI_LOW_POWER
    default n

config NRF70_RX_NUM_BUFS
    default 16

config NRF70_MAX_TX_TOKENS
    default 10

config NRF70_MAX_TX_AGGREGATION
    default 1

# it saves 25kB of FLASH
config WIFI_NM_WPA_SUPPLICANT_ADVANCED_FEATURES
    default n

endif # CHIP_WIFI

# ==============================================================================
# Crypto configuration
# ==============================================================================

choice OPENTHREAD_SECURITY
    default OPENTHREAD_NRF_SECURITY_PSA_CHOICE if CHIP_CRYPTO_PSA
    default OPENTHREAD_NRF_SECURITY_CHOICE
    
endchoice

choice RNG_GENERATOR_CHOICE
    default XOSHIRO_RANDOM_GENERATOR if SOC_SERIES_NRF53X
endchoice

config MBEDTLS_ENABLE_HEAP
    default y if !BUILD_WITH_TFM
    default n

config MBEDTLS_HEAP_SIZE
    default 8192

# Enable PSA Crypto dependencies for Matter

config CHIP_CRYPTO_PSA
    default y if !CHIP_WIFI
    imply PSA_WANT_ALG_SPAKE2P_MATTER

if CHIP_CRYPTO_PSA

config PSA_CRYPTO_DRIVER_OBERON
    default y if (SOC_SERIES_NRF52X || SOC_SERIES_NRF53X)

config PSA_CRYPTO_DRIVER_CC3XX
    default n

config PSA_CRYPTO_DRIVER_CRACEN
    default y if SOC_SERIES_NRF54LX

config PSA_WANT_ALG_SHA_224
    default n

# Extend the maximum number of PSA key slots to fit Matter requirements
config MBEDTLS_PSA_KEY_SLOT_COUNT
    default 64

if PSA_CRYPTO_DRIVER_CC3XX && PSA_CRYPTO_DRIVER_OBERON

# Do not use CC3XX hash driver when both Oberon and CC3xx are enabled.
config PSA_USE_CC3XX_HASH_DRIVER
    default n

endif # PSA_CRYPTO_DRIVER_CC3XX && PSA_CRYPTO_DRIVER_OBERON

endif # CHIP_CRYPTO_PSA

if !CHIP_CRYPTO_PSA

config OBERON_BACKEND
    default y

config NRF_SECURITY_ADVANCED
    default y

config MBEDTLS_AES_C
    default y

config MBEDTLS_CTR_DRBG_C
    default y

config MBEDTLS_CIPHER_MODE_CTR
    default y

config MBEDTLS_MD_C
    default y

config MBEDTLS_SHA1_C
    default y if CHIP_WIFI

config MBEDTLS_SHA256_C
    default y

config MBEDTLS_PK_C
    default y

config MBEDTLS_PKCS5_C
    default y

config MBEDTLS_PK_WRITE_C
    default y

config MBEDTLS_X509_CREATE_C
    default y

config MBEDTLS_X509_CSR_WRITE_C
    default y

config MBEDTLS_ECP_C
    default y

config MBEDTLS_ECP_DP_SECP256R1_ENABLED
    default y

endif # !CHIP_CRYPTO_PSA

config MBEDTLS_SSL_OUT_CONTENT_LEN
    default 900 if CHIP_WIFI

# Disable unneeded crypto operations

config MBEDTLS_SHA384_C
    default n

config MBEDTLS_SHA512_C
    default n

config MBEDTLS_CIPHER_MODE_XTS
    default n

config MBEDTLS_CHACHA20_C
    default n

config MBEDTLS_POLY1305_C
    default n

config MBEDTLS_CHACHAPOLY_C
    default n

config MBEDTLS_GCM_C
    default n

config MBEDTLS_RSA_C
    default n

config MBEDTLS_SSL_SRV_C
    default n

config MBEDTLS_SSL_COOKIE_C
    default n

config MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH
    default y

# ==============================================================================
# Logging configuration
# ==============================================================================

config LOG
    default y

if LOG

choice LOG_MODE
    default LOG_MODE_MINIMAL
endchoice

choice MATTER_LOG_LEVEL_CHOICE
    default MATTER_LOG_LEVEL_DBG
endchoice

config CHIP_APP_LOG_LEVEL
    default 4 # debug

config LOG_DEFAULT_LEVEL
    default 1 # error

config CHIP_LOG_SIZE_OPTIMIZATION
    default y

# disable synchronous printk to avoid blocking IRQs which
# may affect time sensitive components
config PRINTK_SYNC
    default n

endif # LOG

# ==============================================================================
# Shell configuration
# ==============================================================================

config SHELL
    default y

if SHELL

config SHELL_STACK_SIZE
    default 2616 if CHIP_WIFI

config SHELL_MINIMAL
    default y if !CHIP_MEMORY_PROFILING

config KERNEL_SHELL
    default n if !CHIP_MEMORY_PROFILING

config SHELL_WILDCARD
	default n

config SENSOR_SHELL
    default n

config DEVICE_SHELL
    default n

config DATE_SHELL
    default n

config DEVMEM_SHELL
    default n

config MCUBOOT_SHELL
    default n

config CLOCK_CONTROL_NRF_SHELL
    default n

config FLASH_SHELL
    default n

config HWINFO_SHELL
    default n

config OPENTHREAD_SHELL
    default n if !CHIP_MEMORY_PROFILING

config SHELL_CMD_BUFF_SIZE
    default 512 if CHIP_MEMORY_PROFILING

endif # SHELL

endif # CHIP
