#
#   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
    bool
    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
    int
    default 2

config CHIP_LOG_SIZE_OPTIMIZATION
    bool
    default y

endif

config PRINTK_SYNC
    bool
    default y

config ASSERT
    bool
    default y

config HW_STACK_PROTECTION
    bool
    default y

config FPU
    bool
    default y

config SHELL
    bool
    default y

# Generic networking options
config NET_SOCKETS_POSIX_NAMES
    bool
    default n

# Application stack size
config MAIN_STACK_SIZE
    int
    default 8192

config INIT_STACKS
    bool
    default y

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

config NET_IPV6_MLD
    bool
    default y

config NET_IF_MCAST_IPV6_ADDR_COUNT
    int 
    default 14

# Network buffers
config NET_PKT_RX_COUNT
    int
    default 16

config NET_PKT_TX_COUNT
    int
    default 16

config NET_BUF_RX_COUNT
    int
    default 80

config NET_BUF_TX_COUNT
    int
    default 80

# Bluetooth Low Energy configs

config BT
    bool
    default y

config BT_PERIPHERAL
    bool
    default y

config BT_PERIPHERAL_PREF_MIN_INT
    int
    default 36

config BT_PERIPHERAL_PREF_MAX_INT
    int
    default 36

config BT_GAP_AUTO_UPDATE_CONN_PARAMS
    bool
    default y

config BT_GATT_DYNAMIC_DB
    bool
    default y

config BT_DEVICE_NAME_DYNAMIC
    bool
    default y

config BT_DEVICE_NAME_MAX
    int
    default 15

config BT_MAX_CONN
    int
    default 1

config BT_L2CAP_TX_MTU
    int
    default 247

config BT_BUF_ACL_RX_SIZE
    int
    default 251

config BT_BUF_ACL_TX_SIZE
    int
    default 251

config BT_RX_STACK_SIZE
    int
    default 1200

# Enable NFC support

config CHIP_NFC_COMMISSIONING
    bool
    default y

config CHIP_OTA_REQUESTOR
    bool
    default y

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

config CHIP_QSPI_NOR
    bool
    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
    bool
    default y

endif # BOARD_NRF7002DK_NRF5340_CPUAPP

# Enable extended discovery
config CHIP_EXTENDED_DISCOVERY
    bool
    default y

config NVS_LOOKUP_CACHE
    bool
    default y

config NVS_LOOKUP_CACHE_SIZE
    int
    default 512

# Enable OpenThread

config NET_L2_OPENTHREAD
    bool
    default y if !WIFI_NRF700X

if NET_L2_OPENTHREAD

# Increase the default RX stack size
config IEEE802154_NRF5_RX_STACK_SIZE
    int
    default 1024

endif

if CHIP_WIFI

config NRF_WIFI_LOW_POWER
    bool
    default n

config MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
    bool
    default n

config SYSTEM_WORKQUEUE_STACK_SIZE
    int
    default 1120

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

config NET_IF_MCAST_IPV6_ADDR_COUNT
    int
    default 8

config NET_SOCKETS_POSIX_NAMES
    bool
    default n

config MBEDTLS_SSL_OUT_CONTENT_LEN
    int
    default 900

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

config NET_MAX_CONN
    int
    default 4

config SHELL_STACK_SIZE
    int
    default 2616

config HEAP_MEM_POOL_SIZE
    int
    default 200000

endif


# Enable mbedTLS from nrf_security library

choice OPENTHREAD_SECURITY
	default OPENTHREAD_NRF_SECURITY_CHOICE
endchoice

config PSA_CRYPTO_DRIVER_CC3XX
	bool
	default n

config OBERON_BACKEND
    bool
    default y

config MBEDTLS_ENABLE_HEAP
    bool
    default y

config MBEDTLS_HEAP_SIZE
    int
    default 15360

config MBEDTLS_TLS_LIBRARY
    bool
    default y

config NRF_SECURITY_ADVANCED
    bool
    default y

config MBEDTLS_AES_C
    bool
    default y

config MBEDTLS_ECP_C
    bool
    default y

config MBEDTLS_ECP_DP_SECP256R1_ENABLED
    bool
    default y

config MBEDTLS_CTR_DRBG_C
    bool
    default y

config MBEDTLS_CIPHER_MODE_CTR
    bool
    default y

config MBEDTLS_ECJPAKE_C
    bool
    default y

config MBEDTLS_SHA256_C
    bool
    default y

config MBEDTLS_PK_C
    bool
    default y

config MBEDTLS_PK_WRITE_C
    bool
    default y

config MBEDTLS_X509_CREATE_C
    bool
    default y if !CHIP_CRYPTO_PSA

config MBEDTLS_X509_CSR_WRITE_C
    bool
    default y if !CHIP_CRYPTO_PSA

# Disable unneeded crypto operations

config MBEDTLS_SHA384_C
    bool
    default n

config MBEDTLS_SHA512_C
    bool
    default n

config MBEDTLS_CIPHER_MODE_XTS
    bool
    default n

config MBEDTLS_CHACHA20_C
    bool
    default n

config MBEDTLS_POLY1305_C
    bool
    default n

config MBEDTLS_CHACHAPOLY_C
    bool
    default n

config MBEDTLS_GCM_C
    bool
    default n

config MBEDTLS_RSA_C
    bool
    default n

config PSA_WANT_KEY_TYPE_ARIA
    bool
    default n

config PSA_WANT_KEY_TYPE_CHACHA20
    bool
    default n

config PSA_WANT_ALG_GCM
    bool
    default n

config PSA_WANT_ALG_CHACHA20_POLY1305
    bool
    default n

config PSA_WANT_ALG_SHA_1
    bool
    default n

config PSA_WANT_ALG_SHA_224
    bool
    default n

config PSA_WANT_ALG_SHA_384
    bool
    default n

config PSA_WANT_ALG_SHA_512
    bool
    default n

config PSA_WANT_ALG_RIPEMD160
    bool
    default n

config PSA_WANT_ALG_MD5
    bool
    default n

config PSA_WANT_ALG_CFB
    bool
    default n

config PSA_WANT_ALG_OFB
    bool
    default n

# Disable not used shell modules

config SENSOR_SHELL
    bool
    default n

config DEVICE_SHELL
    bool
    default n

config DATE_SHELL
    bool
    default n

config DEVMEM_SHELL
    bool
    default n

config MCUBOOT_SHELL
    bool
    default n

config CLOCK_CONTROL_NRF_SHELL
    bool
    default n

config FLASH_SHELL
    bool
    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
    int
    default 251

endif # SOC_SERIES_NRF52X

if SOC_SERIES_NRF53X

config UPDATEABLE_IMAGE_NUMBER
    int
    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
