#
#   Copyright (c) 2024 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 CHIP_OPERATIONAL_TIME_SAVE_INTERVAL
	default 1

if CHIP_FACTORY_DATA

config CHIP_DEVICE_VENDOR_ID
	default 4151 # 0x1037

config CHIP_DEVICE_MANUFACTURING_DATE
	default "2023-01-01"

config CHIP_DEVICE_PRODUCT_ID
	default 41510 if SOC_SERIES_RW6XX

endif # CHIP_FACTORY_DATA

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 8

# Application stack size
config MAIN_STACK_SIZE
	default 3072

config INIT_STACKS
	default y

config NET_MGMT_EVENT_STACK_SIZE
	default 1024

config NET_MGMT_EVENT_QUEUE_SIZE
	default 20

config NET_IPV6_MLD
	default y

config NET_IF_MCAST_IPV6_ADDR_COUNT
	default 14

config NET_IF_MAX_IPV4_COUNT
	default 2

config NET_IF_MAX_IPV6_COUNT
	default 2

config NET_TC_TX_COUNT
	default 1

config NET_TC_RX_COUNT
	default 1

config NET_TC_THREAD_PRIO_CUSTOM
	default y

choice NET_TC_THREAD_TYPE
	default NET_TC_THREAD_PREEMPTIVE
endchoice

config NET_TCP_WORKER_PRIO
	default -16

config NET_TC_TX_THREAD_BASE_PRIO
	default 3

config NET_TC_RX_THREAD_BASE_PRIO
	default 3

config NET_TC_SKIP_FOR_HIGH_PRIO
	default y

config NET_CONTEXT_PRIORITY
	default y

# Network buffers
config NET_PKT_RX_COUNT
	default 14

config NET_PKT_TX_COUNT
	default 14

config NET_BUF_RX_COUNT
	default 36

config NET_BUF_TX_COUNT
	default 36

config NET_BUF_DATA_SIZE
	default 256

# Bluetooth Low Energy configs

config BT
	default y

config BT_PERIPHERAL
	default y

config BT_CENTRAL
	default n

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 2048 if NO_OPTIMIZATIONS && DEBUG
	default 1700

config BT_LONG_WQ_STACK_SIZE
	default 1024

config BT_DEVICE_NAME_GATT_WRITABLE
	bool
	default n

config HCI_NXP_ENABLE_AUTO_SLEEP
	default n

config CHIP_OTA_REQUESTOR
	default n

config CHIP_DEVICE_SOFTWARE_VERSION
	default 1

# Enable extended discovery
config CHIP_EXTENDED_DISCOVERY
	default y

config NVS_LOOKUP_CACHE
	default y

config NVS_LOOKUP_CACHE_SIZE
	default 1024

if CHIP_WIFI

choice NXP_WIFI_PART
	default NXP_RW610 if SOC_SERIES_RW6XX
endchoice

config ZVFS_OPEN_MAX
	default 30

choice SCHED_ALGORITHM
	default SCHED_MULTIQ
endchoice

choice WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_CHOICE
	default WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_INF
endchoice

choice WIFI_NM_WPA_SUPPLICANT_CRYPTO_BACKEND
	default WIFI_NM_WPA_SUPPLICANT_CRYPTO_ALT
endchoice

config WIFI_NM_WPA_SUPPLICANT_THREAD_STACK_SIZE
	default 6144

config WIFI_NM_WPA_SUPPLICANT_WQ_STACK_SIZE
	default 5120

config WIFI_NM_WPA_SUPPLICANT_INF_MON
	default n

config SYSTEM_WORKQUEUE_STACK_SIZE
	default 2048

config NET_TCP_WORKQ_STACK_SIZE
	default 2048

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

config NET_IPV4_FRAGMENT_MAX_COUNT
	default 3

config NET_IPV4_FRAGMENT_MAX_PKT
	default 7

config NET_IPV4_FRAGMENT_TIMEOUT
	default 3

config NET_IPV6_FRAGMENT_MAX_COUNT
	default 3

config NET_IPV6_FRAGMENT_MAX_PKT
	default 8

config NET_IPV6_FRAGMENT_TIMEOUT
	default 3

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

config NET_MAX_CONN
	default 10

config SHELL_STACK_SIZE
	default 2616

config HEAP_MEM_POOL_SIZE
	default 122880

config CHIP_MALLOC_SYS_HEAP_SIZE
	default 28672 # 28 kB

endif

if CHIP_ETHERNET || CHIP_WIFI

choice LIBC_IMPLEMENTATION
	default NEWLIB_LIBC
endchoice

endif

if CHIP_ETHERNET

choice NXP_ENET_DRIVER
	default ETH_NXP_ENET
endchoice

endif

# Configure MBEDTLS lib
config MBEDTLS
	default y

config MBEDTLS_CFG_FILE
	default "config-tls-generic.h"

config MBEDTLS_USER_CONFIG_ENABLE
    default y

config MBEDTLS_USER_CONFIG_FILE
    default "nxp-zephyr-mbedtls-config.h"

config MBEDTLS_ENTROPY_ENABLED
	default y

config MBEDTLS_ZEPHYR_ENTROPY
	default y

config MBEDTLS_SSL_MAX_CONTENT_LEN
	default 8192

config MBEDTLS_ENABLE_HEAP
	default y

config MBEDTLS_HEAP_SIZE
	default 15360

config MBEDTLS_CIPHER_AES_ENABLED
	default y

config MBEDTLS_CIPHER_CCM_ENABLED
	default y

config MBEDTLS_CTR_DRBG_ENABLED
	default y

config MBEDTLS_CIPHER_MODE_CBC_ENABLED
	default y

config MBEDTLS_ECP_C
	default y

config MBEDTLS_ECP_DP_SECP256R1_ENABLED
	default y

config CHIP_CRYPTO_PSA
	default y

if CHIP_CRYPTO_PSA

config MBEDTLS_PSA_CRYPTO_C
	default y

config WIFI_NM_WPA_SUPPLICANT_CRYPTO_MBEDTLS_PSA
	default y if WIFI_NM_WPA_SUPPLICANT

endif

config MCUX_ELS_PKC
	default y if SOC_SERIES_RW6XX

if MCUX_ELS_PKC

config MCUX_PSA_CRYPTO_DRIVER_ELS_PKC
	default y if CHIP_CRYPTO_PSA

config MCUX_PSA_CRYPTO_DRIVER_ELS_PKC_THREAD
	default y if CHIP_CRYPTO_PSA

config ENTROPY_GENERATOR
	default y

endif # MCUX_ELS_PKC


if SHELL

config KERNEL_SHELL
	default y

config DEVICE_SHELL
	default y

config REBOOT
	default y

# Disable not used shell modules
config SHELL_WILDCARD
	default n

config SHELL_VT100_COLORS
	default n

config SHELL_STATS
	default n

config SENSOR_SHELL
	default n

config DATE_SHELL
	default n

config DEVMEM_SHELL
	default n

config MCUBOOT_SHELL
	default n

config FLASH_SHELL
	default n

endif # SHELL

endif
