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

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

endif

config PRINTK_SYNC
    default y

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 SHELL
    default y

config PTHREAD_IPC
    bool
    default n

config POSIX_MAX_FDS
    int
    default 16

# Application stack size
config MAIN_STACK_SIZE
    default 8192

config INIT_STACKS
    default y

config NET_IPV6_MLD
    default y

config NET_IF_MCAST_IPV6_ADDR_COUNT
    default 14

# Network buffers
config NET_PKT_RX_COUNT
    default 16

config NET_PKT_TX_COUNT
    default 16

config NET_BUF_RX_COUNT
    default 80

config NET_BUF_TX_COUNT
    default 80

# Bluetooth Low Energy configs

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

config BT_CTLR_ECDH
    bool
    default n

config BT_CTLR_LE_ENC
    bool
    default n

config BT_DEVICE_NAME_GATT_WRITABLE
    bool
    default n

# Enable NFC support

config CHIP_NFC_COMMISSIONING
    default y

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

config CHIP_OTA_REQUESTOR
    default y

# All boards besides nRF7002DK use QSPI NOR external flash
if BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF52840DK_NRF52840

config CHIP_QSPI_NOR
    default y

endif # BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF52840DK_NRF52840

# nRF7002DK uses SPI NOR external flash

if BOARD_NRF7002DK_NRF5340_CPUAPP

config CHIP_SPI_NOR
    default y

endif # BOARD_NRF7002DK_NRF5340_CPUAPP

# Enable extended discovery
config CHIP_EXTENDED_DISCOVERY
    default y

config NVS_LOOKUP_CACHE
    default y

config NVS_LOOKUP_CACHE_SIZE
    default 512

# Enable OpenThread

config NET_L2_OPENTHREAD
    default y if !WIFI_NRF700X

if NET_L2_OPENTHREAD

# Disable certain parts of Zephyr IPv6 stack
config NET_IPV6_NBR_CACHE
    bool
    default n

# Increase the default RX stack size
config IEEE802154_NRF5_RX_STACK_SIZE
    default 1024

endif

if CHIP_WIFI

choice WPA_SUPP_LOG_LEVEL_CHOICE
	default WPA_SUPP_LOG_LEVEL_ERR
endchoice

config NRF_WIFI_LOW_POWER
    default n

config MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
    default n

config SYSTEM_WORKQUEUE_STACK_SIZE
    default 2560

# align these numbers to match the OpenThread config
config NET_IF_UNICAST_IPV6_ADDR_COUNT
    default 6

config NET_IF_MCAST_IPV6_ADDR_COUNT
    default 8

config NET_SOCKETS_POLL_MAX
    default 4

config MBEDTLS_SSL_OUT_CONTENT_LEN
    default 900

# options managed by IP4/IP6 simultaneous support
# aligned here to match OpenThread config
config NET_MAX_ROUTERS
    default 1

config NET_MAX_CONN
    default 4

config SHELL_STACK_SIZE
    default 2616

config HEAP_MEM_POOL_SIZE
    default 200000

config CHIP_MALLOC_SYS_HEAP_SIZE
    default 28672 # 28 kB

endif


# Enable mbedTLS from nrf_security library

choice OPENTHREAD_SECURITY
	default OPENTHREAD_NRF_SECURITY_CHOICE
endchoice

config PSA_CRYPTO_DRIVER_CC3XX
	default n

config OBERON_BACKEND
    default y

config MBEDTLS_ENABLE_HEAP
    default y

config MBEDTLS_HEAP_SIZE
    default 15360

config MBEDTLS_TLS_LIBRARY
    default y

config NRF_SECURITY_ADVANCED
    default y

config MBEDTLS_AES_C
    default y

config MBEDTLS_ECP_C
    default y

config MBEDTLS_ECP_DP_SECP256R1_ENABLED
    default y

config MBEDTLS_CTR_DRBG_C
    default y

config MBEDTLS_CIPHER_MODE_CTR
    default y

config MBEDTLS_ECJPAKE_C
    default y

config MBEDTLS_SHA256_C
    default y

config MBEDTLS_PK_C
    default y

config MBEDTLS_PK_WRITE_C
    default y

config MBEDTLS_X509_CREATE_C
    default y if !CHIP_CRYPTO_PSA

config MBEDTLS_X509_CSR_WRITE_C
    default y if !CHIP_CRYPTO_PSA

# 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 PSA_WANT_KEY_TYPE_CHACHA20
    default n

config PSA_WANT_ALG_GCM
    default n

config PSA_WANT_ALG_CHACHA20_POLY1305
    default n

config PSA_WANT_ALG_SHA_1
    default n

config PSA_WANT_ALG_SHA_224
    default n

config PSA_WANT_ALG_SHA_384
    default n

config PSA_WANT_ALG_SHA_512
    default n

config PSA_WANT_ALG_RIPEMD160
    default n

config PSA_WANT_ALG_MD5
    default n

config PSA_WANT_ALG_CFB
    default n

config PSA_WANT_ALG_OFB
    default n

# Disable not used shell modules

config SHELL_WILDCARD
    default n

config SHELL_VT100_COLORS
    default n

config SHELL_STATS
    default n

config KERNEL_SHELL
    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

if MPSL_FEM

config MPSL_FEM_NRF21540_RUNTIME_PA_GAIN_CONTROL
	default y

endif # MPSL_FEM

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

# SoC series related configuration

if SOC_SERIES_NRF52X

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

endif # SOC_SERIES_NRF52X

if SOC_SERIES_NRF53X

config BOOT_IMAGE_ACCESS_HOOKS
    default y

config UPDATEABLE_IMAGE_NUMBER
    default 2

# Generate random numbers using Xoroshiro algorithm instead of direct calls
# to the cryptocell library to workaround firmware hangs.
choice RNG_GENERATOR_CHOICE
    default XOROSHIRO_RANDOM_GENERATOR
endchoice

endif # SOC_SERIES_NRF53X

endif
