#
#    Copyright (c) 2020 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.
#

# Application stack size
CONFIG_MAIN_STACK_SIZE=8704

# Logging configuration
CONFIG_LOG=y
CONFIG_LOG_MODE_IMMEDIATE=y

# Zephyr networking configuration
CONFIG_NET_SOCKETS_POSIX_NAMES=n
CONFIG_NET_IPV4=y
CONFIG_ETH_NATIVE_POSIX=y
CONFIG_NET_PKT_RX_COUNT=16
CONFIG_NET_PKT_TX_COUNT=16
CONFIG_NET_BUF_RX_COUNT=80
CONFIG_NET_BUF_TX_COUNT=80
CONFIG_NET_CONTEXT_NET_PKT_POOL=y
CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT=6
CONFIG_NET_IF_MCAST_IPV6_ADDR_COUNT=8

# Configure settings
CONFIG_FLASH_SIMULATOR=y

# mbedTLS configuration
CONFIG_MBEDTLS=y
CONFIG_MBEDTLS_ENABLE_HEAP=y
CONFIG_MBEDTLS_HEAP_SIZE=65536
CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=768
CONFIG_MBEDTLS_USER_CONFIG_ENABLE=y
CONFIG_MBEDTLS_USER_CONFIG_FILE="app_mbedtls_config.h"
CONFIG_MBEDTLS_ZEPHYR_ENTROPY=y
CONFIG_MBEDTLS_ENTROPY_ENABLED=y
CONFIG_MBEDTLS_CTR_DRBG_ENABLED=y
CONFIG_MBEDTLS_CIPHER_CCM_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED=y
CONFIG_MBEDTLS_ECDH_C=y
CONFIG_MBEDTLS_ECDSA_C=y
CONFIG_MBEDTLS_ECP_C=y
CONFIG_MBEDTLS_PK_WRITE_C=y
CONFIG_MBEDTLS_PKCS5_C=y
CONFIG_MBEDTLS_PSA_CRYPTO_C=y
CONFIG_MBEDTLS_MEMORY_DEBUG=y
CONFIG_MBEDTLS_DEBUG=y

# Enable entropy
CONFIG_ENTROPY_GENERATOR=y

# Disable OpenThread
CONFIG_NET_L2_OPENTHREAD=n

# Additional configs for debbugging experience.
CONFIG_THREAD_NAME=y
CONFIG_INIT_STACKS=y
CONFIG_REBOOT=n

# Build as C++17
CONFIG_STD_CPP17=y

# CHIP configuration
CONFIG_CHIP=y
CONFIG_CHIP_CRYPTO_PSA=y
CONFIG_CHIP_BUILD_TESTS=y
CONFIG_CHIP_ENABLE_READ_CLIENT=y
CONFIG_CHIP_DEVICE_VENDOR_ID=65521
CONFIG_CHIP_DEVICE_PRODUCT_ID=32768
CONFIG_CHIP_PROJECT_CONFIG="main/include/CHIPProjectConfig.h"
