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

rsource "../../zephyr/Kconfig"

config CHIP
	imply NVS if !SOC_FLASH_NRF_RRAM
	imply NVS_LOOKUP_CACHE if !SOC_FLASH_NRF_RRAM
	imply NVS_LOOKUP_CACHE_FOR_SETTINGS if !SOC_FLASH_NRF_RRAM
	imply ZMS if SOC_FLASH_NRF_RRAM
	imply ZMS_LOOKUP_CACHE if SOC_FLASH_NRF_RRAM
	imply ZMS_LOOKUP_CACHE_FOR_SETTINGS if SOC_FLASH_NRF_RRAM

if CHIP

config CHIP_NRF_PLATFORM
	bool
	default y
	help
	  States that the configuration uses Matter nRF platform,
	  what can be used to conditionally deviate from Zephyr generic configuration
	  for nRF platform related purposes.

# See config/zephyr/Kconfig for full definition
config CHIP_DEVICE_VENDOR_NAME
	default "Nordic Semiconductor ASA"

config CHIP_NFC_ONBOARDING_PAYLOAD
	bool "Share onboarding payload in NFC tag"
	default n
	imply NFC_T2T_NRFXLIB
	imply NFC_NDEF
	imply NFC_NDEF_MSG
	imply NFC_NDEF_RECORD
	imply NFC_NDEF_URI_REC
	imply NFC_NDEF_URI_MSG
	help
	  Enables sharing the onboarding payload in the NFC tag.

# See config/zephyr/Kconfig for full definition
config CHIP_OTA_REQUESTOR
	bool
	imply DFU_MULTI_IMAGE
	imply DFU_TARGET
	imply BOOTLOADER_MCUBOOT
	imply IMG_MANAGER
	imply STREAM_FLASH
	imply STREAM_FLASH_ERASE

config CHIP_OTA_REQUESTOR_BUFFER_SIZE
	int "OTA Requestor image buffer size"
	default 1024
	depends on CHIP_OTA_REQUESTOR
	help
	  Configures the size of the buffer used by OTA Requestor when downloading
	  and writing a new firmware image to flash.

config CHIP_OTA_REQUESTOR_REBOOT_ON_APPLY
	bool "Auto-reboot when firmware update is applied"
	default y
	depends on CHIP_OTA_REQUESTOR
	imply REBOOT
	help
	  Reboots the device automatically after downloading a new firmware update
	  to swap the old and the new firmware images. The reboot happens only when
	  a user consents to apply the firmware update.

config CHIP_EXAMPLE_DEVICE_INFO_PROVIDER
	bool "Include default device information provider build"
	default y

config CHIP_DEBUG_SYMBOLS
	bool "Generate debug symbols"
	default y
	help
	  Enables building the application with debug symbols.

config CHIP_LOG_VERIFY_OR_DIE
	bool "Log source code location on VerifyOrDie failure"
	help
	  Enables the feature to log the file name and line number where the Matter
	  stack calls the VerifyOrDie macro with the condition evaluating to false.

config CHIP_LOG_FILE_NAME
	bool "Log file name instead of entire file path"
	default y
	help
	  Enables using a file name instead of an entire file path whenever the
	  source code location needs to be logged. This is achieved by overriding
	  the __FILE__ macro with __FILE_NAME__.
	  This reduces the code size in debug configurations that enable verbose
	  assertion macros.

config CHIP_MALLOC_SYS_HEAP
	default y if !ARCH_POSIX

config CHIP_TASK_STACK_SIZE
	int "The CHIP (Matter) thread stack size"
	default 10240 if (LTO || PSA_CRYPTO_DRIVER_CC3XX)
	default 9216 if PSA_CRYPTO_DRIVER_CRACEN
	default 6144
	help
	  Configures the stack size available for the CHIP (Matter) thread.

config CHIP_FACTORY_DATA
	bool "Factory data provider"
	select ZCBOR
	help
	  Enables the default nRF Connect factory data provider implementation that
	  supports reading the factory data encoded in the CBOR format from the
	  flash memory partition. This option requires the factory_data partition in
	  Partition Manager configuration file (pm_static.yml).

config CHIP_FACTORY_DATA_CUSTOM_BACKEND
	bool "Custom factory data provider"
	depends on !CHIP_FACTORY_DATA
	help
	  Enables user's custom factory data provider implementation. This option
	  cannot be used with the CHIP_FACTORY_DATA, which enables the default nRF
	  Connect factory data provider implementation.

config CHIP_FACTORY_DATA_BUILD
	bool "Generate factory data contents"
	help
	  Enables generation of the factory data contents during the building. This
	  option requires the factory_data partition in Partition Manager
	  configuration file (pm_static.yml). As a result, a new output file is
	  created (factory_data.hex).

