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