# Copyright (c) 2023 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.

declare_args() {
  # Matter SDK Configuration flag to enable ICD server functionality
  # TODO - Add Specifics when the design is refined
  chip_enable_icd_server = false

  chip_enable_icd_lit = false

  # Matter SDK Configuration flag to enable ICD client functionality
  # TODO - Add Specifics when the design is refined
  chip_enable_icd_client = false

  # Matter SDK Configuration flag to make the ICD manager emit a report on entering active mode
  chip_icd_report_on_active_mode = false

  icd_max_notification_subscribers = 1

  # Set to true to enforce SIT Slow Polling Max value to 15seconds (spec 9.16.1.5)
  icd_enforce_sit_slow_poll_limit = false

  # Set to true if device supports dynamic switching from SIT to LIT operating modes (DSLS)
  chip_enable_icd_dsls = false
}

# Set the defaults for CIP and UAT features to be consistent with the LIT value.
declare_args() {
  chip_enable_icd_checkin = chip_enable_icd_lit
  chip_enable_icd_user_active_mode_trigger = chip_enable_icd_lit
}
