#
#   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 && !CHIP_NRF_PLATFORM
	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 NET_SOCKETS_POSIX_NAMES if !ARCH_POSIX && CHIP_NRF_PLATFORM
	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.

config CHIP_DEVICE_PRODUCT_FINISH
	string "Description of the product's external case finish method"
	default "other"
	help
	  provides a description of the product's external case finish method.
	  Possible values:
	  other; matte; satin; polished; rugged; fabric

config CHIP_DEVICE_PRODUCT_COLOR
	string "Description of the product's primary color"
	help
	  provides a description of the product's primary color.
	  Possible values:
	  black; navy; green; teal; maroon; purple; olive; gray; blue; lime; 
	  aqua; red; fuchsia; yellow; white; nickel; chrome; brass; cooper; 
	  silver; gold.

# 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_STATISTICS
	bool "Resource usage statistics"
	help
	  Enables tracking the current and the top usage of critical resources used
	  by the Matter stack, such as packet buffers, timers or exchange contexts.

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_ICD_SUPPORT
	bool "Matter Intermittently Connected Devices support"
	default n
	imply OPENTHREAD_MTD_SED if NET_L2_OPENTHREAD
	help
	  Enables the Intermittently Connected Device (ICD) support in Matter.

if CHIP_ENABLE_ICD_SUPPORT

config CHIP_ICD_SLOW_POLL_INTERVAL
	int "Intermittently Connected Device slow polling interval (ms)"
	default 1000
	help
	  Provides the Intermittently Connected Device slow polling interval in milliseconds while the
	  device is in the idle mode. It determines the fastest frequency at which the device will be able
	  to receive the messages in the idle mode.

config CHIP_ICD_FAST_POLLING_INTERVAL
	int "Intermittently Connected Device fast polling interval (ms)"
	default 200
	help
	  Provides the Intermittently Connected Device fast polling interval in milliseconds while the
	  device is in the active mode. It determines the fastest frequency at which the device will be able
	  to receive the messages in the active mode. The CHIP_ICD_FAST_POLLING_INTERVAL shall be smaller than
	  CHIP_ICD_ACTIVE_MODE_INTERVAL.

config CHIP_ICD_IDLE_MODE_INTERVAL
	int "Intermittently Connected Device idle mode interval (s)"
	default 120
	help
	  Provides the Intermittently Connected Device idle mode interval in seconds.
	  It determines the maximum amount of time the device can stay in the idle mode, which means the
	  device may be unreachable and not able to receive messages.

config CHIP_ICD_ACTIVE_MODE_INTERVAL
	int "Intermittently Connected Device active mode interval (ms)"
	default 300
	help
	  Provides the Intermittently Connected Device active mode interval in milliseconds.
	  It determines the minimum amount of time the device shall stay in the active mode.

config CHIP_ICD_ACTIVE_MODE_THRESHOLD
	int "Intermittently Connected Device active mode threshold (ms)"
	default 300
	help
	  Provides the Intermittently Connected Device active mode threshold in milliseconds.
	  It determines the minimum amount of time the device shall stay in the active mode after the network activity.

config CHIP_ICD_CLIENTS_PER_FABRIC
	int "Intermittently Connected Device number of clients per fabric"
	default 2
	help
	  Provides the Intermittently Connected Device number of clients per fabric. It determines the maximum number
	  of clients per fabric that can be registered to receive notification from a device if their subscription is lost.

endif # CHIP_ENABLE_ICD_SUPPORT

config CHIP_THREAD_SSED
	bool "Enable Thread Synchronized Sleepy End Device support"
	depends on OPENTHREAD_CSL_RECEIVER && CHIP_ENABLE_ICD_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 12288 # 12kB
	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.

config CHIP_MALLOC_SYS_HEAP_WATERMARKS_SUPPORT
	bool "Enable support for heap watermarks based on Zephyr sys_heap"
	help
	  Enables support for getting current heap high watermark and resetting 
	  watermarks. 

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
