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

menuconfig CHIP
	bool "Matter protocol stack"
	default n
	select CPLUSPLUS
	imply LIB_CPLUSPLUS
	imply REQUIRES_FULL_LIBC
	imply NEWLIB_LIBC_NANO
	imply CBPRINTF_LIBC_SUBSTS
	imply POSIX_API if !ARCH_POSIX
	imply EVENTFD if !ARCH_POSIX
	imply REBOOT
	imply ENTROPY_GENERATOR
	imply NET_UDP
	imply NET_IPV6
	imply NET_CONFIG_NEED_IPV6
	imply NET_SOCKETS
	imply NETWORKING
	imply HWINFO
	imply FLASH
	imply FLASH_MAP
	imply NVS
	imply SETTINGS
	help
	  Enables Matter libraries required for the Matter protocol stack to work.

if CHIP

# Device and firmware identifers

config CHIP_DEVICE_VENDOR_ID
	int "Device Vendor ID"
	default 65521 # 0xFFF1
	range 0 65535
	help
	  Provides the 16-bit numeric identifier of the device manufacturer,
	  assigned by Connectivity Standards Alliance. The identifier is exposed as
	  an attribute of the Basic Informationcluster, and included in the header
	  of the generated Matter Over-the-air (OTA) update image.

config CHIP_DEVICE_VENDOR_NAME
	string "Device vendor name"
	help
	  Provides a human-readable name of the device manufacturer. The name is
	  exposed as an attribute of the Basic Information cluster.

config CHIP_DEVICE_PRODUCT_ID
	int "Product ID"
	default 32768 # 0x8000
	range 0 65535
	help
	  Provides the 16-bit numeric identifier of the product, assigned by the
	  device manufacturer. The identifier is exposed as an attribute of the
	  Basic Information cluster, and included in the header of the generated
	  Matter over-the-air (OTA) update image.

config CHIP_DEVICE_PRODUCT_NAME
	string "Product name"
	default "not-specified"
	help
	  Provides a human-readable product name, such as the model number, assigned
	  by the device manufacturer. The name is exposed as an attribute of the
	  Basic Information cluster.

config CHIP_DEVICE_HARDWARE_VERSION
	int "Hardware version"
	default 0
	help
	  Provides the 16-bit hardware version number, assigned by the device
	  manufacturer. The number is exposed as an attribute of the Basic
	  Information cluster.

config CHIP_DEVICE_HARDWARE_VERSION_STRING
	string "Hardware version string"
	default "prerelease"
	help
	  Provides a human-readable representation of the hardware version number.
	  This must be an ASCII string of a length between 1 and 64 characters. The
	  hardware version string is exposed as an attribute of the Basic
	  Information cluster.

config CHIP_DEVICE_SOFTWARE_VERSION
	int "Software version"
	default 0
	range 0 4294967295
	help
	  Provides the 32-bit software version number. The number is exposed as an
	  attribute of the Basic Information cluster, and included in the header of
	  the generated Matter Over-the-air (OTA) update image. The exact numbering
	  scheme is up to the device manufacturer. However, when using the Matter
	  OTA mechanism, only updates to higher versions than the current one are
	  accepted.

config CHIP_DEVICE_SOFTWARE_VERSION_STRING
	string "Software version string"
	default "prerelease"
	help
	  Provides a human-readable representation of the software version number.
	  This must be an ASCII string of a length between 1 and 64 characters. The
	  software version string is exposed as an attribute of the Basic
	  Information cluster, and included in the header of the generated Matter
	  over-the-air (OTA) update image.

config CHIP_DEVICE_MANUFACTURING_DATE
	string "Manufacturing date (ISO 8601 format)"
	default "2022-01-01"
	help
	  Provides the device manufacturing date in the ISO 8601 format: YYYY-MM-DD.

config CHIP_DEVICE_SERIAL_NUMBER
	string "Device serial number"
	default "11223344556677889900"
	help
	  Provides a human-readable representation of the device serial number that
	  uniquely identifies the device. This must be an ASCII string of no more
	  than 32 characters.

