#
#    Copyright (c) 2020-2022 Project CHIP Authors
#    Copyright (c) 2018 Nest Labs, Inc.
#    All rights reserved.
#
#    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.
#
#    Description:
#      Configuration options CHIP within the ESP32 ESP-IDF environment.
#

#
# Options for configuring CHIP core
#
menu "CHIP Core"

    menu "General Options"

        config MAX_EXCHANGE_CONTEXTS
            int "Max CHIP Exchange Contexts"
            range 0 65535
            default 8
            help
                The maximum number of simultaneously active CHIP exchange contexts.

                An exchange context object is used to track the state of an ongoing CHIP message
                exchange (conversation) with a peer, e.g. a cloud service, a mobile application, or
                another device.

        config MAX_BINDINGS
            int "Max Bindings"
            range 0 65535
            default 8
            help
                The maximum number of simultaneously active CHIP Binding objects.

                A Binding object is used to configure how the local device communicates with
                a remote entity, be it a cloud service, a mobile application, or another device.

        config MAX_FABRICS
            int "Max Fabrics"
            range 5 255
            default 5
            help
                The maxinum number of fabrics the device can participate in.

                Each fabric can provision the device with its unique operational credentials and
                manage its own access control lists.

        config MAX_PEER_NODES
            int "Max Peer Nodes"
            range 0 65535
            default 16
            help
                The maximum number of peer nodes that the local node can communicate with using
                connectionless communication (e.g. UDP).  This value sizes a table that tracks
                communication state with peer nodes by their CHIP node id.

        config MAX_UNSOLICITED_MESSAGE_HANDLERS
            int "Max Unsolicited Message Handlers"
            range 0 65535
            default 8
            help
                The maximum number of simultaneously active unsolicited message handlers.

                Applications or protocol libraries acting as a CHIP server register unsolicited
                message handlers with the CHIP message layer to direct incoming messages to
                their code.

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

        config USE_MINIMAL_MDNS
            bool "Use the minimal mDNS implementation shipped in the CHIP library"
            default y
            help
                The CHIP library is shipped with a minimal mDNS implementation,
                enable this config to use it rather than the mDNS library in IDF.

        config ENABLE_CHIP_SHELL
            bool "Use the CHIP shell library"
            default n
            help
                Link the application against CHIP interactive shell.

        config ENABLE_CHIP_CONTROLLER_BUILD
            bool "Enable chip-controller build"
            default n
            help
                This option enables chip-controller building.

        config DISABLE_IPV4
            bool "Disable IPv4 functionality in the CHIP stack"
            default "n"
            help
                Matter spec is based on IPv6 communication only. Enabling this option may save some flash/ram.

        config DISABLE_READ_CLIENT
            bool "Disable read client in Interaction Model"
            default n
            help
                Some device types don't require the read client. Enabling this option may save some flash/ram.

        config BUILD_CHIP_TESTS
            bool "Build CHIP tests"
            default n
            help
                Build CHIP test binaries.

        config DISPATCH_EVENT_LONG_DISPATCH_TIME_WARNING_THRESHOLD_MS
            int  "Set threshold in ms"
            default 700
            help
                Time threshold for warning that dispatched took too long. You can
                set this default set to 0 to to disable event dispatching time
                measurement and suppress the logs "Long dispatch time:...".

        config CHIP_LOG_FILTERING
            bool "CHIP log level filtering APIs"
            default n
            help
                Option to enable/disable CHIP log level filtering APIs.

    endmenu # "General Options"

    menu "Networking Options"

        config NUM_TCP_ENDPOINTS
            int "Max TCP EndPoints"
            default 8
            help
                The maximum number of simultaneously active TCP EndPoint objects.

                CHIP generally needs one TCP EndPoint object for each active CHIP TCP
                connection, plus up to 3 additional EndPoints to listen for incoming
                connections.

        config NUM_UDP_ENDPOINTS
            int "Max UDP EndPoints"
            default 8
            help
                The maximum number of simultaneously active UDP EndPoint objects.

                CHIP generally needs one UDP EndPoint object for each local network
                interface, plus 2 additional EndPoints for general UDP communcation.

        config MAX_CONNECTIONS
            int "Max CHIP Connections"
            range 0 65535
            default 8
            help
                The maximum number of simultaneously active CHIP connections, either locally
                or remotely initiated.  This limit covers both CHIP TCP connections, and
                CHIP-over-BLE (WoBLE) connections.

        config DEFAULT_INCOMING_CONNECTION_IDLE_TIMEOUT
            int "Default Incoming Connection Idle Timeout (ms)"
            range 0 1000000
            default 15000
            help
                The maximum amount of time, in milliseconds, that an idle inbound
                CHIP connection will be allowed to exist before being closed.

                This is a default value that can be overridden at runtime by the
                application.

                A value of 0 disables automatic closing of idle connections.

        config ENABLE_ROUTE_HOOK
            bool "Enable route hook"
            depends on LWIP_HOOK_IP6_ROUTE_DEFAULT && LWIP_HOOK_ND6_GET_GW_DEFAULT
            default y
            help
                Enable this option to use LwIP default IPv6 route hook for Route Information Option(RIO) feature.

        config ENABLE_LWIP_THREAD_SAFETY
            bool "Enable LwIP Thread safety options"
            default y
            select LWIP_TCPIP_CORE_LOCKING
            select LWIP_CHECK_THREAD_SAFETY
            help
                CHIP SDK performs LwIP core locking before calling an LwIP API.
                To make the calls thread safe we have to enable LWIP_TCPIP_CORE_LOCKING.
                Here, we are also enabling LWIP_CHECK_THREAD_SAFETY which will assert when
                LwIP code gets called from any other context or without holding the LwIP lock.

    endmenu # "Networking Options"

    menu "System Options"

        config NUM_TIMERS
            int "Max System Timers"
            default 32
            help
                The maximum number of simultaneously timers in the CHIP System Layer.

        config ENABLE_OTA_REQUESTOR
            bool "Enable OTA Requestor"
            default n
            help
                Enable this option to enable OTA Requestor for example

        config ENABLE_ENCRYPTED_OTA
            bool "Enable pre encrypted OTA"
            depends on ENABLE_OTA_REQUESTOR
            default n
            help
                Enable this option to use the pre encrypted OTA image

        config OTA_AUTO_REBOOT_ON_APPLY
            bool "Reboot the device after applying the OTA image"
            depends on ENABLE_OTA_REQUESTOR
            default y
            help
                Enable this option to reboot the device after applying the new image.

        config OTA_AUTO_REBOOT_DELAY_MS
            int "OTA reboot delay time (ms)"
            depends on OTA_AUTO_REBOOT_ON_APPLY
            default 5000
            help
                The delay time for OTA reboot on applying.

    endmenu # "System Options"

    menu "Security Options"

        menu "Debugging"

            config SECURITY_TEST_MODE
                bool "Enable CHIP Security Test Mode"
                default n
                help
                    Enable various features that make it easier to debug secure CHIP communication.

                    WARNING: This option makes it possible to circumvent basic CHIP security functionality,
                    including message encryption. Because of this it SHOULD NEVER BE ENABLED IN PRODUCTION BUILDS.

        endmenu # "Debugging"

    endmenu # "Security Options"

