#
#   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_LOOKUP_CACHE
	imply NVS_LOOKUP_CACHE_FOR_SETTINGS

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_APP_LOG_LEVEL
	int "Logging level in application"
	default LOG_DEFAULT_LEVEL
	depends on LOG
	help
	  Sets the logging level in the Matter application. Use this configuration
	  option only within the application. To set the logging level for the
	  Matter stack, use the MATTER_LOG_LEVEL configuration option.

config CHIP_NFC_COMMISSIONING
	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.

# See config/zephyr/Kconfig for full definition
config CHIP_OTA_IMAGE_BUILD
	bool
	default y if CHIP_OTA_REQUESTOR
	depends on SIGN_IMAGES
	select DFU_MULTI_IMAGE_PACKAGE_BUILD

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_MALLOC_SYS_HEAP
	default y if !ARCH_POSIX

config CHIP_FACTORY_DATA
	bool "Factory data provider"
	select ZCBOR
	imply FPROTECT
	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
	default y if CHIP_FACTORY_DATA
	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_NVS
	bool
	default y

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.

endif # CHIP
