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

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 FPU
    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

config HEAP_MEM_POOL_SIZE
    default 80000 if CHIP_WIFI

config CHIP_MALLOC_SYS_HEAP_SIZE
    default 30720 if CHIP_WIFI
    default 8192 if NET_L2_OPENTHREAD

# 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

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

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

config CHIP_NFC_COMMISSIONING
    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
config CHIP_SPI_NOR
    default y if BOARD_NRF7002DK_NRF5340_CPUAPP

config BOOT_IMAGE_ACCESS_HOOKS
    default y if SOC_SERIES_NRF53X

config UPDATEABLE_IMAGE_NUMBER
    default 2 if SOC_SERIES_NRF53X

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

config NET_L2_OPENTHREAD
    default y if !WIFI_NRF700X

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
    default 4096

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

endif # NET_L2_OPENTHREAD

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

if CHIP_WIFI

choice WPA_SUPP_LOG_LEVEL_CHOICE
    default WPA_SUPP_LOG_LEVEL_ERR
endchoice

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

config NRF700X_LOG_VERBOSE
    default n

choice WIFI_NRF700X_LOG_LEVEL_CHOICE
    default WIFI_NRF700X_LOG_LEVEL_OFF
endchoice

config NRF_WIFI_LOW_POWER
    default n

config NRF700X_RX_NUM_BUFS
    default 16

config NRF700X_MAX_TX_TOKENS
    default 10

config NRF700X_MAX_TX_AGGREGATION
    default 1

# it saves 25kB of FLASH
config WPA_SUPP_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 OBERON_BACKEND
    default y

config MBEDTLS_ENABLE_HEAP
    default y

config MBEDTLS_HEAP_SIZE
    default 8192
    
# Enable PSA Crypto dependencies for Matter

config CHIP_CRYPTO_PSA
    default y if !CHIP_WIFI

if CHIP_CRYPTO_PSA

config PSA_CRYPTO_DRIVER_CC3XX
    default n

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

# Spake2+ support
config MBEDTLS_MD_C
    default y

endif

if !CHIP_CRYPTO_PSA

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_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

config MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
    default n if CHIP_WIFI

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

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

endif # SHELL

endif