#
#   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"
	select CHIP_SDK_DEPENDENCIES
	help
	  Enables Matter libraries required for the Matter protocol stack to work.

if CHIP

config CHIP_APP_LOG_LEVEL
	int "Logging level in application"
	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 DEBUG
	bool "Build Matter stack with debugging enabled"
	help
		Build Matter stack with debugging enabled.

# 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 1
	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 "1.0"
	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.)

config CHIP_DEVICE_SOFTWARE_VERSION
	int "Software version"
	default 1
	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 "1.4"
	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.)

config CHIP_DEVICE_MANUFACTURING_DATE
	string "Manufacturing date (ISO 8601 format)"
	default "2024-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
	int "Device pairing discriminator"
	default 3840
	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 10000
	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 "UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA="
	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"
	default y
	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_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.

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.


config CHIP_ENABLE_ICD_SUPPORT
	bool "Matter Intermittently Connected Devices support"
	help
	  Enables the Intermittently Connected Device (ICD) support in Matter.

config CHIP_ICD_SLOW_POLL_INTERVAL
	int "Intermittently Connected Device slow polling interval (ms)"
	default 30000 if CHIP_ICD_LIT_SUPPORT
	default 2000
	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 500
	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.

if CHIP_ENABLE_ICD_SUPPORT

config CHIP_ICD_IDLE_MODE_DURATION
	int "Intermittently Connected Device idle mode duration (s)"
	default 600
	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_IDLE_MODE_INTERVAL_MS
	int "Intermittently Connected Device idle mode interval (ms)"
	default 2000
	help
	  Provides the ICD idle mode interval in milliseconds.


config CHIP_ICD_ACTIVE_MODE_DURATION
	int "Intermittently Connected Device active mode duration (ms)"
	default 10000
	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_INTERVAL_MS
	int "Intermittently Connected Device active mode interval (ms)"
	default 500
	help
	  Provides the ICD active mode interval in milliseconds.

config CHIP_ICD_ACTIVE_MODE_THRESHOLD
	int "Intermittently Connected Device active mode threshold (ms)"
	default 5000
	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 "Intermittenly Connected Device Long Idle Time support"
	imply CHIP_ICD_CHECK_IN_SUPPORT
	imply CHIP_ICD_UAT_SUPPORT
	help
	  Enables the Intermittently Connected Device Long Idle Time support in Matter.
	  It also implies the ICD Check-In and UAT features support that are mandatory for LIT device.

config CHIP_ICD_CHECK_IN_SUPPORT
	bool "Intermittenly 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 "Intermittenly 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_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

if NET_L2_OPENTHREAD

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"
	#depends on NET_L2_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
	  Zephyr.

config CHIP_OPENTHREAD_FTD
	bool "App is an OpenThread FTD"
	default y
	help
	  App is an OpenThread FTD

config CHIP_USE_OT_ENDPOINT
	bool "Use OpenThread TCP/UDP stack directly"
	default y if !HAVE_LWIP
	help
	  Use OpenThread TCP/UDP stack directly

endif # NET_L2_OPENTHREAD

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

# Build system options

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

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 USE_CHIP_DATA_MODEL_INTERFACE
    bool "Use a DataModel::Provider interface for data access"
    help
      This enables a level of indiraction in the CHIP interaction model engine in 
      accessing underlying data and executing operations such as 
      wildcard-expansion, read, write and invoke.

config MRP_LOCAL_ACTIVE_RETRY_INTERVAL
	string "MRP local active retry interval"
	default "(2000_ms32)"
	help
	  Specify the retransmission interval of the Message Reliable Protocol (MRP) messages.

config HAVE_LWIP
	bool "Have the lwIP library available"
	default y
	help
	  Have the lwIP library available

endif # CHIP

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