#
#   Copyright (c) 2021, 2025 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"
	help
	  Enables Matter libraries required for the Matter protocol stack to work.

if CHIP

config CHIP_WIFI
	bool "Enable Wi-Fi support"
	help
		Enable Wi-Fi support.

config CHIP_ETHERNET
	bool "Enable Ethernet support"
	help
		Enable Ethernet support.

config CHIP_APP_LOG_LEVEL
	int "Logging level in application"
    default LOG_DEFAULT_LEVEL if LOG
	default 4 # detail logging
	help
	  Sets the logging level in the Matter application. Use this configuration
	  option only within the application. To set the logging level for the
	  Matter stack, use the MATTER_LOG_LEVEL configuration option.

config MATTER_LOG_LEVEL
	int "Logging level in Matter stack"
	default 4
	help
	  Sets the logging level in Matter stack.

config CHIP_LOG_SIZE_OPTIMIZATION
	bool "Disable some detailed logs to decrease flash usage"
	help
	  Disables some log levels for specific Matter log modules that provide
	  information that is too detailed to be used in most cases. You can find
	  full configuration enabled by this option in the
	  platform CHIPPlatformConfig.h file.

config CHIP_DEBUG_SYMBOLS
	bool "Generate debug symbols"
	default y
	help
	  Enables building the application with debug symbols.

config CHIP_OPTIMIZE_DEBUG_LEVEL
	string "Debug optimization level"
	depends on DEBUG
	default "0"
	help
	  Set the optimization level to use when building with debug symbols.
	  This value is used with the -O compiler flag (e.g., -Og, -O0, -O1, -O2, -O3, -Os, -Oz).

config CHIP_STRIP_SYMBOLS
	bool "Strip symbols"
	help
	  Remove all symbol table and relocation information from the binary.

config CHIP_EXAMPLE_DEVICE_INFO_PROVIDER
	bool "Include default device information provider build"
	default y
    help
	  Enables the default device information provider implementation for Matter
	  examples.

config CHIP_IPV4
	bool "IPv4 support for Matter"
	help
	  If disabled, it allows to build the platform application
	  with IPv4 support independently of the Matter stack still
	  running over IPv6.

# 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.
	  (Macro value is in quotes.)

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. (Macro value is in quotes.)

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. (Macro value is in quotes.)

if "$(APPVERSION)"=""
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. (Macro value is in quotes.)
endif

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.
	  (Macro value is in quotes.)

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. (Macro value is in quotes.)

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. (Macro value is in quotes.)

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. (Macro value is in quotes.)

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
	  (Macro value is in quotes.)

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.
	  (Macro value is in quotes.)

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
	  (Macro value is in quotes.)

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. (Macro value is in quotes.)

# Matter optional features and parameters

config CHIP_ENABLE_PAIRING_AUTOSTART
	bool "Open commissioning window on boot"
	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_OTA_REQUESTOR_BUFFER_SIZE
	int "OTA Requestor image buffer size"
	default 256
	depends on CHIP_OTA_REQUESTOR
	help
	  Configures the 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
	help
	  Reboots the device automatically after downloading a new firmware update
	  to swap the old and the new firmware images. The reboot happens only when
	  a user consents to apply the firmware update.

choice CHIP_OTA_REQUEST_UPGRADE_TYPE
	prompt "Type of the upgrade to apply on new images"
	default CHIP_OTA_REQUEST_UPGRADE_TEST
	depends on CHIP_OTA_REQUESTOR

	config CHIP_OTA_REQUEST_UPGRADE_PERMANENT
		bool "Mark the image as permanent"
		help
		  The upgrade will be permanent on the next reboot.
		  No coming back to the old image.

	config CHIP_OTA_REQUEST_UPGRADE_TEST
		bool "Mark the image as a test"
		help
		  The upgrade will be marked as a test.
		  Image will be run on the next reboot, if confirmed it
		  becomes permanent, otherwise the new image is reverted.

endchoice

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

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_ENABLE_ACL_EXTENSIONS
	bool "Enable Access Control's Extension attribute into FeatureMap"
	help
	  Set Access Control's Extension attribute bit into the FeatureMap
	  attribute of the same cluster.

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.

