#
#   Copyright (c) 2022 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"

# See config/zephyr/Kconfig for full definition
config CHIP_OTA_REQUESTOR
	bool
	default y
	imply BOOTLOADER_MCUBOOT
	imply IMG_MANAGER

config CHIP_OTA_REQUESTOR_BUFFER_SIZE
	int "OTA Requestor image buffer size"
	default 256
	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

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

# Enable getting reboot reasons information
config HWINFO
    bool
    default y

config CHIP_FACTORY_DATA
	bool "Enable Factory Data support"
	select ZCBOR
	help
	  Enables support for reading factory data from flash memory partition.
	  It requires factory_data partition to exist.

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 Telink 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.
	  As a result a new output file factory_data.bin 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 .bin file"
	default y
	help
	  Enables merging generated factory data with the build target zephyr.bin file.
	  As a result, output file zephyr.bin 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 "Telink Semiconductor"
	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
