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

if CHIP

config CHIP_APP_LOG_LEVEL
	int "Set logging level in application"
	default LOG_DEFAULT_LEVEL
	help
	  Sets the logging level in Matter application. 
	  This config should be used only within application.
	  To set the logging level for Matter stack use MATTER_LOG_LEVEL 
	  config.

config CHIP_NFC_COMMISSIONING
	bool "Enable NFC commissioning support"
	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 NFC commissioning by sharing onboarding payload in 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 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
	  When a user consents to apply a firmware update, and the update package is
	  downloaded, reboot the device automatically to swap the old and the new
	  firmware images.

# 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
	  Build the application with debug symbols.

config CHIP_FACTORY_DATA
	bool "Enable Factory Data support"
	select ZCBOR
	select FPROTECT
	help
	  Enables support for reading factory data from flash memory partition.
	  It requires factory_data partition to exist in the partition manager 
	  configuration file pm_static.yml.

config CHIP_FACTORY_DATA_CUSTOM_BACKEND
	bool "Enable Factory Data custom backend"
	depends on !CHIP_FACTORY_DATA
	help
	  Enables user custom factory data implementation. It cannot be used
	  with the CHIP_FACTORY_DATA that enabled default nRF Connect factory data
	  implementation.

config CHIP_FACTORY_DATA_BUILD
	bool "Enable Factory Data build"
	default n
	help
	  Enables generation of factory data during the building.
	  It requires factory_data partition to exist in the partition manager 
	  configuration file pm_static.yml.
	  As a result a new output file factory_data.hex will be created.

config CHIP_FACTORY_DATA_VERSION
	int
	default 1
	help
	  The Factory data version contains a current version of a factory data 
	  parameter set that the user cannot change. 
	  After moving to the next version of the factory data set, change the default value. 
	  This config is used to validate the version of a factory data set on a device-side 
	  with the version of factory data saved in the Flash memory.

if CHIP_FACTORY_DATA_BUILD

# Factory data definitions
config CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE
	bool "Enable merging generated factory data with the build target .hex file"
	default y
	help
	  Enables merging generated factory data with the build target merged.hex file.
	  As a result, a new output file merged.hex will consist of all partitions including 
	  factory data.

# Use default certificates without generating or providing them
config CHIP_FACTORY_DATA_USE_DEFAULT_CERTS
	bool "Use default certificates located in Matter repository"
	default y
	help
	  Pre-generated certificates can be used for development purpose.
	  This config includes default pre-generated certificates 
	  which are located in credentials/development/attestation/ directory 
	  instead of generating new ones.
	  If this config is set to `n` new certificates will be generated.

# Configs for SPAKE2 generation
config CHIP_FACTORY_DATA_GENERATE_SPAKE2_VERIFIER
	bool "Enable spake2 verifier generation"
	help
	  Enables generation of spake2 verifier according to 
	  given iteration counter, salt and passcode.
	  To generate Spake2 verifier a spake2p executable must be available 
	  from system variables environment.

config CHIP_DEVICE_GENERATE_ROTATING_DEVICE_UID
	bool "Enable generation of a new Rotating device id unique id"
	default y
	help
	  Enables generation of a new Rotating device id unique id.

endif #CHIP_FACTORY_DATA_BUILD

# Factory data parameters
config CHIP_DEVICE_SERIAL_NUMBER
	string "Serial number of device"
	default "11223344556677889900"
	help
	  A serial number parameter defines an unique number of manufactured device.
	  Maximum length of serial number is 32 characters.

config CHIP_DEVICE_VENDOR_NAME
	string "Human-readable vendor name"
	default "Nordic Semiconductor ASA"
	help
	  A human-readable vendor name which provides a simple string 
	  containing identification of device's vendor for the Content APP.
	  This information should be included in the Matter Basic Cluster.

config CHIP_DEVICE_PRODUCT_NAME
	string "Human-readable product name"
	default "not-specified"
	help
	  A human-readable product name which provides a simple string 
	  containing identification of the product for the Content APP.

config CHIP_DEVICE_MANUFACTURING_DATE
	string "Manufacturing date in ISO 8601"
	default "2022-01-01"
	help
	  A manufacturing date specifies the date that the device was manufactured.
	  The format used for providing a manufacturing date is ISO 8601 e.g. YYYY-MM-DD.
	