choice CHIP_CRYPTO
	prompt "CHIP Crypto selection"
	default CHIP_CRYPTO_MBEDTLS

	config CHIP_CRYPTO_MBEDTLS
		bool "CHIP MbedTLS crypto"
		help
			Enables the implementation of the Matter cryptographic operations that is
			based on the mbedTLS crypto API.

	config CHIP_CRYPTO_PLATFORM
		bool "CHIP platform crypto"
		help
			Enables the implementation of the Matter cryptographic operations that is
			based on the platform crypto API.

	config CHIP_CRYPTO_PSA
		bool "CHIP PSA crypto"
		help
			Enables the implementation of the Matter cryptographic operations that is
			based on the PSA crypto API.

endchoice

choice CHIP_CRYPTO_SPAKE2P
	prompt "CHIP Crypto SPAKE2+ Selection"
	default CHIP_CRYPTO_SPAKE2P_MBEDTLS

	config CHIP_CRYPTO_SPAKE2P_MBEDTLS
		bool "SPAKE2+ default mbedtls"
		help
			Enables the implementation of the SPAKE2+ protocol
			based on the mbedTLS crypto API.

	config CHIP_CRYPTO_SPAKE2P_PSA
		bool "SPAKE2+ default PSA"
		help
			Enables the implementation of the SPAKE2+ protocol
			based on the PSA API.

	config CHIP_CRYPTO_SPAKE2P_CUSTOM
		bool "SPAKE2+ custom"
		help
			Enables the implementation of the SPAKE2+ protocol
			based on custom API.

endchoice

config CHIP_CRYPTO_PSA_AEAD_SINGLE_PART
	bool "Use PSA AEAD single-part API"
	depends on CHIP_CRYPTO_PSA
	help
	  When enabled, the single-part AEAD API is used with a large buffer
	  allocated on the stack. Otherwise, the multipart API path is used.

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"
	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. (Macro value is in quotes.)

config CHIP_STACK_LOCK_TRACKING
	string "Matter stack lock tracking"
	default "none"
	help
	  Enable Matter stack lock tracking. (Macro value is in quotes.)

config CHIP_NFC_ONBOARDING_PAYLOAD
	bool "Share onboarding payload in NFC tag"
	help
		Enables sharing onboarding payload in the NFC tag.

# Thread network features

if OPENTHREAD

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

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

config CHIP_SECONDARY_NETWORK_IF
	bool "Secondary Network Interface"
	help
	  Enable a secondary network commissioning interface.

config CHIP_THREAD_NETWORK_ENDPOINT_ID
	int "Thread Network Endpoint ID"
	default 2 if CHIP_SECONDARY_NETWORK_IF
	default 0
	help
	  Specify the endpoint ID of the Thread network.

config CHIP_OPENTHREAD_FTD
	bool "Enable OpenThread Full Thread Device (FTD) support"
	default y
	help
	  Configure the platform as an OpenThread Full Thread Device (FTD).

config CHIP_USE_OT_ENDPOINT
	bool "Use OpenThread TCP/UDP stack directly"
	help
	  Use the OpenThread TCP/UDP stack directly instead of another networking stack like LwIP.
	  This is useful for platforms that do not have LwIP but do have OpenThread.

endif # NET_L2_OPENTHREAD

config CHIP_ENABLE_ICD_SUPPORT
	bool "Matter Intermittently Connected Devices support"
	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 30000 if CHIP_ICD_LIT_SUPPORT
	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_SIT_SLOW_POLL_LIMIT
	int "Intermittently Connected Device slow polling interval limit for device in SIT mode (ms)"
	default 15000
	range 0 15000
	help
	  Provides the limit for Intermittently Connected Device slow polling interval in milliseconds while the
	  device is in the SIT mode. By spec, this value cannot exceed 15 s (spec 9.16.1.5). This value can be
	  used for the LIT device, to limit the slow poll interval used while temporarily working in the SIT 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_DURATION.

config CHIP_ICD_IDLE_MODE_DURATION
	int "Intermittently Connected Device idle mode duration (s)"
	default 300 if CHIP_ICD_LIT_SUPPORT
	default 120
	help
	  Provides the Intermittently Connected Device idle mode duration 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_DURATION
	int "Intermittently Connected Device active mode duration (ms)"
	default 300
	help
	  Provides the Intermittently Connected Device active mode duration 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 5000 if CHIP_ICD_LIT_SUPPORT
	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.
	  For LIT devices it cannot be set to a value smaller than 5000 ms.