config CHIP_DEVICE_ROTATING_DEVICE_UID
	string "Rotating device ID unique ID (HEX format)"
	default "91a9c12a7c80700a31ddcfa7fce63e44"
	help
	  Provides a unique identifier of the device. This ID is used to derive the
	  rotating device identifier, which allows commissioners to discover the
	  device in a privacy-preserving way. The identifier must be a string of at
	  least 16 bytes encoded in HEX.

config CHIP_DEVICE_TYPE
	int "Primary device type"
	default 65535
	range 0 65535
	help
	  Provides the primary device type implemented by the node. This must be one
	  of the device type identifiers defined in the Matter Device Library
	  specification.

config CHIP_DEVICE_DISCRIMINATOR
	hex "Device pairing discriminator"
	default 0xF00
	help
	  Provides a 12-bit identifier that is used to discover the device during
	  the commissioning.

config CHIP_DEVICE_SPAKE2_PASSCODE
	int "SPAKE2+ passcode"
	default 20202021
	range 1 99999998
	help
	  Provides a pairing passcode. This is a 27-bit unsigned integer that serves
	  as a proof of possession during the commissioning. The passcode must be
	  a value between 1 and 99999998, excluding the following invalid passcodes:
	  00000000, 11111111, 22222222, 33333333, 44444444, 55555555,
	  66666666, 77777777, 88888888, 99999999, 12345678, 87654321.

config CHIP_DEVICE_SPAKE2_IT
	int "SPAKE2+ iteration count"
	default 1000
	help
	  Provides the SPAKE2+ iteration count, which is one of the input parameters
	  for the PBKDF operation, used to generate the SPAKE2+ verifier.

config CHIP_DEVICE_SPAKE2_SALT
	string "SPAKE2+ salt (base64 format)"
	default "U1BBS0UyUCBLZXkgU2FsdA=="
	help
	  Provides the SPAKE2+ salt, which is one of the input parameters for the
	  PBKDF operation, used to generate the SPAKE2+ verifier. The salt must be
	  of a length between 16 and 32 bytes and it should be randomly generated
	  for each SPAKE2+ passcode.

config CHIP_DEVICE_SPAKE2_TEST_VERIFIER
	string "SPAKE2+ verifier for testing purposes (base64 format)"
	default "uWFwqugDNGiEck/po7KHwwMwwqZgN10XuyBajPGuyzUEV/iree4lOrao5GuwnlQ65CJzbeUB49s31EH+NEkg0JVI5MGCQGMMT/SRPFNRODm3wH/MBiehuFc6FJ/NH6Rmzw=="
	help
	  Provides the SPAKE2+ verifier that was generated using the configured
	  SPAKE2+ passcode, iteration count and salt. This configuration option can
	  be used for development or testing purposes. The default value was
	  generated using the following command:
	  ./scripts/tools/spake2p/spake2p.py gen-verifier -i 1000 -s U1BBS0UyUCBLZXkgU2FsdA== -p 20202021

config CHIP_DEVICE_ENABLE_KEY
	string "Enable Key for triggering test actions (HEX format)"
	default "00112233445566778899AABBCCDDEEFF"
	help
	  Provides the Enable Key, which is a 16-byte value encoded in HEX that
	  must be provided in the TestEventTrigger command to trigger a requested
	  test action. This value is used during certification tests, and should not
	  be present on devices in production environment.

# Matter optional features and parameters

config CHIP_ENABLE_PAIRING_AUTOSTART
	bool "Open commissioning window on boot"
	default n
	help
	  Opens the commissioning window automatically at application boot time if
	  the node is not yet commissioned.

config CHIP_OTA_REQUESTOR
	bool "OTA Software Update Requestor"
	help
	  Enables over-the-air (OTA) Requestor role that allows the node to perform
	  Device Firmware Upgrade by quering and downloading a new firmware image
	  from a peer OTA Provider node.