config CHIP_DEVICE_HARDWARE_VERSION
	int "Integer representation of hardware version"
	default 0
	help
	  A hardware version number specifies the version number
	  of the hardware of the device. The meaning of its value, 
	  and the versioning scheme, are vendor defined.

config CHIP_DEVICE_HARDWARE_VERSION_STRING
	string "user-friendly string representation of hardware version"
	default "prerelease"
	help
	  A hardware version string parameter specifies the version
	  of the hardware of the device as a more user-friendly value
	  than that represented by the hardware version integer value.
	  The meaning of its value, and the versioning scheme, are
	  vendor defined.

config CHIP_DEVICE_DISCRIMINATOR
	hex "Device pairing discriminator"
	default 0xF00
	help
	  A 12-bit value matching the field of the same name in
	  the setup code. Discriminator is used during
	  a discovery process.

config CHIP_DEVICE_SPAKE2_PASSCODE 
	int "Spake2+ passcode"
	default 20202021
	range 1 99999998
	help
	  A pairing passcode is a 27-bit unsigned integer which serves
	  as a proof of possession during commissioning. 
	  Its value shall be restricted to the values 0x0000001 to 0x5F5E0FE
	  (00000001 to 99999998 in decimal), excluding the invalid Passcode values:
	  - 00000000, 11111111, 22222222, 33333333, 44444444, 55555555, 
	  66666666, 77777777, 88888888, 99999999, 12345678, 87654321.

config CHIP_DEVICE_SPAKE2_IT
	int "Spake2+ iteration count"
	default 1000
	help
	  The Spake2 iteration count is associated with the ephemeral
	  PAKE passcode verifier to be used for the commissioning.
	  The iteration count is used as a crypto parameter to process
	  spake2 verifier.

config CHIP_DEVICE_SPAKE2_SALT
	string "Spake2+ salt in string format"
	default "U1BBS0UyUCBLZXkgU2FsdA=="
	help
	  The spake2 salt is random data that is used as an additional input 
	  to a one-way function that “hashes” data. 
	  A new salt should be randomly generated for each password.
	  The minimum length of spake2 salt is 16 Bytes.
	  The maximum length of spake2 salt is 32 Bytes.

config CHIP_DEVICE_SPAKE2_TEST_VERIFIER
	string "Testing spake2+ verifier"
	default "uWFwqugDNGiEck/po7KHwwMwwqZgN10XuyBajPGuyzUEV/iree4lOrao5GuwnlQ65CJzbeUB49s31EH+NEkg0JVI5MGCQGMMT/SRPFNRODm3wH/MBiehuFc6FJ/NH6Rmzw=="
	help
	  The spake 2 verifier generated using default SPAKE2 salt, 
	  iteration count and passcode. This value can be used for development
	  or testing purposes.
	  Generated with: 
	  spake2p gen-verifier -o - -i 1000 -s "U1BBS0UyUCBLZXkgU2FsdA==" -p 20202021

config CHIP_DEVICE_ROTATING_DEVICE_UID
	string  "A rotating device id unique id"
	default "91a9c12a7c80700a31ddcfa7fce63e44"
	help
	  A device rotating id unique id which will be generated if
	  this config is not set in prj.conf file.

config CHIP_DEVICE_ENABLE_KEY
	string "Enable Key for triggering test actions on device"
	default "00112233445566778899AABBCCDDEEFF"
	help
	  The Enable Key is a 128-bit value that triggers test action 
	  while invoking the TestEventTrigger Command. 
	  Pattern: "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
	  This value is used during Certification Tests,
	  and should not be present on production devices.

config CHIP_CERTIFICATION_DECLARATION_STORAGE
	bool "Enable storing Certification Declaration"
	depends on CHIP_FACTORY_DATA
	help
	  Enables storing Certification Declaration in Zephyr settings
	  instead of using hardcoded value from firmware. It also adds
	  support for including new Certification Declaration into a firmware
	  update image package sent via OTA Software Update.

if CHIP_CERTIFICATION_DECLARATION_STORAGE

config CHIP_CERTIFiCATION_DECLARATION_OTA_IMAGE_ID
	int "Certification declaration OTA image id"
	default 205 #0xcd
	help
	  The image id of Certification Declaration image
	  for sending it via OTA Software Update purposes.

endif

# See config/zephyr/Kconfig for full definition
config CHIP_FACTORY_RESET_ERASE_NVS
	bool
	default y if CHIP_FACTORY_DATA || CHIP_FACTORY_DATA_CUSTOM_BACKEND

endif