config CHIP_ICD_LIT_SUPPORT
	bool "Intermittently Connected Device Long Idle Time support"
	select CHIP_ICD_CHECK_IN_SUPPORT
	select CHIP_ICD_UAT_SUPPORT
	help
	  Enables the Intermittently Connected Device Long Idle Time support in Matter.
	  It also selects the ICD Check-In and UAT features support that are mandatory for LIT device.

config CHIP_ICD_CHECK_IN_SUPPORT
	bool "Intermittently Connected Device Check-In protocol support"
	help
	  Enables the Check-In protocol support in Matter. It allows an ICD device to notify the registered
	  ICD clients that it is available for communication.

config CHIP_ICD_UAT_SUPPORT
	bool "Intermittently Connected Device User Active Mode Trigger support"
	help
	  Enables the User Active Mode Trigger (UAT) support in Matter. It allows the User to use application specific
	  means (e.g. button press) to trigger an ICD device to enter the active mode and become responsive.

config CHIP_ICD_DSLS_SUPPORT
	bool "Intermittently Connected Device Dynamic SIT LIT support"
	depends on CHIP_ICD_LIT_SUPPORT
	help
	  Enables the Dynamic SIT LIT support in Matter. It allows the application to dynamically switch between
	  SIT and LIT modes, as long as the requirements for these modes are met (e.g. device has at least one active ICD client).

config CHIP_ICD_CLIENTS_PER_FABRIC
	int "Intermittently Connected Device number of clients per fabric"
	default 2
	depends on CHIP_ICD_CHECK_IN_SUPPORT
	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.

config CHIP_ICD_REPORT_ON_ACTIVE_MODE
	bool "Intermittently Connected Device report on active mode"
	help
	  Enables an ICD to send data report to the subscribers on entering the active mode.

endif # CHIP_ENABLE_ICD_SUPPORT

config CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_TIMEOUT
	int "Timeout (ms) for switching from fast to slow advertising"
	default 30000
	help
	  The amount of time in milliseconds after which BLE should change its advertisements
	  from fast interval to slow interval.

config CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT
	int "BLE advertising timeout"
	default 900000
	help
	  The amount of time in milliseconds after which BLE advertisement should be disabled, counting
	  from the moment of slow advertisement commencement.

config CHIP_DEVICE_CONFIG_ENABLE_SED
	bool "Enable Sleepy End Device (SED) support"
	help
	  Enable Sleepy End Device configuration.

config CHIP_THREAD_SSED
	bool "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"
	depends on OPENTHREAD
	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
	  the platform. (Macro value is in quotes.)

# Wi-Fi network features

config CHIP_ENABLE_WIFI_STATION
    bool "Enable Wi-Fi Station mode"
	depends on CHIP_WIFI
    help
      Enable Wi-Fi station (client) mode for Matter-over-Wi-Fi devices.
      This allows the device to connect to an existing Wi-Fi network.

config CHIP_ENABLE_WIFI_AP
    bool "Enable Wi-Fi Access Point mode"
	depends on CHIP_WIFI
    help
      Enable Wi-Fi Access Point mode for SoftAP commissioning.
      This allows the device to create its own Wi-Fi network for onboarding.

config CHIP_WIFI_CONNECTION_RECOVERY_MINIMUM_INTERVAL
	int "Define the minimum connection recovery time interval in milliseconds"
	depends on CHIP_WIFI
	default 500
	help
		Specifies the minimum connection recovery interval (in milliseconds).

config CHIP_WIFI_CONNECTION_RECOVERY_MAXIMUM_INTERVAL
	int "Define the maximum connection recovery time interval in milliseconds"
	depends on CHIP_WIFI
	default 3600000 # 1 hour
	help
		Specifies the maximum connection recovery interval (in milliseconds).

config CHIP_WIFI_CONNECTION_RECOVERY_MAX_RETRIES_NUMBER
	int "Define the maximum amount of connection recovery occurrences"
	depends on CHIP_WIFI
	default 0
	help
		Specifies the maximum number of connection recovery attempts.
		If set to 0, no limitation is applied and attempts
		to recover the connection are performed indefinitely.