config CHIP_FACTORY_DATA_VERSION
	int
	default 1
	help
	  Provides the version of the generated factory data parameter set. This is
	  a hidden configuration option that the user cannot change. You can use
	  this value in the factory data provider implementation to verify that the
	  factory data saved in the flash memory has the expected version.

config CHIP_FACTORY_DATA_ROTATING_DEVICE_UID_MAX_LEN
	int "Maximum length of rotating device ID unique ID in bytes"
	default 16
	depends on CHIP_FACTORY_DATA
	help
	  Maximum acceptable length of rotating device ID unique ID in bytes.

config CHIP_FACTORY_DATA_WRITE_PROTECT
	bool "Enable Factory Data write protection"
	select FPROTECT
	depends on CHIP_FACTORY_DATA && !SOC_SERIES_NRF54LX
	default y
	help
		Enables the write protection of the Factory Data partition in the flash memory.
		This is a recommended feature, but it requires the Settings partition size to be
		a multiple of FPROTECT_BLOCK_SIZE and the Factory Data partition to be placed
		right after the application partition in the address space (the Factory Data
		partition offset must be equal to the last address of the application partition).
		The second requirement is valid only when the FPROTECT_BLOCK_SIZE is bigger than
		the flash memory page size.

if CHIP_FACTORY_DATA_BUILD

# Factory data definitions
config CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE
	bool "Merge generated factory data with merged.hex output build file"
	default y
	help
	  Enables merging the generated factory data with the merged.hex output
	  build file. As a result, the merged.hex build output file, which is used
	  when flashing the firmware using the west tool, includes the factory data
	  as well.

config CHIP_FACTORY_DATA_GENERATE_ONBOARDING_CODES
	bool "Generate onboarding codes during the generation of a factory data set"
	default y
	help
	  Enables generation of onboarding codes (manual pairing code and QR code)
	  during the generation of a factory data set. You can provide the 
	  onboarding codes a Matter controller to commission a device to a Matter 
	  network.

# Select source of the certificates
choice CHIP_FACTORY_DATA_CERT_SOURCE
	prompt "Attestation certificate file source"
	default CHIP_FACTORY_DATA_USE_DEFAULT_CERTS

	config CHIP_FACTORY_DATA_USE_DEFAULT_CERTS
		bool "Use pre-generated development certificates"
		help
		  Uses pre-generated certificate files from the
		  credentials/development/attestation/ directory that match the
		  configured Product ID. This can be used for development purpose.

	config CHIP_FACTORY_DATA_CERT_SOURCE_GENERATED
		bool "Auto-generate certificates"
		help
		  Generates new certificates instead of using pre-generated ones. The
		  certificates are generated on every build.

	config CHIP_FACTORY_DATA_CERT_SOURCE_USER
		bool "Use user-provided certificate files"
		help
		  Uses user-provided certificate files. The user needs to specify the
		  absolute paths to all necessary files.

endchoice

config CHIP_FACTORY_DATA_GENERATE_CD
	bool "Generates Certification Declaration to the output build directory"
	help
	  Generates the new Certification Declaration and stores it to the output build directory.

if CHIP_FACTORY_DATA_CERT_SOURCE_USER

config CHIP_FACTORY_DATA_USER_CERTS_DAC_CERT
	string "Path to the DAC certificate (DER format)"
	help
	  Provides the absolute path to the DAC certificate file in the DER format.

config CHIP_FACTORY_DATA_USER_CERTS_DAC_KEY
	string "Path to the DAC private key (DER format)"
	help
	  Provides the absolute path to the DAC keypair file in the DER format. Both
	  public and private keys must be present (the private key will be extracted
	  automatically).

config CHIP_FACTORY_DATA_USER_CERTS_PAI_CERT
	string "Path to the PAI certificate (DER format)"
	help
	  Provides the absolute path to the PAI certificate in the DER format.

endif # CHIP_FACTORY_DATA_CERT_SOURCE_USER

# Configs for SPAKE2+ generation
config CHIP_FACTORY_DATA_GENERATE_SPAKE2_VERIFIER
	bool "Generate SPAKE2+ verifier"
	default y
	help
	  Enables the generation of the SPAKE2+ verifier for the configured SPAKE2+
	  passcode, iteration count and salt.

config CHIP_DEVICE_GENERATE_ROTATING_DEVICE_UID
	bool "Generate Rotating device ID unique ID"
	default y
	help
	  Enables the generation of a random Rotating device ID unique ID.

endif # CHIP_FACTORY_DATA_BUILD

