#
#   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 "Connected Home over IP protocol stack"
	default n
	select CPLUSPLUS
	imply LIB_CPLUSPLUS
	imply REQUIRES_FULL_LIBC
	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
	help
	  This option enables Connected Home over IP libraries.

if CHIP

config CHIP_DEVICE_VENDOR_ID
	int "Device vendor ID"
	default 65521 # 0xFFF1
	range 0 65535
	help
	  Identifier of the device manufacturer, assigned by Connectivity Standards
	  Alliance. It is used in various CHIP areas, such as the Basic Information
	  cluster or OTA (Over-the-air update) image header.

config CHIP_DEVICE_PRODUCT_ID
	int "Device product ID"
	default 32768 # 0x8000
	range 0 65535
	help
	  Identifier of the product, assigned by the device manufacturer. It is used
	  in various CHIP areas, such as the Basic Information cluster or OTA
	  (Over-the-air update) image header.

config CHIP_DEVICE_SOFTWARE_VERSION
	int "Device software version"
	default 0
	range 0 4294967295
	help
	  A number identifying the software version. It is used in various CHIP
	  areas, such as the Basic Information cluster or OTA (Over-the-air update)
	  image header. Note that due to the rollback protection a device will only
	  accept a software update whose version is greater than the current one.

config CHIP_DEVICE_SOFTWARE_VERSION_STRING
	string "Device software version string"
	default "prerelease"
	help
	  A string between 1 and 64 characters that provides a user-friendly
	  description of the numeric software version specified in
	  CHIP_DEVICE_SOFTWARE_VERSION. It is used in various CHIP areas, such as
	  the Basic Information cluster or OTA (Over-the-air update) image header.

config CHIP_PROJECT_CONFIG
	string "Project configuration file for CHIP"
	help
	  Project configuration file for CHIP. If specified, CHIP generic
	  configuration files will include the project configuration file which can
	  be used to override any CHIP default or platform-specific settings.

config CHIP_OPENTHREAD_CONFIG
	string "Custom OpenThread configuration file"
	help
	  This option can be used to replace Zephyr-supplied OpenThread
	  configuration file with a custom one.

config CHIP_LIB_SHELL
	bool "Enable CHIP shell library"
	default n
	imply SHELL
	help
	  Link the application with the library containing CHIP shell commands.

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

config CHIP_BUILD_TESTS
	bool "Build CHIP unit tests"
	default n
	help
	  This option enables building CHIP unit tests.

config CHIP_ENABLE_PAIRING_AUTOSTART
	bool "Enable pairing autostart"
	default n
	help
	  Open pairing window automatically at application boot time.

config CHIP_ENABLE_DNSSD_SRP
	bool "Enable support for service registration"
	default y if NET_L2_OPENTHREAD
	imply OPENTHREAD_ECDSA
	imply OPENTHREAD_SRP_CLIENT
	help
	  Enables DNS-SD SRP client support

config CHIP_ENABLE_DNS_CLIENT
	bool "Enable support for DNS client"
	default y
	imply OPENTHREAD_DNS_CLIENT
	help
	  Enables DNS client support used for resolving and browsing services.

config CHIP_ENABLE_SLEEPY_END_DEVICE_SUPPORT
	bool "Enable sleepy end device support"
	default n
	depends on OPENTHREAD_MTD
	imply OPENTHREAD_MTD_SED
	help
	  Enables Thread Sleepy End Device 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
	  SED wake interval in milliseconds while the device is idle, meaning 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
	  SED wake interval in milliseconds while the device is active, meaning 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 Thread Synchronized Sleepy End Device support in Matter.

config CHIP_OTA_REQUESTOR
	bool "Enable OTA requestor"
	help
	  Enables OTA (Over-the-air) Requestor role that allows a device to perform
	  Device Firmware Upgrade by quering and downloading a new firmware image
	  from an external OTA Provider node.

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

config CHIP_COMMISSIONABLE_DEVICE_TYPE
	bool "Enable the device type subtype in commissionable node discovery record"
	depends on CHIP_ENABLE_DNSSD_SRP
	help
	  Enables including device type subtype in the commissionable node discovery record,
	  which allows filtering of the results to find the nodes that match the device type.

config CHIP_DEVICE_TYPE
	int "Device type"
	default 65535
	range 0 65535
	help
	  Type of device that uses the CHIP Device Type Identifier. The default value means invalid device type.

config CHIP_OPERATIONAL_TIME_SAVE_INTERVAL
	int "Interval of saving node operation time to flash in hours unit"
	default 10
	range 1 4294967295
	help
	  Interval in hours with which the node operation time is saved to the flash
	  memory. Selected value is a trade off between performing frequent saves to know
	  precisely operation time in case of device reboot and maximizing flash memory
	  lifetime.

config CHIP_CRYPTO_PSA
	bool "Use PSA crypto API for cryptographic operations"
	help
	  Use the backend for the Matter crypto layer that is based on PSA crypto
	  API instead of the default, based on legacy mbedTLS APIs.

config CHIP_FACTORY_RESET_ERASE_NVS
	bool "Erase NVS flash pages on factory reset"
	depends on SETTINGS_NVS
	help
	  When factory reset is requested, erase flash pages occupied by non-volatile storage
	  instead of removing Matter-related settings only. This 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, it is
	  advisable to set this option if all configuration, including device-specific
	  entries, is supposed to be cleared on a factory reset.

config CHIP_MALLOC_SYS_HEAP
	bool "Memory allocator based on Zephyr sys_heap"
	imply SYS_HEAP_RUNTIME_STATS
	help
	  Enable memory allocation functions, imitating with 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 custom one based on Zephyr sys_heap"
	default y
	help
	  Replace 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
	  This value 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

config APP_LINK_WITH_CHIP
	bool "Link 'app' with Connected Home over IP"
	default y
	help
	  Add Connected Home over IP header files to the 'app' include path
	  and link the 'app' with Connected Home over IP libraries.

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

if CHIP_OTA_IMAGE_BUILD

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

config CHIP_OTA_IMAGE_EXTRA_ARGS
	string "OTA image creator extra arguments"
	help
	  This option allows one to pass optional arguments to the ota_image_tool.py
	  script, used for building OTA image.

endif

config CHIP_EXTENDED_DISCOVERY
	bool "Enable extended discovery"
	help
	  Enables the device to advertise commissionable service when not in the
	  commissioning mode.

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

endif