config CHIP_WIFI_CONNECTION_RECOVERY_JITTER
	int "Define the connection recovery jitter in milliseconds"
	depends on CHIP_WIFI
	default 2000
	help
		Specifies the maximum connection recovery jitter interval (in milliseconds).
		Once the wait time reaches the current maximum value (defined by CHIP_WIFI_CONNECTION_RECOVERY_MAXIMUM_INTERVAL),
		a random jitter interval is added to it to avoid periodicity. The random jitter is selected
		within a range of +/- the value of this option.

# Platform additions and configuration

config CHIP_SYSTEM_THREAD_LOCAL_STORAGE
	bool "Enable thread-local storage for Matter System Layer"
    default y
    help
      Enable use of thread-local storage (TLS) in the Matter System Layer.

config CHIP_TASK_PRIORITY
	int "Matter task priority"
	default 1
	help
	  Set the thread priority for the Matter main task (CHIP event loop).
	  Note: For Zephyr, this value is passed to K_PRIO_PREEMPT(). Lower values mean higher priority.
	  For FreeRTOS, higher values mean higher priority.

config CHIP_TASK_STACK_SIZE
	int "Matter task stack size"
	default 8192
	help
	  Set the stack size (in bytes) for the Matter main task (CHIP event loop).

config MAX_EVENT_QUEUE_SIZE
	int "Maximum Matter event queue size"
	default 100
	help
	  Set the maximum number of events that can be queued in the Matter event loop.

config CHIP_MRP_LOCAL_ACTIVE_RETRY_INTERVAL
	int "MRP Local Active Retry Interval (ms)"
	default 2000 if OPENTHREAD
	default 300
	help
	  Sets the local active retry interval (in milliseconds) for Matter Message Reliability Protocol (MRP).

config CHIP_MRP_LOCAL_IDLE_RETRY_INTERVAL
	int "MRP Local Idle Retry Interval (ms)"
	default 2000 if OPENTHREAD
	default 500
	help
	  Sets the local idle retry interval (in milliseconds) for Matter Message Reliability Protocol (MRP).

config CHIP_ENABLE_READ_CLIENT
	bool "Enable Read Client in the Interaction Model"
	help
	  Enable support for Read Client in the Interaction Model.
	  This config can be disabled for device types that do not require Read Client functionality.
	  Disabling this config can save flash and RAM space.

# Build system options

config CHIP_WITH_LWIP
	bool "CHIP with lwIP library available"
	help
	  Enable the lwIP library support in Matter.

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

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

config BUILD_FOR_HOST_UNIT_TEST
	bool "build host unit test"
	default y if CHIP_BUILD_TESTS
	help
	  Enable matter host unit test build.

config CHIP_BUILD_NL_FAULT_INJECTION
	bool "Enable NL fault injection for unit tests"
	default y
	depends on CHIP_BUILD_TESTS
	help
	  Enables nl fault injection Matter unit tests.

config CHIP_BLE_EXT_ADVERTISING
	bool "Bluetooth LE extended advertising"
	help
	  Enable Bluetooth LE extended advertising, which allows the device to advertise
	  Matter service over Bluetooth LE for a period of time longer than 15 minutes.
	  If this config is true, 
	  CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS define can be set up to 172800 seconds (48h).

config CHIP_BLE_ADVERTISING_DURATION
	int "Bluetooth LE advertising duration in minutes"
	range 15 2880 if CHIP_BLE_EXT_ADVERTISING
	range 0 15
	default 15
	help
	  Specify how long the device will advertise Matter service over Bluetooth LE in minutes.
	  If CHIP_BLE_EXT_ADVERTISING is set to false, the maximum duration time is 15 minutes, 
	  else the maximum duration time can be extended to 2880 minutes (48h).

config CHIP_CUSTOM_BLE_ADV_DATA
	bool "Use custom BLE advertising data"
    depends on BT
	help
	  Customization of BLE advertising data at the application layer

config CHIP_INET_ENABLE_TCP_ENDPOINT
	bool "Enable TCP endpoint in Inet layer"
	default y if CHIP_BUILD_TESTS
	help
	  Enable TCP endpoint support in the Matter Inet layer.

config NETWORK_LAYER_BLE
	bool "Should be replaced by CONFIG_BT. Keep it for backwards compatibility"
	default y if BT
	help
		Will be deprecated once application files replace CONFIG_NETWORK_LAYER_BLE with CONFIG_BT

endif # CHIP