config CHIP_ROTATING_DEVICE_ID
	bool "Generate rotating device ID"
	help
	  Enables the rotating device identifier that provides a non-trackable
	  identifier. The identifier is unique per device and rotates at pre-defined
	  moments.

config CHIP_COMMISSIONABLE_DEVICE_TYPE
	bool "Include device type subtype in commissionable node discovery record"
	help
	  Includes the device type subtype in the commissionable node discovery
	  record. This allows a commissioner to find the node when looking for
	  a specific device type.

config CHIP_EXTENDED_DISCOVERY
	bool "Extended discovery"
	help
	  Enables advertising of the commissionable node service even if the node
	  does not have the commissioning window open.

config CHIP_OPERATIONAL_TIME_SAVE_INTERVAL
	int "Total operational time save interval (hours unit)"
	default 10
	range 1 4294967295
	help
	  Provides an interval in hours with which the node operational time is
	  saved to the flash memory. The provided value is a trade-off between
	  performing frequent saves to know the precise operational time (in case of
	  device reboot) and maximizing the flash memory lifetime.

config CHIP_CRYPTO_PSA
	bool "Use PSA crypto API for cryptographic operations"
	help
	  Enables the implementation of the Matter cryptographic operations that is
	  based on the PSA crypto API (instead of the default implementation, which
	  is based on the legacy mbedTLS APIs).

config CHIP_PERSISTENT_SUBSCRIPTIONS
	bool "Persistent subscriptions"
	help
	  Persists Matter subscriptions on the publisher node. This feature allows
	  a Matter node to faster get back to the previous operation after it went
	  offline, for example, due to a power outage. That is, the node can use the
	  persisted subscription information to quickly re-establish the previous
	  subscriptions instead of waiting for the subscriber node to realize that
	  the publisher is alive again.

config CHIP_LIB_SHELL
	bool "Matter shell commands"
	default n
	imply SHELL
	help
	  Enables linking the application with the library that contains Matter
	  shell commands.

config CHIP_PROJECT_CONFIG
	string "Project configuration file for Matter"
	help
	  Provides a path to the project configuration file for Matter. The path can
	  be either absolute or relative to the application directory. If specified,
	  Matter's generic configuration files will include the project
	  configuration file that can be used to override any of Matter's default or
	  platform-specific settings.

# Thread network features

config CHIP_ENABLE_DNSSD_SRP
	bool "OpenThread Service Registration Protocol"
	default y if NET_L2_OPENTHREAD
	imply OPENTHREAD_ECDSA
	imply OPENTHREAD_SRP_CLIENT
	help
	  Enables using the OpenThread SRP client for the Matter service
	  advertising.

config CHIP_ENABLE_DNS_CLIENT
	bool "OpenThread DNS client"
	default y if NET_L2_OPENTHREAD
	imply OPENTHREAD_DNS_CLIENT
	help
	  Enables using the OpenThread DNS client for the Matter service discovery.

config CHIP_ENABLE_SLEEPY_END_DEVICE_SUPPORT
	bool "Thread Sleepy End Device support"
	default n
	depends on OPENTHREAD_MTD
	imply OPENTHREAD_MTD_SED
	help
	  Enables the Thread Sleepy End Device (SED) support in Matter.

if CHIP_ENABLE_SLEEPY_END_DEVICE_SUPPORT

config CHIP_SED_IDLE_INTERVAL
	int "Sleepy End Device idle interval (ms)"
	default 1000
	help
	  Provides the Sleepy End Device wake interval in milliseconds while the
	  device is idle (which means that there is no active exchange to or from
	  the device, and its commissioning window is closed).

config CHIP_SED_ACTIVE_INTERVAL
	int "Sleepy End Device active interval (ms)"
	default 200
	help
	  Provides the Sleepy End Device wake interval in milliseconds while the
	  device is active (which means that there is an active exchange to or from
	  the device, or its commissioning window is open).

endif # CHIP_ENABLE_SLEEPY_END_DEVICE_SUPPORT

