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

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

# Enable getting reboot reasons information
config HWINFO
    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

config CHIP_DEVICE_VENDOR_ID
	int
	default 65521

config CHIP_DEVICE_PRODUCT_ID
	int
	default 32768

# 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