endmenu # "CHIP"


#
# Options for configuring the CHIP Device Layer
#
menu "CHIP Device Layer"

    menu "General Options"
        config CHIP_PROJECT_CONFIG
            string "CHIP Project Configuration file"
            default ""
            help
                CHIP's project configuration file location.

        config CHIP_TASK_STACK_SIZE
            int "CHIP Task Stack Size"
            range 0 65535
            default 8192
            help
                The size (in bytes) of the CHIP task stack.

        config CHIP_TASK_PRIORITY
            int "CHIP Task Priority"
            range 0 256
            default 1
            help
                The priority of the CHIP task.

                On the ESP32 platform this value is added to ESP_TASK_PRIO_MIN to determine the FreeRTOS priority value.

        config MAX_EVENT_QUEUE_SIZE
            int "Max Event Queue Size"
            range 0 65535
            default 25
            help
                The maximum number of events that can be held in the CHIP Platform event queue.

        config ENABLE_EXTENDED_DISCOVERY
            bool "Enable Extended discovery Support"
            default n
            help
                Enables support for Extended Discovery.

        config ENABLE_COMMISSIONABLE_DEVICE_TYPE
            bool "Enable Device type in commissionable node discovery."
            default n
            help
                Enables or Disables the support for Commissionable Device Type.

        config ENABLE_ICD_SERVER
            bool "Enable ICD server"
            depends on OPENTHREAD_MTD
            default n
            help
                Enables or Disables ICD server

        config ICD_SLOW_POLL_INTERVAL
            int "ICD Slow Polling Interval"
            depends on ENABLE_ICD_SERVER
            default 5000
            help
                The value defines the fastest frequency at which the device will typically receive
                messages in Idle Mode. The Slow Polling interval MAY be the same as the Idle Mode
                Interval.

        config ICD_FAST_POLL_INTERVAL
            int "ICD Fast Polling Interval"
            depends on ENABLE_ICD_SERVER
            default 200
            help
                Fast Polling defines the fastest frequency at which the device can receive messages
                in Active Mode. The Fast Polling interval SHALL be smaller than the Active Mode
                Interval.

        config ENABLE_BG_EVENT_PROCESSING
            bool "Enable Background event processing"
            default n
            help
                Some cryptographic operations requires more time for processing,
                When this option is enabled, the main matter task can delegate some
                time consuming operations to a background task so that the main matter
                task is not blocked and can process other work.

        config BG_CHIP_TASK_STACK_SIZE
            depends on ENABLE_BG_EVENT_PROCESSING
            int "Background CHIP Task Stack Size"
            range 0 8192
            default 6144
            help
                The size (in bytes) of the background CHIP task stack.

        config BG_CHIP_TASK_PRIORITY
            depends on ENABLE_BG_EVENT_PROCESSING
            int "Background CHIP Task Priority"
            range 0 256
            default 1
            help
                The priority of the background CHIP task.

        config BG_MAX_EVENT_QUEUE_SIZE
            depends on ENABLE_BG_EVENT_PROCESSING
            int "Max Event Queue Size"
            range 1 8
            default 1
            help
                The maximum number of events that can be held in the background CHIP Platform event queue.

    endmenu

    menu "Device Identification Options"

        config DEVICE_VENDOR_ID
            hex "Device Vendor Id"
            range 1 0xFFFE
            default 0xFFF1
            help
                The device vendor id (in hex). This a CHIP-assigned id for the organization responsible for producing the device.
                Defaults to test VID 0xFFF1.

        config DEVICE_PRODUCT_ID
            hex "Device Product Id"
            range 1 0xFFFE
            default 0x8000
            help
                The device product id (in hex).  This is a unique id assigned by the device vendor to identify the product or device type.
                Defaults to a CHIP-assigned id designating a non-production or test "product".

        config DEFAULT_DEVICE_HARDWARE_VERSION
            int "Default Device Hardware Version"
            range 0 65535
            default 0
            help
                The default device hardware version.

                Hardware versions are specific to a particular device vendor and product id, and typically
                correspond to a version of the physical device, a change to its packaging, and/or a change
                to its marketing presentation. This value is generally *not* incremented for device software
                versions.

                This is a default value which is used when a hardware version has not been stored in device
                persistent storage (e.g. by a factory provisioning process).

        config DEVICE_SOFTWARE_VERSION_NUMBER
            int "Device Software Version Number"
            default 0
            help
                Software version number running on the device.

        config DEVICE_TYPE
            int "Default Device type"
            default 0
            help
                The default device type.

    endmenu

    menu "WiFi Station Options"

        config ENABLE_WIFI_STATION
            bool "Enable CHIP WIFI STATION"
            default y
            help
                Enables WiFi station for CHIP.

        config DEFAULT_WIFI_SSID
            string "Default WiFi SSID"
            default ""
            depends on ENABLE_WIFI_STATION
            help
                The SSID of network to connect to if no WiFi station configuration exists in NV storage
                at the time the device boots.

                This option is for testing only and should be disabled in production releases.

        config DEFAULT_WIFI_PASSWORD
            string "Default WiFi Password"
            default ""
            depends on ENABLE_WIFI_STATION
            help
                The password for the default WiFi network.

                This option is for testing only and should be disabled in production releases.

        config WIFI_STATION_RECONNECT_INTERVAL
            int "WiFi Station Interface Reconnect Interval (ms)"
            range 0 65535
            default 100
            depends on ENABLE_WIFI_STATION
            help
                The interval at which the CHIP platform will attempt to reconnect to the configured WiFi network (in milliseconds).

        config MAX_SCAN_NETWORKS_RESULTS
            int "Max ScanNetworks Results"
            range 0 65535
            default 10
            depends on ENABLE_WIFI_STATION
            help
                The maximum number of networks to return as a result of a CHIP NetworkProvisioning:ScanNetworks request.

        config WIFI_SCAN_COMPLETION_TIMEOUT
            int "WiFi Scan Completion Timeout (ms)"
            range 0 65535
            default 10000
            depends on ENABLE_WIFI_STATION
            help
                The amount of time (in milliseconds) after which the CHIP platform will timeout a WiFi scan
                operation that hasn't completed.  A value of 0 will disable the timeout logic.

        config WIFI_CONNECTIVITY_TIMEOUT
            int "WiFi Connectivity Timeout (ms)"
            range 0 65535
            default 30000
            depends on ENABLE_WIFI_STATION
            help
                The amount of time (in milliseconds) to wait for Internet connectivity to be established on
                the device's WiFi station interface during a Network Provisioning TestConnectivity operation.

    endmenu

    menu "WiFi AP Options"

        config ENABLE_WIFI_AP
            depends on ESP_WIFI_SOFTAP_SUPPORT
            bool "Enable CHIP WIFI AP"
            default y
            help
                Enables WiFi AP for CHIP.

        config WIFI_AP_SSID_PREFIX
            string "WiFi AP SSID Prefix"
            default "MATTER-"
            depends on ENABLE_WIFI_AP
            help
                A prefix string used in forming the WiFi soft-AP SSID.  The remainder of the SSID
                consists of the final two bytes of the device's primary WiFi MAC address in hex.

        config WIFI_AP_CHANNEL
            int "WiFi AP Channel"
            range 1 14
            default 1
            depends on ENABLE_WIFI_AP
            help
                The WiFi channel number to be used by the soft-AP.

        config WIFI_AP_MAX_STATIONS
            int "WiFi AP Max Allowed Stations"
            range 1 10
            default 4
            depends on ENABLE_WIFI_AP
            help
                The maximum number of stations allowed to connect to the soft-AP.

        config WIFI_AP_BEACON_INTERVAL
            int "WiFi AP Beacon Interval (ms)"
            range 100 60000
            default 100
            depends on ENABLE_WIFI_AP
            help
                The beacon interval (in milliseconds) for the WiFi soft-AP.

        config WIFI_AP_IDLE_TIMEOUT
            int "WiFi AP Idle Timeout (ms)"
            range 0 600000
            default 120000
            depends on ENABLE_WIFI_AP
            help
                The amount of time (in milliseconds) after which the CHIP platform will deactivate the soft-AP
                if it has been idle.

    endmenu

    menu "BLE Options"
        visible if BT_ENABLED

        config ENABLE_CHIPOBLE
            bool "Enable CHIP-over-BLE (CHIPoBLE) Support"
            default y
            depends on BT_ENABLED
            help
                Enables support for sending and receiving CHIP messages over a BLE connection.

                NOTE: This feature depends on BLE central support being enabled in ESP-IDF. In
                particular, the ESP-IDF features CONFIG_BT_ENABLED and CONFIG_GATTS_ENABLE must
                both be enabled.

        config BLE_DEVICE_NAME_PREFIX
            string "BLE Device Name Prefix"
            default "MATTER-"
            depends on ENABLE_CHIPOBLE
            help
                A prefix string used in forming the BLE device name.  The remainder of the name
                consists of the final two bytes of the device's CHIP node id in hex.

                NOTE: The device layer limits the total length of a device name to 16 characters.
                However, due to other data sent in WoBLE advertise packets, the device name
                may need to be shorter.

        config BLE_FAST_ADVERTISING_INTERVAL_MIN
            int "Fast Advertising Min Interval"
            default 40
            depends on ENABLE_CHIPOBLE
            help
                The minimum interval (in units of 0.625ms) at which the device will send BLE advertisements while
                in fast advertising mode.

        config BLE_FAST_ADVERTISING_INTERVAL_MAX
            int "Fast Advertising Max Interval"
            default 40
            depends on ENABLE_CHIPOBLE
            help
                The maximum interval (in units of 0.625ms) at which the device will send BLE advertisements while
                in fast advertising mode.

        config BLE_SLOW_ADVERTISING_INTERVAL_MIN
            int "Slow Advertising Min Interval"
            default 800
            depends on ENABLE_CHIPOBLE
            help
                The minimum interval (in units of 0.625ms) at which the device will send BLE advertisements while
                in slow advertising mode.

        config BLE_SLOW_ADVERTISING_INTERVAL_MAX
            int "Slow Advertising Max Interval"
            default 800
            depends on ENABLE_CHIPOBLE
            help
                The maximum interval (in units of 0.625ms) at which the device will send BLE advertisements while
                in slow advertising mode.

        config CHIPOBLE_SINGLE_CONNECTION
            bool "Single Connection Mode"
            default y
            depends on ENABLE_CHIPOBLE
            help
                Limit support for CHIP-over-BLE (WoBLE) to a single inbound connection.

                When set, WoBLE advertisements will stop while a WoBLE connection is active.

        config USE_BLE_ONLY_FOR_COMMISSIONING
	    bool "Use BLE only for commissioning"
	    default y
	    help
            Disable this flag if BLE is used for any other purpose than commissioning.
            When enabled, it deinitialized the BLE on successful commissioning, and on
            bootup do not initialize the BLE if device is already provisioned with Wi-Fi/Thread credentials.

    endmenu

    menu "CHIP Thread Options"
        visible if OPENTHREAD_ENABLED

        config ENABLE_MATTER_OVER_THREAD
            bool "Enable Matter-over-Thread Support"
            default y
            depends on OPENTHREAD_ENABLED
            help
                Enables support for sending and receiving CHIP messages over a Thread Connection.

        config THREAD_TASK_STACK_SIZE
            int "Thread task stack size"
            default 5120
            depends on OPENTHREAD_ENABLED
            help
                Stack size of Thread task.

    endmenu

    menu "Ethernet Options"
        visible if ENABLE_ETHERNET_TELEMETRY

        config GPIO_RANGE_MIN
            int
            depends on ENABLE_ETHERNET_TELEMETRY
            default 0

        config GPIO_RANGE_MAX
            int
            depends on ENABLE_ETHERNET_TELEMETRY
            default 33 if IDF_TARGET_ESP32
            default 46 if IDF_TARGET_ESP32S2
            default 19 if IDF_TARGET_ESP32C3
            default 48 if IDF_TARGET_ESP32S3
            default 26 if IDF_TARGET_ESP32H2

        config ETH_MDC_GPIO
            int "SMI MDC GPIO number"
            depends on ENABLE_ETHERNET_TELEMETRY
            range GPIO_RANGE_MIN GPIO_RANGE_MAX
            default 23 if ENABLE_ETHERNET_TELEMETRY
            help
                Set the GPIO number used by SMI MDC.

        config ETH_MDIO_GPIO
            int "SMI MDIO GPIO number"
            depends on ENABLE_ETHERNET_TELEMETRY
            range GPIO_RANGE_MIN GPIO_RANGE_MAX
            default 18 if ENABLE_ETHERNET_TELEMETRY
            help
                Set the GPIO number used by SMI MDIO.

        config ETH_PHY_RST_GPIO
            int "PHY Reset GPIO number"
            depends on ENABLE_ETHERNET_TELEMETRY
            range -1 GPIO_RANGE_MAX
            default 5 if ENABLE_ETHERNET_TELEMETRY
            help
                Set the GPIO number used to reset PHY chip.
                Set to -1 to disable PHY chip hardware reset.

        config ETH_PHY_ADDR
            int "PHY Address"
            range 0 31
            default 1 if ENABLE_ETHERNET_TELEMETRY
            help
                Set PHY address according your board schematic.

    endmenu

    menu "Time Sync Options"

        config ENABLE_SERVICE_DIRECTORY_TIME_SYNC
            bool "Enable Service Directory Time Sync"
            default y
            help
                Enables synchronizing the device real-time clock using information returned during
                a CHIP service directory query.  For any device that uses the CHIP service directory
                to lookup a tunnel server, enabling this option will result in the real time clock being
                synchronized every time the service tunnel is established.

        config ENABLE_CHIP_TIME_SERVICE_TIME_SYNC
            bool "Enable Time Service Time Sync"
            default n
            help
                Enables synchronizing the device's real time clock with a remote CHIP Time service
                using the CHIP Time Sync protocol.

        config CHIP_TIME_SERVICE_ENDPOINT_ID
            hex "CHIP Time Service Endpoint Id"
            default 18B4300200000005
            depends on ENABLE_CHIP_TIME_SERVICE_TIME_SYNC
            help
                Specifies the service endpoint id of the CHIP Time Sync service to be used to synchronize time.

        config DEFAULT_TIME_SYNC_INTERVAL
            int "Time Sync Interval (seconds)"
            default 60
            depends on ENABLE_CHIP_TIME_SERVICE_TIME_SYNC
            help
                Specifies the minimum interval (in seconds) at which the device should synchronize its real time
                clock with the configured CHIP Time Sync server.

        config TIME_SYNC_TIMEOUT
            int "Time Sync Timeout (ms)"
            default 10000
            depends on ENABLE_CHIP_TIME_SERVICE_TIME_SYNC
            help
                Specifies the maximum amount of time (in milliseconds) to wait for a response from a
                CHIP Time Sync server.

    endmenu

    menu "Service Provisioning Options"

        config SERVICE_PROVISIONING_ENDPOINT_ID
            hex "CHIP Service Provisioning Endpoint Id"
            default 18B4300200000010
            help
                Specifies the service endpoint id of the CHIP Service Provisioning service.  When a device
                undergoes service provisioning, this is the endpoint to which it will send its Pair Device
                to Account request.

        config SERVICE_PROVISIONING_CONNECTIVITY_TIMEOUT
            int "Service Provisioning Connectivity Timeout (ms)"
            default 10000
            help
                The maximum amount of time (in milliseconds) to wait for service connectivity during the device
                service provisioning step.  More specifically, this is the maximum amount of time the device will
                wait for connectivity to be established with the service at the point where the device waiting
                to send a Pair Device to Account request to the Service Provisioning service.

        config SERVICE_PROVISIONING_REQUEST_TIMEOUT
            int "Service Provisioning Request Timeout (ms)"
            default 10000
            help
                Specifies the maximum amount of time (in milliseconds) to wait for a response from the Service
                Provisioning service.

    endmenu

    menu "Commissioning options"
        config RENDEZVOUS_WAIT_FOR_COMMISSIONING_COMPLETE
            int "Use full IP-based commissioning (expect cluster commands)"
            default 0
            help
                Setting this to y will cause the commissioner to send commissioning commands to the
                various clusters after establishing a PASE session.

        config ENABLE_ROTATING_DEVICE_ID
            depends on ENABLE_CHIPOBLE
            bool "Enable Rotating Device Identifier Support"
            default n

        config ENABLE_ESP32_FACTORY_DATA_PROVIDER
            bool "Use ESP32 Factory Data Provider"
            default n
            help
                If this option is enabled, then ESP32 implementation of CommissionableDataProvider and
                DeviceAttestationCredentialsProvider is used. Otherwise, the test-mode CommissionableDataProvider
                and Example DeviceAttestationCredentialsProvider is used. ESP32 implementation reads factory data from
                nvs partition. Factory partition can be configured using CONFIG_CHIP_FACTORY_NAMESPACE_PARTITION_LABEL
                option, default is "nvs".

        config ENABLE_ESP32_DEVICE_INSTANCE_INFO_PROVIDER
            depends on ENABLE_ESP32_FACTORY_DATA_PROVIDER
            bool "Use ESP32 Device Instance Info Provider"
            default n
            help
                Use ESP32 Device Instance Info Provider to get device instance info from factory partition.
                Details like Vendor Name, Vendor Id, Product Name, Product Id, Serial Number, Manufacturing Date,
                Hardware Version, Hardware Version String, and Rotating Device Id UniqueId will be read from factory
                partition.

        config ENABLE_ESP32_DEVICE_INFO_PROVIDER
            depends on ENABLE_ESP32_FACTORY_DATA_PROVIDER
            bool "Use ESP32 Device Info Provider"
            default n
            help
                Use ESP32 Device Info Provider to get device instance info from factory partition.
                Details like Supported calendar types, supported locales, and fixed labels will be read from factory
                partition.

        config ENABLE_ESP32_LOCATIONCAPABILITY
            depends on ENABLE_ESP32_FACTORY_DATA_PROVIDER
            bool "Enable ESP32 Device LocationCapability"
            default n
            help
                Enable ESP32 Device LocationCapability

        config SEC_CERT_DAC_PROVIDER
            bool "Use Secure Cert DAC Provider"
            default n
            help
                Use ESP32 Secure Cert DAC Provider which is  ESP32 DeviceAttestationCredentialsProvider implementation which reads attestation
                information from the esp_secure_cert partition

        config USE_ESP32_ECDSA_PERIPHERAL
            bool "Use ESP32 ECDSA Peripheral"
            depends on SEC_CERT_DAC_PROVIDER && SOC_ECDSA_SUPPORTED
            default y
            select MBEDTLS_HARDWARE_ECDSA_SIGN
            help
                If DAC is being read from secure cert and SOC supports ECDSA signing using on-chip peripheral
                then this option gets enabled.
                Also, please disable ESP_SECURE_CERT_DS_PERIPHERAL from the menuconfig when this option is disabled

       config ENABLE_ESP_INSIGHTS_TRACE
           bool "Enable Matter ESP Insights"
           depends on ESP_INSIGHTS_ENABLED
           default y
           help
               ESP Insights is a remote diagnostics solution to monitor the health of ESP devices in the field.
               Enabling the above option will enable the esp32 specific tracing functionality and report the
               diagnostic information to the insights cloud.

    endmenu



    menu "Testing Options"

        config USE_TEST_SERIAL_NUMBER
            string "Use Test Serial Number"
            default "TEST_SN"
            help
                Specifies a hard-coded device serial number to be used if none is found in CHIP NV storage.
                Setting the value to an empty string disables the feature.

                Note that any string up to 32 characters can be used here. This value is a unique identifier
                assigned to each device by the device vendor.

                This option is for testing only and should not be enabled in production releases.

        config ENABLE_TEST_SETUP_PARAMS
            bool "Enable Test Setup Parameters"
            default y
            help
                Enable use of test setup parameters for testing purposes only.

                WARNING: This option makes it possible to circumvent basic chip security functionality.
                Because of this it SHOULD NEVER BE ENABLED IN PRODUCTION BUILDS.

        config TEST_EVENT_TRIGGER_ENABLED
            bool "Enable Test Event Trigger"
            default y
            help
                Enable TestEventTrigger in GeneralDiagnostics cluster.

        config TEST_EVENT_TRIGGER_ENABLE_KEY
            string "Test Event Trigger Enable Key"
            depends on TEST_EVENT_TRIGGER_ENABLED
            default "00112233445566778899aabbccddeeff"
            help
                The EnableKey in hex string format used by TestEventTrigger command in GeneralDiagnostics
                cluster. The length of the string should be 32.

        config ENABLE_FIXED_TUNNEL_SERVER
            bool "Use Fixed Tunnel Server"
            default n
            help
                Forces the use of a service tunnel server at a fixed IP address and port.  This
                bypasses the need for a directory query to the service directory endpoint to
                determine the tunnel server address.  When enabled, this option allows devices
                that haven't been service provisioned to establish a service tunnel.

        config TUNNEL_SERVER_ADDRESS
            string "Tunnel Server Address"
            default ""
            depends on ENABLE_FIXED_TUNNEL_SERVER
            help
                The IP address and port of the server to which the device should establish a service tunnel.
                The supplied address must be a dot-notation IP address--not a host name.  The port number is
                optional; if present it should be separated from the IP address with a colon (e.g. 192.168.1.100:5540).

    endmenu

    menu "Network Telemetry Options"

        config ENABLE_WIFI_TELEMETRY
            bool "Enable WiFi Telemetry"
            default y
            help
                Enable automatically uploading Wi-Fi telemetry via trait on an interval.

        config ENABLE_THREAD_TELEMETRY
            bool "Enable Thread Telemetry"
            default n
            help
                Enable automatically uploading minimal Thread telemetry and topology via trait on an interval.

        config ENABLE_THREAD_TELEMETRY_FULL
            bool "Enable Full Thread Telemetry"
            default n
            help
                Enable automatically uploading all Thread telemetry and topology via trait on an interval.
                This is suitable for products that have router capability.

                This option can be enabled only when Thread telemetry is enabled.

        config ENABLE_TUNNEL_TELEMETRY
            bool "Enable CHIP Tunnel Telemetry"
            default n
            help
                Enable automatically uploading CHIP tunnel telemetry via trait on an interval.

        config ENABLE_ETHERNET_TELEMETRY
            bool "Enable Ethernet Telemetry"
            default n
            help
                Enable ethernet support for boards with Internal Ethernet

    endmenu

    menu "Event Logging Options"

        config EVENT_LOGGING_CRIT_BUFFER_SIZE
            int "Event Logging Critical Production Buffer Size"
            range 0 65535
            default 4096
            help
                A size, in bytes, of the individual critical production event logging buffer.

                This critical production event buffer must exist.

        config EVENT_LOGGING_INFO_BUFFER_SIZE
            int "Event Logging Info Buffer Size"
            range 0 65535
            default 1024
            help
                A size, in bytes, of the individual info event logging buffer.

                When size is set to 0, the info event buffer and all support
                for the info level events are disabled.

        config EVENT_LOGGING_DEBUG_BUFFER_SIZE
            int "Event Logging Debug Buffer Size"
            range 0 65535
            default 1024
            help
                A size, in bytes, of the individual debug event logging buffer.

                When size is set to 0, the debug event buffer and all support
                for the debug level events are disabled.


	config CHIP_CONFIG_IM_PRETTY_PRINT
	   bool "Enable IM Pretty Print"
	   default y
	   help
	     If enabled, incoming message payloads are logged in detail.
	     To see detailed logging please set default log level to Debug.
	     (Component config --> Log output --> Default log verbosity --> Debug)

    endmenu

    menu "Matter OTA Image"

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

        config CHIP_OTA_IMAGE_EXTRA_ARGS
            string "OTA image creator extra arguments"
            depends on CHIP_OTA_IMAGE_BUILD
            help
              ota_image_tool.py is used to create the OTA image.
              Mandatory arguments(Version, VersionString, VID, PID) are picked up from the config options.
              This option allows us to pass optional arguments(MinApplicableSoftwareVersion, MaxApplicableSoftwareVersion,
              and ReleaseNotesURL) to the ota_image_tool.py script.
              eg: "-mi 2 -ma 4 -rn https://github.com/espressif/esp-idf/releases/tag/v4.4"

    endmenu

    menu "External Platform"
        config CHIP_ENABLE_EXTERNAL_PLATFORM
            bool "Enable external platform layer"
            default n
            help
                Use external platform layer to override the default ESP32 platform in Matter SDK.

        config CHIP_EXTERNAL_PLATFORM_DIR
            string "The external platform directory"
            depends on CHIP_ENABLE_EXTERNAL_PLATFORM
            help
                The directory of the external platform.

    endmenu

    menu "Matter Manufacturing Options"
        config CHIP_FACTORY_NAMESPACE_PARTITION_LABEL
            string "chip-factory namespace partition label"
            default "nvs"
            help
                Label of the partition to store key-values in the "chip-factory" namespace.

        config CHIP_CONFIG_NAMESPACE_PARTITION_LABEL
            string "chip-config namespace partition label"
            default "nvs"
            help
                Label of the partition to store key-values in the "chip-config" namespace.

        config CHIP_COUNTERS_NAMESPACE_PARTITION_LABEL
            string "chip-counters namespace partition label"
            default "nvs"
            help
                Label of the partition to store key-values in the "chip-counters" namespace.

        config CHIP_KVS_NAMESPACE_PARTITION_LABEL
            string "chip-kvs namespace partition label"
            default "nvs"
            help
                Label of the partition to store key-values in the "chip-kvs" namespace.

    endmenu

    menu "Commissioning Window Options"
        config CHIP_DISCOVERY_TIMEOUT_SECS
            int "Commissioning Window Timeout in seconds"
            range 180 900 
            default 900 
            help
                The amount of time (in seconds) after which the CHIP platform will close the Commissioning Window
    endmenu

    menu "Enable ESP32 as a BLE Commissioner"
        config ENABLE_ESP32_BLE_CONTROLLER
            bool "Enable ESP32 as a BLE Commissioner"
            default n
            help
                Enable esp32 as a BLE Commissioner.

    endmenu

endmenu
