#
#   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 PICOLIBC
endchoice

choice POSIX_SYSCONF_IMPL_CHOICE
    default POSIX_SYSCONF_IMPL_MACRO if PICOLIBC

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 ZVFS_OPEN_MAX
    default 30

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

if CHIP_WIFI

config HEAP_MEM_POOL_SIZE
    default 48336 if BUILD_WITH_TFM
    default 43008 if CHIP_WIFI
    default 40144

config NRF_WIFI_DATA_HEAP_SIZE
    default 42384 if BUILD_WITH_TFM
    default 50576

endif # CHIP_WIFI

config HEAP_MEM_POOL_IGNORE_MIN
    default y if CHIP_WIFI

config CHIP_MALLOC_SYS_HEAP_SIZE
    default 14336 if CHIP_WIFI
    default 10240

config MPSL_WORK_STACK_SIZE
    default 2048 if SOC_SERIES_NRF54L # 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
# ==============================================================================

if NETWORKING

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

endif # NETWORKING

# ==============================================================================
# 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_NRF52

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

config BOOT_IMAGE_ACCESS_HOOKS
    default y if SOC_SERIES_NRF53

config UPDATEABLE_IMAGE_NUMBER
    default 3 if NRF_WIFI_PATCHES_EXT_FLASH_STORE
    default 2 if SOC_SERIES_NRF53

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 L2 configuration
# ==============================================================================

config NET_L2_OPENTHREAD
    default y if !CHIP_WIFI && NETWORKING

if NET_L2_OPENTHREAD

# Increase the default RX stack size
config IEEE802154_NRF5_RX_STACK_SIZE
    default 1024

endif # NET_L2_OPENTHREAD

config CHIP_SYSTEM_USE_ZEPHYR_SOCKET_EXTENSIONS
    default n if !NET_L2_OPENTHREAD

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

config OPENTHREAD
    default y if !CHIP_WIFI

if OPENTHREAD

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_NRF53
    default 8 if SOC_SERIES_NRF52 || SOC_SERIES_NRF54L

endif # OPENTHREAD

config CHIP_USE_ZEPHYR_NETWORKING
    default n

# ==============================================================================
# ICD configuration
# ==============================================================================

if CHIP_ENABLE_ICD_SUPPORT

config CHIP_ICD_SLOW_POLL_INTERVAL
    default 300000 if CHIP_ICD_LIT_SUPPORT # Use the same value as CONFIG_CHIP_ICD_IDLE_MODE_DURATION
    default 2500

config CHIP_ICD_SIT_SLOW_POLL_LIMIT
 	default 15000

config CHIP_ICD_FAST_POLLING_INTERVAL
 	default 500

config CHIP_ICD_IDLE_MODE_DURATION
 	default 300 if CHIP_ICD_LIT_SUPPORT
 	default 120

config CHIP_ICD_ACTIVE_MODE_THRESHOLD
 	default 5000 if CHIP_ICD_LIT_SUPPORT
 	default 0

endif # CHIP_ENABLE_ICD_SUPPORT

# ==============================================================================
# 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_NRF53
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

choice CHIP_CRYPTO
    default CHIP_CRYPTO_PSA

endchoice

config CHIP_CRYPTO_PSA
    imply PSA_WANT_ALG_SPAKE2P_MATTER
    imply PSA_WANT_KEY_TYPE_SPAKE2P_KEY_PAIR_IMPORT if PSA_CRYPTO_DRIVER_OBERON

if CHIP_CRYPTO_PSA

config CHIP_CRYPTO_PSA_AEAD_SINGLE_PART
    default y if SOC_SERIES_NRF54L

config PSA_CRYPTO_DRIVER_OBERON
    default y if (SOC_SERIES_NRF52 || SOC_SERIES_NRF53)

config PSA_CRYPTO_DRIVER_CC3XX
    default n

config PSA_CRYPTO_DRIVER_CRACEN
    default y if SOC_SERIES_NRF54L

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 CHIP_LIB_SHELL

if CHIP_LIB_SHELL

# Currently the CHIPArgParser uses the standard getopt() API. Building with Zephyr's
# shim getopt (which uses Zephyr's sys_getopt) does not work for this. So let's disable
# it, and use directly the C library standard getopt.
choice POSIX_AEP_CHOICE
	default POSIX_AEP_CHOICE_NONE

endchoice 

endif # CHIP_LIB_SHELL

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