config CHIP_THREAD_SSED
	bool "Enable Thread Synchronized Sleepy End Device support"
	depends on OPENTHREAD_CSL_RECEIVER && CHIP_ENABLE_SLEEPY_END_DEVICE_SUPPORT
	help
	  Enables the Thread Synchronized Sleepy End Device support in Matter.

config CHIP_OPENTHREAD_CONFIG
	string "Custom OpenThread configuration file"
	help
	  Provides a path to an OpenThread configuration file. The path can be
	  either absolute or relative to the application directory. When this option
	  is specified, it replaces the OpenThread configuration file supplied by
	  Zephyr.

# Platform additions and configuration

config CHIP_CERTIFICATION_DECLARATION_STORAGE
	bool "Certification Declaration settings storage"
	depends on CHIP_FACTORY_DATA
	help
	  Enables storing of the Certification Declaration in Zephyr settings
	  instead of using the hardcoded value from firmware. This option also adds
	  support for including new Certification Declaration into a firmware
	  update image package that is sent as part of the 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
	  Provides the image ID of the Certification Declaration image for sending
	  it as part of the OTA software update.

endif

config CHIP_FACTORY_RESET_ERASE_NVS
	bool "Erase NVS flash pages on factory reset"
	depends on SETTINGS_NVS
	help
	  Erases flash pages occupied by non-volatile storage when a factory reset
	  is requested, instead of removing Matter-related settings only. Enabling
	  this option provides a more robust factory reset mechanism and allows to
	  regain the original storage performance if any firmware issue has brought
	  it to an unexpected state. For this reason, set this option if the entire
	  configuration is supposed to be cleared on a factory reset, including
	  device-specific entries.

config CHIP_MALLOC_SYS_HEAP
	bool "Memory allocator based on Zephyr sys_heap"
	imply SYS_HEAP_RUNTIME_STATS
	help
	  Enables memory allocation functions that imitate the default malloc,
	  calloc, realloc and free, based on sys_heap from Zephyr RTOS.

if CHIP_MALLOC_SYS_HEAP

config CHIP_MALLOC_SYS_HEAP_OVERRIDE
	bool "Override default allocator with memory allocator based on Zephyr sys_heap"
	default y
	help
	  Replaces the default memory allocation functions (such as malloc, calloc,
	  realloc, free, and their reentrant versions) with their counterparts based
	  on sys_heap from Zephyr RTOS.

config CHIP_MALLOC_SYS_HEAP_SIZE
	int "Heap size used by memory allocator based on Zephyr sys_heap"
	default 16384 # 16kB
	help
	  Provides a value that controls how much of the device RAM is reserved for
	  the heap used by the memory allocation functions based on sys_heap from
	  Zephyr RTOS.

endif

module = MATTER
module-str = Matter
source "${ZEPHYR_BASE}/subsys/logging/Kconfig.template.log_config"

# Build system options

config APP_LINK_WITH_CHIP
	bool "Link application with Matter libraries"
	default y
	help
	  Adds Matter directories to the 'app' target include paths and links the
	  'app' target with Matter libraries.

config CHIP_PW_RPC
	bool "Pigweed RPC library"
	default n
	help
	  Links the application with the libraries containing Pigweed RPC
	  functionalities.

config CHIP_BUILD_TESTS
	bool "Build Matter unit tests"
	default n
	help
	  Enables building Matter unit tests.

config CHIP_OTA_IMAGE_BUILD
	bool "Generate OTA image"
	help
	  Enables building Matter over-the-air (OTA) update image.

if CHIP_OTA_IMAGE_BUILD

config CHIP_OTA_IMAGE_FILE_NAME
	string "OTA image file name"
	default "matter.ota"
	help
	  Provides the file name of the generated Matter OTA image.

config CHIP_OTA_IMAGE_EXTRA_ARGS
	string "OTA image creator extra arguments"
	help
	  Provides optional arguments to the ota_image_tool.py script, used for
	  building Matter OTA image.

endif

endif
