#
#   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
	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_DISABLE_CHIPOBLE_ADVERTISING_WHEN_PROVISIONED
	bool "Disable CHIPoBLE advertising when device is fully provisioned"
	default y
	help
	  Disable CHIPoBLE advertising when the device achieves a fully provisioned state.

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

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

config CHIP_OTA_IMAGE_INCLUDE_MCUBOOT
	bool "Include MCUBoot in OTA image"
	depends on BOOTLOADER_MCUBOOT
	help
	  Include MCUBoot bootloader image in the generated Matter OTA image. This
	  option can be enabled if the device supports the bootloader update.

endif

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

endif
