#
#   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 LOG_DEFAULT_LEVEL
    default 2

config CHIP_LOG_SIZE_OPTIMIZATION
    default y

endif

config PRINTK_SYNC
    default y

config ASSERT
    default y

config HW_STACK_PROTECTION
    default y

config FPU
    default y

config SHELL
    default y

config PTHREAD_IPC
    bool
    default n

# Generic networking options
config NET_SOCKETS_POSIX_NAMES
    default n

# Application stack size
config MAIN_STACK_SIZE
    default 8192

config INIT_STACKS
    default y

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

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

config BT_GAP_AUTO_UPDATE_CONN_PARAMS
    default y

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

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

# Increase the default RX stack size
config IEEE802154_NRF5_RX_STACK_SIZE
    default 1024

endif

if CHIP_WIFI

config NRF_WIFI_LOW_POWER
    default n

config MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
    default n

config SYSTEM_WORKQUEUE_STACK_SIZE
    default 1120

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

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

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

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