# See config/zephyr/Kconfig for full definition
config CHIP_FACTORY_RESET_ERASE_SETTINGS
	default y
	depends on NVS || ZMS

config CHIP_LOG_SIZE_OPTIMIZATION
	bool "Disable some detailed logs to decrease flash usage"
	help
	  Disables some log levels for specific Matter log modules that provide
	  information that is too detailed to be used in most cases. You can find
	  full configuration enabled by this option in the
	  platform/nrfconnect/CHIPPlatformConfig.h file.

config CHIP_IPV4
	bool "IPv4 support for Matter"
	default n
	depends on NET_IPV4
	help
	  If disabled, it allows to build nRF Connect SDK application
	  with IPv4 support independently of the Matter stack still
	  running over IPv6.

config CHIP_OPENTHREAD_JOINER_ENABLED
	bool "Specify whether the Thread Joiner functionality is used when it is enabled"
	default n
	depends on NET_L2_OPENTHREAD
	depends on OPENTHREAD_JOINER
	help
	  If disabled, it allows to optimize memory usage even if Thread Joiner
	  support is enabled.

config CHIP_ENABLE_READ_CLIENT
	bool "Enable Read Client in the Interaction Model"
	help
	  Enable support for Read Client in the Interaction Model.
	  This config can be disabled for device types that do not require Read Client functionality.
	  Disabling this config can save flash and RAM space.

config CHIP_MIGRATE_OPERATIONAL_KEYS_TO_ITS
	bool "Operational keys migration feature"
	depends on CHIP_CRYPTO_PSA
	help
	  Enables migration of the operational keys stored in the persistent storage to the PSA ITS secure storage.
	  Enable this feature while updating the firmware of in-field devices that run Mbed TLS cryptography backend
	  to the firmware based on PSA Crypto API.

config CHIP_FACTORY_RESET_ON_KEY_MIGRATION_FAILURE
	bool "Perform factory reset if the operational key migration failed"
	default y
	depends on CHIP_MIGRATE_OPERATIONAL_KEYS_TO_ITS
	help
	  Perform factory reset of the device if the operational key for Fabric has not been migrated
	  properly to PSA ITS storage.

config CHIP_PERSISTENT_SUBSCRIPTIONS
	default n
	# selecting experimental for this feature since there is an issue with multiple controllers.
	select EXPERIMENTAL

config CHIP_MAX_FABRICS
	int "Maximum number of Matter fabrics"
	default 5
	help
	  The maximum number of Matter fabrics that device can be joined to.

config CHIP_MAX_ACTIVE_CASE_CLIENTS
	int "Maximum number of outgoing CASE sessions"
	default CHIP_MAX_FABRICS if CHIP_PERSISTENT_SUBSCRIPTIONS
	default 2
	help
	  The maximum number of outgoing CASE sessions that can be simutaneously handled by the end device.

config CHIP_MAX_ACTIVE_DEVICES
	int "Maximum number of simultaneous connections over CASE"
	default CHIP_MAX_FABRICS if CHIP_PERSISTENT_SUBSCRIPTIONS
	default 4
	help
	  The maximum number of devices to which the Server implementers will be able to
	  concurrently connect over CASE and interact with.

config CHIP_SUBSCRIPTION_RESUMPTION_MIN_RETRY_INTERVAL
	int "Minimum subscription resumption interval in seconds"
	default 20
	depends on CHIP_PERSISTENT_SUBSCRIPTIONS
	help
	  The minimum interval in seconds before resuming a subscription that timed out.

config CHIP_SUBSCRIPTION_RESUMPTION_RETRY_MULTIPLIER
	int "The multiplier for subscription resumption retry in seconds"
	default 40
	depends on CHIP_PERSISTENT_SUBSCRIPTIONS
	help
	  The multiplier per subscription resumption retry attempt that is multiplied by the index of Fibonacci sequence
	  and added to CHIP_SUBSCRIPTION_RESUMPTION_MIN_RETRY_INTERVAL to obtain final wait time for next retry.

config CHIP_ENABLE_BDX_LOG_TRANSFER
	bool "Enable BDX transfer for diagnostic logs"
	help
	  Enables the BDX protocol for diagnostics log transfer purposes.

config CHIP_USE_OPENTHREAD_ENDPOINT
	bool "Use OpenThread TCP/UDP stack directly"
	depends on OPENTHREAD && !CHIP_WIFI
	help
	  Use OpenThread TCP/UDP stack directly instead of using Zephyr's networking layer.
	  This option is not supported when using WiFi.

config CHIP_SYSTEM_PACKETBUFFER_POOL_SIZE
	int "Packet buffer pool size"
	default 11
	help
	  Total number of packet buffers allocated by the stack for internal pool.

endif # CHIP
