diff --git a/.github/workflows/examples-k32w.yaml b/.github/workflows/examples-k32w.yaml
index 363111a26c0a9c..be2d372e88c177 100644
--- a/.github/workflows/examples-k32w.yaml
+++ b/.github/workflows/examples-k32w.yaml
@@ -37,7 +37,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-k32w:32
+ image: ghcr.io/project-chip/chip-build-k32w:33
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
steps:
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 6b99456496d22a..189f63837c841e 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -119,7 +119,6 @@ jobs:
--known-failure app/reporting/tests/MockReportScheduler.h \
--known-failure app/server/AppDelegate.h \
--known-failure app/TestEventTriggerDelegate.h \
- --known-failure app/util/af-enums.h \
--known-failure app/util/af.h \
--known-failure app/util/af-types.h \
--known-failure app/util/attribute-metadata.h \
@@ -197,7 +196,7 @@ jobs:
- name: Check for incorrect error use in VerifyOrExit
if: always()
run: |
- git grep -n "VerifyOrExit(.*, [A-Za-z]*_ERROR" -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
+ git grep -I -n "VerifyOrExit(.*, [A-Za-z]*_ERROR" -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
# git grep exits with 0 if it finds a match, but we want
# to fail (exit nonzero) on match. And we want to exclude this file,
@@ -205,7 +204,7 @@ jobs:
- name: Check for use of PRI*8, which are not supported on some libcs.
if: always()
run: |
- git grep -n "PRI.8" -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)third_party/lwip/repo/lwip/src/include/lwip/arch.h' && exit 1 || exit 0
+ git grep -I -n "PRI.8" -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)third_party/lwip/repo/lwip/src/include/lwip/arch.h' && exit 1 || exit 0
# git grep exits with 0 if it finds a match, but we want
# to fail (exit nonzero) on match. And we want to exclude this file,
@@ -213,7 +212,7 @@ jobs:
- name: Check for use of PRI*16, which are not supported on some libcs.
if: always()
run: |
- git grep -n "PRI.16" -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)third_party/lwip/repo/lwip/src/include/lwip/arch.h' && exit 1 || exit 0
+ git grep -I -n "PRI.16" -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)third_party/lwip/repo/lwip/src/include/lwip/arch.h' && exit 1 || exit 0
# git grep exits with 0 if it finds a match, but we want
# to fail (exit nonzero) on match. And we want to exclude this file,
@@ -226,7 +225,7 @@ jobs:
# TODO: TLVDebug should ideally not be excluded here.
# TODO: protocol_decoder.cpp should ideally not be excluded here.
# TODO: PersistentStorageMacros.h should ideally not be excluded here.
- git grep -n "PRI.64" -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)examples/chip-tool' ':(exclude)examples/tv-casting-app' ':(exclude)src/app/MessageDef/MessageDefHelper.cpp' ':(exclude)src/app/tests/integration/chip_im_initiator.cpp' ':(exclude)src/lib/core/TLVDebug.cpp' ':(exclude)src/lib/dnssd/tests/TestTxtFields.cpp' ':(exclude)src/lib/format/protocol_decoder.cpp' ':(exclude)src/lib/support/PersistentStorageMacros.h' ':(exclude)src/messaging/tests/echo/echo_requester.cpp' ':(exclude)src/platform/Linux' ':(exclude)src/platform/Ameba' ':(exclude)src/platform/ESP32' ':(exclude)src/platform/webos' ':(exclude)zzz_generated/chip-tool' ':(exclude)src/tools/chip-cert/Cmd_PrintCert.cpp' && exit 1 || exit 0
+ git grep -I -n "PRI.64" -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)examples/chip-tool' ':(exclude)examples/tv-casting-app' ':(exclude)src/app/MessageDef/MessageDefHelper.cpp' ':(exclude)src/app/tests/integration/chip_im_initiator.cpp' ':(exclude)src/lib/core/TLVDebug.cpp' ':(exclude)src/lib/dnssd/tests/TestTxtFields.cpp' ':(exclude)src/lib/format/protocol_decoder.cpp' ':(exclude)src/lib/support/PersistentStorageMacros.h' ':(exclude)src/messaging/tests/echo/echo_requester.cpp' ':(exclude)src/platform/Linux' ':(exclude)src/platform/Ameba' ':(exclude)src/platform/ESP32' ':(exclude)src/platform/webos' ':(exclude)zzz_generated/chip-tool' ':(exclude)src/tools/chip-cert/Cmd_PrintCert.cpp' && exit 1 || exit 0
# git grep exits with 0 if it finds a match, but we want
# to fail (exit nonzero) on match. And we want to exclude this file,
@@ -261,7 +260,7 @@ jobs:
- name: Check for use of 0x%u and the like, which lead to misleading output.
if: always()
run: |
- git grep -n '0x%[0-9l.-]*[^0-9lxX".-]' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
+ git grep -I -n '0x%[0-9l.-]*[^0-9lxX".-]' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
# git grep exits with 0 if it finds a match, but we want
# to fail (exit nonzero) on match. And we want to exclude this file,
@@ -269,7 +268,7 @@ jobs:
- name: Check for use of '"0x" PRIu*' and the like, which lead to misleading output.
if: always()
run: |
- git grep -n '0x%[0-9-]*" *PRI[^xX]' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
+ git grep -I -n '0x%[0-9-]*" *PRI[^xX]' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
# git grep exits with 0 if it finds a match, but we want
# to fail (exit nonzero) on match.
@@ -285,7 +284,7 @@ jobs:
- name: Check for use of 'emberAfReadAttribute' instead of the type-safe getters
if: always()
run: |
- git grep -n 'emberAfReadAttribute' -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)src/app/util/af.h' ':(exclude)zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp' ':(exclude)src/app/zap-templates/templates/app/attributes/Accessors-src.zapt' ':(exclude)src/app/util/attribute-table.cpp' && exit 1 || exit 0
+ git grep -I -n 'emberAfReadAttribute' -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)src/app/util/af.h' ':(exclude)zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp' ':(exclude)src/app/zap-templates/templates/app/attributes/Accessors-src.zapt' ':(exclude)src/app/util/attribute-table.cpp' && exit 1 || exit 0
# git grep exits with 0 if it finds a match, but we want
# to fail (exit nonzero) on match. And we want to exclude this file,
@@ -295,7 +294,7 @@ jobs:
- name: Check for use of 'emberAfWriteAttribute' instead of the type-safe setters
if: always()
run: |
- git grep -n 'emberAfWriteAttribute' -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)src/app/util/af.h' ':(exclude)zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp' ':(exclude)src/app/zap-templates/templates/app/attributes/Accessors-src.zapt' ':(exclude)src/app/util/attribute-table.cpp' ':(exclude)examples/common/pigweed/rpc_services/Attributes.h' ':(exclude)src/app/util/attribute-table.h' ':(exclude)src/app/util/ember-compatibility-functions.cpp' && exit 1 || exit 0
+ git grep -I -n 'emberAfWriteAttribute' -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)src/app/util/af.h' ':(exclude)zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp' ':(exclude)src/app/zap-templates/templates/app/attributes/Accessors-src.zapt' ':(exclude)src/app/util/attribute-table.cpp' ':(exclude)examples/common/pigweed/rpc_services/Attributes.h' ':(exclude)src/app/util/attribute-table.h' ':(exclude)src/app/util/ember-compatibility-functions.cpp' && exit 1 || exit 0
# Run python Linter (flake8) and verify python files
# ignore some style errors, restyler should do that
@@ -310,7 +309,7 @@ jobs:
- name: Check for use of "SuccessOrExit(CHIP_ERROR_*)", which should probably be "SuccessOrExit(err = CHIP_ERROR_*)"
if: always()
run: |
- git grep -n 'SuccessOrExit(CHIP_ERROR' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
+ git grep -I -n 'SuccessOrExit(CHIP_ERROR' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
# git grep exits with 0 if it finds a match, but we want
# to fail (exit nonzero) on match. And we want to exclude this file,
@@ -318,4 +317,4 @@ jobs:
- name: Check for use of "SuccessOrExit(something-without-assignment(", which should probably be "SuccessOrExit(err = something("
if: always()
run: |
- git grep -n 'SuccessOrExit([^=)]*(' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
+ git grep -I -n 'SuccessOrExit([^=)]*(' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
diff --git a/.github/workflows/unit_integration_test.yaml b/.github/workflows/unit_integration_test.yaml
index f1be1a194a1b46..62231116bb92c1 100644
--- a/.github/workflows/unit_integration_test.yaml
+++ b/.github/workflows/unit_integration_test.yaml
@@ -65,7 +65,7 @@ jobs:
"clang") GN_ARGS='is_clang=true';;
"mbedtls") GN_ARGS='chip_crypto="mbedtls"';;
"rotating_device_id") GN_ARGS='chip_crypto="boringssl" chip_enable_rotating_device_id=true';;
- "icd") GN_ARGS='chip_enable_icd_server=true';;
+ "icd") GN_ARGS='chip_enable_icd_server=true chip_enable_icd_lit=true';;
*) ;;
esac
diff --git a/BUILD.gn b/BUILD.gn
index 8981a354a54f1b..a96f2a2e67265a 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -630,8 +630,10 @@ if (current_toolchain != "${dir_pw_toolchain}/default:default") {
if (enable_linux_lit_icd_app_build) {
group("linux_lit_icd_app") {
- deps =
- [ "${chip_root}/examples/lit-icd-app/linux(${standalone_toolchain})" ]
+ lit_icd_standalone_toolchain =
+ "${chip_root}/config/standalone/toolchain:lit_icd"
+
+ deps = [ "${chip_root}/examples/lit-icd-app/linux(${lit_icd_standalone_toolchain})" ]
}
extra_build_deps += [ ":linux_lit_icd_app" ]
diff --git a/config/nrfconnect/chip-module/CMakeLists.txt b/config/nrfconnect/chip-module/CMakeLists.txt
index 672bf5834da196..9b81d7cf30282e 100644
--- a/config/nrfconnect/chip-module/CMakeLists.txt
+++ b/config/nrfconnect/chip-module/CMakeLists.txt
@@ -139,6 +139,12 @@ matter_add_gn_arg_bool ("chip_enable_icd_server" CONFIG_CHIP_EN
matter_add_gn_arg_bool ("chip_enable_factory_data" CONFIG_CHIP_FACTORY_DATA)
matter_add_gn_arg_bool ("chip_enable_read_client" CONFIG_CHIP_ENABLE_READ_CLIENT)
+if (CONFIG_CHIP_ENABLE_ICD_SUPPORT)
+ matter_add_gn_arg_bool ("chip_enable_icd_lit" CONFIG_CHIP_ICD_LIT_SUPPORT)
+ matter_add_gn_arg_bool ("chip_enable_icd_checkin" CONFIG_CHIP_ICD_CHECK_IN_SUPPORT)
+ matter_add_gn_arg_bool ("chip_enable_icd_user_active_mode_trigger" CONFIG_CHIP_ICD_UAT_SUPPORT)
+endif()
+
if (CONFIG_CHIP_FACTORY_DATA OR CONFIG_CHIP_FACTORY_DATA_CUSTOM_BACKEND)
matter_add_gn_arg_bool("chip_use_transitional_commissionable_data_provider" FALSE)
matter_add_gn_arg_bool("chip_use_transitional_device_instance_info_provider" FALSE)
diff --git a/config/nxp/chip-module/Kconfig b/config/nxp/chip-module/Kconfig
index 88918a67450ad3..7ee0917ebec555 100644
--- a/config/nxp/chip-module/Kconfig
+++ b/config/nxp/chip-module/Kconfig
@@ -208,7 +208,7 @@ endif #CHIP_FACTORY_DATA_BUILD
# See config/zephyr/Kconfig for full definition
config CHIP_FACTORY_RESET_ERASE_NVS
bool
- default y if CHIP_FACTORY_DATA || CHIP_FACTORY_DATA_CUSTOM_BACKEND
+ default y
endif
diff --git a/config/nxp/chip-module/Kconfig.defaults b/config/nxp/chip-module/Kconfig.defaults
index 56c82e3752900c..531a3f38245aad 100644
--- a/config/nxp/chip-module/Kconfig.defaults
+++ b/config/nxp/chip-module/Kconfig.defaults
@@ -87,7 +87,7 @@ config PTHREAD_IPC
config POSIX_MAX_FDS
int
- default 16
+ default 8
# Application stack size
config MAIN_STACK_SIZE
@@ -99,12 +99,21 @@ config INIT_STACKS
config NET_MGMT_EVENT_STACK_SIZE
default 2048
+config NET_MGMT_EVENT_QUEUE_SIZE
+ default 20
+
config NET_IPV6_MLD
default y
config NET_IF_MCAST_IPV6_ADDR_COUNT
default 14
+config NET_IF_MAX_IPV4_COUNT
+ default 2
+
+config NET_IF_MAX_IPV6_COUNT
+ default 2
+
config NET_TC_TX_COUNT
default 1
@@ -129,10 +138,10 @@ config NET_TC_RX_THREAD_BASE_PRIO
# Network buffers
config NET_PKT_RX_COUNT
- default 16
+ default 60
config NET_PKT_TX_COUNT
- default 16
+ default 40
config NET_BUF_RX_COUNT
default 60
@@ -141,7 +150,7 @@ config NET_BUF_TX_COUNT
default 80
config NET_BUF_DATA_SIZE
- default 1700
+ default 1744
# Bluetooth Low Energy configs
@@ -233,11 +242,14 @@ choice WPA_SUPP_LOG_LEVEL_CHOICE
endchoice
config WPA_SUPP_THREAD_STACK_SIZE
- default 6144
+ default 12288
config SYSTEM_WORKQUEUE_STACK_SIZE
default 2048
+config NET_TCP_WORKQ_STACK_SIZE
+ default 2048
+
# align these numbers to match the OpenThread config
config NET_IF_UNICAST_IPV6_ADDR_COUNT
default 6
@@ -246,7 +258,25 @@ config NET_IF_MCAST_IPV6_ADDR_COUNT
default 8
config NET_SOCKETS_POLL_MAX
- default 4
+ default 8
+
+config NET_IPV4_FRAGMENT_MAX_COUNT
+ default 3
+
+config NET_IPV4_FRAGMENT_MAX_PKT
+ default 7
+
+config NET_IPV4_FRAGMENT_TIMEOUT
+ default 3
+
+config NET_IPV6_FRAGMENT_MAX_COUNT
+ default 3
+
+config NET_IPV6_FRAGMENT_MAX_PKT
+ default 7
+
+config NET_IPV6_FRAGMENT_TIMEOUT
+ default 3
# options managed by IP4/IP6 simultaneous support
# aligned here to match OpenThread config
@@ -260,7 +290,7 @@ config SHELL_STACK_SIZE
default 2616
config HEAP_MEM_POOL_SIZE
- default 65536
+ default 122880
config CHIP_MALLOC_SYS_HEAP_SIZE
default 28672 # 28 kB
diff --git a/config/nxp/lib/pw_rpc/BUILD.gn b/config/nxp/lib/pw_rpc/BUILD.gn
new file mode 100644
index 00000000000000..05962da9299912
--- /dev/null
+++ b/config/nxp/lib/pw_rpc/BUILD.gn
@@ -0,0 +1,38 @@
+# 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.
+
+import("//build_overrides/chip.gni")
+import("//build_overrides/pigweed.gni")
+import("$dir_pw_build/target_types.gni")
+
+static_library("pw_rpc") {
+ output_name = "libPwRpc"
+
+ public_configs = [ "${dir_pigweed}/pw_hdlc:default_config" ]
+ deps = [
+ "$dir_pw_rpc:server",
+ "$dir_pw_rpc/nanopb:echo_service",
+ "${chip_root}/examples/platform/nxp/pw_sys_io:pw_sys_io_nxp",
+ "${dir_pigweed}/pw_hdlc:pw_rpc",
+ dir_pw_assert,
+ dir_pw_hdlc,
+ dir_pw_log,
+ ]
+
+ deps += pw_build_LINK_DEPS
+
+ output_dir = "${root_out_dir}/lib"
+
+ complete_static_lib = true
+}
diff --git a/config/nxp/lib/pw_rpc/pw_rpc.gni b/config/nxp/lib/pw_rpc/pw_rpc.gni
new file mode 100644
index 00000000000000..68255db8bb96da
--- /dev/null
+++ b/config/nxp/lib/pw_rpc/pw_rpc.gni
@@ -0,0 +1,28 @@
+# 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.
+
+import("//build_overrides/chip.gni")
+import("//build_overrides/pigweed.gni")
+
+pw_log_BACKEND = "$dir_pw_log_basic"
+pw_assert_BACKEND = "$dir_pw_assert_log:check_backend"
+pw_rpc_CONFIG = "$dir_pw_rpc:disable_global_mutex"
+pw_sys_io_BACKEND = "${chip_root}/examples/platform/nxp/pw_sys_io:pw_sys_io_nxp"
+
+pw_build_LINK_DEPS = [
+ "$dir_pw_assert:impl",
+ "$dir_pw_log:impl",
+]
+
+dir_pw_third_party_nanopb = "${chip_root}/third_party/nanopb/repo"
diff --git a/config/standalone/toolchain/BUILD.gn b/config/standalone/toolchain/BUILD.gn
index 8e9160fe097216..58e284cdc38a77 100644
--- a/config/standalone/toolchain/BUILD.gn
+++ b/config/standalone/toolchain/BUILD.gn
@@ -25,3 +25,12 @@ gcc_toolchain("standalone") {
import("${chip_root}/config/standalone/args.gni")
}
}
+
+gcc_toolchain("lit_icd") {
+ toolchain_args = {
+ current_os = host_os
+ current_cpu = host_cpu
+ is_clang = false
+ import("${chip_root}/examples/lit-icd-app/linux/args.gni")
+ }
+}
diff --git a/config/telink/chip-module/CMakeLists.txt b/config/telink/chip-module/CMakeLists.txt
index 418dbc07e0ba0b..7862d5f8b95d8e 100644
--- a/config/telink/chip-module/CMakeLists.txt
+++ b/config/telink/chip-module/CMakeLists.txt
@@ -104,6 +104,12 @@ matter_add_gn_arg_bool ("chip_detail_logging" CONFIG_MATTER_
matter_add_gn_arg_bool ("chip_automation_logging" FALSE)
matter_add_gn_arg_bool ("chip_enable_icd_server" CONFIG_CHIP_ENABLE_ICD_SUPPORT)
+if (CONFIG_CHIP_ENABLE_ICD_SUPPORT)
+ matter_add_gn_arg_bool ("chip_enable_icd_lit" CONFIG_CHIP_ICD_LIT_SUPPORT)
+ matter_add_gn_arg_bool ("chip_enable_icd_checkin" CONFIG_CHIP_ICD_CHECK_IN_SUPPORT)
+ matter_add_gn_arg_bool ("chip_enable_icd_user_active_mode_trigger" CONFIG_CHIP_ICD_UAT_SUPPORT)
+endif()
+
if (CONFIG_CHIP_FACTORY_DATA)
matter_add_gn_arg_bool ("chip_use_transitional_commissionable_data_provider" "false")
matter_add_gn_arg_bool ("chip_enable_factory_data" "true")
diff --git a/config/tizen/chip-gn/platform/BUILD.gn b/config/tizen/chip-gn/platform/BUILD.gn
index bea16af373fd15..7d2f25e9bcf4f8 100644
--- a/config/tizen/chip-gn/platform/BUILD.gn
+++ b/config/tizen/chip-gn/platform/BUILD.gn
@@ -20,10 +20,6 @@ import("${chip_root}/config/tizen/chip-gn/args.gni")
import("${build_root}/config/linux/pkg_config.gni")
import("${chip_root}/src/platform/device.gni")
-pkg_config("capi-system-peripheral-io") {
- packages = [ "capi-system-peripheral-io" ]
-}
-
pkg_config("dlog") {
packages = [ "dlog" ]
}
@@ -73,7 +69,6 @@ source_set("tizen") {
":glib",
":capi-appfw-preference",
":capi-system-info",
- ":capi-system-peripheral-io",
]
if (chip_mdns == "platform") {
diff --git a/config/zephyr/Kconfig b/config/zephyr/Kconfig
index 8df6c418aa42e3..ad36a663b5fd1f 100644
--- a/config/zephyr/Kconfig
+++ b/config/zephyr/Kconfig
@@ -334,6 +334,7 @@ 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
@@ -347,33 +348,57 @@ config CHIP_ICD_FAST_POLLING_INTERVAL
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_INTERVAL.
+ CHIP_ICD_ACTIVE_MODE_DURATION.
-config CHIP_ICD_IDLE_MODE_INTERVAL
- int "Intermittently Connected Device idle mode interval (s)"
+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 interval in seconds.
+ 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_INTERVAL
- int "Intermittently Connected Device active mode interval (ms)"
+config CHIP_ICD_ACTIVE_MODE_DURATION
+ int "Intermittently Connected Device active mode duration (ms)"
default 300
help
- Provides the Intermittently Connected Device active mode interval in milliseconds.
+ 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 "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
+ 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.
diff --git a/data_model/clusters/ConcentrationMeasurement.xml b/data_model/clusters/ConcentrationMeasurement.xml
index c5e2971406f676..4b51cffa124321 100644
--- a/data_model/clusters/ConcentrationMeasurement.xml
+++ b/data_model/clusters/ConcentrationMeasurement.xml
@@ -261,4 +261,4 @@ Davis, CA 95616, USA
-
+
\ No newline at end of file
diff --git a/data_model/clusters/DemandResponseLoadControl.xml b/data_model/clusters/DemandResponseLoadControl.xml
index 170cde68e8acff..a5322bfb4f7206 100644
--- a/data_model/clusters/DemandResponseLoadControl.xml
+++ b/data_model/clusters/DemandResponseLoadControl.xml
@@ -248,17 +248,14 @@ Davis, CA 95616, USA
-
-
-
@@ -266,13 +263,11 @@ Davis, CA 95616, USA
-
-
@@ -286,7 +281,6 @@ Davis, CA 95616, USA
-
@@ -294,7 +288,6 @@ Davis, CA 95616, USA
-
@@ -302,7 +295,6 @@ Davis, CA 95616, USA
-
@@ -310,7 +302,6 @@ Davis, CA 95616, USA
-
diff --git a/data_model/clusters/DeviceEnergyManagement.xml b/data_model/clusters/DeviceEnergyManagement.xml
index 6d6477cc72fb7c..21f74a737d52cb 100644
--- a/data_model/clusters/DeviceEnergyManagement.xml
+++ b/data_model/clusters/DeviceEnergyManagement.xml
@@ -130,10 +130,10 @@ Davis, CA 95616, USA
- -
+
-
- -
+
-
@@ -237,13 +237,13 @@ Davis, CA 95616, USA
- -
+
-
- -
+
-
- -
+
-
@@ -257,36 +257,31 @@ Davis, CA 95616, USA
-
- -
+
-
-
-
-
-
-
@@ -294,181 +289,146 @@ Davis, CA 95616, USA
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -477,7 +437,6 @@ Davis, CA 95616, USA
-
@@ -486,7 +445,6 @@ Davis, CA 95616, USA
-
@@ -498,7 +456,6 @@ Davis, CA 95616, USA
-
diff --git a/data_model/clusters/DiagnosticsGeneral.xml b/data_model/clusters/DiagnosticsGeneral.xml
index 3ea1b41fc62a75..072d75d64acc31 100644
--- a/data_model/clusters/DiagnosticsGeneral.xml
+++ b/data_model/clusters/DiagnosticsGeneral.xml
@@ -58,9 +58,14 @@ Davis, CA 95616, USA
-
+
+
+
+
+
+
-
@@ -176,40 +181,32 @@ Davis, CA 95616, USA
-
-
-
-
-
-
-
-
@@ -289,6 +286,33 @@ Davis, CA 95616, USA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/clusters/ElectricalEnergyMeasurement.xml b/data_model/clusters/ElectricalEnergyMeasurement.xml
index bcf229c0266009..c6bf8e73863c41 100644
--- a/data_model/clusters/ElectricalEnergyMeasurement.xml
+++ b/data_model/clusters/ElectricalEnergyMeasurement.xml
@@ -67,50 +67,21 @@ Davis, CA 95616, USA
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
@@ -120,17 +91,7 @@ Davis, CA 95616, USA
-
-
-
-
-
-
-
-
-
-
-
+
@@ -140,7 +101,7 @@ Davis, CA 95616, USA
-
+
@@ -150,47 +111,7 @@ Davis, CA 95616, USA
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -200,122 +121,57 @@ Davis, CA 95616, USA
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
-
+
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
diff --git a/data_model/clusters/ElectricalPowerMeasurement.xml b/data_model/clusters/ElectricalPowerMeasurement.xml
index 996fb0ce59ec11..aa5baeaf368cbb 100644
--- a/data_model/clusters/ElectricalPowerMeasurement.xml
+++ b/data_model/clusters/ElectricalPowerMeasurement.xml
@@ -59,238 +59,151 @@ Davis, CA 95616, USA
-
+
-
+
-
+
-
+
-
+
-
+
-
- -
-
-
- -
-
-
- -
+
+
-
- -
+
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
-
-
- -
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
-
+
-
+
-
+
+
-
+
-
+
-
+
+
-
+
-
+
-
+
+
-
+
-
+
-
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
-
+
@@ -299,7 +212,7 @@ Davis, CA 95616, USA
-
+
@@ -308,51 +221,28 @@ Davis, CA 95616, USA
-
-
-
-
-
-
-
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/data_model/clusters/EnergyCalendar.xml b/data_model/clusters/EnergyCalendar.xml
index 0f9cf3c087ecf8..a21845d92c47c4 100644
--- a/data_model/clusters/EnergyCalendar.xml
+++ b/data_model/clusters/EnergyCalendar.xml
@@ -195,9 +195,21 @@ Davis, CA 95616, USA
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/clusters/EnergyEVSE.xml b/data_model/clusters/EnergyEVSE.xml
index c788edc054ede0..f59d41807d43e6 100644
--- a/data_model/clusters/EnergyEVSE.xml
+++ b/data_model/clusters/EnergyEVSE.xml
@@ -227,12 +227,10 @@ Davis, CA 95616, USA
-
-
@@ -241,7 +239,6 @@ Davis, CA 95616, USA
-
@@ -277,19 +274,19 @@ Davis, CA 95616, USA
-
+
-
+
-
+
@@ -297,7 +294,7 @@ Davis, CA 95616, USA
-
+
@@ -421,11 +418,11 @@ Davis, CA 95616, USA
-
+
-
+
@@ -439,7 +436,7 @@ Davis, CA 95616, USA
-
+
@@ -512,7 +509,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/clusters/EnergyPreference.xml b/data_model/clusters/EnergyPreference.xml
index fa50bbe839ae65..7156be8eafe025 100644
--- a/data_model/clusters/EnergyPreference.xml
+++ b/data_model/clusters/EnergyPreference.xml
@@ -85,11 +85,9 @@ Davis, CA 95616, USA
-
-
diff --git a/data_model/clusters/EnergyPrice.xml b/data_model/clusters/EnergyPrice.xml
index b358e75ab53a5c..23072a6a99ead5 100644
--- a/data_model/clusters/EnergyPrice.xml
+++ b/data_model/clusters/EnergyPrice.xml
@@ -113,15 +113,12 @@ Davis, CA 95616, USA
-
-
-
@@ -129,35 +126,28 @@ Davis, CA 95616, USA
-
-
-
-
-
-
-
diff --git a/data_model/clusters/Group-Key-Management-Cluster.xml b/data_model/clusters/Group-Key-Management-Cluster.xml
index ad86b24e3bd387..43e7a395ac8467 100644
--- a/data_model/clusters/Group-Key-Management-Cluster.xml
+++ b/data_model/clusters/Group-Key-Management-Cluster.xml
@@ -87,16 +87,13 @@ Davis, CA 95616, USA
-
-
-
diff --git a/data_model/clusters/ICDManagement.xml b/data_model/clusters/ICDManagement.xml
index f138e7037687b6..3cc6c9bfab4416 100644
--- a/data_model/clusters/ICDManagement.xml
+++ b/data_model/clusters/ICDManagement.xml
@@ -79,11 +79,11 @@ Davis, CA 95616, USA
-
+
-
+
@@ -185,7 +185,7 @@ Davis, CA 95616, USA
-
+
@@ -197,7 +197,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/clusters/Messages.xml b/data_model/clusters/Messages.xml
index a976e7d260f0ff..9dd223d9a63f46 100644
--- a/data_model/clusters/Messages.xml
+++ b/data_model/clusters/Messages.xml
@@ -193,35 +193,35 @@ Davis, CA 95616, USA
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -248,10 +248,32 @@ Davis, CA 95616, USA
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -262,4 +284,44 @@ Davis, CA 95616, USA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/clusters/ModeBase.xml b/data_model/clusters/ModeBase.xml
index 1e6a81807e29a2..5774a7fec0c5a5 100644
--- a/data_model/clusters/ModeBase.xml
+++ b/data_model/clusters/ModeBase.xml
@@ -70,29 +70,24 @@ Require at least one standard mode tag. Define reserved ranges for base/derived
-
-
-
-
-
diff --git a/data_model/clusters/ModeSelect.xml b/data_model/clusters/ModeSelect.xml
index 2fff860458f0e5..19fe502c1fcfe2 100644
--- a/data_model/clusters/ModeSelect.xml
+++ b/data_model/clusters/ModeSelect.xml
@@ -69,29 +69,24 @@ Davis, CA 95616, USA
-
-
-
-
-
diff --git a/data_model/clusters/Mode_DeviceEnergyManagement.xml b/data_model/clusters/Mode_DeviceEnergyManagement.xml
index dc28204cecb511..4181b9b60ead42 100644
--- a/data_model/clusters/Mode_DeviceEnergyManagement.xml
+++ b/data_model/clusters/Mode_DeviceEnergyManagement.xml
@@ -62,30 +62,10 @@ Davis, CA 95616, USA
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/data_model/clusters/OccupancySensing.xml b/data_model/clusters/OccupancySensing.xml
index 1dd5cbe6156865..d52f118b70cbde 100644
--- a/data_model/clusters/OccupancySensing.xml
+++ b/data_model/clusters/OccupancySensing.xml
@@ -55,11 +55,12 @@ Connectivity Standards Alliance
508 Second Street, Suite 206
Davis, CA 95616, USA
-->
-
+
+
@@ -159,12 +160,10 @@ Davis, CA 95616, USA
-
-
diff --git a/data_model/clusters/PowerSourceConfigurationCluster.xml b/data_model/clusters/PowerSourceConfigurationCluster.xml
index b2eb27fd4bd7cc..5548bf6ad8e6b5 100644
--- a/data_model/clusters/PowerSourceConfigurationCluster.xml
+++ b/data_model/clusters/PowerSourceConfigurationCluster.xml
@@ -59,7 +59,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/clusters/PowerTopology.xml b/data_model/clusters/PowerTopology.xml
new file mode 100644
index 00000000000000..c8d90baeeded19
--- /dev/null
+++ b/data_model/clusters/PowerTopology.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/clusters/ResourceMonitoring.xml b/data_model/clusters/ResourceMonitoring.xml
index 9772efbd429982..17fc7554ac41f0 100644
--- a/data_model/clusters/ResourceMonitoring.xml
+++ b/data_model/clusters/ResourceMonitoring.xml
@@ -116,12 +116,10 @@ Davis, CA 95616, USA
-
-
@@ -171,4 +169,4 @@ Davis, CA 95616, USA
-
+
\ No newline at end of file
diff --git a/data_model/clusters/Scenes.xml b/data_model/clusters/Scenes.xml
index 2168c164a02460..0c4347c4e8be8a 100644
--- a/data_model/clusters/Scenes.xml
+++ b/data_model/clusters/Scenes.xml
@@ -1,59 +1,59 @@
-
@@ -73,50 +73,39 @@ Davis, CA 95616, USA
-
-
-
-
-
-
-
-
-
-
-
@@ -146,24 +135,22 @@ Davis, CA 95616, USA
-
-
+
-
+
-
+
-
diff --git a/data_model/clusters/Thermostat.xml b/data_model/clusters/Thermostat.xml
index b7e811bb8738ae..400d55a048a116 100644
--- a/data_model/clusters/Thermostat.xml
+++ b/data_model/clusters/Thermostat.xml
@@ -451,27 +451,16 @@ Davis, CA 95616, USA
-
-
-
-
-
-
-
-
-
-
+
-
-
@@ -701,7 +690,7 @@ Davis, CA 95616, USA
-
+
@@ -742,7 +731,7 @@ Davis, CA 95616, USA
-
+
@@ -772,7 +761,7 @@ Davis, CA 95616, USA
-
+
@@ -898,7 +887,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/clusters/WaterContentMeasurement.xml b/data_model/clusters/WaterContentMeasurement.xml
index bca3f6de8e4101..8b1ff6a9a049bc 100644
--- a/data_model/clusters/WaterContentMeasurement.xml
+++ b/data_model/clusters/WaterContentMeasurement.xml
@@ -87,4 +87,4 @@ Davis, CA 95616, USA
-
+
\ No newline at end of file
diff --git a/data_model/clusters/WiFiNetworkManagement.xml b/data_model/clusters/WiFiNetworkManagement.xml
new file mode 100644
index 00000000000000..6308eca7e4b184
--- /dev/null
+++ b/data_model/clusters/WiFiNetworkManagement.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/clusters/bridge-clusters-Actions.xml b/data_model/clusters/bridge-clusters-Actions.xml
index ccacb56e8b2576..51f7ee79bb4bad 100644
--- a/data_model/clusters/bridge-clusters-Actions.xml
+++ b/data_model/clusters/bridge-clusters-Actions.xml
@@ -157,28 +157,22 @@ Davis, CA 95616, USA
-
-
-
-
-
-
diff --git a/data_model/device_types/Aggregator.xml b/data_model/device_types/Aggregator.xml
index f9bff7aa27cd55..4e0eb1cee512c3 100644
--- a/data_model/device_types/Aggregator.xml
+++ b/data_model/device_types/Aggregator.xml
@@ -60,7 +60,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/device_types/ColorTemperatureLight.xml b/data_model/device_types/ColorTemperatureLight.xml
index 210ce03b2da41c..5d6ac140803e23 100644
--- a/data_model/device_types/ColorTemperatureLight.xml
+++ b/data_model/device_types/ColorTemperatureLight.xml
@@ -60,7 +60,7 @@ Davis, CA 95616, USA
-
+
@@ -114,12 +114,6 @@ Davis, CA 95616, USA
-
-
-
-
-
-
diff --git a/data_model/device_types/ContentApp.xml b/data_model/device_types/ContentApp.xml
index a6eb1a4ca0d424..0db03141e7f9a1 100644
--- a/data_model/device_types/ContentApp.xml
+++ b/data_model/device_types/ContentApp.xml
@@ -61,7 +61,6 @@ Davis, CA 95616, USA
-
diff --git a/data_model/device_types/DimmableLight.xml b/data_model/device_types/DimmableLight.xml
index ce5dce7c8bf192..42c7d20fb4caad 100644
--- a/data_model/device_types/DimmableLight.xml
+++ b/data_model/device_types/DimmableLight.xml
@@ -55,12 +55,11 @@ Connectivity Standards Alliance
508 Second Street, Suite 206
Davis, CA 95616, USA
-->
-
+
-
@@ -114,12 +113,6 @@ Davis, CA 95616, USA
-
-
-
-
-
-
diff --git a/data_model/device_types/DimmablePlug-InUnit.xml b/data_model/device_types/DimmablePlug-InUnit.xml
index 0756ed62baf9c0..a41db3ad0ae255 100644
--- a/data_model/device_types/DimmablePlug-InUnit.xml
+++ b/data_model/device_types/DimmablePlug-InUnit.xml
@@ -60,7 +60,7 @@ Davis, CA 95616, USA
-
+
@@ -114,12 +114,6 @@ Davis, CA 95616, USA
-
-
-
-
-
-
diff --git a/data_model/device_types/DoorLockController.xml b/data_model/device_types/DoorLockController.xml
index a41cdad0e1bf5a..0e4529c8b5e381 100644
--- a/data_model/device_types/DoorLockController.xml
+++ b/data_model/device_types/DoorLockController.xml
@@ -63,16 +63,6 @@ Davis, CA 95616, USA
-
-
-
-
-
-
-
-
-
-
diff --git a/data_model/device_types/EVSE.xml b/data_model/device_types/EVSE.xml
index 42636733090c9c..f15b1db770b454 100644
--- a/data_model/device_types/EVSE.xml
+++ b/data_model/device_types/EVSE.xml
@@ -68,12 +68,6 @@ Davis, CA 95616, USA
-
-
-
-
-
-
diff --git a/data_model/device_types/ElectricalSensor.xml b/data_model/device_types/ElectricalSensor.xml
new file mode 100644
index 00000000000000..62c6dd9b4128b2
--- /dev/null
+++ b/data_model/device_types/ElectricalSensor.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ExtendedColorLight.xml b/data_model/device_types/ExtendedColorLight.xml
index a0337009f660eb..73490485fa27fa 100644
--- a/data_model/device_types/ExtendedColorLight.xml
+++ b/data_model/device_types/ExtendedColorLight.xml
@@ -60,7 +60,7 @@ Davis, CA 95616, USA
-
+
@@ -114,12 +114,6 @@ Davis, CA 95616, USA
-
-
-
-
-
-
diff --git a/data_model/device_types/NetworkInfraManager.xml b/data_model/device_types/NetworkInfraManager.xml
index 750a97f22cad86..cc7e22295f40be 100644
--- a/data_model/device_types/NetworkInfraManager.xml
+++ b/data_model/device_types/NetworkInfraManager.xml
@@ -65,5 +65,8 @@ Davis, CA 95616, USA
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/OnOffLight.xml b/data_model/device_types/OnOffLight.xml
index ea520612b9dc42..9762c718dcc05b 100644
--- a/data_model/device_types/OnOffLight.xml
+++ b/data_model/device_types/OnOffLight.xml
@@ -55,12 +55,11 @@ Connectivity Standards Alliance
508 Second Street, Suite 206
Davis, CA 95616, USA
-->
-
+
-
@@ -114,12 +113,6 @@ Davis, CA 95616, USA
-
-
-
-
-
-
diff --git a/data_model/device_types/OnOffPlug-inUnit.xml b/data_model/device_types/OnOffPlug-inUnit.xml
index d63e3b22e81aae..41d0a1398ad6f3 100644
--- a/data_model/device_types/OnOffPlug-inUnit.xml
+++ b/data_model/device_types/OnOffPlug-inUnit.xml
@@ -55,12 +55,11 @@ Connectivity Standards Alliance
508 Second Street, Suite 206
Davis, CA 95616, USA
-->
-
+
-
@@ -114,12 +113,6 @@ Davis, CA 95616, USA
-
-
-
-
-
-
diff --git a/data_model/device_types/PowerSource.xml b/data_model/device_types/PowerSource.xml
index 3767d5c19ad025..9ed71e905535bd 100644
--- a/data_model/device_types/PowerSource.xml
+++ b/data_model/device_types/PowerSource.xml
@@ -55,21 +55,14 @@ Connectivity Standards Alliance
508 Second Street, Suite 206
Davis, CA 95616, USA
-->
-
+
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/data_model/device_types/TemperatureControlledCabinet.xml b/data_model/device_types/TemperatureControlledCabinet.xml
index 090931ace14f61..b39861690cad61 100644
--- a/data_model/device_types/TemperatureControlledCabinet.xml
+++ b/data_model/device_types/TemperatureControlledCabinet.xml
@@ -66,6 +66,14 @@ Davis, CA 95616, USA
+
+
+
+
+
+
+
+
diff --git a/data_model/device_types/Thermostat.xml b/data_model/device_types/Thermostat.xml
index 8676fe965ef280..fc154468e97c5f 100644
--- a/data_model/device_types/Thermostat.xml
+++ b/data_model/device_types/Thermostat.xml
@@ -97,9 +97,6 @@ Davis, CA 95616, USA
-
-
-
diff --git a/data_model/spec_sha b/data_model/spec_sha
index 9c275037d5b895..ec683a1872fc3e 100644
--- a/data_model/spec_sha
+++ b/data_model/spec_sha
@@ -1 +1 @@
-7e16e82e5264105bdc61d6bc8fe18095959b8292
+72ce960f71810d6ca96125aea54e4fb0a9631e34
diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
index 0e24f102d7c8ed..64d3a8f6283dba 100644
--- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
+++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
@@ -2732,7 +2732,7 @@ provisional cluster OvenMode = 73 {
/** This cluster supports remotely monitoring and controling the different typs of
functionality available to a drying device, such as a laundry dryer. */
-cluster LaundryDryerControls = 74 {
+provisional cluster LaundryDryerControls = 74 {
revision 1;
enum DrynessLevelEnum : enum8 {
diff --git a/examples/all-clusters-app/all-clusters-common/include/operational-state-delegate-impl.h b/examples/all-clusters-app/all-clusters-common/include/operational-state-delegate-impl.h
index 0bcb76f324a1da..5c6f70bd28a50c 100644
--- a/examples/all-clusters-app/all-clusters-common/include/operational-state-delegate-impl.h
+++ b/examples/all-clusters-app/all-clusters-common/include/operational-state-delegate-impl.h
@@ -20,7 +20,7 @@
#include
#include
-#include
+
#include
namespace chip {
diff --git a/examples/all-clusters-app/all-clusters-common/include/oven-operational-state-delegate.h b/examples/all-clusters-app/all-clusters-common/include/oven-operational-state-delegate.h
index 6d7338214f77ae..f68eec20692d0b 100644
--- a/examples/all-clusters-app/all-clusters-common/include/oven-operational-state-delegate.h
+++ b/examples/all-clusters-app/all-clusters-common/include/oven-operational-state-delegate.h
@@ -20,7 +20,7 @@
#include
#include
-#include
+
#include
namespace chip {
diff --git a/examples/all-clusters-app/all-clusters-common/include/rvc-operational-state-delegate-impl.h b/examples/all-clusters-app/all-clusters-common/include/rvc-operational-state-delegate-impl.h
index 4417f9f5a3ab4a..60a2f5d530f9b9 100644
--- a/examples/all-clusters-app/all-clusters-common/include/rvc-operational-state-delegate-impl.h
+++ b/examples/all-clusters-app/all-clusters-common/include/rvc-operational-state-delegate-impl.h
@@ -20,7 +20,7 @@
#include
#include
-#include
+
#include
namespace chip {
diff --git a/examples/all-clusters-app/all-clusters-common/src/binding-handler.cpp b/examples/all-clusters-app/all-clusters-common/src/binding-handler.cpp
index cd16efd4a3f054..95f50acce7c4ef 100644
--- a/examples/all-clusters-app/all-clusters-common/src/binding-handler.cpp
+++ b/examples/all-clusters-app/all-clusters-common/src/binding-handler.cpp
@@ -73,13 +73,13 @@ static void BoundDeviceChangedHandler(const EmberBindingTableEntry & binding, ch
using namespace chip;
using namespace chip::app;
- if (binding.type == EMBER_MULTICAST_BINDING)
+ if (binding.type == MATTER_MULTICAST_BINDING)
{
ChipLogError(NotSpecified, "Group binding is not supported now");
return;
}
- if (binding.type == EMBER_UNICAST_BINDING && binding.local == 1 &&
+ if (binding.type == MATTER_UNICAST_BINDING && binding.local == 1 &&
(!binding.clusterId.HasValue() || binding.clusterId.Value() == Clusters::OnOff::Id))
{
auto onSuccess = [](const ConcreteCommandPath & commandPath, const StatusIB & status, const auto & dataResponse) {
diff --git a/examples/all-clusters-app/all-clusters-common/src/dishwasher-alarm-stub.cpp b/examples/all-clusters-app/all-clusters-common/src/dishwasher-alarm-stub.cpp
index 58d393752c8bfd..f700df068b529f 100644
--- a/examples/all-clusters-app/all-clusters-common/src/dishwasher-alarm-stub.cpp
+++ b/examples/all-clusters-app/all-clusters-common/src/dishwasher-alarm-stub.cpp
@@ -17,7 +17,6 @@
*/
#include
#include
-#include
using namespace chip;
diff --git a/examples/all-clusters-app/ameba/main/BindingHandler.cpp b/examples/all-clusters-app/ameba/main/BindingHandler.cpp
index 64ccb619a2edf5..b00322b44e4f0b 100644
--- a/examples/all-clusters-app/ameba/main/BindingHandler.cpp
+++ b/examples/all-clusters-app/ameba/main/BindingHandler.cpp
@@ -58,7 +58,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
if (data->isReadAttribute)
{
// It should always enter here if isReadAttribute is true
- if (binding.type == EMBER_UNICAST_BINDING && !data->isGroup)
+ if (binding.type == MATTER_UNICAST_BINDING && !data->isGroup)
{
switch (data->clusterId)
{
@@ -82,7 +82,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
}
else
{
- if (binding.type == EMBER_MULTICAST_BINDING && data->isGroup)
+ if (binding.type == MATTER_MULTICAST_BINDING && data->isGroup)
{
switch (data->clusterId)
{
@@ -103,7 +103,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
break;
}
}
- else if (binding.type == EMBER_UNICAST_BINDING && !data->isGroup)
+ else if (binding.type == MATTER_UNICAST_BINDING && !data->isGroup)
{
switch (data->clusterId)
{
@@ -190,7 +190,7 @@ CHIP_ERROR BindingGroupBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 2, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_MULTICAST_BINDING;
+ entry->type = MATTER_MULTICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->groupId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
@@ -205,7 +205,7 @@ CHIP_ERROR BindingUnicastBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 3, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_UNICAST_BINDING;
+ entry->type = MATTER_UNICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->nodeId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
diff --git a/examples/all-clusters-app/asr/src/AppTask.cpp b/examples/all-clusters-app/asr/src/AppTask.cpp
index 069954f7adf70d..92b6aaef3dba49 100644
--- a/examples/all-clusters-app/asr/src/AppTask.cpp
+++ b/examples/all-clusters-app/asr/src/AppTask.cpp
@@ -272,7 +272,7 @@ void AppTask::OnOffUpdateClusterState(void)
if (status != Status::Success)
{
- ASR_LOG("ERR: updating on/off %x", status);
+ ASR_LOG("ERR: updating on/off %x", to_underlying(status));
}
}
diff --git a/examples/all-clusters-app/cc13x2x7_26x2x7/BUILD.gn b/examples/all-clusters-app/cc13x2x7_26x2x7/BUILD.gn
index 155bdacc2a8e4b..6cf5941e79d2c4 100644
--- a/examples/all-clusters-app/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/all-clusters-app/cc13x2x7_26x2x7/BUILD.gn
@@ -60,7 +60,7 @@ ti_sysconfig("sysconfig") {
#"ti_build_config.opt",
]
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x2x7_26x2x7_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/all-clusters-app/cc13x4_26x4/BUILD.gn b/examples/all-clusters-app/cc13x4_26x4/BUILD.gn
index 45d8d66d31c4b5..eb118372b7bd33 100644
--- a/examples/all-clusters-app/cc13x4_26x4/BUILD.gn
+++ b/examples/all-clusters-app/cc13x4_26x4/BUILD.gn
@@ -63,7 +63,7 @@ ti_sysconfig("sysconfig") {
#"ti_build_config.opt",
]
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x4_26x4_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp b/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp
index e14bf5ac6278ba..b75b5abfc74294 100644
--- a/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp
+++ b/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp
@@ -413,7 +413,7 @@ void AppTask::OnOffUpdateClusterState(intptr_t context)
if (status != Protocols::InteractionModel::Status::Success)
{
- P6_LOG("ERR: updating on/off %x", status);
+ P6_LOG("ERR: updating on/off %x", to_underlying(status));
}
}
diff --git a/examples/all-clusters-app/linux/BUILD.gn b/examples/all-clusters-app/linux/BUILD.gn
index 65d00a6e0fc914..b0fdcd4e0af68f 100644
--- a/examples/all-clusters-app/linux/BUILD.gn
+++ b/examples/all-clusters-app/linux/BUILD.gn
@@ -19,6 +19,14 @@ import("${build_root}/config/compiler/compiler.gni")
import("${chip_root}/src/lib/lib.gni")
import("${chip_root}/src/platform/device.gni")
+import("${chip_root}/examples/common/pigweed/pigweed_rpcs.gni")
+
+if (chip_enable_pw_rpc) {
+ import("//build_overrides/pigweed.gni")
+ import("$dir_pw_build/target_types.gni")
+ import("${chip_root}/examples/common/pigweed/rpc_config.gni")
+}
+
source_set("chip-all-clusters-common") {
sources = [
"${chip_root}/examples/all-clusters-app/all-clusters-common/src/air-quality-instance.cpp",
@@ -77,7 +85,19 @@ source_set("chip-all-clusters-common") {
"${chip_root}/examples/energy-management-app/energy-management-common/include",
]
- cflags = [ "-Wconversion" ]
+ if (chip_enable_pw_rpc) {
+ defines = rpc_defines
+ sources += rpc_sources
+ deps += rpc_deps
+
+ deps += pw_build_LINK_DEPS
+
+ include_dirs += [ "${chip_root}/examples/common" ]
+ } else {
+ # The system_rpc_server.cc file is in pigweed and doesn't compile with
+ # -Wconversion, remove check for RPC build only.
+ cflags = [ "-Wconversion" ]
+ }
if (chip_build_libshell) {
defines = [ "ENABLE_CHIP_SHELL" ]
diff --git a/examples/all-clusters-app/linux/with_pw_rpc.gni b/examples/all-clusters-app/linux/with_pw_rpc.gni
new file mode 100644
index 00000000000000..0f1ab1ea89c121
--- /dev/null
+++ b/examples/all-clusters-app/linux/with_pw_rpc.gni
@@ -0,0 +1,42 @@
+# 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.
+
+# add this gni as import in your build args to use pigweed in the example
+# 'import("//with_pw_rpc.gni")'
+
+import("//build_overrides/chip.gni")
+
+import("${chip_root}/config/standalone/args.gni")
+
+import("//build_overrides/pigweed.gni")
+
+pw_log_BACKEND = "$dir_pw_log_basic"
+pw_assert_BACKEND = "$dir_pw_assert_log:check_backend"
+pw_sys_io_BACKEND = "$dir_pw_sys_io_stdio"
+pw_trace_BACKEND = "$dir_pw_trace_tokenized"
+pw_unit_test_MAIN = "$dir_pw_unit_test:logging_main"
+pw_rpc_system_server_BACKEND = "${chip_root}/config/linux/lib/pw_rpc:pw_rpc"
+dir_pw_third_party_nanopb = "${chip_root}/third_party/nanopb/repo"
+pw_chrono_SYSTEM_CLOCK_BACKEND = "$dir_pw_chrono_stl:system_clock"
+pw_sync_MUTEX_BACKEND = "$dir_pw_sync_stl:mutex_backend"
+pw_thread_YIELD_BACKEND = "$dir_pw_thread_stl:yield"
+pw_thread_SLEEP_BACKEND = "$dir_pw_thread_stl:sleep"
+
+pw_build_LINK_DEPS = [
+ "$dir_pw_assert:impl",
+ "$dir_pw_log:impl",
+]
+
+chip_enable_pw_rpc = true
+chip_use_pw_logging = true
diff --git a/examples/all-clusters-app/nrfconnect/main/ZclDoorLockCallbacks.cpp b/examples/all-clusters-app/nrfconnect/main/ZclDoorLockCallbacks.cpp
index 8f741fcb83b7c3..eaf2bda516f23e 100644
--- a/examples/all-clusters-app/nrfconnect/main/ZclDoorLockCallbacks.cpp
+++ b/examples/all-clusters-app/nrfconnect/main/ZclDoorLockCallbacks.cpp
@@ -58,6 +58,6 @@ void emberAfDoorLockClusterInitCallback(EndpointId endpoint)
Protocols::InteractionModel::Status status = DoorLock::Attributes::FeatureMap::Set(endpoint, 0);
if (status != Protocols::InteractionModel::Status::Success)
{
- LOG_ERR("Updating feature map %x", status);
+ LOG_ERR("Updating feature map %x", to_underlying(status));
}
}
diff --git a/examples/all-clusters-app/nxp/mw320/binding-handler.cpp b/examples/all-clusters-app/nxp/mw320/binding-handler.cpp
index 6ad25c9d46bc34..ace7da026b253a 100644
--- a/examples/all-clusters-app/nxp/mw320/binding-handler.cpp
+++ b/examples/all-clusters-app/nxp/mw320/binding-handler.cpp
@@ -74,13 +74,13 @@ static void BoundDeviceChangedHandler(const EmberBindingTableEntry & binding, ch
using namespace chip;
using namespace chip::app;
- if (binding.type == EMBER_MULTICAST_BINDING)
+ if (binding.type == MATTER_MULTICAST_BINDING)
{
ChipLogError(NotSpecified, "Group binding is not supported now");
return;
}
- if (binding.type == EMBER_UNICAST_BINDING && binding.local == 1 &&
+ if (binding.type == MATTER_UNICAST_BINDING && binding.local == 1 &&
(!binding.clusterId.HasValue() || binding.clusterId.Value() == Clusters::OnOff::Id))
{
auto onSuccess = [](const ConcreteCommandPath & commandPath, const StatusIB & status, const auto & dataResponse) {
diff --git a/examples/all-clusters-app/telink/src/ZclDoorLockCallbacks.cpp b/examples/all-clusters-app/telink/src/ZclDoorLockCallbacks.cpp
index 8f741fcb83b7c3..eaf2bda516f23e 100644
--- a/examples/all-clusters-app/telink/src/ZclDoorLockCallbacks.cpp
+++ b/examples/all-clusters-app/telink/src/ZclDoorLockCallbacks.cpp
@@ -58,6 +58,6 @@ void emberAfDoorLockClusterInitCallback(EndpointId endpoint)
Protocols::InteractionModel::Status status = DoorLock::Attributes::FeatureMap::Set(endpoint, 0);
if (status != Protocols::InteractionModel::Status::Success)
{
- LOG_ERR("Updating feature map %x", status);
+ LOG_ERR("Updating feature map %x", to_underlying(status));
}
}
diff --git a/examples/all-clusters-minimal-app/asr/src/AppTask.cpp b/examples/all-clusters-minimal-app/asr/src/AppTask.cpp
index b97900d7533bd3..d6f77d2f28a836 100644
--- a/examples/all-clusters-minimal-app/asr/src/AppTask.cpp
+++ b/examples/all-clusters-minimal-app/asr/src/AppTask.cpp
@@ -225,7 +225,7 @@ void AppTask::OnOffUpdateClusterState(void)
if (status != Protocols::InteractionModel::Status::Success)
{
- ASR_LOG("ERR: updating on/off %x", status);
+ ASR_LOG("ERR: updating on/off %x", to_underlying(status));
}
}
diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp b/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp
index dd43df8ec5f03f..7cbaf6f447d405 100644
--- a/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp
+++ b/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp
@@ -410,7 +410,7 @@ void AppTask::OnOffUpdateClusterState(intptr_t context)
if (status != Protocols::InteractionModel::Status::Success)
{
- P6_LOG("ERR: updating on/off %x", status);
+ P6_LOG("ERR: updating on/off %x", to_underlying(status));
}
}
diff --git a/examples/bridge-app/telink/src/AppTask.cpp b/examples/bridge-app/telink/src/AppTask.cpp
index 2f6f273cc0cbad..d21897bd2d36b6 100644
--- a/examples/bridge-app/telink/src/AppTask.cpp
+++ b/examples/bridge-app/telink/src/AppTask.cpp
@@ -597,12 +597,12 @@ void AppTask::UpdateClusterState(void)
if (status != Protocols::InteractionModel::Status::Success)
{
- LOG_ERR("Update OnOff fail: %x", status);
+ LOG_ERR("Update OnOff fail: %x", to_underlying(status));
}
uint8_t setLevel = sAppTask.mPwmRgbBlueLed.GetLevel();
status = Clusters::LevelControl::Attributes::CurrentLevel::Set(kExampleEndpointId, setLevel);
if (status != Protocols::InteractionModel::Status::Success)
{
- LOG_ERR("Update CurrentLevel fail: %x", status);
+ LOG_ERR("Update CurrentLevel fail: %x", to_underlying(status));
}
}
diff --git a/examples/chef/common/chef-rvc-operational-state-delegate.h b/examples/chef/common/chef-rvc-operational-state-delegate.h
index c8d63c2bb6efc2..f487e38000771d 100644
--- a/examples/chef/common/chef-rvc-operational-state-delegate.h
+++ b/examples/chef/common/chef-rvc-operational-state-delegate.h
@@ -20,7 +20,7 @@
#include
#include
-#include
+
#include
namespace chip {
diff --git a/examples/chip-tool/py_matter_chip_tool_adapter/matter_chip_tool_adapter/encoder.py b/examples/chip-tool/py_matter_chip_tool_adapter/matter_chip_tool_adapter/encoder.py
index 355a2b18433e31..f4e8e6711d7105 100644
--- a/examples/chip-tool/py_matter_chip_tool_adapter/matter_chip_tool_adapter/encoder.py
+++ b/examples/chip-tool/py_matter_chip_tool_adapter/matter_chip_tool_adapter/encoder.py
@@ -148,6 +148,17 @@
}
},
+ 'Bdx': {
+ 'commands': {
+ 'Download': {
+ 'arguments': {
+ 'LogType': 'log-type',
+ },
+ 'has_endpoint': False,
+ }
+ }
+ },
+
'DelayCommands': {
'alias': 'delay',
'commands': {
diff --git a/examples/common/imgui_ui/windows/light.cpp b/examples/common/imgui_ui/windows/light.cpp
index a2dd030c218bec..86899e044b2ed1 100644
--- a/examples/common/imgui_ui/windows/light.cpp
+++ b/examples/common/imgui_ui/windows/light.cpp
@@ -76,7 +76,7 @@ void Light::UpdateState()
if (status != chip::Protocols::InteractionModel::Status::Success)
{
- ChipLogError(AppServer, "Failed to set on/off value: %d", status);
+ ChipLogError(AppServer, "Failed to set on/off value: %d", chip::to_underlying(status));
}
mTargetLightIsOn.ClearValue();
diff --git a/examples/common/pigweed/nxp/PigweedLoggerMutex.cpp b/examples/common/pigweed/nxp/PigweedLoggerMutex.cpp
new file mode 100644
index 00000000000000..ce5f5a9be0d21d
--- /dev/null
+++ b/examples/common/pigweed/nxp/PigweedLoggerMutex.cpp
@@ -0,0 +1,27 @@
+/*
+ *
+ * Copyright (c) 2023 Project CHIP Authors
+ * 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.
+ */
+
+#include "PigweedLoggerMutex.h"
+
+namespace chip {
+namespace rpc {
+
+PigweedLoggerMutex logger_mutex;
+
+} // namespace rpc
+} // namespace chip
diff --git a/examples/common/pigweed/nxp/PigweedLoggerMutex.h b/examples/common/pigweed/nxp/PigweedLoggerMutex.h
new file mode 100644
index 00000000000000..ecad8995bad61c
--- /dev/null
+++ b/examples/common/pigweed/nxp/PigweedLoggerMutex.h
@@ -0,0 +1,36 @@
+/*
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include "PigweedLogger.h"
+#include "RpcService.h"
+
+namespace chip {
+namespace rpc {
+class PigweedLoggerMutex : public chip::rpc::Mutex
+{
+
+public:
+ void Lock() override { PigweedLogger::Lock(); }
+ void Unlock() override { PigweedLogger::Unlock(); }
+};
+
+extern PigweedLoggerMutex logger_mutex;
+
+} // namespace rpc
+} // namespace chip
diff --git a/examples/common/pigweed/rpc_config.gni b/examples/common/pigweed/rpc_config.gni
new file mode 100644
index 00000000000000..ddd6b0863ebf70
--- /dev/null
+++ b/examples/common/pigweed/rpc_config.gni
@@ -0,0 +1,53 @@
+# 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.
+
+import("//build_overrides/chip.gni")
+import("//build_overrides/pigweed.gni")
+
+rpc_defines = [
+ "PW_RPC_ENABLED",
+ "PW_RPC_ATTRIBUTE_SERVICE=1",
+ "PW_RPC_BUTTON_SERVICE=1",
+ "PW_RPC_DESCRIPTOR_SERVICE=1",
+ "PW_RPC_DEVICE_SERVICE=1",
+ "PW_RPC_LIGHTING_SERVICE=1",
+ "PW_RPC_TRACING_SERVICE=1",
+]
+
+rpc_sources = [
+ "${chip_root}/examples/platform/linux/Rpc.cpp",
+ "${chip_root}/examples/platform/linux/system_rpc_server.cc",
+]
+
+rpc_deps = [
+ "$dir_pw_hdlc:pw_rpc",
+ "$dir_pw_hdlc:rpc_channel_output",
+ "$dir_pw_log",
+ "$dir_pw_rpc:server",
+ "$dir_pw_rpc/system_server:facade",
+ "$dir_pw_rpc/system_server:socket",
+ "$dir_pw_stream:socket_stream",
+ "$dir_pw_stream:sys_io_stream",
+ "$dir_pw_sync:mutex",
+ "$dir_pw_trace",
+ "$dir_pw_trace_tokenized",
+ "$dir_pw_trace_tokenized:trace_rpc_service",
+ "${chip_root}/config/linux/lib/pw_rpc:pw_rpc",
+ "${chip_root}/examples/common/pigweed:attributes_service.nanopb_rpc",
+ "${chip_root}/examples/common/pigweed:button_service.nanopb_rpc",
+ "${chip_root}/examples/common/pigweed:descriptor_service.nanopb_rpc",
+ "${chip_root}/examples/common/pigweed:device_service.nanopb_rpc",
+ "${chip_root}/examples/common/pigweed:lighting_service.nanopb_rpc",
+ "${chip_root}/examples/common/pigweed:rpc_services",
+]
diff --git a/examples/contact-sensor-app/nxp/k32w/k32w0/main/AppTask.cpp b/examples/contact-sensor-app/nxp/k32w/k32w0/main/AppTask.cpp
index fd4a449d68d7b9..a46ea5db28df64 100644
--- a/examples/contact-sensor-app/nxp/k32w/k32w0/main/AppTask.cpp
+++ b/examples/contact-sensor-app/nxp/k32w/k32w0/main/AppTask.cpp
@@ -895,7 +895,7 @@ void AppTask::UpdateClusterStateInternal(intptr_t arg)
Protocols::InteractionModel::Status status = app::Clusters::BooleanState::Attributes::StateValue::Set(1, newValue);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating boolean status value %x", status);
+ ChipLogError(NotSpecified, "ERR: updating boolean status value %x", to_underlying(status));
}
logBooleanStateEvent(newValue);
}
diff --git a/examples/contact-sensor-app/nxp/k32w/k32w1/.gn b/examples/contact-sensor-app/nxp/k32w/k32w1/.gn
index dec954b4b9ff69..1e848295f6aa5b 100644
--- a/examples/contact-sensor-app/nxp/k32w/k32w1/.gn
+++ b/examples/contact-sensor-app/nxp/k32w/k32w1/.gn
@@ -26,4 +26,7 @@ default_args = {
target_os = "freertos"
import("//args.gni")
+
+ # Import default platform configs
+ import("${chip_root}/src/platform/nxp/k32w/k32w1/args.gni")
}
diff --git a/examples/contact-sensor-app/nxp/k32w/k32w1/BUILD.gn b/examples/contact-sensor-app/nxp/k32w/k32w1/BUILD.gn
index 1404ad8dd36a1c..ed49c7bdd4f7a3 100644
--- a/examples/contact-sensor-app/nxp/k32w/k32w1/BUILD.gn
+++ b/examples/contact-sensor-app/nxp/k32w/k32w1/BUILD.gn
@@ -14,15 +14,19 @@
# limitations under the License.
import("//build_overrides/chip.gni")
-import("//build_overrides/k32w1_sdk.gni")
+import("//build_overrides/nxp_sdk.gni")
import("//build_overrides/openthread.gni")
-import("${k32w1_sdk_build_root}/k32w1_executable.gni")
-import("${k32w1_sdk_build_root}/k32w1_sdk.gni")
+import("${nxp_sdk_build_root}/nxp_sdk.gni")
+
+import("${nxp_sdk_build_root}/${nxp_sdk_name}/nxp_executable.gni")
+
+import("${nxp_sdk_build_root}/${nxp_sdk_name}/${nxp_sdk_name}.gni")
import("${chip_root}/src/crypto/crypto.gni")
import("${chip_root}/src/lib/core/core.gni")
import("${chip_root}/src/platform/device.gni")
+import("${chip_root}/src/platform/nxp/${nxp_platform}/args.gni")
declare_args() {
chip_software_version = 0
@@ -85,7 +89,7 @@ k32w1_executable("contact_sensor_app") {
deps = [
":sdk",
"${chip_root}/examples/common/QRCode",
- "${chip_root}/examples/contact-sensor-app/contact-sensor-common",
+ "${chip_root}/examples/contact-sensor-app/nxp/zap",
"${chip_root}/examples/providers:device_info_provider",
"${chip_root}/src/lib",
"${chip_root}/src/platform:syscalls_stub",
@@ -116,7 +120,6 @@ k32w1_executable("contact_sensor_app") {
ldflags = [
"-Wl,--defsym=__heap_size__=0",
"-Wl,--defsym=__stack_size__=0x480",
- "-Wl,--defsym=gNvmSectors=8",
"-Wl,--defsym=lp_ram_lower_limit=0x04000000",
"-Wl,--defsym=lp_ram_upper_limit=0x2001C000",
"-Wl,-print-memory-usage",
@@ -124,6 +127,10 @@ k32w1_executable("contact_sensor_app") {
"-T" + rebase_path(ldscript, root_build_dir),
]
+ if (chip_with_factory_data == 1) {
+ ldflags += [ "-Wl,--defsym=gUseFactoryData_d=1" ]
+ }
+
output_dir = root_out_dir
}
diff --git a/examples/contact-sensor-app/nxp/k32w/k32w1/README.md b/examples/contact-sensor-app/nxp/k32w/k32w1/README.md
index da6e3eb00f2f66..28983f45c89578 100644
--- a/examples/contact-sensor-app/nxp/k32w/k32w1/README.md
+++ b/examples/contact-sensor-app/nxp/k32w/k32w1/README.md
@@ -19,6 +19,7 @@ into an existing Matter network and can be controlled by this network.
- [Bluetooth LE Rendezvous](#bluetooth-le-rendezvous)
- [Device UI](#device-ui)
- [Building](#building)
+- [Manufacturing data](#manufacturing-data)
- [Flashing](#flashing)
- [Flashing the NBU image](#flashing-the-nbu-image)
- [Flashing the host image](#flashing-the-host-image)
@@ -108,7 +109,9 @@ initiate a reboot. The reset action can be cancelled by press SW2 button at any
point before the 6 second limit.
**Button SW3** can be used to change the state of the simulated contact sensor.
-The button behaves as a toggle, swapping the state every time it is pressed.
+The button behaves as a toggle, swapping the state every time it is short
+pressed. When long pressed, it does a clean soft reset that takes into account
+Matter shutdown procedure.
## Building
@@ -134,8 +137,17 @@ In case that Openthread CLI is needed, chip_with_ot_cli build argument must be
set to 1.
After a successful build, the `elf` and `srec` files are found in `out/debug/` -
+`see the files prefixed with chip-k32w1-contact-example`. After a successful
+build, the `elf` and `srec` files are found in `out/debug/` -
`see the files prefixed with chip-k32w1-contact-example`.
+## Manufacturing data
+
+Use `chip_with_factory_data=1` in the gn build command to enable factory data.
+
+For a full guide on manufacturing flow, please see
+[Guide for writing manufacturing data on NXP devices](../../../../../docs/guides/nxp_manufacturing_flow.md).
+
## Flashing
Two images must be written to the board: one for the host (CM33) and one for the
diff --git a/examples/contact-sensor-app/nxp/k32w/k32w1/args.gni b/examples/contact-sensor-app/nxp/k32w/k32w1/args.gni
index c0497aa27421d2..18c41cb457bc86 100644
--- a/examples/contact-sensor-app/nxp/k32w/k32w1/args.gni
+++ b/examples/contact-sensor-app/nxp/k32w/k32w1/args.gni
@@ -15,7 +15,6 @@
import("//build_overrides/chip.gni")
import("${chip_root}/config/standalone/args.gni")
-import("${chip_root}/examples/platform/nxp/k32w/k32w1/args.gni")
# SDK target. This is overridden to add our SDK app_config.h & defines.
k32w1_sdk_target = get_label_info(":sdk", "label_no_toolchain")
@@ -23,3 +22,7 @@ k32w1_sdk_target = get_label_info(":sdk", "label_no_toolchain")
chip_enable_ota_requestor = true
chip_stack_lock_tracking = "fatal"
chip_enable_ble = true
+
+chip_enable_icd_server = true
+chip_persist_subscriptions = true
+chip_subscription_timeout_resumption = true
diff --git a/examples/contact-sensor-app/nxp/k32w/k32w1/include/CHIPProjectConfig.h b/examples/contact-sensor-app/nxp/k32w/k32w1/include/CHIPProjectConfig.h
index af3a7067c99e1a..8846799ed6edc9 100644
--- a/examples/contact-sensor-app/nxp/k32w/k32w1/include/CHIPProjectConfig.h
+++ b/examples/contact-sensor-app/nxp/k32w/k32w1/include/CHIPProjectConfig.h
@@ -28,6 +28,58 @@
#pragma once
+// Use hard-coded test certificates already embedded in generic chip code => set it to 0
+// Use real/development certificates => set it to 1 + file the provisioning section from
+// the internal flash
+#ifndef CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+#define CONFIG_CHIP_LOAD_REAL_FACTORY_DATA 0
+#endif
+
+#if CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+
+// VID/PID for product => will be used by Basic Information Cluster
+#define CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID 0x1037
+#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0xA221
+
+// Set the following define to use the Certification Declaration from below and not use it stored in factory data section
+#ifndef CHIP_USE_DEVICE_CONFIG_CERTIFICATION_DECLARATION
+#define CHIP_USE_DEVICE_CONFIG_CERTIFICATION_DECLARATION 0
+#endif
+
+#ifndef CHIP_DEVICE_CONFIG_CERTIFICATION_DECLARATION
+//-> format_version = 1
+//-> vendor_id = 0x1037
+//-> product_id_array = [ 0xA221 ]
+//-> device_type_id = 0x0015
+//-> certificate_id = "ZIG20142ZB330003-24"
+//-> security_level = 0
+//-> security_information = 0
+//-> version_number = 0x2694
+//-> certification_type = 1
+//-> dac_origin_vendor_id is not present
+//-> dac_origin_product_id is not present
+#define CHIP_DEVICE_CONFIG_CERTIFICATION_DECLARATION \
+ { \
+ 0x30, 0x81, 0xe7, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, 0x81, 0xd9, 0x30, 0x81, 0xd6, \
+ 0x02, 0x01, 0x03, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, \
+ 0x44, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x37, 0x04, 0x35, 0x15, 0x24, 0x00, \
+ 0x01, 0x25, 0x01, 0x37, 0x10, 0x36, 0x02, 0x05, 0x21, 0xa2, 0x18, 0x24, 0x03, 0x15, 0x2c, 0x04, 0x13, 0x5a, 0x49, \
+ 0x47, 0x32, 0x30, 0x31, 0x34, 0x32, 0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x33, 0x2d, 0x32, 0x34, 0x24, 0x05, \
+ 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x01, 0x18, 0x31, 0x7c, 0x30, 0x7a, 0x02, 0x01, 0x03, \
+ 0x80, 0x14, 0x62, 0xfa, 0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a, 0xdd, 0xf5, 0x04, \
+ 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, \
+ 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x46, 0x30, 0x44, 0x02, 0x20, 0x1b, 0xf3, 0x13, 0x9b, \
+ 0x39, 0xb8, 0x3e, 0x87, 0xde, 0x2e, 0xdf, 0x51, 0xfb, 0xa3, 0xba, 0xcb, 0xc7, 0x4e, 0xef, 0x16, 0x6b, 0xa1, 0x04, \
+ 0xa0, 0x05, 0x7f, 0xc3, 0xd4, 0x15, 0x84, 0xd0, 0x44, 0x02, 0x20, 0x32, 0x98, 0xe2, 0x3c, 0x31, 0x16, 0x63, 0x60, \
+ 0x2e, 0x58, 0x93, 0x87, 0x50, 0x9e, 0x29, 0x10, 0x9d, 0xe5, 0x9b, 0xcd, 0xab, 0x64, 0x43, 0x08, 0xd6, 0xf6, 0x6f, \
+ 0x46, 0x7d, 0x22, 0x24, 0x42 \
+ }
+
+// All remaining data will be pulled from the provisioning region of flash.
+#endif
+
+#else
+
/**
* CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID
*
@@ -56,18 +108,7 @@
*/
#define CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER "TEST_SN"
-/**
- * CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID
- *
- * 0xFFF1: Test vendor.
- */
-#define CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID 0xFFF1
-
-/**
- * CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID
- *
- */
-#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0x8006
+#endif // CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
/**
* CHIP_DEVICE_CONFIG_DEVICE_HARDWARE_VERSION
diff --git a/examples/contact-sensor-app/nxp/k32w/k32w1/main/AppTask.cpp b/examples/contact-sensor-app/nxp/k32w/k32w1/main/AppTask.cpp
index aa448bf454f2cb..10039bb8c9270e 100644
--- a/examples/contact-sensor-app/nxp/k32w/k32w1/main/AppTask.cpp
+++ b/examples/contact-sensor-app/nxp/k32w/k32w1/main/AppTask.cpp
@@ -94,6 +94,9 @@ using namespace chip;
using namespace chip::app;
AppTask AppTask::sAppTask;
+#if CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+static AppTask::FactoryDataProvider sFactoryDataProvider;
+#endif
static Identify gIdentify = { chip::EndpointId{ 1 }, AppTask::OnIdentifyStart, AppTask::OnIdentifyStop,
Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator };
@@ -150,8 +153,14 @@ CHIP_ERROR AppTask::Init()
// Init ZCL Data Model and start server
PlatformMgr().ScheduleWork(InitServer, 0);
- // Initialize device attestation config
+#if CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+ ReturnErrorOnFailure(sFactoryDataProvider.Init());
+ SetDeviceInstanceInfoProvider(&sFactoryDataProvider);
+ SetDeviceAttestationCredentialsProvider(&sFactoryDataProvider);
+ SetCommissionableDataProvider(&sFactoryDataProvider);
+#else
SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+#endif // CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
// QR code will be used with CHIP Tool
AppTask::PrintOnboardingInfo();
@@ -358,7 +367,7 @@ void AppTask::AppTaskMain(void * pvParameter)
void AppTask::ButtonEventHandler(uint8_t pin_no, uint8_t button_action)
{
- if ((pin_no != RESET_BUTTON) && (pin_no != CONTACT_SENSOR_BUTTON) && (pin_no != OTA_BUTTON) && (pin_no != BLE_BUTTON))
+ if ((pin_no != RESET_BUTTON) && (pin_no != CONTACT_SENSOR_BUTTON) && (pin_no != SOFT_RESET_BUTTON) && (pin_no != BLE_BUTTON))
{
return;
}
@@ -376,10 +385,10 @@ void AppTask::ButtonEventHandler(uint8_t pin_no, uint8_t button_action)
{
button_event.Handler = ContactActionEventHandler;
}
- else if (pin_no == OTA_BUTTON)
+ else if (pin_no == SOFT_RESET_BUTTON)
{
- // Starting OTA by button functionality is not used.
- // button_event.Handler = OTAHandler;
+ // Soft reset ensures that platform manager shutdown procedure is called.
+ button_event.Handler = SoftResetHandler;
}
else if (pin_no == BLE_BUTTON)
{
@@ -432,7 +441,7 @@ button_status_t AppTask::KBD_Callback(void * buttonHandle, button_callback_messa
case CONTACT_SENSOR_BUTTON:
K32W_LOG("pb2 long press");
- ButtonEventHandler(OTA_BUTTON, OTA_BUTTON_PUSH);
+ ButtonEventHandler(SOFT_RESET_BUTTON, SOFT_RESET_BUTTON_PUSH);
break;
}
break;
@@ -561,29 +570,14 @@ void AppTask::ContactActionEventHandler(void * aGenericEvent)
}
}
-void AppTask::OTAHandler(void * aGenericEvent)
+void AppTask::SoftResetHandler(void * aGenericEvent)
{
AppEvent * aEvent = (AppEvent *) aGenericEvent;
- if (aEvent->ButtonEvent.PinNo != OTA_BUTTON)
+ if (aEvent->ButtonEvent.PinNo != SOFT_RESET_BUTTON)
return;
-#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
- if (sAppTask.mFunction != Function::kNoneSelected)
- {
- K32W_LOG("Another function is scheduled. Could not initiate OTA!");
- return;
- }
-
- PlatformMgr().ScheduleWork(StartOTAQuery, 0);
-#endif
-}
-
-#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
-void AppTask::StartOTAQuery(intptr_t arg)
-{
- GetRequestorInstance()->TriggerImmediateQuery();
+ PlatformMgrImpl().CleanReset();
}
-#endif
void AppTask::BleHandler(void * aGenericEvent)
{
@@ -798,7 +792,7 @@ void AppTask::UpdateClusterStateInternal(intptr_t arg)
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating boolean status value %x", status);
+ ChipLogError(NotSpecified, "ERR: updating boolean status value %x", to_underlying(status));
}
logBooleanStateEvent(newValue);
}
diff --git a/examples/contact-sensor-app/nxp/k32w/k32w1/main/include/AppTask.h b/examples/contact-sensor-app/nxp/k32w/k32w1/main/include/AppTask.h
index 47b644769cfb63..bc19b0a9862ebd 100644
--- a/examples/contact-sensor-app/nxp/k32w/k32w1/main/include/AppTask.h
+++ b/examples/contact-sensor-app/nxp/k32w/k32w1/main/include/AppTask.h
@@ -30,6 +30,10 @@
#include
#include
+#if CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+#include
+#endif
+
#include "FreeRTOS.h"
#include "fsl_component_button.h"
#include "timers.h"
@@ -45,6 +49,9 @@
class AppTask
{
public:
+#if CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+ using FactoryDataProvider = chip::DeviceLayer::FactoryDataProviderImpl;
+#endif
CHIP_ERROR StartAppTask();
static void AppTaskMain(void * pvParameter);
@@ -74,7 +81,7 @@ class AppTask
static void FunctionTimerEventHandler(void * aGenericEvent);
static button_status_t KBD_Callback(void * buttonHandle, button_callback_message_t * message, void * callbackParam);
static void HandleKeyboard(void);
- static void OTAHandler(void * aGenericEvent);
+ static void SoftResetHandler(void * aGenericEvent);
static void BleHandler(void * aGenericEvent);
static void BleStartAdvertising(intptr_t arg);
static void ContactActionEventHandler(void * aGenericEvent);
@@ -89,7 +96,6 @@ class AppTask
#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
static void InitOTA(intptr_t arg);
- static void StartOTAQuery(intptr_t arg);
#endif
static void UpdateClusterStateInternal(intptr_t arg);
diff --git a/examples/contact-sensor-app/nxp/k32w/k32w1/main/include/app_config.h b/examples/contact-sensor-app/nxp/k32w/k32w1/main/include/app_config.h
index b62ce79567e8db..fbcf14fe7d88d7 100644
--- a/examples/contact-sensor-app/nxp/k32w/k32w1/main/include/app_config.h
+++ b/examples/contact-sensor-app/nxp/k32w/k32w1/main/include/app_config.h
@@ -23,12 +23,12 @@
#define RESET_BUTTON 1
#define CONTACT_SENSOR_BUTTON 2
-#define OTA_BUTTON 3
+#define SOFT_RESET_BUTTON 3
#define BLE_BUTTON 4
#define RESET_BUTTON_PUSH 1
#define CONTACT_SENSOR_BUTTON_PUSH 2
-#define OTA_BUTTON_PUSH 3
+#define SOFT_RESET_BUTTON_PUSH 3
#define BLE_BUTTON_PUSH 4
#define APP_BUTTON_PUSH 1
diff --git a/examples/contact-sensor-app/nxp/zap/BUILD.gn b/examples/contact-sensor-app/nxp/zap/BUILD.gn
new file mode 100644
index 00000000000000..be4913cf3552ee
--- /dev/null
+++ b/examples/contact-sensor-app/nxp/zap/BUILD.gn
@@ -0,0 +1,25 @@
+# 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.
+
+import("//build_overrides/chip.gni")
+import("${chip_root}/examples/common/pigweed/pigweed_rpcs.gni")
+import("${chip_root}/src/app/chip_data_model.gni")
+
+chip_data_model("zap") {
+ zap_file = "contact-sensor-app.zap"
+
+ zap_pregenerated_dir =
+ "${chip_root}/zzz_generated/contact-sensor-app/nxp/zap-generated"
+ is_server = true
+}
diff --git a/examples/contact-sensor-app/nxp/zap/contact-sensor-app.matter b/examples/contact-sensor-app/nxp/zap/contact-sensor-app.matter
new file mode 100644
index 00000000000000..03736833bb02d3
--- /dev/null
+++ b/examples/contact-sensor-app/nxp/zap/contact-sensor-app.matter
@@ -0,0 +1,1646 @@
+// This IDL was generated automatically by ZAP.
+// It is for view/code review purposes only.
+
+/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
+cluster Identify = 3 {
+ revision 4;
+
+ enum EffectIdentifierEnum : enum8 {
+ kBlink = 0;
+ kBreathe = 1;
+ kOkay = 2;
+ kChannelChange = 11;
+ kFinishEffect = 254;
+ kStopEffect = 255;
+ }
+
+ enum EffectVariantEnum : enum8 {
+ kDefault = 0;
+ }
+
+ enum IdentifyTypeEnum : enum8 {
+ kNone = 0;
+ kLightOutput = 1;
+ kVisibleIndicator = 2;
+ kAudibleBeep = 3;
+ kDisplay = 4;
+ kActuator = 5;
+ }
+
+ attribute int16u identifyTime = 0;
+ readonly attribute IdentifyTypeEnum identifyType = 1;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct IdentifyRequest {
+ int16u identifyTime = 0;
+ }
+
+ request struct TriggerEffectRequest {
+ EffectIdentifierEnum effectIdentifier = 0;
+ EffectVariantEnum effectVariant = 1;
+ }
+
+ /** Command description for Identify */
+ command access(invoke: manage) Identify(IdentifyRequest): DefaultSuccess = 0;
+ /** Command description for TriggerEffect */
+ command access(invoke: manage) TriggerEffect(TriggerEffectRequest): DefaultSuccess = 64;
+}
+
+/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */
+cluster Descriptor = 29 {
+ revision 2;
+
+ bitmap Feature : bitmap32 {
+ kTagList = 0x1;
+ }
+
+ struct DeviceTypeStruct {
+ devtype_id deviceType = 0;
+ int16u revision = 1;
+ }
+
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
+ readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
+ readonly attribute cluster_id serverList[] = 1;
+ readonly attribute cluster_id clientList[] = 2;
+ readonly attribute endpoint_no partsList[] = 3;
+ readonly attribute optional SemanticTagStruct tagList[] = 4;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+}
+
+/** The Access Control Cluster exposes a data model view of a
+ Node's Access Control List (ACL), which codifies the rules used to manage
+ and enforce Access Control for the Node's endpoints and their associated
+ cluster instances. */
+cluster AccessControl = 31 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum AccessControlEntryAuthModeEnum : enum8 {
+ kPASE = 1;
+ kCASE = 2;
+ kGroup = 3;
+ }
+
+ enum AccessControlEntryPrivilegeEnum : enum8 {
+ kView = 1;
+ kProxyView = 2;
+ kOperate = 3;
+ kManage = 4;
+ kAdminister = 5;
+ }
+
+ enum ChangeTypeEnum : enum8 {
+ kChanged = 0;
+ kAdded = 1;
+ kRemoved = 2;
+ }
+
+ struct AccessControlTargetStruct {
+ nullable cluster_id cluster = 0;
+ nullable endpoint_no endpoint = 1;
+ nullable devtype_id deviceType = 2;
+ }
+
+ fabric_scoped struct AccessControlEntryStruct {
+ fabric_sensitive AccessControlEntryPrivilegeEnum privilege = 1;
+ fabric_sensitive AccessControlEntryAuthModeEnum authMode = 2;
+ nullable fabric_sensitive int64u subjects[] = 3;
+ nullable fabric_sensitive AccessControlTargetStruct targets[] = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_scoped struct AccessControlExtensionStruct {
+ fabric_sensitive octet_string<128> data = 1;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_sensitive info event access(read: administer) AccessControlEntryChanged = 0 {
+ nullable node_id adminNodeID = 1;
+ nullable int16u adminPasscodeID = 2;
+ ChangeTypeEnum changeType = 3;
+ nullable AccessControlEntryStruct latestValue = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_sensitive info event access(read: administer) AccessControlExtensionChanged = 1 {
+ nullable node_id adminNodeID = 1;
+ nullable int16u adminPasscodeID = 2;
+ ChangeTypeEnum changeType = 3;
+ nullable AccessControlExtensionStruct latestValue = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ attribute access(read: administer, write: administer) AccessControlEntryStruct acl[] = 0;
+ attribute access(read: administer, write: administer) optional AccessControlExtensionStruct extension[] = 1;
+ readonly attribute int16u subjectsPerAccessControlEntry = 2;
+ readonly attribute int16u targetsPerAccessControlEntry = 3;
+ readonly attribute int16u accessControlEntriesPerFabric = 4;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+}
+
+/** This cluster provides attributes and events for determining basic information about Nodes, which supports both
+ Commissioning and operational determination of Node characteristics, such as Vendor ID, Product ID and serial number,
+ which apply to the whole Node. Also allows setting user device information such as location. */
+cluster BasicInformation = 40 {
+ revision 3;
+
+ enum ColorEnum : enum8 {
+ kBlack = 0;
+ kNavy = 1;
+ kGreen = 2;
+ kTeal = 3;
+ kMaroon = 4;
+ kPurple = 5;
+ kOlive = 6;
+ kGray = 7;
+ kBlue = 8;
+ kLime = 9;
+ kAqua = 10;
+ kRed = 11;
+ kFuchsia = 12;
+ kYellow = 13;
+ kWhite = 14;
+ kNickel = 15;
+ kChrome = 16;
+ kBrass = 17;
+ kCopper = 18;
+ kSilver = 19;
+ kGold = 20;
+ }
+
+ enum ProductFinishEnum : enum8 {
+ kOther = 0;
+ kMatte = 1;
+ kSatin = 2;
+ kPolished = 3;
+ kRugged = 4;
+ kFabric = 5;
+ }
+
+ struct CapabilityMinimaStruct {
+ int16u caseSessionsPerFabric = 0;
+ int16u subscriptionsPerFabric = 1;
+ }
+
+ struct ProductAppearanceStruct {
+ ProductFinishEnum finish = 0;
+ nullable ColorEnum primaryColor = 1;
+ }
+
+ critical event StartUp = 0 {
+ int32u softwareVersion = 0;
+ }
+
+ critical event ShutDown = 1 {
+ }
+
+ info event Leave = 2 {
+ fabric_idx fabricIndex = 0;
+ }
+
+ info event ReachableChanged = 3 {
+ boolean reachableNewValue = 0;
+ }
+
+ readonly attribute int16u dataModelRevision = 0;
+ readonly attribute char_string<32> vendorName = 1;
+ readonly attribute vendor_id vendorID = 2;
+ readonly attribute char_string<32> productName = 3;
+ readonly attribute int16u productID = 4;
+ attribute access(write: manage) char_string<32> nodeLabel = 5;
+ attribute access(write: administer) char_string<2> location = 6;
+ readonly attribute int16u hardwareVersion = 7;
+ readonly attribute char_string<64> hardwareVersionString = 8;
+ readonly attribute int32u softwareVersion = 9;
+ readonly attribute char_string<64> softwareVersionString = 10;
+ readonly attribute optional char_string<16> manufacturingDate = 11;
+ readonly attribute optional char_string<32> partNumber = 12;
+ readonly attribute optional long_char_string<256> productURL = 13;
+ readonly attribute optional char_string<64> productLabel = 14;
+ readonly attribute optional char_string<32> serialNumber = 15;
+ attribute access(write: manage) optional boolean localConfigDisabled = 16;
+ readonly attribute optional boolean reachable = 17;
+ readonly attribute optional char_string<32> uniqueID = 18;
+ readonly attribute CapabilityMinimaStruct capabilityMinima = 19;
+ readonly attribute optional ProductAppearanceStruct productAppearance = 20;
+ readonly attribute int32u specificationVersion = 21;
+ readonly attribute int16u maxPathsPerInvoke = 22;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ command MfgSpecificPing(): DefaultSuccess = 0;
+}
+
+/** Provides an interface for providing OTA software updates */
+cluster OtaSoftwareUpdateProvider = 41 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum ApplyUpdateActionEnum : enum8 {
+ kProceed = 0;
+ kAwaitNextAction = 1;
+ kDiscontinue = 2;
+ }
+
+ enum DownloadProtocolEnum : enum8 {
+ kBDXSynchronous = 0;
+ kBDXAsynchronous = 1;
+ kHTTPS = 2;
+ kVendorSpecific = 3;
+ }
+
+ enum StatusEnum : enum8 {
+ kUpdateAvailable = 0;
+ kBusy = 1;
+ kNotAvailable = 2;
+ kDownloadProtocolNotSupported = 3;
+ }
+
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct QueryImageRequest {
+ vendor_id vendorID = 0;
+ int16u productID = 1;
+ int32u softwareVersion = 2;
+ DownloadProtocolEnum protocolsSupported[] = 3;
+ optional int16u hardwareVersion = 4;
+ optional char_string<2> location = 5;
+ optional boolean requestorCanConsent = 6;
+ optional octet_string<512> metadataForProvider = 7;
+ }
+
+ response struct QueryImageResponse = 1 {
+ StatusEnum status = 0;
+ optional int32u delayedActionTime = 1;
+ optional char_string<256> imageURI = 2;
+ optional int32u softwareVersion = 3;
+ optional char_string<64> softwareVersionString = 4;
+ optional octet_string<32> updateToken = 5;
+ optional boolean userConsentNeeded = 6;
+ optional octet_string<512> metadataForRequestor = 7;
+ }
+
+ request struct ApplyUpdateRequestRequest {
+ octet_string<32> updateToken = 0;
+ int32u newVersion = 1;
+ }
+
+ response struct ApplyUpdateResponse = 3 {
+ ApplyUpdateActionEnum action = 0;
+ int32u delayedActionTime = 1;
+ }
+
+ request struct NotifyUpdateAppliedRequest {
+ octet_string<32> updateToken = 0;
+ int32u softwareVersion = 1;
+ }
+
+ /** Determine availability of a new Software Image */
+ command QueryImage(QueryImageRequest): QueryImageResponse = 0;
+ /** Determine next action to take for a downloaded Software Image */
+ command ApplyUpdateRequest(ApplyUpdateRequestRequest): ApplyUpdateResponse = 2;
+ /** Notify OTA Provider that an update was applied */
+ command NotifyUpdateApplied(NotifyUpdateAppliedRequest): DefaultSuccess = 4;
+}
+
+/** Provides an interface for downloading and applying OTA software updates */
+cluster OtaSoftwareUpdateRequestor = 42 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum AnnouncementReasonEnum : enum8 {
+ kSimpleAnnouncement = 0;
+ kUpdateAvailable = 1;
+ kUrgentUpdateAvailable = 2;
+ }
+
+ enum ChangeReasonEnum : enum8 {
+ kUnknown = 0;
+ kSuccess = 1;
+ kFailure = 2;
+ kTimeOut = 3;
+ kDelayByProvider = 4;
+ }
+
+ enum UpdateStateEnum : enum8 {
+ kUnknown = 0;
+ kIdle = 1;
+ kQuerying = 2;
+ kDelayedOnQuery = 3;
+ kDownloading = 4;
+ kApplying = 5;
+ kDelayedOnApply = 6;
+ kRollingBack = 7;
+ kDelayedOnUserConsent = 8;
+ }
+
+ fabric_scoped struct ProviderLocation {
+ node_id providerNodeID = 1;
+ endpoint_no endpoint = 2;
+ fabric_idx fabricIndex = 254;
+ }
+
+ info event StateTransition = 0 {
+ UpdateStateEnum previousState = 0;
+ UpdateStateEnum newState = 1;
+ ChangeReasonEnum reason = 2;
+ nullable int32u targetSoftwareVersion = 3;
+ }
+
+ critical event VersionApplied = 1 {
+ int32u softwareVersion = 0;
+ int16u productID = 1;
+ }
+
+ info event DownloadError = 2 {
+ int32u softwareVersion = 0;
+ int64u bytesDownloaded = 1;
+ nullable int8u progressPercent = 2;
+ nullable int64s platformCode = 3;
+ }
+
+ attribute access(write: administer) ProviderLocation defaultOTAProviders[] = 0;
+ readonly attribute boolean updatePossible = 1;
+ readonly attribute UpdateStateEnum updateState = 2;
+ readonly attribute nullable int8u updateStateProgress = 3;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct AnnounceOTAProviderRequest {
+ node_id providerNodeID = 0;
+ vendor_id vendorID = 1;
+ AnnouncementReasonEnum announcementReason = 2;
+ optional octet_string<512> metadataForNode = 3;
+ endpoint_no endpoint = 4;
+ }
+
+ /** Announce the presence of an OTA Provider */
+ command AnnounceOTAProvider(AnnounceOTAProviderRequest): DefaultSuccess = 0;
+}
+
+/** This cluster is used to manage global aspects of the Commissioning flow. */
+cluster GeneralCommissioning = 48 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum CommissioningErrorEnum : enum8 {
+ kOK = 0;
+ kValueOutsideRange = 1;
+ kInvalidAuthentication = 2;
+ kNoFailSafe = 3;
+ kBusyWithOtherAdmin = 4;
+ }
+
+ enum RegulatoryLocationTypeEnum : enum8 {
+ kIndoor = 0;
+ kOutdoor = 1;
+ kIndoorOutdoor = 2;
+ }
+
+ struct BasicCommissioningInfo {
+ int16u failSafeExpiryLengthSeconds = 0;
+ int16u maxCumulativeFailsafeSeconds = 1;
+ }
+
+ attribute access(write: administer) int64u breadcrumb = 0;
+ readonly attribute BasicCommissioningInfo basicCommissioningInfo = 1;
+ readonly attribute RegulatoryLocationTypeEnum regulatoryConfig = 2;
+ readonly attribute RegulatoryLocationTypeEnum locationCapability = 3;
+ readonly attribute boolean supportsConcurrentConnection = 4;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct ArmFailSafeRequest {
+ int16u expiryLengthSeconds = 0;
+ int64u breadcrumb = 1;
+ }
+
+ response struct ArmFailSafeResponse = 1 {
+ CommissioningErrorEnum errorCode = 0;
+ char_string<128> debugText = 1;
+ }
+
+ request struct SetRegulatoryConfigRequest {
+ RegulatoryLocationTypeEnum newRegulatoryConfig = 0;
+ char_string<2> countryCode = 1;
+ int64u breadcrumb = 2;
+ }
+
+ response struct SetRegulatoryConfigResponse = 3 {
+ CommissioningErrorEnum errorCode = 0;
+ char_string debugText = 1;
+ }
+
+ response struct CommissioningCompleteResponse = 5 {
+ CommissioningErrorEnum errorCode = 0;
+ char_string debugText = 1;
+ }
+
+ /** Arm the persistent fail-safe timer with an expiry time of now + ExpiryLengthSeconds using device clock */
+ command access(invoke: administer) ArmFailSafe(ArmFailSafeRequest): ArmFailSafeResponse = 0;
+ /** Set the regulatory configuration to be used during commissioning */
+ command access(invoke: administer) SetRegulatoryConfig(SetRegulatoryConfigRequest): SetRegulatoryConfigResponse = 2;
+ /** Signals the Server that the Client has successfully completed all steps of Commissioning/Recofiguration needed during fail-safe period. */
+ fabric command access(invoke: administer) CommissioningComplete(): CommissioningCompleteResponse = 4;
+}
+
+/** Functionality to configure, enable, disable network credentials and access on a Matter device. */
+cluster NetworkCommissioning = 49 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum NetworkCommissioningStatusEnum : enum8 {
+ kSuccess = 0;
+ kOutOfRange = 1;
+ kBoundsExceeded = 2;
+ kNetworkIDNotFound = 3;
+ kDuplicateNetworkID = 4;
+ kNetworkNotFound = 5;
+ kRegulatoryError = 6;
+ kAuthFailure = 7;
+ kUnsupportedSecurity = 8;
+ kOtherConnectionFailure = 9;
+ kIPV6Failed = 10;
+ kIPBindFailed = 11;
+ kUnknownError = 12;
+ }
+
+ enum WiFiBandEnum : enum8 {
+ k2G4 = 0;
+ k3G65 = 1;
+ k5G = 2;
+ k6G = 3;
+ k60G = 4;
+ k1G = 5;
+ }
+
+ bitmap Feature : bitmap32 {
+ kWiFiNetworkInterface = 0x1;
+ kThreadNetworkInterface = 0x2;
+ kEthernetNetworkInterface = 0x4;
+ kPerDeviceCredentials = 0x8;
+ }
+
+ bitmap ThreadCapabilitiesBitmap : bitmap16 {
+ kIsBorderRouterCapable = 0x1;
+ kIsRouterCapable = 0x2;
+ kIsSleepyEndDeviceCapable = 0x4;
+ kIsFullThreadDevice = 0x8;
+ kIsSynchronizedSleepyEndDeviceCapable = 0x10;
+ }
+
+ bitmap WiFiSecurityBitmap : bitmap8 {
+ kUnencrypted = 0x1;
+ kWEP = 0x2;
+ kWPAPersonal = 0x4;
+ kWPA2Personal = 0x8;
+ kWPA3Personal = 0x10;
+ kWPA3MatterPDC = 0x20;
+ }
+
+ struct NetworkInfoStruct {
+ octet_string<32> networkID = 0;
+ boolean connected = 1;
+ optional nullable octet_string<20> networkIdentifier = 2;
+ optional nullable octet_string<20> clientIdentifier = 3;
+ }
+
+ struct ThreadInterfaceScanResultStruct {
+ int16u panId = 0;
+ int64u extendedPanId = 1;
+ char_string<16> networkName = 2;
+ int16u channel = 3;
+ int8u version = 4;
+ octet_string<8> extendedAddress = 5;
+ int8s rssi = 6;
+ int8u lqi = 7;
+ }
+
+ struct WiFiInterfaceScanResultStruct {
+ WiFiSecurityBitmap security = 0;
+ octet_string<32> ssid = 1;
+ octet_string<6> bssid = 2;
+ int16u channel = 3;
+ WiFiBandEnum wiFiBand = 4;
+ int8s rssi = 5;
+ }
+
+ readonly attribute access(read: administer) int8u maxNetworks = 0;
+ readonly attribute access(read: administer) NetworkInfoStruct networks[] = 1;
+ readonly attribute optional int8u scanMaxTimeSeconds = 2;
+ readonly attribute optional int8u connectMaxTimeSeconds = 3;
+ attribute access(write: administer) boolean interfaceEnabled = 4;
+ readonly attribute access(read: administer) nullable NetworkCommissioningStatusEnum lastNetworkingStatus = 5;
+ readonly attribute access(read: administer) nullable octet_string<32> lastNetworkID = 6;
+ readonly attribute access(read: administer) nullable int32s lastConnectErrorValue = 7;
+ readonly attribute optional WiFiBandEnum supportedWiFiBands[] = 8;
+ readonly attribute optional ThreadCapabilitiesBitmap supportedThreadFeatures = 9;
+ readonly attribute optional int16u threadVersion = 10;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct ScanNetworksRequest {
+ optional nullable octet_string<32> ssid = 0;
+ optional int64u breadcrumb = 1;
+ }
+
+ response struct ScanNetworksResponse = 1 {
+ NetworkCommissioningStatusEnum networkingStatus = 0;
+ optional char_string debugText = 1;
+ optional WiFiInterfaceScanResultStruct wiFiScanResults[] = 2;
+ optional ThreadInterfaceScanResultStruct threadScanResults[] = 3;
+ }
+
+ request struct AddOrUpdateWiFiNetworkRequest {
+ octet_string<32> ssid = 0;
+ octet_string<64> credentials = 1;
+ optional int64u breadcrumb = 2;
+ optional octet_string<140> networkIdentity = 3;
+ optional octet_string<20> clientIdentifier = 4;
+ optional octet_string<32> possessionNonce = 5;
+ }
+
+ request struct AddOrUpdateThreadNetworkRequest {
+ octet_string<254> operationalDataset = 0;
+ optional int64u breadcrumb = 1;
+ }
+
+ request struct RemoveNetworkRequest {
+ octet_string<32> networkID = 0;
+ optional int64u breadcrumb = 1;
+ }
+
+ response struct NetworkConfigResponse = 5 {
+ NetworkCommissioningStatusEnum networkingStatus = 0;
+ optional char_string<512> debugText = 1;
+ optional int8u networkIndex = 2;
+ optional octet_string<140> clientIdentity = 3;
+ optional octet_string<64> possessionSignature = 4;
+ }
+
+ request struct ConnectNetworkRequest {
+ octet_string<32> networkID = 0;
+ optional int64u breadcrumb = 1;
+ }
+
+ response struct ConnectNetworkResponse = 7 {
+ NetworkCommissioningStatusEnum networkingStatus = 0;
+ optional char_string debugText = 1;
+ nullable int32s errorValue = 2;
+ }
+
+ request struct ReorderNetworkRequest {
+ octet_string<32> networkID = 0;
+ int8u networkIndex = 1;
+ optional int64u breadcrumb = 2;
+ }
+
+ request struct QueryIdentityRequest {
+ octet_string<20> keyIdentifier = 0;
+ optional octet_string<32> possessionNonce = 1;
+ }
+
+ response struct QueryIdentityResponse = 10 {
+ octet_string<140> identity = 0;
+ optional octet_string<64> possessionSignature = 1;
+ }
+
+ /** Detemine the set of networks the device sees as available. */
+ command access(invoke: administer) ScanNetworks(ScanNetworksRequest): ScanNetworksResponse = 0;
+ /** Add or update the credentials for a given Wi-Fi network. */
+ command access(invoke: administer) AddOrUpdateWiFiNetwork(AddOrUpdateWiFiNetworkRequest): NetworkConfigResponse = 2;
+ /** Add or update the credentials for a given Thread network. */
+ command access(invoke: administer) AddOrUpdateThreadNetwork(AddOrUpdateThreadNetworkRequest): NetworkConfigResponse = 3;
+ /** Remove the definition of a given network (including its credentials). */
+ command access(invoke: administer) RemoveNetwork(RemoveNetworkRequest): NetworkConfigResponse = 4;
+ /** Connect to the specified network, using previously-defined credentials. */
+ command access(invoke: administer) ConnectNetwork(ConnectNetworkRequest): ConnectNetworkResponse = 6;
+ /** Modify the order in which networks will be presented in the Networks attribute. */
+ command access(invoke: administer) ReorderNetwork(ReorderNetworkRequest): NetworkConfigResponse = 8;
+ /** Retrieve details about and optionally proof of possession of a network client identity. */
+ command access(invoke: administer) QueryIdentity(QueryIdentityRequest): QueryIdentityResponse = 9;
+}
+
+/** The General Diagnostics Cluster, along with other diagnostics clusters, provide a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
+cluster GeneralDiagnostics = 51 {
+ revision 2;
+
+ enum BootReasonEnum : enum8 {
+ kUnspecified = 0;
+ kPowerOnReboot = 1;
+ kBrownOutReset = 2;
+ kSoftwareWatchdogReset = 3;
+ kHardwareWatchdogReset = 4;
+ kSoftwareUpdateCompleted = 5;
+ kSoftwareReset = 6;
+ }
+
+ enum HardwareFaultEnum : enum8 {
+ kUnspecified = 0;
+ kRadio = 1;
+ kSensor = 2;
+ kResettableOverTemp = 3;
+ kNonResettableOverTemp = 4;
+ kPowerSource = 5;
+ kVisualDisplayFault = 6;
+ kAudioOutputFault = 7;
+ kUserInterfaceFault = 8;
+ kNonVolatileMemoryError = 9;
+ kTamperDetected = 10;
+ }
+
+ enum InterfaceTypeEnum : enum8 {
+ kUnspecified = 0;
+ kWiFi = 1;
+ kEthernet = 2;
+ kCellular = 3;
+ kThread = 4;
+ }
+
+ enum NetworkFaultEnum : enum8 {
+ kUnspecified = 0;
+ kHardwareFailure = 1;
+ kNetworkJammed = 2;
+ kConnectionFailed = 3;
+ }
+
+ enum RadioFaultEnum : enum8 {
+ kUnspecified = 0;
+ kWiFiFault = 1;
+ kCellularFault = 2;
+ kThreadFault = 3;
+ kNFCFault = 4;
+ kBLEFault = 5;
+ kEthernetFault = 6;
+ }
+
+ bitmap Feature : bitmap32 {
+ kDataModelTest = 0x1;
+ }
+
+ struct NetworkInterface {
+ char_string<32> name = 0;
+ boolean isOperational = 1;
+ nullable boolean offPremiseServicesReachableIPv4 = 2;
+ nullable boolean offPremiseServicesReachableIPv6 = 3;
+ octet_string<8> hardwareAddress = 4;
+ octet_string IPv4Addresses[] = 5;
+ octet_string IPv6Addresses[] = 6;
+ InterfaceTypeEnum type = 7;
+ }
+
+ critical event HardwareFaultChange = 0 {
+ HardwareFaultEnum current[] = 0;
+ HardwareFaultEnum previous[] = 1;
+ }
+
+ critical event RadioFaultChange = 1 {
+ RadioFaultEnum current[] = 0;
+ RadioFaultEnum previous[] = 1;
+ }
+
+ critical event NetworkFaultChange = 2 {
+ NetworkFaultEnum current[] = 0;
+ NetworkFaultEnum previous[] = 1;
+ }
+
+ critical event BootReason = 3 {
+ BootReasonEnum bootReason = 0;
+ }
+
+ readonly attribute NetworkInterface networkInterfaces[] = 0;
+ readonly attribute int16u rebootCount = 1;
+ readonly attribute optional int64u upTime = 2;
+ readonly attribute optional int32u totalOperationalHours = 3;
+ readonly attribute optional BootReasonEnum bootReason = 4;
+ readonly attribute optional HardwareFaultEnum activeHardwareFaults[] = 5;
+ readonly attribute optional RadioFaultEnum activeRadioFaults[] = 6;
+ readonly attribute optional NetworkFaultEnum activeNetworkFaults[] = 7;
+ readonly attribute boolean testEventTriggersEnabled = 8;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct TestEventTriggerRequest {
+ octet_string<16> enableKey = 0;
+ int64u eventTrigger = 1;
+ }
+
+ response struct TimeSnapshotResponse = 2 {
+ systime_ms systemTimeMs = 0;
+ nullable posix_ms posixTimeMs = 1;
+ }
+
+ request struct PayloadTestRequestRequest {
+ octet_string<16> enableKey = 0;
+ int8u value = 1;
+ int16u count = 2;
+ }
+
+ response struct PayloadTestResponse = 4 {
+ octet_string payload = 0;
+ }
+
+ /** Provide a means for certification tests to trigger some test-plan-specific events */
+ command access(invoke: manage) TestEventTrigger(TestEventTriggerRequest): DefaultSuccess = 0;
+ /** Take a snapshot of system time and epoch time. */
+ command TimeSnapshot(): TimeSnapshotResponse = 1;
+ /** Request a variable length payload response. */
+ command PayloadTestRequest(PayloadTestRequestRequest): PayloadTestResponse = 3;
+}
+
+/** The Software Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
+cluster SoftwareDiagnostics = 52 {
+ revision 1; // NOTE: Default/not specifically set
+
+ bitmap Feature : bitmap32 {
+ kWatermarks = 0x1;
+ }
+
+ struct ThreadMetricsStruct {
+ int64u id = 0;
+ optional char_string<8> name = 1;
+ optional int32u stackFreeCurrent = 2;
+ optional int32u stackFreeMinimum = 3;
+ optional int32u stackSize = 4;
+ }
+
+ info event SoftwareFault = 0 {
+ int64u id = 0;
+ optional char_string name = 1;
+ optional octet_string faultRecording = 2;
+ }
+
+ readonly attribute optional ThreadMetricsStruct threadMetrics[] = 0;
+ readonly attribute optional int64u currentHeapFree = 1;
+ readonly attribute optional int64u currentHeapUsed = 2;
+ readonly attribute optional int64u currentHeapHighWatermark = 3;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ /** Reception of this command SHALL reset the values: The StackFreeMinimum field of the ThreadMetrics attribute, CurrentHeapHighWaterMark attribute. */
+ command access(invoke: manage) ResetWatermarks(): DefaultSuccess = 0;
+}
+
+/** The Thread Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems */
+cluster ThreadNetworkDiagnostics = 53 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum ConnectionStatusEnum : enum8 {
+ kConnected = 0;
+ kNotConnected = 1;
+ }
+
+ enum NetworkFaultEnum : enum8 {
+ kUnspecified = 0;
+ kLinkDown = 1;
+ kHardwareFailure = 2;
+ kNetworkJammed = 3;
+ }
+
+ enum RoutingRoleEnum : enum8 {
+ kUnspecified = 0;
+ kUnassigned = 1;
+ kSleepyEndDevice = 2;
+ kEndDevice = 3;
+ kREED = 4;
+ kRouter = 5;
+ kLeader = 6;
+ }
+
+ bitmap Feature : bitmap32 {
+ kPacketCounts = 0x1;
+ kErrorCounts = 0x2;
+ kMLECounts = 0x4;
+ kMACCounts = 0x8;
+ }
+
+ struct NeighborTableStruct {
+ int64u extAddress = 0;
+ int32u age = 1;
+ int16u rloc16 = 2;
+ int32u linkFrameCounter = 3;
+ int32u mleFrameCounter = 4;
+ int8u lqi = 5;
+ nullable int8s averageRssi = 6;
+ nullable int8s lastRssi = 7;
+ int8u frameErrorRate = 8;
+ int8u messageErrorRate = 9;
+ boolean rxOnWhenIdle = 10;
+ boolean fullThreadDevice = 11;
+ boolean fullNetworkData = 12;
+ boolean isChild = 13;
+ }
+
+ struct OperationalDatasetComponents {
+ boolean activeTimestampPresent = 0;
+ boolean pendingTimestampPresent = 1;
+ boolean masterKeyPresent = 2;
+ boolean networkNamePresent = 3;
+ boolean extendedPanIdPresent = 4;
+ boolean meshLocalPrefixPresent = 5;
+ boolean delayPresent = 6;
+ boolean panIdPresent = 7;
+ boolean channelPresent = 8;
+ boolean pskcPresent = 9;
+ boolean securityPolicyPresent = 10;
+ boolean channelMaskPresent = 11;
+ }
+
+ struct RouteTableStruct {
+ int64u extAddress = 0;
+ int16u rloc16 = 1;
+ int8u routerId = 2;
+ int8u nextHop = 3;
+ int8u pathCost = 4;
+ int8u LQIIn = 5;
+ int8u LQIOut = 6;
+ int8u age = 7;
+ boolean allocated = 8;
+ boolean linkEstablished = 9;
+ }
+
+ struct SecurityPolicy {
+ int16u rotationTime = 0;
+ int16u flags = 1;
+ }
+
+ info event ConnectionStatus = 0 {
+ ConnectionStatusEnum connectionStatus = 0;
+ }
+
+ info event NetworkFaultChange = 1 {
+ NetworkFaultEnum current[] = 0;
+ NetworkFaultEnum previous[] = 1;
+ }
+
+ readonly attribute nullable int16u channel = 0;
+ readonly attribute nullable RoutingRoleEnum routingRole = 1;
+ readonly attribute nullable char_string<16> networkName = 2;
+ readonly attribute nullable int16u panId = 3;
+ readonly attribute nullable int64u extendedPanId = 4;
+ readonly attribute nullable octet_string<17> meshLocalPrefix = 5;
+ readonly attribute optional int64u overrunCount = 6;
+ readonly attribute NeighborTableStruct neighborTable[] = 7;
+ readonly attribute RouteTableStruct routeTable[] = 8;
+ readonly attribute nullable int32u partitionId = 9;
+ readonly attribute nullable int16u weighting = 10;
+ readonly attribute nullable int16u dataVersion = 11;
+ readonly attribute nullable int16u stableDataVersion = 12;
+ readonly attribute nullable int8u leaderRouterId = 13;
+ readonly attribute optional int16u detachedRoleCount = 14;
+ readonly attribute optional int16u childRoleCount = 15;
+ readonly attribute optional int16u routerRoleCount = 16;
+ readonly attribute optional int16u leaderRoleCount = 17;
+ readonly attribute optional int16u attachAttemptCount = 18;
+ readonly attribute optional int16u partitionIdChangeCount = 19;
+ readonly attribute optional int16u betterPartitionAttachAttemptCount = 20;
+ readonly attribute optional int16u parentChangeCount = 21;
+ readonly attribute optional int32u txTotalCount = 22;
+ readonly attribute optional int32u txUnicastCount = 23;
+ readonly attribute optional int32u txBroadcastCount = 24;
+ readonly attribute optional int32u txAckRequestedCount = 25;
+ readonly attribute optional int32u txAckedCount = 26;
+ readonly attribute optional int32u txNoAckRequestedCount = 27;
+ readonly attribute optional int32u txDataCount = 28;
+ readonly attribute optional int32u txDataPollCount = 29;
+ readonly attribute optional int32u txBeaconCount = 30;
+ readonly attribute optional int32u txBeaconRequestCount = 31;
+ readonly attribute optional int32u txOtherCount = 32;
+ readonly attribute optional int32u txRetryCount = 33;
+ readonly attribute optional int32u txDirectMaxRetryExpiryCount = 34;
+ readonly attribute optional int32u txIndirectMaxRetryExpiryCount = 35;
+ readonly attribute optional int32u txErrCcaCount = 36;
+ readonly attribute optional int32u txErrAbortCount = 37;
+ readonly attribute optional int32u txErrBusyChannelCount = 38;
+ readonly attribute optional int32u rxTotalCount = 39;
+ readonly attribute optional int32u rxUnicastCount = 40;
+ readonly attribute optional int32u rxBroadcastCount = 41;
+ readonly attribute optional int32u rxDataCount = 42;
+ readonly attribute optional int32u rxDataPollCount = 43;
+ readonly attribute optional int32u rxBeaconCount = 44;
+ readonly attribute optional int32u rxBeaconRequestCount = 45;
+ readonly attribute optional int32u rxOtherCount = 46;
+ readonly attribute optional int32u rxAddressFilteredCount = 47;
+ readonly attribute optional int32u rxDestAddrFilteredCount = 48;
+ readonly attribute optional int32u rxDuplicatedCount = 49;
+ readonly attribute optional int32u rxErrNoFrameCount = 50;
+ readonly attribute optional int32u rxErrUnknownNeighborCount = 51;
+ readonly attribute optional int32u rxErrInvalidSrcAddrCount = 52;
+ readonly attribute optional int32u rxErrSecCount = 53;
+ readonly attribute optional int32u rxErrFcsCount = 54;
+ readonly attribute optional int32u rxErrOtherCount = 55;
+ readonly attribute optional nullable int64u activeTimestamp = 56;
+ readonly attribute optional nullable int64u pendingTimestamp = 57;
+ readonly attribute optional nullable int32u delay = 58;
+ readonly attribute nullable SecurityPolicy securityPolicy = 59;
+ readonly attribute nullable octet_string<4> channelPage0Mask = 60;
+ readonly attribute nullable OperationalDatasetComponents operationalDatasetComponents = 61;
+ readonly attribute NetworkFaultEnum activeNetworkFaultsList[] = 62;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ /** Reception of this command SHALL reset the OverrunCount attributes to 0 */
+ command access(invoke: manage) ResetCounts(): DefaultSuccess = 0;
+}
+
+/** Commands to trigger a Node to allow a new Administrator to commission it. */
+cluster AdministratorCommissioning = 60 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum CommissioningWindowStatusEnum : enum8 {
+ kWindowNotOpen = 0;
+ kEnhancedWindowOpen = 1;
+ kBasicWindowOpen = 2;
+ }
+
+ enum StatusCode : enum8 {
+ kBusy = 2;
+ kPAKEParameterError = 3;
+ kWindowNotOpen = 4;
+ }
+
+ bitmap Feature : bitmap32 {
+ kBasic = 0x1;
+ }
+
+ readonly attribute CommissioningWindowStatusEnum windowStatus = 0;
+ readonly attribute nullable fabric_idx adminFabricIndex = 1;
+ readonly attribute nullable vendor_id adminVendorId = 2;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct OpenCommissioningWindowRequest {
+ int16u commissioningTimeout = 0;
+ octet_string PAKEPasscodeVerifier = 1;
+ int16u discriminator = 2;
+ int32u iterations = 3;
+ octet_string<32> salt = 4;
+ }
+
+ request struct OpenBasicCommissioningWindowRequest {
+ int16u commissioningTimeout = 0;
+ }
+
+ /** This command is used by a current Administrator to instruct a Node to go into commissioning mode using enhanced commissioning method. */
+ timed command access(invoke: administer) OpenCommissioningWindow(OpenCommissioningWindowRequest): DefaultSuccess = 0;
+ /** This command is used by a current Administrator to instruct a Node to go into commissioning mode using basic commissioning method, if the node supports it. */
+ timed command access(invoke: administer) OpenBasicCommissioningWindow(OpenBasicCommissioningWindowRequest): DefaultSuccess = 1;
+ /** This command is used by a current Administrator to instruct a Node to revoke any active Open Commissioning Window or Open Basic Commissioning Window command. */
+ timed command access(invoke: administer) RevokeCommissioning(): DefaultSuccess = 2;
+}
+
+/** This cluster is used to add or remove Operational Credentials on a Commissionee or Node, as well as manage the associated Fabrics. */
+cluster OperationalCredentials = 62 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum CertificateChainTypeEnum : enum8 {
+ kDACCertificate = 1;
+ kPAICertificate = 2;
+ }
+
+ enum NodeOperationalCertStatusEnum : enum8 {
+ kOK = 0;
+ kInvalidPublicKey = 1;
+ kInvalidNodeOpId = 2;
+ kInvalidNOC = 3;
+ kMissingCsr = 4;
+ kTableFull = 5;
+ kInvalidAdminSubject = 6;
+ kFabricConflict = 9;
+ kLabelConflict = 10;
+ kInvalidFabricIndex = 11;
+ }
+
+ fabric_scoped struct FabricDescriptorStruct {
+ octet_string<65> rootPublicKey = 1;
+ vendor_id vendorID = 2;
+ fabric_id fabricID = 3;
+ node_id nodeID = 4;
+ char_string<32> label = 5;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_scoped struct NOCStruct {
+ fabric_sensitive octet_string noc = 1;
+ nullable fabric_sensitive octet_string icac = 2;
+ fabric_idx fabricIndex = 254;
+ }
+
+ readonly attribute access(read: administer) NOCStruct NOCs[] = 0;
+ readonly attribute FabricDescriptorStruct fabrics[] = 1;
+ readonly attribute int8u supportedFabrics = 2;
+ readonly attribute int8u commissionedFabrics = 3;
+ readonly attribute octet_string trustedRootCertificates[] = 4;
+ readonly attribute int8u currentFabricIndex = 5;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct AttestationRequestRequest {
+ octet_string<32> attestationNonce = 0;
+ }
+
+ response struct AttestationResponse = 1 {
+ octet_string<900> attestationElements = 0;
+ octet_string<64> attestationSignature = 1;
+ }
+
+ request struct CertificateChainRequestRequest {
+ CertificateChainTypeEnum certificateType = 0;
+ }
+
+ response struct CertificateChainResponse = 3 {
+ octet_string<600> certificate = 0;
+ }
+
+ request struct CSRRequestRequest {
+ octet_string<32> CSRNonce = 0;
+ optional boolean isForUpdateNOC = 1;
+ }
+
+ response struct CSRResponse = 5 {
+ octet_string NOCSRElements = 0;
+ octet_string attestationSignature = 1;
+ }
+
+ request struct AddNOCRequest {
+ octet_string<400> NOCValue = 0;
+ optional octet_string<400> ICACValue = 1;
+ octet_string<16> IPKValue = 2;
+ int64u caseAdminSubject = 3;
+ vendor_id adminVendorId = 4;
+ }
+
+ request struct UpdateNOCRequest {
+ octet_string NOCValue = 0;
+ optional octet_string ICACValue = 1;
+ }
+
+ response struct NOCResponse = 8 {
+ NodeOperationalCertStatusEnum statusCode = 0;
+ optional fabric_idx fabricIndex = 1;
+ optional char_string<128> debugText = 2;
+ }
+
+ request struct UpdateFabricLabelRequest {
+ char_string<32> label = 0;
+ }
+
+ request struct RemoveFabricRequest {
+ fabric_idx fabricIndex = 0;
+ }
+
+ request struct AddTrustedRootCertificateRequest {
+ octet_string rootCACertificate = 0;
+ }
+
+ /** Sender is requesting attestation information from the receiver. */
+ command access(invoke: administer) AttestationRequest(AttestationRequestRequest): AttestationResponse = 0;
+ /** Sender is requesting a device attestation certificate from the receiver. */
+ command access(invoke: administer) CertificateChainRequest(CertificateChainRequestRequest): CertificateChainResponse = 2;
+ /** Sender is requesting a certificate signing request (CSR) from the receiver. */
+ command access(invoke: administer) CSRRequest(CSRRequestRequest): CSRResponse = 4;
+ /** Sender is requesting to add the new node operational certificates. */
+ command access(invoke: administer) AddNOC(AddNOCRequest): NOCResponse = 6;
+ /** Sender is requesting to update the node operational certificates. */
+ fabric command access(invoke: administer) UpdateNOC(UpdateNOCRequest): NOCResponse = 7;
+ /** This command SHALL be used by an Administrative Node to set the user-visible Label field for a given Fabric, as reflected by entries in the Fabrics attribute. */
+ fabric command access(invoke: administer) UpdateFabricLabel(UpdateFabricLabelRequest): NOCResponse = 9;
+ /** This command is used by Administrative Nodes to remove a given fabric index and delete all associated fabric-scoped data. */
+ command access(invoke: administer) RemoveFabric(RemoveFabricRequest): NOCResponse = 10;
+ /** This command SHALL add a Trusted Root CA Certificate, provided as its CHIP Certificate representation. */
+ command access(invoke: administer) AddTrustedRootCertificate(AddTrustedRootCertificateRequest): DefaultSuccess = 11;
+}
+
+/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
+cluster GroupKeyManagement = 63 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum GroupKeySecurityPolicyEnum : enum8 {
+ kTrustFirst = 0;
+ kCacheAndSync = 1;
+ }
+
+ bitmap Feature : bitmap32 {
+ kCacheAndSync = 0x1;
+ }
+
+ fabric_scoped struct GroupInfoMapStruct {
+ group_id groupId = 1;
+ endpoint_no endpoints[] = 2;
+ optional char_string<16> groupName = 3;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_scoped struct GroupKeyMapStruct {
+ group_id groupId = 1;
+ int16u groupKeySetID = 2;
+ fabric_idx fabricIndex = 254;
+ }
+
+ struct GroupKeySetStruct {
+ int16u groupKeySetID = 0;
+ GroupKeySecurityPolicyEnum groupKeySecurityPolicy = 1;
+ nullable octet_string<16> epochKey0 = 2;
+ nullable epoch_us epochStartTime0 = 3;
+ nullable octet_string<16> epochKey1 = 4;
+ nullable epoch_us epochStartTime1 = 5;
+ nullable octet_string<16> epochKey2 = 6;
+ nullable epoch_us epochStartTime2 = 7;
+ }
+
+ attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
+ readonly attribute GroupInfoMapStruct groupTable[] = 1;
+ readonly attribute int16u maxGroupsPerFabric = 2;
+ readonly attribute int16u maxGroupKeysPerFabric = 3;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct KeySetWriteRequest {
+ GroupKeySetStruct groupKeySet = 0;
+ }
+
+ request struct KeySetReadRequest {
+ int16u groupKeySetID = 0;
+ }
+
+ response struct KeySetReadResponse = 2 {
+ GroupKeySetStruct groupKeySet = 0;
+ }
+
+ request struct KeySetRemoveRequest {
+ int16u groupKeySetID = 0;
+ }
+
+ response struct KeySetReadAllIndicesResponse = 5 {
+ int16u groupKeySetIDs[] = 0;
+ }
+
+ /** Write a new set of keys for the given key set id. */
+ fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
+ /** Read the keys for a given key set id. */
+ fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
+ /** Revoke a Root Key from a Group */
+ fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
+ /** Return the list of Group Key Sets associated with the accessing fabric */
+ fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
+}
+
+/** This cluster provides an interface to a boolean state called StateValue. */
+cluster BooleanState = 69 {
+ revision 1;
+
+ info event StateChange = 0 {
+ boolean stateValue = 0;
+ }
+
+ readonly attribute boolean stateValue = 0;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+}
+
+/** Allows servers to ensure that listed clients are notified when a server is available for communication. */
+cluster IcdManagement = 70 {
+ revision 2;
+
+ enum OperatingModeEnum : enum8 {
+ kSIT = 0;
+ kLIT = 1;
+ }
+
+ bitmap Feature : bitmap32 {
+ kCheckInProtocolSupport = 0x1;
+ kUserActiveModeTrigger = 0x2;
+ kLongIdleTimeSupport = 0x4;
+ }
+
+ bitmap UserActiveModeTriggerBitmap : bitmap32 {
+ kPowerCycle = 0x1;
+ kSettingsMenu = 0x2;
+ kCustomInstruction = 0x4;
+ kDeviceManual = 0x8;
+ kActuateSensor = 0x10;
+ kActuateSensorSeconds = 0x20;
+ kActuateSensorTimes = 0x40;
+ kActuateSensorLightsBlink = 0x80;
+ kResetButton = 0x100;
+ kResetButtonLightsBlink = 0x200;
+ kResetButtonSeconds = 0x400;
+ kResetButtonTimes = 0x800;
+ kSetupButton = 0x1000;
+ kSetupButtonSeconds = 0x2000;
+ kSetupButtonLightsBlink = 0x4000;
+ kSetupButtonTimes = 0x8000;
+ kAppDefinedButton = 0x10000;
+ }
+
+ fabric_scoped struct MonitoringRegistrationStruct {
+ fabric_sensitive node_id checkInNodeID = 1;
+ fabric_sensitive int64u monitoredSubject = 2;
+ fabric_idx fabricIndex = 254;
+ }
+
+ readonly attribute int32u idleModeDuration = 0;
+ readonly attribute int32u activeModeDuration = 1;
+ readonly attribute int16u activeModeThreshold = 2;
+ readonly attribute access(read: administer) optional MonitoringRegistrationStruct registeredClients[] = 3;
+ readonly attribute access(read: administer) optional int32u ICDCounter = 4;
+ readonly attribute optional int16u clientsSupportedPerFabric = 5;
+ readonly attribute optional UserActiveModeTriggerBitmap userActiveModeTriggerHint = 6;
+ readonly attribute optional char_string<128> userActiveModeTriggerInstruction = 7;
+ readonly attribute optional OperatingModeEnum operatingMode = 8;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct RegisterClientRequest {
+ node_id checkInNodeID = 0;
+ int64u monitoredSubject = 1;
+ octet_string<16> key = 2;
+ optional octet_string<16> verificationKey = 3;
+ }
+
+ response struct RegisterClientResponse = 1 {
+ int32u ICDCounter = 0;
+ }
+
+ request struct UnregisterClientRequest {
+ node_id checkInNodeID = 0;
+ optional octet_string<16> verificationKey = 1;
+ }
+
+ response struct StayActiveResponse = 4 {
+ int32u promisedActiveDuration = 0;
+ }
+
+ /** Register a client to the end device */
+ fabric command access(invoke: manage) RegisterClient(RegisterClientRequest): RegisterClientResponse = 0;
+ /** Unregister a client from an end device */
+ fabric command access(invoke: manage) UnregisterClient(UnregisterClientRequest): DefaultSuccess = 2;
+ /** Request the end device to stay in Active Mode for an additional ActiveModeThreshold */
+ command access(invoke: manage) StayActiveRequest(): StayActiveResponse = 3;
+}
+
+endpoint 0 {
+ device type ma_rootdevice = 22, version 2;
+
+ binding cluster OtaSoftwareUpdateProvider;
+
+ server cluster Descriptor {
+ callback attribute deviceTypeList;
+ callback attribute serverList;
+ callback attribute clientList;
+ callback attribute partsList;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
+ }
+
+ server cluster AccessControl {
+ emits event AccessControlEntryChanged;
+ emits event AccessControlExtensionChanged;
+ callback attribute acl;
+ callback attribute subjectsPerAccessControlEntry;
+ callback attribute targetsPerAccessControlEntry;
+ callback attribute accessControlEntriesPerFabric;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ callback attribute clusterRevision;
+ }
+
+ server cluster BasicInformation {
+ emits event StartUp;
+ emits event ShutDown;
+ emits event Leave;
+ callback attribute dataModelRevision;
+ callback attribute vendorName;
+ callback attribute vendorID;
+ callback attribute productName;
+ callback attribute productID;
+ persist attribute nodeLabel;
+ callback attribute location;
+ callback attribute hardwareVersion;
+ callback attribute hardwareVersionString;
+ callback attribute softwareVersion;
+ callback attribute softwareVersionString;
+ callback attribute capabilityMinima;
+ callback attribute specificationVersion;
+ callback attribute maxPathsPerInvoke;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 2;
+ }
+
+ server cluster OtaSoftwareUpdateRequestor {
+ emits event StateTransition;
+ emits event VersionApplied;
+ emits event DownloadError;
+ callback attribute defaultOTAProviders;
+ ram attribute updatePossible default = 1;
+ ram attribute updateState default = 0;
+ ram attribute updateStateProgress default = 0;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+
+ handle command AnnounceOTAProvider;
+ }
+
+ server cluster GeneralCommissioning {
+ ram attribute breadcrumb default = 0x0000000000000000;
+ callback attribute basicCommissioningInfo;
+ callback attribute regulatoryConfig;
+ callback attribute locationCapability;
+ callback attribute supportsConcurrentConnection;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+
+ handle command ArmFailSafe;
+ handle command ArmFailSafeResponse;
+ handle command SetRegulatoryConfig;
+ handle command SetRegulatoryConfigResponse;
+ handle command CommissioningComplete;
+ handle command CommissioningCompleteResponse;
+ }
+
+ server cluster NetworkCommissioning {
+ ram attribute maxNetworks;
+ callback attribute networks;
+ ram attribute scanMaxTimeSeconds;
+ ram attribute connectMaxTimeSeconds;
+ ram attribute interfaceEnabled;
+ ram attribute lastNetworkingStatus;
+ ram attribute lastNetworkID;
+ ram attribute lastConnectErrorValue;
+ ram attribute featureMap default = 2;
+ ram attribute clusterRevision default = 1;
+
+ handle command ScanNetworks;
+ handle command ScanNetworksResponse;
+ handle command AddOrUpdateThreadNetwork;
+ handle command RemoveNetwork;
+ handle command NetworkConfigResponse;
+ handle command ConnectNetwork;
+ handle command ConnectNetworkResponse;
+ handle command ReorderNetwork;
+ }
+
+ server cluster GeneralDiagnostics {
+ emits event BootReason;
+ callback attribute networkInterfaces;
+ callback attribute rebootCount;
+ callback attribute activeNetworkFaults;
+ callback attribute testEventTriggersEnabled default = false;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
+
+ handle command TestEventTrigger;
+ }
+
+ server cluster SoftwareDiagnostics {
+ callback attribute threadMetrics;
+ callback attribute currentHeapFree;
+ callback attribute currentHeapUsed;
+ callback attribute currentHeapHighWatermark;
+ callback attribute featureMap;
+ ram attribute clusterRevision default = 1;
+
+ handle command ResetWatermarks;
+ }
+
+ server cluster ThreadNetworkDiagnostics {
+ callback attribute channel;
+ callback attribute routingRole;
+ callback attribute networkName;
+ callback attribute panId;
+ callback attribute extendedPanId;
+ callback attribute meshLocalPrefix;
+ callback attribute overrunCount;
+ callback attribute neighborTable;
+ callback attribute routeTable;
+ callback attribute partitionId;
+ callback attribute weighting;
+ callback attribute dataVersion;
+ callback attribute stableDataVersion;
+ callback attribute leaderRouterId;
+ callback attribute detachedRoleCount;
+ callback attribute childRoleCount;
+ callback attribute routerRoleCount;
+ callback attribute leaderRoleCount;
+ callback attribute attachAttemptCount;
+ callback attribute partitionIdChangeCount;
+ callback attribute betterPartitionAttachAttemptCount;
+ callback attribute parentChangeCount;
+ callback attribute txTotalCount;
+ callback attribute txUnicastCount;
+ callback attribute txBroadcastCount;
+ callback attribute txAckRequestedCount;
+ callback attribute txAckedCount;
+ callback attribute txNoAckRequestedCount;
+ callback attribute txDataCount;
+ callback attribute txDataPollCount;
+ callback attribute txBeaconCount;
+ callback attribute txBeaconRequestCount;
+ callback attribute txOtherCount;
+ callback attribute txRetryCount;
+ callback attribute txDirectMaxRetryExpiryCount;
+ callback attribute txIndirectMaxRetryExpiryCount;
+ callback attribute txErrCcaCount;
+ callback attribute txErrAbortCount;
+ callback attribute txErrBusyChannelCount;
+ callback attribute rxTotalCount;
+ callback attribute rxUnicastCount;
+ callback attribute rxBroadcastCount;
+ callback attribute rxDataCount;
+ callback attribute rxDataPollCount;
+ callback attribute rxBeaconCount;
+ callback attribute rxBeaconRequestCount;
+ callback attribute rxOtherCount;
+ callback attribute rxAddressFilteredCount;
+ callback attribute rxDestAddrFilteredCount;
+ callback attribute rxDuplicatedCount;
+ callback attribute rxErrNoFrameCount;
+ callback attribute rxErrUnknownNeighborCount;
+ callback attribute rxErrInvalidSrcAddrCount;
+ callback attribute rxErrSecCount;
+ callback attribute rxErrFcsCount;
+ callback attribute rxErrOtherCount;
+ callback attribute securityPolicy;
+ callback attribute channelPage0Mask;
+ callback attribute operationalDatasetComponents;
+ callback attribute activeNetworkFaultsList;
+ ram attribute featureMap default = 0x000F;
+ ram attribute clusterRevision default = 1;
+
+ handle command ResetCounts;
+ }
+
+ server cluster AdministratorCommissioning {
+ callback attribute windowStatus;
+ callback attribute adminFabricIndex;
+ callback attribute adminVendorId;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+
+ handle command OpenCommissioningWindow;
+ handle command RevokeCommissioning;
+ }
+
+ server cluster OperationalCredentials {
+ callback attribute NOCs;
+ callback attribute fabrics;
+ callback attribute supportedFabrics;
+ callback attribute commissionedFabrics;
+ callback attribute trustedRootCertificates;
+ callback attribute currentFabricIndex;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+
+ handle command AttestationRequest;
+ handle command AttestationResponse;
+ handle command CertificateChainRequest;
+ handle command CertificateChainResponse;
+ handle command CSRRequest;
+ handle command CSRResponse;
+ handle command AddNOC;
+ handle command UpdateNOC;
+ handle command NOCResponse;
+ handle command UpdateFabricLabel;
+ handle command RemoveFabric;
+ handle command AddTrustedRootCertificate;
+ }
+
+ server cluster GroupKeyManagement {
+ callback attribute groupKeyMap;
+ callback attribute groupTable;
+ callback attribute maxGroupsPerFabric;
+ callback attribute maxGroupKeysPerFabric;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
+
+ handle command KeySetWrite;
+ handle command KeySetRead;
+ handle command KeySetReadResponse;
+ handle command KeySetRemove;
+ handle command KeySetReadAllIndices;
+ handle command KeySetReadAllIndicesResponse;
+ }
+
+ server cluster IcdManagement {
+ callback attribute idleModeDuration;
+ callback attribute activeModeDuration;
+ callback attribute activeModeThreshold;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0x0000;
+ ram attribute clusterRevision default = 1;
+ }
+}
+endpoint 1 {
+ device type ma_contactsensor = 21, version 1;
+
+
+ server cluster Identify {
+ ram attribute identifyTime default = 0x0000;
+ ram attribute identifyType default = 0x0;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 4;
+
+ handle command Identify;
+ handle command TriggerEffect;
+ }
+
+ server cluster Descriptor {
+ callback attribute deviceTypeList;
+ callback attribute serverList;
+ callback attribute clientList;
+ callback attribute partsList;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute attributeList;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
+ }
+
+ server cluster BooleanState {
+ emits event StateChange;
+ ram attribute stateValue default = 0;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+ }
+}
+
+
diff --git a/examples/contact-sensor-app/nxp/zap/contact-sensor-app.zap b/examples/contact-sensor-app/nxp/zap/contact-sensor-app.zap
new file mode 100644
index 00000000000000..bf037957bd2629
--- /dev/null
+++ b/examples/contact-sensor-app/nxp/zap/contact-sensor-app.zap
@@ -0,0 +1,3576 @@
+{
+ "fileFormat": 2,
+ "featureLevel": 99,
+ "creator": "zap",
+ "keyValuePairs": [
+ {
+ "key": "commandDiscovery",
+ "value": "1"
+ },
+ {
+ "key": "defaultResponsePolicy",
+ "value": "always"
+ },
+ {
+ "key": "manufacturerCodes",
+ "value": "0x1002"
+ }
+ ],
+ "package": [
+ {
+ "pathRelativity": "relativeToZap",
+ "path": "../../../../src/app/zap-templates/zcl/zcl.json",
+ "type": "zcl-properties",
+ "category": "matter",
+ "version": 1,
+ "description": "Matter SDK ZCL data"
+ },
+ {
+ "pathRelativity": "relativeToZap",
+ "path": "../../../../src/app/zap-templates/app-templates.json",
+ "type": "gen-templates-json",
+ "version": "chip-v1"
+ }
+ ],
+ "endpointTypes": [
+ {
+ "id": 1,
+ "name": "MA-rootdevice",
+ "deviceTypeRef": {
+ "code": 22,
+ "profileId": 259,
+ "label": "MA-rootdevice",
+ "name": "MA-rootdevice"
+ },
+ "deviceTypes": [
+ {
+ "code": 22,
+ "profileId": 259,
+ "label": "MA-rootdevice",
+ "name": "MA-rootdevice"
+ }
+ ],
+ "deviceVersions": [
+ 2
+ ],
+ "deviceIdentifiers": [
+ 22
+ ],
+ "deviceTypeName": "MA-rootdevice",
+ "deviceTypeCode": 22,
+ "deviceTypeProfileId": 259,
+ "clusters": [
+ {
+ "name": "Descriptor",
+ "code": 29,
+ "mfgCode": null,
+ "define": "DESCRIPTOR_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "DeviceTypeList",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ServerList",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClientList",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "PartsList",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Access Control",
+ "code": 31,
+ "mfgCode": null,
+ "define": "ACCESS_CONTROL_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "ACL",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "SubjectsPerAccessControlEntry",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "TargetsPerAccessControlEntry",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AccessControlEntriesPerFabric",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "AccessControlEntryChanged",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ },
+ {
+ "name": "AccessControlExtensionChanged",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
+ },
+ {
+ "name": "Basic Information",
+ "code": 40,
+ "mfgCode": null,
+ "define": "BASIC_INFORMATION_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "DataModelRevision",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "VendorName",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "VendorID",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "vendor_id",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ProductName",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ProductID",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "NodeLabel",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "Location",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "HardwareVersion",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "HardwareVersionString",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SoftwareVersion",
+ "code": 9,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SoftwareVersionString",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "CapabilityMinima",
+ "code": 19,
+ "mfgCode": null,
+ "side": "server",
+ "type": "CapabilityMinimaStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "SpecificationVersion",
+ "code": 21,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxPathsPerInvoke",
+ "code": 22,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "StartUp",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ },
+ {
+ "name": "ShutDown",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ },
+ {
+ "name": "Leave",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
+ },
+ {
+ "name": "OTA Software Update Provider",
+ "code": 41,
+ "mfgCode": null,
+ "define": "OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "QueryImage",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "QueryImageResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ApplyUpdateRequest",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ApplyUpdateResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NotifyUpdateApplied",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "OTA Software Update Requestor",
+ "code": 42,
+ "mfgCode": null,
+ "define": "OTA_SOFTWARE_UPDATE_REQUESTOR_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AnnounceOTAProvider",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "DefaultOTAProviders",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "UpdatePossible",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "UpdateState",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "UpdateStateEnum",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "UpdateStateProgress",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "StateTransition",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ },
+ {
+ "name": "VersionApplied",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ },
+ {
+ "name": "DownloadError",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
+ },
+ {
+ "name": "General Commissioning",
+ "code": 48,
+ "mfgCode": null,
+ "define": "GENERAL_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ArmFailSafe",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ArmFailSafeResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "SetRegulatoryConfig",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "SetRegulatoryConfigResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "CommissioningComplete",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "CommissioningCompleteResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "Breadcrumb",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int64u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000000000000000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "BasicCommissioningInfo",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "BasicCommissioningInfo",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RegulatoryConfig",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "RegulatoryLocationTypeEnum",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "LocationCapability",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "RegulatoryLocationTypeEnum",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "SupportsConcurrentConnection",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ScanNetworks",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ScanNetworksResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddOrUpdateThreadNetwork",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveNetwork",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkConfigResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ConnectNetwork",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ConnectNetworkResponse",
+ "code": 7,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ReorderNetwork",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "MaxNetworks",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "Networks",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ScanMaxTimeSeconds",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ConnectMaxTimeSeconds",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "InterfaceEnabled",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "LastNetworkingStatus",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "NetworkCommissioningStatusEnum",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "LastNetworkID",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "type": "octet_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "LastConnectErrorValue",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32s",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "General Diagnostics",
+ "code": 51,
+ "mfgCode": null,
+ "define": "GENERAL_DIAGNOSTICS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "TestEventTrigger",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "NetworkInterfaces",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RebootCount",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ActiveNetworkFaults",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "TestEventTriggersEnabled",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "false",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "BootReason",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
+ },
+ {
+ "name": "Software Diagnostics",
+ "code": 52,
+ "mfgCode": null,
+ "define": "SOFTWARE_DIAGNOSTICS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ResetWatermarks",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "ThreadMetrics",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "CurrentHeapFree",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int64u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "CurrentHeapUsed",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int64u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "CurrentHeapHighWatermark",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int64u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Thread Network Diagnostics",
+ "code": 53,
+ "mfgCode": null,
+ "define": "THREAD_NETWORK_DIAGNOSTICS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ResetCounts",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "Channel",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RoutingRole",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "RoutingRoleEnum",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "NetworkName",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "PanId",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ExtendedPanId",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int64u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "MeshLocalPrefix",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "octet_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "OverrunCount",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int64u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "NeighborTable",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RouteTable",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "PartitionId",
+ "code": 9,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "Weighting",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "DataVersion",
+ "code": 11,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "StableDataVersion",
+ "code": 12,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "LeaderRouterId",
+ "code": 13,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "DetachedRoleCount",
+ "code": 14,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ChildRoleCount",
+ "code": 15,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RouterRoleCount",
+ "code": 16,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "LeaderRoleCount",
+ "code": 17,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttachAttemptCount",
+ "code": 18,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "PartitionIdChangeCount",
+ "code": 19,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "BetterPartitionAttachAttemptCount",
+ "code": 20,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ParentChangeCount",
+ "code": 21,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxTotalCount",
+ "code": 22,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxUnicastCount",
+ "code": 23,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxBroadcastCount",
+ "code": 24,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxAckRequestedCount",
+ "code": 25,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxAckedCount",
+ "code": 26,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxNoAckRequestedCount",
+ "code": 27,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxDataCount",
+ "code": 28,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxDataPollCount",
+ "code": 29,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxBeaconCount",
+ "code": 30,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxBeaconRequestCount",
+ "code": 31,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxOtherCount",
+ "code": 32,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxRetryCount",
+ "code": 33,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxDirectMaxRetryExpiryCount",
+ "code": 34,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxIndirectMaxRetryExpiryCount",
+ "code": 35,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxErrCcaCount",
+ "code": 36,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxErrAbortCount",
+ "code": 37,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TxErrBusyChannelCount",
+ "code": 38,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxTotalCount",
+ "code": 39,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxUnicastCount",
+ "code": 40,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxBroadcastCount",
+ "code": 41,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxDataCount",
+ "code": 42,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxDataPollCount",
+ "code": 43,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxBeaconCount",
+ "code": 44,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxBeaconRequestCount",
+ "code": 45,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxOtherCount",
+ "code": 46,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxAddressFilteredCount",
+ "code": 47,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxDestAddrFilteredCount",
+ "code": 48,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxDuplicatedCount",
+ "code": 49,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxErrNoFrameCount",
+ "code": 50,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxErrUnknownNeighborCount",
+ "code": 51,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxErrInvalidSrcAddrCount",
+ "code": 52,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxErrSecCount",
+ "code": 53,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxErrFcsCount",
+ "code": 54,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RxErrOtherCount",
+ "code": 55,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SecurityPolicy",
+ "code": 59,
+ "mfgCode": null,
+ "side": "server",
+ "type": "SecurityPolicy",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ChannelPage0Mask",
+ "code": 60,
+ "mfgCode": null,
+ "side": "server",
+ "type": "octet_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "OperationalDatasetComponents",
+ "code": 61,
+ "mfgCode": null,
+ "side": "server",
+ "type": "OperationalDatasetComponents",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ActiveNetworkFaultsList",
+ "code": 62,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x000F",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Administrator Commissioning",
+ "code": 60,
+ "mfgCode": null,
+ "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "OpenCommissioningWindow",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RevokeCommissioning",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "WindowStatus",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "CommissioningWindowStatusEnum",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AdminFabricIndex",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "fabric_idx",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AdminVendorId",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "vendor_id",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Operational Credentials",
+ "code": 62,
+ "mfgCode": null,
+ "define": "OPERATIONAL_CREDENTIALS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AttestationRequest",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AttestationResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "CertificateChainRequest",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "CertificateChainResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "CSRRequest",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "CSRResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddNOC",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "UpdateNOC",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NOCResponse",
+ "code": 8,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "UpdateFabricLabel",
+ "code": 9,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveFabric",
+ "code": 10,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddTrustedRootCertificate",
+ "code": 11,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "NOCs",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "Fabrics",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SupportedFabrics",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "CommissionedFabrics",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TrustedRootCertificates",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "CurrentFabricIndex",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Group Key Management",
+ "code": 63,
+ "mfgCode": null,
+ "define": "GROUP_KEY_MANAGEMENT_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "KeySetWrite",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "KeySetRead",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "KeySetReadResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "KeySetRemove",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "KeySetReadAllIndices",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "KeySetReadAllIndicesResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "GroupKeyMap",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GroupTable",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxGroupsPerFabric",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxGroupKeysPerFabric",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "ICD Management",
+ "code": 70,
+ "mfgCode": null,
+ "define": "ICD_MANAGEMENT_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "IdleModeDuration",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ActiveModeDuration",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ActiveModeThreshold",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": 2,
+ "name": "MA-dimmablelight",
+ "deviceTypeRef": {
+ "code": 21,
+ "profileId": 259,
+ "label": "MA-contactsensor",
+ "name": "MA-contactsensor"
+ },
+ "deviceTypes": [
+ {
+ "code": 21,
+ "profileId": 259,
+ "label": "MA-contactsensor",
+ "name": "MA-contactsensor"
+ }
+ ],
+ "deviceVersions": [
+ 1
+ ],
+ "deviceIdentifiers": [
+ 21
+ ],
+ "deviceTypeName": "MA-contactsensor",
+ "deviceTypeCode": 21,
+ "deviceTypeProfileId": 259,
+ "clusters": [
+ {
+ "name": "Identify",
+ "code": 3,
+ "mfgCode": null,
+ "define": "IDENTIFY_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "Identify",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "TriggerEffect",
+ "code": 64,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "IdentifyTime",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "IdentifyType",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "IdentifyTypeEnum",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "4",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Descriptor",
+ "code": 29,
+ "mfgCode": null,
+ "define": "DESCRIPTOR_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "DeviceTypeList",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ServerList",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClientList",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "PartsList",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Boolean State",
+ "code": 69,
+ "mfgCode": null,
+ "define": "BOOLEAN_STATE_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "StateValue",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "StateChange",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "endpoints": [
+ {
+ "endpointTypeName": "MA-rootdevice",
+ "endpointTypeIndex": 0,
+ "profileId": 259,
+ "endpointId": 0,
+ "networkId": 0
+ },
+ {
+ "endpointTypeName": "MA-dimmablelight",
+ "endpointTypeIndex": 1,
+ "profileId": 259,
+ "endpointId": 1,
+ "networkId": 0
+ }
+ ],
+ "log": []
+}
\ No newline at end of file
diff --git a/examples/contact-sensor-app/telink/src/AppTask.cpp b/examples/contact-sensor-app/telink/src/AppTask.cpp
index 0c4072d6b8e21e..dbcf9e1ce48405 100644
--- a/examples/contact-sensor-app/telink/src/AppTask.cpp
+++ b/examples/contact-sensor-app/telink/src/AppTask.cpp
@@ -98,7 +98,7 @@ void AppTask::UpdateClusterStateInternal(intptr_t arg)
Protocols::InteractionModel::Status status = app::Clusters::BooleanState::Attributes::StateValue::Set(1, newValue);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating boolean status value %x", status);
+ ChipLogError(NotSpecified, "ERR: updating boolean status value %x", to_underlying(status));
}
}
diff --git a/examples/darwin-framework-tool/commands/bdx/DownloadLogCommand.h b/examples/darwin-framework-tool/commands/bdx/DownloadLogCommand.h
index ce48270d28b6ac..27bbdd676d4971 100644
--- a/examples/darwin-framework-tool/commands/bdx/DownloadLogCommand.h
+++ b/examples/darwin-framework-tool/commands/bdx/DownloadLogCommand.h
@@ -32,14 +32,23 @@ class DownloadLogCommand : public CHIPCommandBridge
"The timeout for getting the log. If the timeout expires, completion will be called with whatever has been "
"retrieved by that point (which might be none or a partial log). If the timeout is set to 0, the request will "
"not expire and completion will not be called until the log is fully retrieved or an error occurs.");
+ AddArgument("async", 0, 1, &mIsAsyncCommand,
+ "By default the command waits for the download to finish before returning. If async is true the command will "
+ "not wait and the download will proceed in the background");
+ AddArgument("filepath", &mFilePath, "An optional filepath to save the download log content to.");
}
/////////// CHIPCommandBridge Interface /////////
CHIP_ERROR RunCommand() override;
- chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(10); }
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout > 0 ? mTimeout + 10 : 300);
+ }
private:
chip::NodeId mNodeId;
uint8_t mLogType;
uint16_t mTimeout;
+ chip::Optional mFilePath;
+ chip::Optional mIsAsyncCommand;
};
diff --git a/examples/darwin-framework-tool/commands/bdx/DownloadLogCommand.mm b/examples/darwin-framework-tool/commands/bdx/DownloadLogCommand.mm
index 494ec964f14b63..b105b6cb3098c8 100644
--- a/examples/darwin-framework-tool/commands/bdx/DownloadLogCommand.mm
+++ b/examples/darwin-framework-tool/commands/bdx/DownloadLogCommand.mm
@@ -21,6 +21,7 @@
#import "MTRError_Utils.h"
#include "DownloadLogCommand.h"
+#include "RemoteDataModelLogger.h"
CHIP_ERROR DownloadLogCommand::RunCommand()
{
@@ -32,27 +33,62 @@
auto logType = static_cast(mLogType);
auto queue = dispatch_queue_create("com.chip.bdx.downloader", DISPATCH_QUEUE_SERIAL);
+ bool shouldWaitForDownload = !mIsAsyncCommand.ValueOr(false);
+ mIsAsyncCommand.ClearValue();
+
+ bool dumpToFile = mFilePath.HasValue();
+ auto * dumpFilePath = dumpToFile ? [NSString stringWithUTF8String:mFilePath.Value()] : nil;
+ mFilePath.ClearValue();
+
auto * self = this;
auto completion = ^(NSURL * url, NSError * error) {
// A non-nil url indicates the presence of content, which can occur even in error scenarios like timeouts.
+ NSString * logContent = nil;
if (nil != url) {
NSError * readError = nil;
auto * data = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&readError];
- VerifyOrReturn(nil == readError, self->SetCommandExitStatus(MTRErrorToCHIPErrorCode(readError)));
+ if (nil != readError) {
+ if (shouldWaitForDownload) {
+ self->SetCommandExitStatus(MTRErrorToCHIPErrorCode(readError));
+ }
+ return;
+ }
+
+ logContent = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+ NSLog(@"Content: %@", logContent);
- auto * content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
- NSLog(@"Content: %@", content);
+ if (dumpToFile) {
+ NSError * writeError = nil;
+ auto * fileManager = [NSFileManager defaultManager];
+ [fileManager copyItemAtPath:[url path] toPath:dumpFilePath error:&writeError];
+ if (nil != writeError) {
+ if (shouldWaitForDownload) {
+ self->SetCommandExitStatus(MTRErrorToCHIPErrorCode(readError));
+ }
+ return;
+ }
+ }
}
- VerifyOrReturn(nil == error, self->SetCommandExitStatus(MTRErrorToCHIPErrorCode(error)));
+ ChipLogProgress(chipTool, "Diagnostic logs transfer: %s", error ? "Error" : "Success");
+ auto err = RemoteDataModelLogger::LogBdxDownload(logContent, error);
- // The url is nil when there are no logs on the target device.
- if (nil == url) {
- NSLog(@"No logs has been found onto node 0x" ChipLogFormatX64, ChipLogValueX64(mNodeId));
+ if (CHIP_NO_ERROR != err) {
+ if (shouldWaitForDownload) {
+ self->SetCommandExitStatus(err);
+ }
+ return;
+ }
+
+ if (shouldWaitForDownload) {
+ self->SetCommandExitStatus(MTRErrorToCHIPErrorCode(error));
}
- self->SetCommandExitStatus(CHIP_NO_ERROR);
};
[device downloadLogOfType:logType timeout:mTimeout queue:queue completion:completion];
+
+ if (!shouldWaitForDownload) {
+ SetCommandExitStatus(CHIP_NO_ERROR);
+ }
return CHIP_NO_ERROR;
}
diff --git a/examples/darwin-framework-tool/commands/common/MTRError.mm b/examples/darwin-framework-tool/commands/common/MTRError.mm
index d385983ca2fc94..f7680e822d323d 100644
--- a/examples/darwin-framework-tool/commands/common/MTRError.mm
+++ b/examples/darwin-framework-tool/commands/common/MTRError.mm
@@ -20,7 +20,6 @@
#import
#import
-#import
#import
#import
diff --git a/examples/darwin-framework-tool/commands/common/RemoteDataModelLogger.h b/examples/darwin-framework-tool/commands/common/RemoteDataModelLogger.h
index 39605e6fb56390..b2cd92df859deb 100644
--- a/examples/darwin-framework-tool/commands/common/RemoteDataModelLogger.h
+++ b/examples/darwin-framework-tool/commands/common/RemoteDataModelLogger.h
@@ -32,5 +32,6 @@ CHIP_ERROR LogCommandAsJSON(NSNumber * endpointId, NSNumber * clusterId, NSNumbe
CHIP_ERROR LogAttributeErrorAsJSON(NSNumber * endpointId, NSNumber * clusterId, NSNumber * attributeId, NSError * error);
CHIP_ERROR LogCommandErrorAsJSON(NSNumber * endpointId, NSNumber * clusterId, NSNumber * commandId, NSError * error);
CHIP_ERROR LogGetCommissionerNodeId(NSNumber * nodeId);
+CHIP_ERROR LogBdxDownload(NSString * content, NSError * error);
void SetDelegate(RemoteDataModelLoggerDelegate * delegate);
}; // namespace RemoteDataModelLogger
diff --git a/examples/darwin-framework-tool/commands/common/RemoteDataModelLogger.mm b/examples/darwin-framework-tool/commands/common/RemoteDataModelLogger.mm
index 760fe0bc998ed5..ff12cdc022e515 100644
--- a/examples/darwin-framework-tool/commands/common/RemoteDataModelLogger.mm
+++ b/examples/darwin-framework-tool/commands/common/RemoteDataModelLogger.mm
@@ -35,6 +35,7 @@
constexpr char kClusterErrorIdKey[] = "clusterError";
constexpr char kValueKey[] = "value";
constexpr char kNodeIdKey[] = "nodeId";
+constexpr char kLogContentIdKey[] = "logContent";
constexpr char kBase64Header[] = "base64:";
@@ -204,5 +205,33 @@ CHIP_ERROR LogGetCommissionerNodeId(NSNumber * value)
return gDelegate->LogJSON(valueStr.c_str());
}
+CHIP_ERROR LogBdxDownload(NSString * content, NSError * error)
+{
+ VerifyOrReturnError(gDelegate != nullptr, CHIP_NO_ERROR);
+
+ Json::Value rootValue;
+ rootValue[kValueKey] = Json::Value();
+
+ Json::Value jsonValue;
+ VerifyOrDie(CHIP_NO_ERROR == AsJsonValue(content, jsonValue));
+ rootValue[kValueKey][kLogContentIdKey] = jsonValue;
+
+ if (error) {
+ auto err = MTRErrorToCHIPErrorCode(error);
+ auto status = chip::app::StatusIB(err);
+
+#if CHIP_CONFIG_IM_STATUS_CODE_VERBOSE_FORMAT
+ auto statusName = chip::Protocols::InteractionModel::StatusName(status.mStatus);
+ rootValue[kValueKey][kErrorIdKey] = statusName;
+#else
+ auto statusName = status.mStatus;
+ rootValue[kValueKey][kErrorIdKey] = chip::to_underlying(statusName);
+#endif // CHIP_CONFIG_IM_STATUS_CODE_VERBOSE_FORMAT
+ }
+
+ auto valueStr = JsonToString(rootValue);
+ return gDelegate->LogJSON(valueStr.c_str());
+}
+
void SetDelegate(RemoteDataModelLoggerDelegate * delegate) { gDelegate = delegate; }
}; // namespace RemoteDataModelLogger
diff --git a/examples/dishwasher-app/dishwasher-common/include/operational-state-delegate-impl.h b/examples/dishwasher-app/dishwasher-common/include/operational-state-delegate-impl.h
index 9fd023db8194d9..5f017119930e5e 100644
--- a/examples/dishwasher-app/dishwasher-common/include/operational-state-delegate-impl.h
+++ b/examples/dishwasher-app/dishwasher-common/include/operational-state-delegate-impl.h
@@ -20,7 +20,7 @@
#include
#include
-#include
+
#include
namespace chip {
diff --git a/examples/light-switch-app/ameba/main/BindingHandler.cpp b/examples/light-switch-app/ameba/main/BindingHandler.cpp
index 29acdaae952896..0ffcddc67839eb 100644
--- a/examples/light-switch-app/ameba/main/BindingHandler.cpp
+++ b/examples/light-switch-app/ameba/main/BindingHandler.cpp
@@ -113,7 +113,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
VerifyOrReturn(context != nullptr, ChipLogError(NotSpecified, "OnDeviceConnectedFn: context is null"));
BindingCommandData * data = static_cast(context);
- if (binding.type == EMBER_MULTICAST_BINDING && data->isGroup)
+ if (binding.type == MATTER_MULTICAST_BINDING && data->isGroup)
{
switch (data->clusterId)
{
@@ -122,7 +122,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
break;
}
}
- else if (binding.type == EMBER_UNICAST_BINDING && !data->isGroup)
+ else if (binding.type == MATTER_UNICAST_BINDING && !data->isGroup)
{
switch (data->clusterId)
{
@@ -246,7 +246,7 @@ CHIP_ERROR BindingGroupBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 2, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_MULTICAST_BINDING;
+ entry->type = MATTER_MULTICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->groupId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
@@ -261,7 +261,7 @@ CHIP_ERROR BindingUnicastBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 3, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_UNICAST_BINDING;
+ entry->type = MATTER_UNICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->nodeId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
diff --git a/examples/light-switch-app/asr/src/BindingHandler.cpp b/examples/light-switch-app/asr/src/BindingHandler.cpp
index bb2d1d754fc70f..10ee9e2332af30 100644
--- a/examples/light-switch-app/asr/src/BindingHandler.cpp
+++ b/examples/light-switch-app/asr/src/BindingHandler.cpp
@@ -199,7 +199,7 @@ void BindingHandler::LightSwitchChangedHandler(const EmberBindingTableEntry & aB
VerifyOrReturn(context != nullptr, ChipLogError(NotSpecified, "OnDeviceConnectedFn: context is null"));
BindingData * data = static_cast(context);
- if (aBinding.type == EMBER_MULTICAST_BINDING && data->IsGroup)
+ if (aBinding.type == MATTER_MULTICAST_BINDING && data->IsGroup)
{
switch (data->ClusterId)
{
@@ -214,7 +214,7 @@ void BindingHandler::LightSwitchChangedHandler(const EmberBindingTableEntry & aB
break;
}
}
- else if (aBinding.type == EMBER_UNICAST_BINDING && !data->IsGroup)
+ else if (aBinding.type == MATTER_UNICAST_BINDING && !data->IsGroup)
{
switch (data->ClusterId)
{
@@ -255,7 +255,7 @@ bool BindingHandler::IsGroupBound()
for (auto & entry : bindingTable)
{
- if (EMBER_MULTICAST_BINDING == entry.type)
+ if (MATTER_MULTICAST_BINDING == entry.type)
{
return true;
}
@@ -273,7 +273,7 @@ void BindingHandler::PrintBindingTable()
{
switch (entry.type)
{
- case EMBER_UNICAST_BINDING:
+ case MATTER_UNICAST_BINDING:
ASR_LOG("[%d] UNICAST:", i++);
ASR_LOG("\t\t+ Fabric: %d\n \
\t+ LocalEndpoint %d \n \
@@ -283,7 +283,7 @@ void BindingHandler::PrintBindingTable()
(int) entry.fabricIndex, (int) entry.local, (int) entry.clusterId.Value(), (int) entry.remote,
(int) entry.nodeId);
break;
- case EMBER_MULTICAST_BINDING:
+ case MATTER_MULTICAST_BINDING:
ASR_LOG("[%d] GROUP:", i++);
ASR_LOG("\t\t+ Fabric: %d\n \
\t+ LocalEndpoint %d \n \
@@ -291,10 +291,10 @@ void BindingHandler::PrintBindingTable()
\t+ GroupId %d",
(int) entry.fabricIndex, (int) entry.local, (int) entry.remote, (int) entry.groupId);
break;
- case EMBER_UNUSED_BINDING:
+ case MATTER_UNUSED_BINDING:
ASR_LOG("[%d] UNUSED", i++);
break;
- // case EMBER_MANY_TO_ONE_BINDING:
+ // case MATTER_MANY_TO_ONE_BINDING:
// ASR_LOG("[%d] MANY TO ONE", i++);
// break;
default:
diff --git a/examples/light-switch-app/esp32/main/BindingHandler.cpp b/examples/light-switch-app/esp32/main/BindingHandler.cpp
index 5cc520fd2accd0..9602cd1a534414 100644
--- a/examples/light-switch-app/esp32/main/BindingHandler.cpp
+++ b/examples/light-switch-app/esp32/main/BindingHandler.cpp
@@ -109,7 +109,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
VerifyOrReturn(context != nullptr, ChipLogError(NotSpecified, "OnDeviceConnectedFn: context is null"));
BindingCommandData * data = static_cast(context);
- if (binding.type == EMBER_MULTICAST_BINDING && data->isGroup)
+ if (binding.type == MATTER_MULTICAST_BINDING && data->isGroup)
{
switch (data->clusterId)
{
@@ -118,7 +118,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
break;
}
}
- else if (binding.type == EMBER_UNICAST_BINDING && !data->isGroup)
+ else if (binding.type == MATTER_UNICAST_BINDING && !data->isGroup)
{
switch (data->clusterId)
{
@@ -244,7 +244,7 @@ CHIP_ERROR BindingGroupBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 2, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_MULTICAST_BINDING;
+ entry->type = MATTER_MULTICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->groupId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
@@ -259,7 +259,7 @@ CHIP_ERROR BindingUnicastBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 3, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_UNICAST_BINDING;
+ entry->type = MATTER_UNICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->nodeId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
diff --git a/examples/light-switch-app/genio/src/BindingHandler.cpp b/examples/light-switch-app/genio/src/BindingHandler.cpp
index c8392f20ac9c4c..e988464b331afe 100644
--- a/examples/light-switch-app/genio/src/BindingHandler.cpp
+++ b/examples/light-switch-app/genio/src/BindingHandler.cpp
@@ -119,7 +119,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
// Eason+
ChipLogDetail(AppServer, "LightSwitchChangedHandler~~~~~~~");
- if (binding.type == EMBER_MULTICAST_BINDING && data->isGroup)
+ if (binding.type == MATTER_MULTICAST_BINDING && data->isGroup)
{
switch (data->clusterId)
{
@@ -128,7 +128,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
break;
}
}
- else if (binding.type == EMBER_UNICAST_BINDING && !data->isGroup)
+ else if (binding.type == MATTER_UNICAST_BINDING && !data->isGroup)
{
switch (data->clusterId)
{
@@ -243,7 +243,7 @@ CHIP_ERROR BindingGroupBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 2, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_MULTICAST_BINDING;
+ entry->type = MATTER_MULTICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->groupId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
@@ -258,7 +258,7 @@ CHIP_ERROR BindingUnicastBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 3, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_UNICAST_BINDING;
+ entry->type = MATTER_UNICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->nodeId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
diff --git a/examples/light-switch-app/infineon/cyw30739/src/AppShellCommands.cpp b/examples/light-switch-app/infineon/cyw30739/src/AppShellCommands.cpp
index 477ce99fa44c0b..91cc0c74176a53 100644
--- a/examples/light-switch-app/infineon/cyw30739/src/AppShellCommands.cpp
+++ b/examples/light-switch-app/infineon/cyw30739/src/AppShellCommands.cpp
@@ -361,7 +361,7 @@ CHIP_ERROR GroupBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 3, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_MULTICAST_BINDING;
+ entry->type = MATTER_MULTICAST_BINDING;
entry->local = 1; // Hardcoded to endpoint 1 for now
entry->fabricIndex = atoi(argv[0]);
entry->groupId = atoi(argv[1]);
@@ -379,7 +379,7 @@ CHIP_ERROR UnicastBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 4, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_UNICAST_BINDING;
+ entry->type = MATTER_UNICAST_BINDING;
entry->local = 1; // Hardcoded to endpoint 1 for now
entry->fabricIndex = atoi(argv[0]);
entry->nodeId = atoi(argv[1]);
diff --git a/examples/light-switch-app/infineon/cyw30739/src/BindingHandler.cpp b/examples/light-switch-app/infineon/cyw30739/src/BindingHandler.cpp
index bcf66efb2dd81a..4df68993fddae4 100644
--- a/examples/light-switch-app/infineon/cyw30739/src/BindingHandler.cpp
+++ b/examples/light-switch-app/infineon/cyw30739/src/BindingHandler.cpp
@@ -213,7 +213,7 @@ void BindingHandler::LightSwitchChangedHandler(const EmberBindingTableEntry & bi
VerifyOrReturn(context != nullptr, printf("Invalid context for Light switch handler\n"););
BindingData * data = static_cast(context);
- if (binding.type == EMBER_MULTICAST_BINDING && data->IsGroup)
+ if (binding.type == MATTER_MULTICAST_BINDING && data->IsGroup)
{
switch (data->ClusterId)
{
@@ -228,7 +228,7 @@ void BindingHandler::LightSwitchChangedHandler(const EmberBindingTableEntry & bi
break;
}
}
- else if (binding.type == EMBER_UNICAST_BINDING && !data->IsGroup)
+ else if (binding.type == MATTER_UNICAST_BINDING && !data->IsGroup)
{
switch (data->ClusterId)
{
@@ -281,7 +281,7 @@ bool BindingHandler::IsGroupBound()
for (auto & entry : bindingTable)
{
- if (EMBER_MULTICAST_BINDING == entry.type)
+ if (MATTER_MULTICAST_BINDING == entry.type)
{
return true;
}
@@ -299,7 +299,7 @@ void BindingHandler::PrintBindingTable()
{
switch (entry.type)
{
- case EMBER_UNICAST_BINDING:
+ case MATTER_UNICAST_BINDING:
printf("[%d] UNICAST:", i++);
printf("\t\t+ Fabric: %d\n \
\t+ LocalEndpoint %d \n \
@@ -309,7 +309,7 @@ void BindingHandler::PrintBindingTable()
(int) entry.fabricIndex, (int) entry.local, (int) entry.clusterId.Value(), (int) entry.remote,
(int) entry.nodeId);
break;
- case EMBER_MULTICAST_BINDING:
+ case MATTER_MULTICAST_BINDING:
printf("[%d] GROUP:", i++);
printf("\t\t+ Fabric: %d\n \
\t+ LocalEndpoint %d \n \
@@ -317,7 +317,7 @@ void BindingHandler::PrintBindingTable()
\t+ GroupId %d \n",
(int) entry.fabricIndex, (int) entry.local, (int) entry.remote, (int) entry.groupId);
break;
- case EMBER_UNUSED_BINDING:
+ case MATTER_UNUSED_BINDING:
printf("[%d] UNUSED", i++);
break;
default:
diff --git a/examples/light-switch-app/nrfconnect/main/BindingHandler.cpp b/examples/light-switch-app/nrfconnect/main/BindingHandler.cpp
index 886637fd21018a..0d93428f8dca5e 100644
--- a/examples/light-switch-app/nrfconnect/main/BindingHandler.cpp
+++ b/examples/light-switch-app/nrfconnect/main/BindingHandler.cpp
@@ -198,7 +198,7 @@ void BindingHandler::LightSwitchChangedHandler(const EmberBindingTableEntry & bi
VerifyOrReturn(context != nullptr, LOG_ERR("Invalid context for Light switch handler"););
BindingData * data = static_cast(context);
- if (binding.type == EMBER_MULTICAST_BINDING && data->IsGroup)
+ if (binding.type == MATTER_MULTICAST_BINDING && data->IsGroup)
{
switch (data->ClusterId)
{
@@ -213,7 +213,7 @@ void BindingHandler::LightSwitchChangedHandler(const EmberBindingTableEntry & bi
break;
}
}
- else if (binding.type == EMBER_UNICAST_BINDING && !data->IsGroup)
+ else if (binding.type == MATTER_UNICAST_BINDING && !data->IsGroup)
{
switch (data->ClusterId)
{
@@ -259,7 +259,7 @@ bool BindingHandler::IsGroupBound()
for (auto & entry : bindingTable)
{
- if (EMBER_MULTICAST_BINDING == entry.type)
+ if (MATTER_MULTICAST_BINDING == entry.type)
{
return true;
}
@@ -277,7 +277,7 @@ void BindingHandler::PrintBindingTable()
{
switch (entry.type)
{
- case EMBER_UNICAST_BINDING:
+ case MATTER_UNICAST_BINDING:
LOG_INF("[%d] UNICAST:", i++);
LOG_INF("\t\t+ Fabric: %d\n \
\t+ LocalEndpoint %d \n \
@@ -287,7 +287,7 @@ void BindingHandler::PrintBindingTable()
(int) entry.fabricIndex, (int) entry.local, (int) entry.clusterId.Value(), (int) entry.remote,
(int) entry.nodeId);
break;
- case EMBER_MULTICAST_BINDING:
+ case MATTER_MULTICAST_BINDING:
LOG_INF("[%d] GROUP:", i++);
LOG_INF("\t\t+ Fabric: %d\n \
\t+ LocalEndpoint %d \n \
@@ -295,7 +295,7 @@ void BindingHandler::PrintBindingTable()
\t+ GroupId %d",
(int) entry.fabricIndex, (int) entry.local, (int) entry.remote, (int) entry.groupId);
break;
- case EMBER_UNUSED_BINDING:
+ case MATTER_UNUSED_BINDING:
LOG_INF("[%d] UNUSED", i++);
break;
default:
diff --git a/examples/light-switch-app/qpg/args.gni b/examples/light-switch-app/qpg/args.gni
index d5dcdfe217c635..64db0987b3d7d6 100644
--- a/examples/light-switch-app/qpg/args.gni
+++ b/examples/light-switch-app/qpg/args.gni
@@ -23,6 +23,7 @@ chip_enable_ota_requestor = true
chip_openthread_ftd = false
enable_sleepy_device = true
chip_enable_icd_server = true
+chip_enable_icd_lit = true
# Disable lock tracking, since our FreeRTOS configuration does not set
# INCLUDE_xSemaphoreGetMutexHolder
diff --git a/examples/light-switch-app/qpg/src/AppTask.cpp b/examples/light-switch-app/qpg/src/AppTask.cpp
index 91579d7937ef9e..318e61b1e875c8 100644
--- a/examples/light-switch-app/qpg/src/AppTask.cpp
+++ b/examples/light-switch-app/qpg/src/AppTask.cpp
@@ -500,7 +500,7 @@ void AppTask::UpdateClusterState(void)
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating on/off %x", status);
+ ChipLogError(NotSpecified, "ERR: updating on/off %x", to_underlying(status));
}
*/
}
diff --git a/examples/light-switch-app/qpg/src/binding-handler.cpp b/examples/light-switch-app/qpg/src/binding-handler.cpp
index 6369aa0ab06c25..4dae4e12b44155 100644
--- a/examples/light-switch-app/qpg/src/binding-handler.cpp
+++ b/examples/light-switch-app/qpg/src/binding-handler.cpp
@@ -73,7 +73,7 @@ static void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Op
BindingCommandData * data = static_cast(context);
- if (binding.type == EMBER_UNICAST_BINDING)
+ if (binding.type == MATTER_UNICAST_BINDING)
{
switch (data->clusterId)
{
diff --git a/examples/light-switch-app/silabs/openthread.gni b/examples/light-switch-app/silabs/openthread.gni
index 2ea7cd471c2b8a..17cc5885460379 100644
--- a/examples/light-switch-app/silabs/openthread.gni
+++ b/examples/light-switch-app/silabs/openthread.gni
@@ -35,6 +35,6 @@ sl_ot_idle_interval_ms = 15000 # 15s Idle Intervals
sl_ot_active_interval_ms = 500 # 500ms Active Intervals
# ICD Matter Configuration flags
-sl_idle_mode_interval_s = 3600 # 60min Idle Mode Interval
-sl_active_mode_interval_ms = 60000 # 60s Active Mode Interval
+sl_idle_mode_duration_s = 3600 # 60min Idle Mode Duration
+sl_active_mode_duration_ms = 60000 # 60s Active Mode Duration
sl_active_mode_threshold_ms = 1000 # 1s Active Mode Threshold
diff --git a/examples/light-switch-app/silabs/src/BindingHandler.cpp b/examples/light-switch-app/silabs/src/BindingHandler.cpp
index 3f75f79a60d82c..56f7c306f989d8 100644
--- a/examples/light-switch-app/silabs/src/BindingHandler.cpp
+++ b/examples/light-switch-app/silabs/src/BindingHandler.cpp
@@ -90,7 +90,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
VerifyOrReturn(context != nullptr, ChipLogError(NotSpecified, "OnDeviceConnectedFn: context is null"));
BindingCommandData * data = static_cast(context);
- if (binding.type == EMBER_MULTICAST_BINDING && data->isGroup)
+ if (binding.type == MATTER_MULTICAST_BINDING && data->isGroup)
{
switch (data->clusterId)
{
@@ -99,7 +99,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
break;
}
}
- else if (binding.type == EMBER_UNICAST_BINDING && !data->isGroup)
+ else if (binding.type == MATTER_UNICAST_BINDING && !data->isGroup)
{
switch (data->clusterId)
{
diff --git a/examples/light-switch-app/silabs/src/ShellCommands.cpp b/examples/light-switch-app/silabs/src/ShellCommands.cpp
index daac5078501858..ee5872276efe19 100644
--- a/examples/light-switch-app/silabs/src/ShellCommands.cpp
+++ b/examples/light-switch-app/silabs/src/ShellCommands.cpp
@@ -139,7 +139,7 @@ CHIP_ERROR BindingGroupBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 2, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_MULTICAST_BINDING;
+ entry->type = MATTER_MULTICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->groupId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
@@ -154,7 +154,7 @@ CHIP_ERROR BindingUnicastBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 3, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_UNICAST_BINDING;
+ entry->type = MATTER_UNICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->nodeId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
diff --git a/examples/light-switch-app/telink/src/binding-handler.cpp b/examples/light-switch-app/telink/src/binding-handler.cpp
index f982266828c583..39a8cddc2c60f8 100755
--- a/examples/light-switch-app/telink/src/binding-handler.cpp
+++ b/examples/light-switch-app/telink/src/binding-handler.cpp
@@ -113,7 +113,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
BindingCommandData * data = static_cast(context);
data->isGroup = IsGroupBound();
- if (binding.type == EMBER_MULTICAST_BINDING && data->isGroup)
+ if (binding.type == MATTER_MULTICAST_BINDING && data->isGroup)
{
switch (data->clusterId)
{
@@ -122,7 +122,7 @@ void LightSwitchChangedHandler(const EmberBindingTableEntry & binding, Operation
break;
}
}
- else if (binding.type == EMBER_UNICAST_BINDING && !data->isGroup)
+ else if (binding.type == MATTER_UNICAST_BINDING && !data->isGroup)
{
switch (data->clusterId)
{
@@ -239,7 +239,7 @@ CHIP_ERROR BindingGroupBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 2, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_MULTICAST_BINDING;
+ entry->type = MATTER_MULTICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->groupId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
@@ -254,7 +254,7 @@ CHIP_ERROR BindingUnicastBindCommandHandler(int argc, char ** argv)
VerifyOrReturnError(argc == 3, CHIP_ERROR_INVALID_ARGUMENT);
EmberBindingTableEntry * entry = Platform::New();
- entry->type = EMBER_UNICAST_BINDING;
+ entry->type = MATTER_UNICAST_BINDING;
entry->fabricIndex = atoi(argv[0]);
entry->nodeId = atoi(argv[1]);
entry->local = 1; // Hardcoded to endpoint 1 for now
@@ -409,7 +409,7 @@ bool IsGroupBound()
for (auto & entry : bindingTable)
{
- if (EMBER_MULTICAST_BINDING == entry.type)
+ if (MATTER_MULTICAST_BINDING == entry.type)
{
return true;
}
diff --git a/examples/lighting-app/asr/src/AppTask.cpp b/examples/lighting-app/asr/src/AppTask.cpp
index 0889f49e8f686f..b72ff5c8588f31 100755
--- a/examples/lighting-app/asr/src/AppTask.cpp
+++ b/examples/lighting-app/asr/src/AppTask.cpp
@@ -88,7 +88,7 @@ bool IsLightOn()
if (status != Protocols::InteractionModel::Status::Success)
{
- ASR_LOG("Error Read OnOff Attribute 0x%02x\n", status);
+ ASR_LOG("Error Read OnOff Attribute 0x%02x\n", to_underlying(status));
}
return on != false;
@@ -103,7 +103,7 @@ uint8_t GetLightLevel()
if (status != Protocols::InteractionModel::Status::Success)
{
- ASR_LOG("Error Read CurrentLevel Attribute 0x%02x\n", status);
+ ASR_LOG("Error Read CurrentLevel Attribute 0x%02x\n", to_underlying(status));
return -1;
}
diff --git a/examples/lighting-app/cc13x2x7_26x2x7/BUILD.gn b/examples/lighting-app/cc13x2x7_26x2x7/BUILD.gn
index a745c65a1407cf..1292b5f5e9626c 100644
--- a/examples/lighting-app/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/lighting-app/cc13x2x7_26x2x7/BUILD.gn
@@ -55,7 +55,7 @@ ti_sysconfig("sysconfig") {
]
}
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x2x7_26x2x7_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/lighting-app/cc13x4_26x4/BUILD.gn b/examples/lighting-app/cc13x4_26x4/BUILD.gn
index f4e9ce30d080aa..02d9b0b8763ee7 100644
--- a/examples/lighting-app/cc13x4_26x4/BUILD.gn
+++ b/examples/lighting-app/cc13x4_26x4/BUILD.gn
@@ -63,7 +63,7 @@ ti_sysconfig("sysconfig") {
#"ti_build_config.opt",
]
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x4_26x4_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/lighting-app/esp32/main/AppTask.cpp b/examples/lighting-app/esp32/main/AppTask.cpp
index cfbc87eeb3adf9..562ee4b763faff 100644
--- a/examples/lighting-app/esp32/main/AppTask.cpp
+++ b/examples/lighting-app/esp32/main/AppTask.cpp
@@ -193,7 +193,7 @@ void AppTask::UpdateClusterState()
if (status != Protocols::InteractionModel::Status::Success)
{
- ESP_LOGE(TAG, "Updating on/off cluster failed: %x", status);
+ ESP_LOGE(TAG, "Updating on/off cluster failed: %x", to_underlying(status));
}
ESP_LOGI(TAG, "Writing to Current Level cluster");
@@ -201,6 +201,6 @@ void AppTask::UpdateClusterState()
if (status != Protocols::InteractionModel::Status::Success)
{
- ESP_LOGE(TAG, "Updating level cluster failed: %x", status);
+ ESP_LOGE(TAG, "Updating level cluster failed: %x", to_underlying(status));
}
}
diff --git a/examples/lighting-app/infineon/cyw30739/src/LightingManager.cpp b/examples/lighting-app/infineon/cyw30739/src/LightingManager.cpp
index ce37a3184e85be..3af2ffad095f9b 100644
--- a/examples/lighting-app/infineon/cyw30739/src/LightingManager.cpp
+++ b/examples/lighting-app/infineon/cyw30739/src/LightingManager.cpp
@@ -54,7 +54,7 @@ bool LightingManager::IsLightOn(void)
if (status != Protocols::InteractionModel::Status::Success)
{
- printf("Error ReadServerAttribute 0x%02x\n", status);
+ printf("Error ReadServerAttribute 0x%02x\n", to_underlying(status));
}
return on != false;
@@ -103,7 +103,7 @@ void LightingManager::WriteClusterState(uint8_t value)
if (status != Protocols::InteractionModel::Status::Success)
{
- printf("Error WriteServerAttribute 0x%02x\n", status);
+ printf("Error WriteServerAttribute 0x%02x\n", to_underlying(status));
}
}
@@ -113,6 +113,6 @@ void LightingManager::WriteClusterLevel(uint8_t value)
if (status != Protocols::InteractionModel::Status::Success)
{
- printf("Error WriteServerAttribute 0x%02x\n", status);
+ printf("Error WriteServerAttribute 0x%02x\n", to_underlying(status));
}
}
diff --git a/examples/lighting-app/infineon/psoc6/src/AppTask.cpp b/examples/lighting-app/infineon/psoc6/src/AppTask.cpp
index c7c8cded19ebb7..49e6278ab032c9 100644
--- a/examples/lighting-app/infineon/psoc6/src/AppTask.cpp
+++ b/examples/lighting-app/infineon/psoc6/src/AppTask.cpp
@@ -558,7 +558,7 @@ void AppTask::UpdateClusterState(intptr_t context)
Protocols::InteractionModel::Status status = app::Clusters::OnOff::Attributes::OnOff::Set(1, newValue);
if (status != Protocols::InteractionModel::Status::Success)
{
- P6_LOG("ERR: updating on/off %x", status);
+ P6_LOG("ERR: updating on/off %x", to_underlying(status));
}
}
#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
diff --git a/examples/lighting-app/mbed/main/AppTask.cpp b/examples/lighting-app/mbed/main/AppTask.cpp
index 27dba42b12b566..26403bdb5e5b28 100644
--- a/examples/lighting-app/mbed/main/AppTask.cpp
+++ b/examples/lighting-app/mbed/main/AppTask.cpp
@@ -465,7 +465,7 @@ void AppTask::UpdateClusterState()
Protocols::InteractionModel::Status status = app::Clusters::OnOff::Attributes::OnOff::Set(1, onoff);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "Updating on/off cluster failed: %x", status);
+ ChipLogError(NotSpecified, "Updating on/off cluster failed: %x", to_underlying(status));
}
uint8_t level = LightingMgr().GetLevel();
@@ -474,6 +474,6 @@ void AppTask::UpdateClusterState()
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "Updating level cluster failed: %x", status);
+ ChipLogError(NotSpecified, "Updating level cluster failed: %x", to_underlying(status));
}
}
diff --git a/examples/lighting-app/nrfconnect/main/AppTask.cpp b/examples/lighting-app/nrfconnect/main/AppTask.cpp
index 12cdbd9db3bfda..5eaa1b1b401524 100644
--- a/examples/lighting-app/nrfconnect/main/AppTask.cpp
+++ b/examples/lighting-app/nrfconnect/main/AppTask.cpp
@@ -694,7 +694,7 @@ void AppTask::UpdateClusterState()
if (status != Protocols::InteractionModel::Status::Success)
{
- LOG_ERR("Updating on/off cluster failed: %x", status);
+ LOG_ERR("Updating on/off cluster failed: %x", to_underlying(status));
}
// write the current level
@@ -702,7 +702,7 @@ void AppTask::UpdateClusterState()
if (status != Protocols::InteractionModel::Status::Success)
{
- LOG_ERR("Updating level cluster failed: %x", status);
+ LOG_ERR("Updating level cluster failed: %x", to_underlying(status));
}
});
}
diff --git a/examples/lighting-app/nxp/k32w/k32w0/main/AppTask.cpp b/examples/lighting-app/nxp/k32w/k32w0/main/AppTask.cpp
index 1c8130177e18d1..39c9584c883480 100644
--- a/examples/lighting-app/nxp/k32w/k32w0/main/AppTask.cpp
+++ b/examples/lighting-app/nxp/k32w/k32w0/main/AppTask.cpp
@@ -958,7 +958,7 @@ void AppTask::UpdateClusterStateInternal(intptr_t arg)
Protocols::InteractionModel::Status status = app::Clusters::OnOff::Attributes::OnOff::Set(1, newValue);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating on/off %x", status);
+ ChipLogError(NotSpecified, "ERR: updating on/off %x", to_underlying(status));
}
}
diff --git a/examples/lighting-app/nxp/k32w/k32w1/.gn b/examples/lighting-app/nxp/k32w/k32w1/.gn
index 3d48789e30ab3d..a88f6f5aa7cb3f 100644
--- a/examples/lighting-app/nxp/k32w/k32w1/.gn
+++ b/examples/lighting-app/nxp/k32w/k32w1/.gn
@@ -25,4 +25,7 @@ default_args = {
target_os = "freertos"
import("//args.gni")
+
+ # Import default platform configs
+ import("${chip_root}/src/platform/nxp/k32w/k32w1/args.gni")
}
diff --git a/examples/lighting-app/nxp/k32w/k32w1/BUILD.gn b/examples/lighting-app/nxp/k32w/k32w1/BUILD.gn
index a7643a9f847931..2f327213533e94 100644
--- a/examples/lighting-app/nxp/k32w/k32w1/BUILD.gn
+++ b/examples/lighting-app/nxp/k32w/k32w1/BUILD.gn
@@ -13,15 +13,26 @@
# limitations under the License.
import("//build_overrides/chip.gni")
-import("//build_overrides/k32w1_sdk.gni")
+import("//build_overrides/nxp_sdk.gni")
import("//build_overrides/openthread.gni")
+import("${nxp_sdk_build_root}/nxp_sdk.gni")
-import("${k32w1_sdk_build_root}/k32w1_executable.gni")
-import("${k32w1_sdk_build_root}/k32w1_sdk.gni")
+import("${nxp_sdk_build_root}/${nxp_sdk_name}/nxp_executable.gni")
+
+import("${nxp_sdk_build_root}/${nxp_sdk_name}/${nxp_sdk_name}.gni")
import("${chip_root}/src/crypto/crypto.gni")
import("${chip_root}/src/lib/core/core.gni")
import("${chip_root}/src/platform/device.gni")
+import("${chip_root}/src/platform/nxp/${nxp_platform}/args.gni")
+
+import("${chip_root}/examples/common/pigweed/pigweed_rpcs.gni")
+
+if (chip_enable_pw_rpc) {
+ import("//build_overrides/pigweed.gni")
+ import("$dir_pw_build/target_types.gni")
+ import("${chip_root}/examples/platform/nxp/pw_rpc_server.gni")
+}
declare_args() {
chip_software_version = 0
@@ -65,12 +76,30 @@ k32w1_sdk("sdk") {
"CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION=${chip_software_version}",
]
}
+
+ if (chip_enable_pw_rpc) {
+ defines += [
+ "PW_RPC_ENABLED",
+ "STREAMER_UART_FLUSH_DELAY_MS=0",
+ "STREAMER_UART_SERIAL_MANAGER_RING_BUFFER_SIZE=512",
+ "BOARD_APP_UART_CLK_FREQ=96000000",
+ ]
+ }
}
k32w1_executable("light_app") {
output_name = "chip-k32w1-light-example"
- sources = [
+ sources = []
+ deps = []
+
+ if (chip_enable_pw_rpc) {
+ forward_variables_from(pw_rpc_server, "*")
+ } else {
+ cflags = [ "-Wconversion" ]
+ }
+
+ sources += [
"${k32w1_platform_dir}/util/LEDWidget.cpp",
"${k32w1_platform_dir}/util/include/LEDWidget.h",
"main/AppTask.cpp",
@@ -84,7 +113,7 @@ k32w1_executable("light_app") {
public = [ "${chip_root}/src/platform/nxp/k32w/k32w1/DefaultTestEventTriggerDelegate.h" ]
- deps = [
+ deps += [
":sdk",
"${chip_root}/examples/common/QRCode",
"${chip_root}/examples/lighting-app/nxp/zap/",
@@ -107,9 +136,7 @@ k32w1_executable("light_app") {
]
}
- cflags = [ "-Wconversion" ]
-
- if (use_smu2_as_system_memory) {
+ if (use_smu2_static) {
ldscript = "${k32w1_platform_dir}/app/ldscripts/k32w1_app.ld"
base_ldscript_dir = "${k32w1_sdk_root}/middleware/wireless/framework/Common/devices/kw45_k32w1/gcc"
} else {
@@ -121,13 +148,17 @@ k32w1_executable("light_app") {
ldflags = [
"-Wl,--defsym=__heap_size__=0",
"-Wl,--defsym=__stack_size__=0x480",
- "-Wl,--defsym=gNvmSectors=8",
+ "-Wl,--defsym=gUseFactoryData_d=1",
"-Wl,-print-memory-usage",
"-Wl,--no-warn-rwx-segments",
"-T" + rebase_path(ldscript, root_build_dir),
]
- if (use_smu2_as_system_memory) {
+ if (chip_with_factory_data == 1) {
+ ldflags += [ "-Wl,--defsym=gUseFactoryData_d=1" ]
+ }
+
+ if (use_smu2_static) {
ldflags += [ "-L" + rebase_path(base_ldscript_dir, root_build_dir) ]
}
diff --git a/examples/lighting-app/nxp/k32w/k32w1/README.md b/examples/lighting-app/nxp/k32w/k32w1/README.md
index 92dca287111449..253c21e04eafbb 100644
--- a/examples/lighting-app/nxp/k32w/k32w1/README.md
+++ b/examples/lighting-app/nxp/k32w/k32w1/README.md
@@ -22,6 +22,7 @@ into an existing Matter network and can be controlled by this network.
- [Device UI](#device-ui)
- [Building](#building)
- [SMU2](#smu2-memory)
+- [Manufacturing data](#manufacturing-data)
- [Flashing](#flashing)
- [Flashing the NBU image](#flashing-the-nbu-image)
- [Flashing the host image](#flashing-the-host-image)
@@ -33,6 +34,8 @@ into an existing Matter network and can be controlled by this network.
- [Running OTA](#running-ota)
- [Known issues](#known-issues)
+- [Running RPC console](#running-rpc-console)
+
## Introduction
@@ -112,7 +115,8 @@ point before the 6 second limit.
**Button SW3** can be used to change the state of the simulated light bulb. This
can be used to mimic a user manually operating a switch. The button behaves as a
-toggle, swapping the state every time it is pressed.
+toggle, swapping the state every time it is short pressed. When long pressed, it
+does a clean soft reset that takes into account Matter shutdown procedure.
## Building
@@ -147,8 +151,8 @@ see the files prefixed with `chip-k32w1-light-example`.
Some Matter instances and global variables can be placed in the `NBU` `SMU2`
memory. When compiling with OpenThread FTD support (`chip_openthread_ftd=true`)
-and with `use_smu2_as_system_memory=true`, the following components are placed
-in `SMU2` memory:
+and with `use_smu2_static=true`, the following components are placed in `SMU2`
+memory:
- `gImageProcessor` from `OTAImageProcessorImpl.cpp`.
- `gApplicationProcessor` from `OTAHooks.cpp`.
@@ -161,8 +165,18 @@ changed, the names must be updated in `k32w1_app.ld`. See
[k32w1_app.ld](../../../../platform/nxp/k32w/k32w1/app/ldscripts/k32w1_app.ld)
for names and `SMU2` memory range size.
-To use the `SMU2` Memory an optimized `NBU` binary is also needed. See
-[Flashing the NBU image](#flashing-the-nbu-image).
+The OpenThread buffers can be allocated from a 13KB `SMU2` range after a
+successful commissioning process until a factory reset is initiated. This way,
+the OpenThread buffers will be dynamically allocated instead of statically,
+freeing some `SRAM`. To enable this feature compile with OpenThread FTD support
+(`chip_openthread_ftd=true`) and with `use_smu2_dynamic=true`.
+
+## Manufacturing data
+
+Use `chip_with_factory_data=1` in the gn build command to enable factory data.
+
+For a full guide on manufacturing flow, please see
+[Guide for writing manufacturing data on NXP devices](../../../../../docs/guides/nxp_manufacturing_flow.md).
## Flashing
@@ -423,3 +437,22 @@ user@computer1:~/connectedhomeip$ sudo ifconfig eth0 -multicast
- If Wi-Fi is used on a RPI4, then a 5Ghz network should be selected.
Otherwise, issues related to BLE-WiFi combo may appear.
+
+## Running RPC console
+
+To build example with RPC enabled, use the following gn command:
+`gn gen out/debug --args='import("//with_pw_rpc.gni") treat_warnings_as_errors=false'`
+
+The application runs an RPC server and processes events coming from an RPC
+client. An example of an RPC client is the `chip-console`, which can be accessed
+by running:
+`chip-console --device /dev/tty. -b 115200 -o pw_log.out`
+
+The console should already have been installed in the virtual environment. From
+the `chip-console`, a user can send specific commands to the device, e.g.:
+
+- To toggle the LED (`#define LIGHT_BUTTON 2` in `app_config.h`)
+ `rpcs.chip.rpc.Button.Event(idx=2)`
+- To start BLE advertising (`#define BLE_BUTTON 4` in `app_config.h`)
+ `rpcs.chip.rpc.Button.Event(idx=4)`
+- To reboot the device `rpcs.chip.rpc.Device.Reboot()`
diff --git a/examples/lighting-app/nxp/k32w/k32w1/args.gni b/examples/lighting-app/nxp/k32w/k32w1/args.gni
index 4efb6421f5ca02..a06e5828acdc45 100644
--- a/examples/lighting-app/nxp/k32w/k32w1/args.gni
+++ b/examples/lighting-app/nxp/k32w/k32w1/args.gni
@@ -13,7 +13,6 @@
# limitations under the License.
import("//build_overrides/chip.gni")
-import("${chip_root}/examples/platform/nxp/k32w/k32w1/args.gni")
# SDK target. This is overridden to add our SDK app_config.h & defines.
k32w1_sdk_target = get_label_info(":sdk", "label_no_toolchain")
diff --git a/examples/lighting-app/nxp/k32w/k32w1/include/CHIPProjectConfig.h b/examples/lighting-app/nxp/k32w/k32w1/include/CHIPProjectConfig.h
index 07d8b6a92f5e69..536b822d776377 100644
--- a/examples/lighting-app/nxp/k32w/k32w1/include/CHIPProjectConfig.h
+++ b/examples/lighting-app/nxp/k32w/k32w1/include/CHIPProjectConfig.h
@@ -34,6 +34,58 @@
// including message encryption. Because of this they MUST NEVER BE ENABLED IN PRODUCTION BUILDS.
#define CHIP_CONFIG_SECURITY_TEST_MODE 0
+// Use hard-coded test certificates already embedded in generic chip code => set it to 0
+// Use real/development certificates => set it to 1 + file the provisioning section from
+// the internal flash
+#ifndef CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+#define CONFIG_CHIP_LOAD_REAL_FACTORY_DATA 0
+#endif
+
+#if CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+
+// VID/PID for product => will be used by Basic Information Cluster
+#define CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID 0x1037
+#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0xA221
+
+// Set the following define to use the Certification Declaration from below and not use it stored in factory data section
+#ifndef CHIP_USE_DEVICE_CONFIG_CERTIFICATION_DECLARATION
+#define CHIP_USE_DEVICE_CONFIG_CERTIFICATION_DECLARATION 0
+#endif
+
+#ifndef CHIP_DEVICE_CONFIG_CERTIFICATION_DECLARATION
+//-> format_version = 1
+//-> vendor_id = 0x1037
+//-> product_id_array = [ 0xA221 ]
+//-> device_type_id = 0x0100
+//-> certificate_id = "ZIG20142ZB330003-24"
+//-> security_level = 0
+//-> security_information = 0
+//-> version_number = 0x2694
+//-> certification_type = 1
+//-> dac_origin_vendor_id is not present
+//-> dac_origin_product_id is not present
+#define CHIP_DEVICE_CONFIG_CERTIFICATION_DECLARATION \
+ { \
+ 0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, \
+ 0x02, 0x01, 0x03, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, \
+ 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, \
+ 0x01, 0x25, 0x01, 0x37, 0x10, 0x36, 0x02, 0x05, 0x21, 0xa2, 0x18, 0x25, 0x03, 0x00, 0x01, 0x2c, 0x04, 0x13, 0x5a, \
+ 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x32, 0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x33, 0x2d, 0x32, 0x34, 0x24, \
+ 0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x01, 0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, \
+ 0x03, 0x80, 0x14, 0x62, 0xfa, 0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a, 0xdd, 0xf5, \
+ 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, \
+ 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02, 0x21, 0x00, 0x93, 0x77, \
+ 0x28, 0xd2, 0xd5, 0x36, 0xea, 0x09, 0xe4, 0xc5, 0xbc, 0x87, 0xa5, 0xa2, 0x44, 0x57, 0xf0, 0xed, 0x24, 0x66, 0xe7, \
+ 0x50, 0x61, 0x1b, 0xe1, 0x17, 0x7c, 0x55, 0x0a, 0x83, 0xfa, 0xc3, 0x02, 0x20, 0x21, 0x6c, 0x60, 0x67, 0x4e, 0x3f, \
+ 0xbe, 0x30, 0x38, 0xd4, 0x5e, 0x86, 0x1d, 0xe1, 0xe7, 0x6f, 0x7b, 0x1d, 0xd4, 0xfe, 0xbf, 0x79, 0x5a, 0x4e, 0x07, \
+ 0x83, 0x46, 0xca, 0x94, 0x92, 0x5f, 0x14 \
+ }
+
+// All remaining data will be pulled from the provisioning region of flash.
+#endif
+
+#else
+
/**
* CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID
*
@@ -63,6 +115,8 @@
*/
#define CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER "TEST_SN"
+#endif // CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+
/**
* CHIP_DEVICE_CONFIG_DEVICE_HARDWARE_VERSION
*
diff --git a/examples/lighting-app/nxp/k32w/k32w1/main/AppTask.cpp b/examples/lighting-app/nxp/k32w/k32w1/main/AppTask.cpp
index 4851e8d33432b3..2eb2f8e095b8b1 100644
--- a/examples/lighting-app/nxp/k32w/k32w1/main/AppTask.cpp
+++ b/examples/lighting-app/nxp/k32w/k32w1/main/AppTask.cpp
@@ -30,6 +30,9 @@
#include
#include
#include
+#if defined(USE_SMU2_DYNAMIC)
+#include
+#endif
#include
#include
@@ -88,6 +91,9 @@ using namespace chip;
using namespace chip::app;
AppTask AppTask::sAppTask;
+#if CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+static AppTask::FactoryDataProvider sFactoryDataProvider;
+#endif
// This key is for testing/certification only and should not be used in production devices.
// For production devices this key must be provided from factory data.
@@ -135,8 +141,14 @@ CHIP_ERROR AppTask::Init()
// Init ZCL Data Model and start server
PlatformMgr().ScheduleWork(InitServer, 0);
- // Initialize device attestation config
+#if CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+ ReturnErrorOnFailure(sFactoryDataProvider.Init());
+ SetDeviceInstanceInfoProvider(&sFactoryDataProvider);
+ SetDeviceAttestationCredentialsProvider(&sFactoryDataProvider);
+ SetCommissionableDataProvider(&sFactoryDataProvider);
+#else
SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+#endif // CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
// QR code will be used with CHIP Tool
AppTask::PrintOnboardingInfo();
@@ -213,6 +225,10 @@ void AppTask::InitServer(intptr_t arg)
initParams.operationalKeystore = &sK32W1PersistentStorageOpKeystore;
#endif
+#if defined(USE_SMU2_DYNAMIC)
+ VerifyOrDie(SMU2::Init(initParams.persistentStorageDelegate) == CHIP_NO_ERROR);
+#endif
+
// Init ZCL Data Model and start server
static DefaultTestEventTriggerDelegate sTestEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
@@ -339,7 +355,7 @@ void AppTask::AppTaskMain(void * pvParameter)
void AppTask::ButtonEventHandler(uint8_t pin_no, uint8_t button_action)
{
- if ((pin_no != RESET_BUTTON) && (pin_no != LIGHT_BUTTON) && (pin_no != OTA_BUTTON) && (pin_no != BLE_BUTTON))
+ if ((pin_no != RESET_BUTTON) && (pin_no != LIGHT_BUTTON) && (pin_no != SOFT_RESET_BUTTON) && (pin_no != BLE_BUTTON))
{
return;
}
@@ -353,9 +369,10 @@ void AppTask::ButtonEventHandler(uint8_t pin_no, uint8_t button_action)
{
button_event.Handler = LightActionEventHandler;
}
- else if (pin_no == OTA_BUTTON)
+ else if (pin_no == SOFT_RESET_BUTTON)
{
- // button_event.Handler = OTAHandler;
+ // Soft reset ensures that platform manager shutdown procedure is called.
+ button_event.Handler = SoftResetHandler;
}
else if (pin_no == BLE_BUTTON)
{
@@ -379,7 +396,7 @@ button_status_t AppTask::KBD_Callback(void * buttonHandle, button_callback_messa
switch (pinNb)
{
case BLE_BUTTON:
- K32W_LOG("pb1 short press");
+ // K32W_LOG("pb1 short press");
if (sAppTask.mResetTimerActive)
{
ButtonEventHandler(BLE_BUTTON, RESET_BUTTON_PUSH);
@@ -391,7 +408,7 @@ button_status_t AppTask::KBD_Callback(void * buttonHandle, button_callback_messa
break;
case LIGHT_BUTTON:
- K32W_LOG("pb2 short press");
+ // K32W_LOG("pb2 short press");
ButtonEventHandler(LIGHT_BUTTON, LIGHT_BUTTON_PUSH);
break;
}
@@ -401,13 +418,13 @@ button_status_t AppTask::KBD_Callback(void * buttonHandle, button_callback_messa
switch (pinNb)
{
case BLE_BUTTON:
- K32W_LOG("pb1 long press");
+ // K32W_LOG("pb1 long press");
ButtonEventHandler(BLE_BUTTON, RESET_BUTTON_PUSH);
break;
case LIGHT_BUTTON:
- K32W_LOG("pb2 long press");
- ButtonEventHandler(OTA_BUTTON, OTA_BUTTON_PUSH);
+ // K32W_LOG("pb2 long press");
+ ButtonEventHandler(SOFT_RESET_BUTTON, SOFT_RESET_BUTTON_PUSH);
break;
}
break;
@@ -529,29 +546,14 @@ void AppTask::LightActionEventHandler(AppEvent * aEvent)
}
}
-void AppTask::OTAHandler(AppEvent * aEvent)
+void AppTask::SoftResetHandler(AppEvent * aEvent)
{
- if (aEvent->ButtonEvent.PinNo != OTA_BUTTON)
+ if (aEvent->ButtonEvent.PinNo != SOFT_RESET_BUTTON)
return;
-#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
- if (sAppTask.mFunction != kFunction_NoneSelected)
- {
- K32W_LOG("Another function is scheduled. Could not initiate OTA!");
- return;
- }
-
- PlatformMgr().ScheduleWork(StartOTAQuery, 0);
-#endif
+ PlatformMgrImpl().CleanReset();
}
-#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
-void AppTask::StartOTAQuery(intptr_t arg)
-{
- GetRequestorInstance()->TriggerImmediateQuery();
-}
-#endif
-
void AppTask::BleHandler(AppEvent * aEvent)
{
if (aEvent->ButtonEvent.PinNo != BLE_BUTTON)
@@ -807,11 +809,24 @@ void AppTask::PostTurnOnActionRequest(int32_t aActor, LightingManager::Action_t
void AppTask::PostEvent(const AppEvent * aEvent)
{
+ portBASE_TYPE taskToWake = pdFALSE;
if (sAppEventQueue != NULL)
{
- if (!xQueueSend(sAppEventQueue, aEvent, 1))
+ if (__get_IPSR())
+ {
+ if (!xQueueSendToFrontFromISR(sAppEventQueue, aEvent, &taskToWake))
+ {
+ K32W_LOG("Failed to post event to app task event queue");
+ }
+
+ portYIELD_FROM_ISR(taskToWake);
+ }
+ else
{
- K32W_LOG("Failed to post event to app task event queue");
+ if (!xQueueSend(sAppEventQueue, aEvent, 1))
+ {
+ K32W_LOG("Failed to post event to app task event queue");
+ }
}
}
}
@@ -841,7 +856,7 @@ void AppTask::UpdateClusterStateInternal(intptr_t arg)
Protocols::InteractionModel::Status status = app::Clusters::OnOff::Attributes::OnOff::Set(1, newValue);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating on/off %x", status);
+ ChipLogError(NotSpecified, "ERR: updating on/off %x", to_underlying(status));
}
}
diff --git a/examples/lighting-app/nxp/k32w/k32w1/main/include/AppTask.h b/examples/lighting-app/nxp/k32w/k32w1/main/include/AppTask.h
index db81edf168c41e..b5201da2477862 100644
--- a/examples/lighting-app/nxp/k32w/k32w1/main/include/AppTask.h
+++ b/examples/lighting-app/nxp/k32w/k32w1/main/include/AppTask.h
@@ -27,6 +27,10 @@
#include
#include
+#if CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+#include
+#endif
+
#include "FreeRTOS.h"
#include "fsl_component_button.h"
#include "timers.h"
@@ -42,6 +46,9 @@
class AppTask
{
public:
+#if CONFIG_CHIP_LOAD_REAL_FACTORY_DATA
+ using FactoryDataProvider = chip::DeviceLayer::FactoryDataProviderImpl;
+#endif
CHIP_ERROR StartAppTask();
static void AppTaskMain(void * pvParameter);
@@ -56,6 +63,7 @@ class AppTask
static void OnIdentifyStop(Identify * identify);
static void OnTriggerEffect(Identify * identify);
static void OnTriggerEffectComplete(chip::System::Layer * systemLayer, void * appState);
+ static void ButtonEventHandler(uint8_t pin_no, uint8_t button_action);
private:
friend AppTask & GetAppTask(void);
@@ -71,14 +79,13 @@ class AppTask
static void FunctionTimerEventHandler(AppEvent * aEvent);
static button_status_t KBD_Callback(void * buttonHandle, button_callback_message_t * message, void * callbackParam);
- static void OTAHandler(AppEvent * aEvent);
+ static void SoftResetHandler(AppEvent * aEvent);
static void BleHandler(AppEvent * aEvent);
static void BleStartAdvertising(intptr_t arg);
static void LightActionEventHandler(AppEvent * aEvent);
static void ResetActionEventHandler(AppEvent * aEvent);
static void InstallEventHandler(AppEvent * aEvent);
- static void ButtonEventHandler(uint8_t pin_no, uint8_t button_action);
static void TimerEventHandler(TimerHandle_t xTimer);
static void MatterEventHandler(const chip::DeviceLayer::ChipDeviceEvent * event, intptr_t arg);
diff --git a/examples/lighting-app/nxp/k32w/k32w1/main/include/app_config.h b/examples/lighting-app/nxp/k32w/k32w1/main/include/app_config.h
index ff938f494b089d..1478b53b11aba1 100644
--- a/examples/lighting-app/nxp/k32w/k32w1/main/include/app_config.h
+++ b/examples/lighting-app/nxp/k32w/k32w1/main/include/app_config.h
@@ -22,12 +22,12 @@
#define RESET_BUTTON 1
#define LIGHT_BUTTON 2
-#define OTA_BUTTON 3
+#define SOFT_RESET_BUTTON 3
#define BLE_BUTTON 4
#define RESET_BUTTON_PUSH 1
#define LIGHT_BUTTON_PUSH 2
-#define OTA_BUTTON_PUSH 3
+#define SOFT_RESET_BUTTON_PUSH 3
#define BLE_BUTTON_PUSH 4
#define APP_BUTTON_PUSH 1
diff --git a/examples/lighting-app/nxp/k32w/k32w1/main/main.cpp b/examples/lighting-app/nxp/k32w/k32w1/main/main.cpp
index 7ebd3f3ed3b1b7..53a6efbbb3ffd5 100644
--- a/examples/lighting-app/nxp/k32w/k32w1/main/main.cpp
+++ b/examples/lighting-app/nxp/k32w/k32w1/main/main.cpp
@@ -35,6 +35,7 @@
#include "FreeRtosHooks.h"
#include "app_config.h"
+#include "pin_mux.h"
using namespace ::chip;
using namespace ::chip::Inet;
@@ -43,6 +44,10 @@ using namespace ::chip::Logging;
#include
+#if PW_RPC_ENABLED
+#include "Rpc.h"
+#endif
+
typedef void (*InitFunc)(void);
extern InitFunc __init_array_start;
extern InitFunc __init_array_end;
@@ -69,6 +74,17 @@ extern "C" void main_task(void const * argument)
/* Used for HW initializations */
otSysInit(0, NULL);
+#if PW_RPC_ENABLED
+ /* set clock */
+ CLOCK_SetIpSrc(kCLOCK_Lpuart1, kCLOCK_IpSrcFro192M);
+ /* enable clock */
+ CLOCK_EnableClock(kCLOCK_Lpuart1);
+
+ BOARD_InitPinLPUART1_TX();
+ BOARD_InitPinLPUART1_RX();
+ chip::rpc::Init();
+#endif
+
K32W_LOG("Welcome to NXP Lighting Demo App");
/* Mbedtls Threading support is needed because both
diff --git a/examples/lighting-app/nxp/k32w/k32w1/with_pw_rpc.gni b/examples/lighting-app/nxp/k32w/k32w1/with_pw_rpc.gni
new file mode 100644
index 00000000000000..d6bea63f8402c0
--- /dev/null
+++ b/examples/lighting-app/nxp/k32w/k32w1/with_pw_rpc.gni
@@ -0,0 +1,33 @@
+# 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.
+
+# add this gni as import in your build args to use pigweed in the example
+# 'import("//with_pw_rpc.gni")'
+
+import("//build_overrides/chip.gni")
+import("${chip_root}/config/nxp/lib/pw_rpc/pw_rpc.gni")
+import("${chip_root}/examples/platform/nxp/k32w/k32w1/args.gni")
+
+k32w1_sdk_target = get_label_info(":sdk", "label_no_toolchain")
+
+chip_enable_ota_requestor = true
+chip_stack_lock_tracking = "fatal"
+chip_enable_ble = true
+chip_enable_pw_rpc = true
+chip_with_ot_cli = 0
+is_debug = false
+chip_openthread_ftd = true
+chip_crypto = "platform"
+
+cpp_standard = "gnu++17"
diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.matter b/examples/lighting-app/nxp/zap/lighting-on-off.matter
index 9f4e9c51e5e5c3..5241ba629863ab 100644
--- a/examples/lighting-app/nxp/zap/lighting-on-off.matter
+++ b/examples/lighting-app/nxp/zap/lighting-on-off.matter
@@ -1522,7 +1522,7 @@ cluster GroupKeyManagement = 63 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 1;
+ device type ma_rootdevice = 22, version 2;
binding cluster OtaSoftwareUpdateProvider;
diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.zap b/examples/lighting-app/nxp/zap/lighting-on-off.zap
index e7f1d48c378d29..8873c5e9732c85 100644
--- a/examples/lighting-app/nxp/zap/lighting-on-off.zap
+++ b/examples/lighting-app/nxp/zap/lighting-on-off.zap
@@ -51,7 +51,7 @@
}
],
"deviceVersions": [
- 1
+ 2
],
"deviceIdentifiers": [
22
@@ -3994,5 +3994,6 @@
"endpointId": 1,
"networkId": 0
}
- ]
+ ],
+ "log": []
}
\ No newline at end of file
diff --git a/examples/lighting-app/qpg/src/AppTask.cpp b/examples/lighting-app/qpg/src/AppTask.cpp
index a6574f709024db..2bc0ffafec5d2a 100644
--- a/examples/lighting-app/qpg/src/AppTask.cpp
+++ b/examples/lighting-app/qpg/src/AppTask.cpp
@@ -647,14 +647,14 @@ void AppTask::UpdateClusterState(void)
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating on/off %x", status);
+ ChipLogError(NotSpecified, "ERR: updating on/off %x", to_underlying(status));
}
// Write new level value
status = Clusters::LevelControl::Attributes::CurrentLevel::Set(QPG_LIGHT_ENDPOINT_ID, LightingMgr().GetLevel());
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating level %x", status);
+ ChipLogError(NotSpecified, "ERR: updating level %x", to_underlying(status));
}
});
}
diff --git a/examples/lighting-app/silabs/src/AppTask.cpp b/examples/lighting-app/silabs/src/AppTask.cpp
index 2dc310b2684039..bce7b06cb5cb07 100644
--- a/examples/lighting-app/silabs/src/AppTask.cpp
+++ b/examples/lighting-app/silabs/src/AppTask.cpp
@@ -250,6 +250,6 @@ void AppTask::UpdateClusterState(intptr_t context)
if (status != Protocols::InteractionModel::Status::Success)
{
- SILABS_LOG("ERR: updating on/off %x", status);
+ SILABS_LOG("ERR: updating on/off %x", to_underlying(status));
}
}
diff --git a/examples/lighting-app/stm32/src/STM32WB5/AppTask.cpp b/examples/lighting-app/stm32/src/STM32WB5/AppTask.cpp
index 415da294ae8259..d102f8a9dfd421 100644
--- a/examples/lighting-app/stm32/src/STM32WB5/AppTask.cpp
+++ b/examples/lighting-app/stm32/src/STM32WB5/AppTask.cpp
@@ -448,14 +448,14 @@ void AppTask::UpdateClusterState(void)
Clusters::OnOff::Attributes::OnOff::Set(STM32_LIGHT_ENDPOINT_ID, LightingMgr().IsTurnedOn());
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating on/off %x", status);
+ ChipLogError(NotSpecified, "ERR: updating on/off %x", to_underlying(status));
}
// Write new level value
status = Clusters::LevelControl::Attributes::CurrentLevel::Set(STM32_LIGHT_ENDPOINT_ID, LightingMgr().GetLevel());
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating level %x", status);
+ ChipLogError(NotSpecified, "ERR: updating level %x", to_underlying(status));
}
}
diff --git a/examples/lighting-app/telink/src/AppTask.cpp b/examples/lighting-app/telink/src/AppTask.cpp
index edcb3004d2454c..54dd2703c16ce9 100644
--- a/examples/lighting-app/telink/src/AppTask.cpp
+++ b/examples/lighting-app/telink/src/AppTask.cpp
@@ -242,13 +242,13 @@ void AppTask::UpdateClusterState(void)
status = Clusters::OnOff::Attributes::OnOff::Set(kExampleEndpointId, isTurnedOn);
if (status != Protocols::InteractionModel::Status::Success)
{
- LOG_ERR("Update OnOff fail: %x", status);
+ LOG_ERR("Update OnOff fail: %x", to_underlying(status));
}
status = Clusters::LevelControl::Attributes::CurrentLevel::Set(kExampleEndpointId, setLevel);
if (status != Protocols::InteractionModel::Status::Success)
{
- LOG_ERR("Update CurrentLevel fail: %x", status);
+ LOG_ERR("Update CurrentLevel fail: %x", to_underlying(status));
}
}
diff --git a/examples/lighting-app/tizen/BUILD.gn b/examples/lighting-app/tizen/BUILD.gn
index c0a38e7c113a91..66b508b74e3284 100644
--- a/examples/lighting-app/tizen/BUILD.gn
+++ b/examples/lighting-app/tizen/BUILD.gn
@@ -12,9 +12,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import("//build_overrides/build.gni")
import("//build_overrides/chip.gni")
import("//build_overrides/tizen.gni")
+import("${build_root}/config/linux/pkg_config.gni")
import("${chip_root}/build/chip/linux/gdbus_library.gni")
import("${chip_root}/build/chip/tools.gni")
import("${chip_root}/src/app/common_flags.gni")
@@ -27,6 +29,10 @@ declare_args() {
chip_examples_enable_ui = false
}
+pkg_config("capi-system-peripheral-io") {
+ packages = [ "capi-system-peripheral-io" ]
+}
+
gdbus_library("chip-lighting-app-manager") {
sources = [ "xml/DBusLightApp.xml" ]
interface_prefix = "org.tizen.matter.example.lighting"
@@ -50,6 +56,8 @@ executable("chip-lighting-app") {
"${chip_root}/src/lib",
]
+ configs += [ ":capi-system-peripheral-io" ]
+
if (chip_examples_enable_ui) {
sources += [ "src/DBusInterface.cpp" ]
deps += [ ":chip-lighting-app-manager" ]
diff --git a/examples/lighting-app/tizen/src/DBusInterface.cpp b/examples/lighting-app/tizen/src/DBusInterface.cpp
index 0332f6f82b4933..e39ca5c1e1232c 100644
--- a/examples/lighting-app/tizen/src/DBusInterface.cpp
+++ b/examples/lighting-app/tizen/src/DBusInterface.cpp
@@ -207,7 +207,7 @@ void DBusInterface::InitOnOff()
bool isOn = false;
auto status = Clusters::OnOff::Attributes::OnOff::Get(mEndpointId, &isOn);
VerifyOrReturn(status == Protocols::InteractionModel::Status::Success,
- ChipLogError(NotSpecified, "Error getting OnOff: 0x%x", status));
+ ChipLogError(NotSpecified, "Error getting OnOff: 0x%x", to_underlying(status)));
light_app_on_off_set_on_off(mIfaceOnOff, isOn);
}
@@ -217,14 +217,14 @@ void DBusInterface::InitColor()
uint8_t value = 0;
auto status = Clusters::ColorControl::Attributes::ColorMode::Get(mEndpointId, &value);
VerifyOrReturn(status == Protocols::InteractionModel::Status::Success,
- ChipLogError(NotSpecified, "Error getting ColorMode: 0x%x", status));
+ ChipLogError(NotSpecified, "Error getting ColorMode: 0x%x", to_underlying(status)));
light_app_color_control_set_color_mode(mIfaceColorControl, value);
}
{
uint16_t value = 0;
auto status = Clusters::ColorControl::Attributes::ColorTemperatureMireds::Get(mEndpointId, &value);
VerifyOrReturn(status == Protocols::InteractionModel::Status::Success,
- ChipLogError(NotSpecified, "Error getting ColorTemperatureMireds: 0x%x", status));
+ ChipLogError(NotSpecified, "Error getting ColorTemperatureMireds: 0x%x", to_underlying(status)));
light_app_color_control_set_color_temperature_mireds(mIfaceColorControl, value);
}
}
diff --git a/examples/lighting-app/tizen/src/LedManager.cpp b/examples/lighting-app/tizen/src/LedManager.cpp
index a19f49c3f322ea..474ba612287f16 100644
--- a/examples/lighting-app/tizen/src/LedManager.cpp
+++ b/examples/lighting-app/tizen/src/LedManager.cpp
@@ -63,7 +63,7 @@ void LedManager::InitOnOff()
bool isOn = false;
auto status = Clusters::OnOff::Attributes::OnOff::Get(mEndpointId, &isOn);
VerifyOrReturn(status == Protocols::InteractionModel::Status::Success,
- ChipLogError(NotSpecified, "Error getting OnOff: 0x%x", status));
+ ChipLogError(NotSpecified, "Error getting OnOff: 0x%x", to_underlying(status)));
SetOnOff(isOn);
}
diff --git a/examples/lit-icd-app/linux/args.gni b/examples/lit-icd-app/linux/args.gni
index c1421b0c721f9b..09ea58ef2a51d5 100644
--- a/examples/lit-icd-app/linux/args.gni
+++ b/examples/lit-icd-app/linux/args.gni
@@ -30,3 +30,4 @@ matter_enable_tracing_support = true
chip_enable_icd_server = true
chip_subscription_timeout_resumption = false
chip_icd_report_on_active_mode = true
+chip_enable_icd_lit = true
diff --git a/examples/lit-icd-app/silabs/build_for_wifi_args.gni b/examples/lit-icd-app/silabs/build_for_wifi_args.gni
index 630cb65b53f45d..3531a31ffde406 100644
--- a/examples/lit-icd-app/silabs/build_for_wifi_args.gni
+++ b/examples/lit-icd-app/silabs/build_for_wifi_args.gni
@@ -28,8 +28,9 @@ chip_enable_icd_server = true
chip_subscription_timeout_resumption = false
sl_use_subscription_synching = true
icd_enforce_sit_slow_poll_limit = true
+chip_enable_icd_lit = true
# ICD Matter Configuration flags
-sl_idle_mode_interval_s = 3600 # 60min Idle Mode Interval
-sl_active_mode_interval_ms = 0 # 0 Active Mode Interval
+sl_idle_mode_duration_s = 3600 # 60min Idle Mode Duration
+sl_active_mode_duration_ms = 0 # 0 Active Mode Duration
sl_active_mode_threshold_ms = 30000 # 30s Active Mode Threshold
diff --git a/examples/lit-icd-app/silabs/openthread.gni b/examples/lit-icd-app/silabs/openthread.gni
index 69bd7b88e6bdc6..9d06737d622a2d 100644
--- a/examples/lit-icd-app/silabs/openthread.gni
+++ b/examples/lit-icd-app/silabs/openthread.gni
@@ -32,12 +32,13 @@ chip_subscription_timeout_resumption = false
sl_use_subscription_synching = true
icd_enforce_sit_slow_poll_limit = true
chip_icd_report_on_active_mode = true
+chip_enable_icd_lit = true
# Openthread Configuration flags
sl_ot_idle_interval_ms = 3600000 # 60mins Idle Polling Interval
sl_ot_active_interval_ms = 1000 # 1000ms Active Polling Interval
# ICD Matter Configuration flags
-sl_idle_mode_interval_s = 3600 # 60min Idle Mode Interval
-sl_active_mode_interval_ms = 0 # 0 Active Mode Interval
+sl_idle_mode_duration_s = 3600 # 60min Idle Mode Duration
+sl_active_mode_duration_ms = 0 # 0 Active Mode Duration
sl_active_mode_threshold_ms = 5000 # 5s Active Mode Threshold
diff --git a/examples/lock-app/asr/src/AppTask.cpp b/examples/lock-app/asr/src/AppTask.cpp
index b71ca5b84418ae..a90d0013761324 100644
--- a/examples/lock-app/asr/src/AppTask.cpp
+++ b/examples/lock-app/asr/src/AppTask.cpp
@@ -485,7 +485,7 @@ void AppTask::UpdateCluster(intptr_t context)
: Protocols::InteractionModel::Status::Failure;
if (status != Protocols::InteractionModel::Status::Success)
{
- ASR_LOG("ERR: updating lock state %x", status);
+ ASR_LOG("ERR: updating lock state %x", to_underlying(status));
}
}
diff --git a/examples/lock-app/cc13x2x7_26x2x7/BUILD.gn b/examples/lock-app/cc13x2x7_26x2x7/BUILD.gn
index db4f599aad8f79..8cf4f38dc771f2 100644
--- a/examples/lock-app/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/lock-app/cc13x2x7_26x2x7/BUILD.gn
@@ -55,7 +55,7 @@ ti_sysconfig("sysconfig") {
]
}
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x2x7_26x2x7_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/lock-app/cc13x4_26x4/BUILD.gn b/examples/lock-app/cc13x4_26x4/BUILD.gn
index 67560cd7469f41..aed45f85bce94b 100644
--- a/examples/lock-app/cc13x4_26x4/BUILD.gn
+++ b/examples/lock-app/cc13x4_26x4/BUILD.gn
@@ -59,7 +59,7 @@ ti_sysconfig("sysconfig") {
#"ti_build_config.opt",
]
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x4_26x4_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/lock-app/esp32/main/AppTask.cpp b/examples/lock-app/esp32/main/AppTask.cpp
index d9f7e1d27df8eb..fbca981316f69b 100644
--- a/examples/lock-app/esp32/main/AppTask.cpp
+++ b/examples/lock-app/esp32/main/AppTask.cpp
@@ -23,7 +23,7 @@
#include
#include
#include
-#include
+
#include
#include
#include
@@ -471,6 +471,6 @@ void AppTask::UpdateClusterState(intptr_t context)
Protocols::InteractionModel::Status status = chip::app::Clusters::OnOff::Attributes::OnOff::Set(1, newValue);
if (status != Protocols::InteractionModel::Status::Success)
{
- ESP_LOGI(TAG, "ERR: updating on/off %x", status);
+ ESP_LOGI(TAG, "ERR: updating on/off %x", to_underlying(status));
}
}
diff --git a/examples/lock-app/genio/src/AppTask.cpp b/examples/lock-app/genio/src/AppTask.cpp
index c4e9290d6922b2..7a438dd4974d3d 100644
--- a/examples/lock-app/genio/src/AppTask.cpp
+++ b/examples/lock-app/genio/src/AppTask.cpp
@@ -602,6 +602,6 @@ void AppTask::UpdateClusterState(intptr_t context)
if (status != Protocols::InteractionModel::Status::Success)
{
- MT793X_LOG("ERR: updating lock state %x", status);
+ MT793X_LOG("ERR: updating lock state %x", to_underlying(status));
}
}
diff --git a/examples/lock-app/genio/src/ZclCallbacks.cpp b/examples/lock-app/genio/src/ZclCallbacks.cpp
index 20c51773000224..88ebaf641d86c7 100644
--- a/examples/lock-app/genio/src/ZclCallbacks.cpp
+++ b/examples/lock-app/genio/src/ZclCallbacks.cpp
@@ -66,31 +66,31 @@ void emberAfDoorLockClusterInitCallback(EndpointId endpoint)
status = DoorLock::Attributes::LockType::Set(endpoint, DlLockType::kDeadBolt);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "Failed to set LockType %x", status);
+ ChipLogError(Zcl, "Failed to set LockType %x", to_underlying(status));
}
status = DoorLock::Attributes::NumberOfTotalUsersSupported::Set(endpoint, CONFIG_LOCK_NUM_USERS);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "Failed to set number of users %x", status);
+ ChipLogError(Zcl, "Failed to set number of users %x", to_underlying(status));
}
status = DoorLock::Attributes::NumberOfPINUsersSupported::Set(endpoint, CONFIG_LOCK_NUM_USERS);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "Failed to set number of PIN users %x", status);
+ ChipLogError(Zcl, "Failed to set number of PIN users %x", to_underlying(status));
}
status = DoorLock::Attributes::NumberOfRFIDUsersSupported::Set(endpoint, 0);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "Failed to set number of RFID users %x", status);
+ ChipLogError(Zcl, "Failed to set number of RFID users %x", to_underlying(status));
}
status = DoorLock::Attributes::NumberOfCredentialsSupportedPerUser::Set(endpoint, CONFIG_LOCK_NUM_CREDENTIALS_PER_USER);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "Failed to set number of credentials per user %x", status);
+ ChipLogError(Zcl, "Failed to set number of credentials per user %x", to_underlying(status));
}
// Note: Due to current logic of credential, do not enable PIN and RFID
@@ -99,7 +99,7 @@ void emberAfDoorLockClusterInitCallback(EndpointId endpoint)
status = DoorLock::Attributes::FeatureMap::Set(endpoint, 0x101);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "Failed to set number of credentials per user %x", status);
+ ChipLogError(Zcl, "Failed to set number of credentials per user %x", to_underlying(status));
}
}
diff --git a/examples/lock-app/infineon/cyw30739/src/main.cpp b/examples/lock-app/infineon/cyw30739/src/main.cpp
index 10beef22c153e6..c82cc894bae5af 100644
--- a/examples/lock-app/infineon/cyw30739/src/main.cpp
+++ b/examples/lock-app/infineon/cyw30739/src/main.cpp
@@ -330,7 +330,7 @@ void UpdateClusterState(intptr_t context)
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "ERR: updating lock state %x", status);
+ ChipLogError(Zcl, "ERR: updating lock state %x", to_underlying(status));
}
}
diff --git a/examples/lock-app/infineon/psoc6/src/AppTask.cpp b/examples/lock-app/infineon/psoc6/src/AppTask.cpp
index b69a114c2f9ddb..9f29e32e6c618a 100644
--- a/examples/lock-app/infineon/psoc6/src/AppTask.cpp
+++ b/examples/lock-app/infineon/psoc6/src/AppTask.cpp
@@ -665,7 +665,7 @@ void AppTask::UpdateCluster(intptr_t context)
: Protocols::InteractionModel::Status::Failure;
if (status != Protocols::InteractionModel::Status::Success)
{
- P6_LOG("ERR: updating lock state %x", status);
+ P6_LOG("ERR: updating lock state %x", to_underlying(status));
}
}
diff --git a/examples/lock-app/mbed/main/AppTask.cpp b/examples/lock-app/mbed/main/AppTask.cpp
index eaa48d34a711ba..2dd5a4463dcf74 100644
--- a/examples/lock-app/mbed/main/AppTask.cpp
+++ b/examples/lock-app/mbed/main/AppTask.cpp
@@ -464,6 +464,6 @@ void AppTask::UpdateClusterState()
Protocols::InteractionModel::Status status = app::Clusters::OnOff::Attributes::OnOff::Set(1, newValue);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ZCL update failed: %lx", status);
+ ChipLogError(NotSpecified, "ZCL update failed: %lx", to_underlying(status));
}
}
diff --git a/examples/lock-app/nrfconnect/main/ZclCallbacks.cpp b/examples/lock-app/nrfconnect/main/ZclCallbacks.cpp
index ec7871f2d6f92d..63040970d9b9df 100644
--- a/examples/lock-app/nrfconnect/main/ZclCallbacks.cpp
+++ b/examples/lock-app/nrfconnect/main/ZclCallbacks.cpp
@@ -115,7 +115,7 @@ void emberAfDoorLockClusterInitCallback(EndpointId endpoint)
const auto logOnFailure = [](Protocols::InteractionModel::Status status, const char * attributeName) {
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "Failed to set DoorLock %s: %x", attributeName, status);
+ ChipLogError(Zcl, "Failed to set DoorLock %s: %x", attributeName, to_underlying(status));
}
};
diff --git a/examples/lock-app/nxp/k32w/k32w0/main/AppTask.cpp b/examples/lock-app/nxp/k32w/k32w0/main/AppTask.cpp
index 6e8a62e3d00716..7c6cffaf968c02 100644
--- a/examples/lock-app/nxp/k32w/k32w0/main/AppTask.cpp
+++ b/examples/lock-app/nxp/k32w/k32w0/main/AppTask.cpp
@@ -781,7 +781,7 @@ void AppTask::UpdateClusterStateInternal(intptr_t arg)
if (status != chip::Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating door lock state %x", status);
+ ChipLogError(NotSpecified, "ERR: updating door lock state %x", chip::to_underlying(status));
}
}
diff --git a/examples/lock-app/qpg/src/AppTask.cpp b/examples/lock-app/qpg/src/AppTask.cpp
index 74e22e5892a977..7f9d922cc8558d 100644
--- a/examples/lock-app/qpg/src/AppTask.cpp
+++ b/examples/lock-app/qpg/src/AppTask.cpp
@@ -625,7 +625,7 @@ void AppTask::UpdateClusterState(void)
Protocols::InteractionModel::Status status = DoorLock::Attributes::LockState::Set(QPG_LOCK_ENDPOINT_ID, newValue);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: updating DoorLock %x", status);
+ ChipLogError(NotSpecified, "ERR: updating DoorLock %x", to_underlying(status));
}
}
else
diff --git a/examples/lock-app/qpg/src/ZclCallbacks.cpp b/examples/lock-app/qpg/src/ZclCallbacks.cpp
index e633c8eea16f0f..05518bff13cabd 100644
--- a/examples/lock-app/qpg/src/ZclCallbacks.cpp
+++ b/examples/lock-app/qpg/src/ZclCallbacks.cpp
@@ -117,7 +117,7 @@ void emberAfDoorLockClusterInitCallback(EndpointId endpoint)
const auto logOnFailure = [](Protocols::InteractionModel::Status status, const char * attributeName) {
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "Failed to set DoorLock %s: %x", attributeName, status);
+ ChipLogError(Zcl, "Failed to set DoorLock %s: %x", attributeName, to_underlying(status));
}
};
diff --git a/examples/lock-app/silabs/build_for_wifi_args.gni b/examples/lock-app/silabs/build_for_wifi_args.gni
index a9a7ee66170687..25c5a2435d332f 100644
--- a/examples/lock-app/silabs/build_for_wifi_args.gni
+++ b/examples/lock-app/silabs/build_for_wifi_args.gni
@@ -27,6 +27,6 @@ chip_subscription_timeout_resumption = false
sl_use_subscription_synching = true
# ICD Matter Configuration flags
-sl_idle_mode_interval_s = 600 # 10min Idle Mode Interval
-sl_active_mode_interval_ms = 10000 # 10s Active Mode Interval
+sl_idle_mode_duration_s = 600 # 10min Idle Mode Duration
+sl_active_mode_duration_ms = 10000 # 10s Active Mode Duration
sl_active_mode_threshold_ms = 1000 # 1s Active Mode Threshold
diff --git a/examples/lock-app/silabs/openthread.gni b/examples/lock-app/silabs/openthread.gni
index cde56f8029f6da..3bfa566596aeaf 100644
--- a/examples/lock-app/silabs/openthread.gni
+++ b/examples/lock-app/silabs/openthread.gni
@@ -35,6 +35,6 @@ sl_ot_idle_interval_ms = 5000 # 5s Idle Intervals
sl_ot_active_interval_ms = 500 # 500ms Active Intervals
# ICD Matter Configuration flags
-sl_idle_mode_interval_s = 600 # 10min Idle Mode Interval
-sl_active_mode_interval_ms = 10000 # 10s Active Mode Interval
+sl_idle_mode_duration_s = 600 # 10min Idle Mode Duration
+sl_active_mode_duration_ms = 10000 # 10s Active Mode Duration
sl_active_mode_threshold_ms = 1000 # 1s Active Mode Threshold
diff --git a/examples/lock-app/silabs/src/AppTask.cpp b/examples/lock-app/silabs/src/AppTask.cpp
index c5bc828beaea5f..2510fa7f351c03 100644
--- a/examples/lock-app/silabs/src/AppTask.cpp
+++ b/examples/lock-app/silabs/src/AppTask.cpp
@@ -359,6 +359,6 @@ void AppTask::UpdateClusterState(intptr_t context)
if (status != Protocols::InteractionModel::Status::Success)
{
- SILABS_LOG("ERR: updating lock state %x", status);
+ SILABS_LOG("ERR: updating lock state %x", to_underlying(status));
}
}
diff --git a/examples/microwave-oven-app/microwave-oven-common/include/microwave-oven-device.h b/examples/microwave-oven-app/microwave-oven-common/include/microwave-oven-device.h
index 4e88aa1117c21e..7799ae6fc7574a 100644
--- a/examples/microwave-oven-app/microwave-oven-common/include/microwave-oven-device.h
+++ b/examples/microwave-oven-app/microwave-oven-common/include/microwave-oven-device.h
@@ -22,7 +22,7 @@
#include
#include
#include
-#include
+
#include
#include
#include
diff --git a/examples/ota-requestor-app/esp32/main/main.cpp b/examples/ota-requestor-app/esp32/main/main.cpp
index f8282ccdf22e30..c3ee1d5803b207 100644
--- a/examples/ota-requestor-app/esp32/main/main.cpp
+++ b/examples/ota-requestor-app/esp32/main/main.cpp
@@ -16,7 +16,6 @@
*/
#include "DeviceCallbacks.h"
-#include "app/util/af-enums.h"
#include "app/util/af.h"
#include "esp_heap_caps_init.h"
#include "esp_log.h"
diff --git a/examples/persistent-storage/cc13x2x7_26x2x7/BUILD.gn b/examples/persistent-storage/cc13x2x7_26x2x7/BUILD.gn
index ea0acea00155be..0a8930dff1adb2 100644
--- a/examples/persistent-storage/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/persistent-storage/cc13x2x7_26x2x7/BUILD.gn
@@ -46,7 +46,7 @@ ti_sysconfig("sysconfig") {
"ti_drivers_config.h",
]
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x2x7_26x2x7_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/platform/asr/shell/matter_shell.cpp b/examples/platform/asr/shell/matter_shell.cpp
index f8abff11e9ebf7..bfa138f92ff0e5 100644
--- a/examples/platform/asr/shell/matter_shell.cpp
+++ b/examples/platform/asr/shell/matter_shell.cpp
@@ -88,7 +88,7 @@ void asr_matter_onoff(int value)
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogProgress(Zcl, "ERR: updating on/off %x", status);
+ ChipLogProgress(Zcl, "ERR: updating on/off %x", to_underlying(status));
}
}
diff --git a/examples/platform/nxp/PigweedLogger.cpp b/examples/platform/nxp/PigweedLogger.cpp
new file mode 100644
index 00000000000000..8e7bf277e320fb
--- /dev/null
+++ b/examples/platform/nxp/PigweedLogger.cpp
@@ -0,0 +1,111 @@
+/*
+ *
+ * Copyright (c) 2023 Project CHIP Authors
+ * 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.
+ */
+
+/*
+ * @file PigweedLogger.cpp
+ *
+ * This file contains basic string writing function, based on Pigweed HDLC
+ * over UART transport. It allows to send log messages even if the application
+ * needs to use HDLC/UART for another purpose like the RPC server.
+ */
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include "PigweedLogger.h"
+
+namespace PigweedLogger {
+namespace {
+
+constexpr uint8_t kLogHdlcAddress = 1; // Send log messages to HDLC address 1 (other than RPC communication)
+constexpr size_t kWriteBufferSize = 256; // Buffer for constructing HDLC frames
+
+// Exclusive access to the backend is needed to make sure that log messages coming
+// from different threads are not interwoven.
+SemaphoreHandle_t sLoggerLock;
+
+static pw::stream::SysIoWriter sWriter;
+static size_t sWriteBufferPos;
+static char sWriteBuffer[kWriteBufferSize];
+
+static void send(void)
+{
+ pw::hdlc::WriteUIFrame(kLogHdlcAddress, pw::as_bytes(pw::span(sWriteBuffer, sWriteBufferPos)), sWriter);
+ sWriteBufferPos = 0;
+}
+
+} // namespace
+
+void Init(void)
+{
+ sLoggerLock = xSemaphoreCreateMutex();
+ assert(sLoggerLock != NULL);
+
+ pw_sys_io_Init();
+}
+
+int PutString(const char * buffer, size_t size)
+{
+ assert(sWriteBufferPos < kWriteBufferSize);
+ assert(size < kWriteBufferSize);
+
+ Lock();
+
+ for (size_t i = 0; i < size; ++i)
+ {
+ // Send each line excluding "\r\n" in a separate frame
+
+ if (buffer[i] == '\r')
+ continue;
+
+ if (buffer[i] == '\n')
+ {
+ send();
+ continue;
+ }
+
+ sWriteBuffer[sWriteBufferPos++] = buffer[i];
+
+ if (sWriteBufferPos == kWriteBufferSize)
+ send();
+ }
+
+ Unlock();
+
+ return size;
+}
+
+void Lock()
+{
+ xSemaphoreTake(sLoggerLock, portMAX_DELAY);
+}
+
+void Unlock()
+{
+ xSemaphoreGive(sLoggerLock);
+}
+
+} // namespace PigweedLogger
diff --git a/examples/platform/nxp/PigweedLogger.h b/examples/platform/nxp/PigweedLogger.h
new file mode 100644
index 00000000000000..8ea1da5dbae92b
--- /dev/null
+++ b/examples/platform/nxp/PigweedLogger.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2023 Project CHIP Authors
+ * 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.
+ */
+
+#pragma once
+
+#include
+
+namespace PigweedLogger {
+
+void Init(void);
+int PutString(const char * buffer, size_t size);
+
+void Lock();
+void Unlock();
+
+} // namespace PigweedLogger
diff --git a/examples/platform/nxp/Rpc.cpp b/examples/platform/nxp/Rpc.cpp
new file mode 100644
index 00000000000000..d9bf744382627c
--- /dev/null
+++ b/examples/platform/nxp/Rpc.cpp
@@ -0,0 +1,144 @@
+/*
+ *
+ * Copyright (c) 2023 Project CHIP Authors
+ * 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.
+ */
+
+#include "AppTask.h"
+#include "FreeRTOS.h"
+#include "PigweedLogger.h"
+#include "PigweedLoggerMutex.h"
+#include "pigweed/RpcService.h"
+#include "task.h"
+
+#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE
+#include "pigweed/rpc_services/Attributes.h"
+#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE
+
+#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE
+#include "pigweed/rpc_services/Button.h"
+#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE
+
+#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE
+#include "pigweed/rpc_services/Device.h"
+#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE
+
+#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE
+#include "pigweed/rpc_services/Lighting.h"
+#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE
+
+#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE
+#include "pigweed/rpc_services/Locking.h"
+#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE
+
+#define RPC_TASK_STACK_SIZE 2048
+#define RPC_TASK_PRIORITY 1
+TaskHandle_t RpcTaskHandle;
+
+namespace chip {
+namespace rpc {
+
+#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE
+class NxpButton final : public Button
+{
+public:
+ pw::Status Event(const chip_rpc_ButtonEvent & request, pw_protobuf_Empty & response) override
+ {
+ GetAppTask().ButtonEventHandler(request.idx, request.idx);
+ return pw::OkStatus();
+ }
+};
+#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE
+
+#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE
+class NxpDevice final : public Device
+{
+public:
+ pw::Status Reboot(const pw_protobuf_Empty & request, pw_protobuf_Empty & response) override
+ {
+ mRebootTimer = xTimerCreate("Reboot", kRebootTimerPeriodTicks, false, nullptr, RebootHandler);
+ xTimerStart(mRebootTimer, pdMS_TO_TICKS(0));
+ return pw::OkStatus();
+ }
+
+private:
+ static constexpr TickType_t kRebootTimerPeriodTicks = 300;
+ TimerHandle_t mRebootTimer;
+
+ static void RebootHandler(TimerHandle_t) { NVIC_SystemReset(); }
+};
+#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE
+
+namespace {
+
+#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE
+Attributes attributes_service;
+#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE
+
+#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE
+NxpButton button_service;
+#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE
+
+#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE
+NxpDevice device_service;
+#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE
+
+#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE
+Lighting lighting_service;
+#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE
+
+#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE
+Locking locking;
+#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE
+
+void RegisterServices(pw::rpc::Server & server)
+{
+#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE
+ server.RegisterService(attributes_service);
+#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE
+
+#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE
+ server.RegisterService(button_service);
+#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE
+
+#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE
+ server.RegisterService(device_service);
+#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE
+
+#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE
+ server.RegisterService(lighting_service);
+#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE
+
+#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE
+ server.RegisterService(locking);
+#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE
+}
+
+} // namespace
+
+void RunRpcService(void *)
+{
+ Start(RegisterServices, &logger_mutex);
+}
+
+void Init()
+{
+ PigweedLogger::Init();
+
+ xTaskCreate(RunRpcService, "RPC_TASK", RPC_TASK_STACK_SIZE, nullptr, RPC_TASK_PRIORITY, &RpcTaskHandle);
+}
+
+} // namespace rpc
+} // namespace chip
diff --git a/examples/platform/nxp/Rpc.h b/examples/platform/nxp/Rpc.h
new file mode 100644
index 00000000000000..741fe7982883cc
--- /dev/null
+++ b/examples/platform/nxp/Rpc.h
@@ -0,0 +1,30 @@
+/*
+ *
+ * Copyright (c) 2023 Project CHIP Authors
+ * 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.
+ */
+
+#pragma once
+
+namespace chip {
+namespace rpc {
+
+class LightingService;
+
+void Init();
+void RunRpcService(void *);
+
+} // namespace rpc
+} // namespace chip
diff --git a/examples/platform/nxp/k32w/k32w0/scripts/sign-outdir.py b/examples/platform/nxp/k32w/k32w0/scripts/sign-outdir.py
index dfaf912ae5283d..ea4a888c9e3555 100644
--- a/examples/platform/nxp/k32w/k32w0/scripts/sign-outdir.py
+++ b/examples/platform/nxp/k32w/k32w0/scripts/sign-outdir.py
@@ -4,7 +4,7 @@
def main(args):
- if os.environ["NXP_K32W0_SDK_ROOT"] != "":
+ if "NXP_K32W0_SDK_ROOT" in os.environ and os.environ["NXP_K32W0_SDK_ROOT"] != "":
sign_images_path = os.environ["NXP_K32W0_SDK_ROOT"] + "/tools/imagetool/sign_images.sh"
else:
sign_images_path = os.getcwd() + "/../../../../../../../third_party/nxp/k32w0_sdk/repo/core/tools/imagetool/sign_images.sh"
diff --git a/examples/platform/nxp/k32w/k32w1/BUILD.gn b/examples/platform/nxp/k32w/k32w1/BUILD.gn
index 0a980406bce075..5cd2a8b31392c2 100644
--- a/examples/platform/nxp/k32w/k32w1/BUILD.gn
+++ b/examples/platform/nxp/k32w/k32w1/BUILD.gn
@@ -13,9 +13,11 @@
# limitations under the License.
import("//build_overrides/chip.gni")
-import("//build_overrides/k32w1_sdk.gni")
+import("//build_overrides/nxp_sdk.gni")
-import("${k32w1_sdk_build_root}/k32w1_sdk.gni")
+import("${nxp_sdk_build_root}/nxp_sdk.gni")
+
+import("${nxp_sdk_build_root}/${nxp_sdk_name}/${nxp_sdk_name}.gni")
config("chip_examples_project_config") {
include_dirs = [
diff --git a/examples/platform/nxp/k32w/k32w1/app/args.gni b/examples/platform/nxp/k32w/k32w1/app/args.gni
index c09510c14df229..2705c251fb807d 100644
--- a/examples/platform/nxp/k32w/k32w1/app/args.gni
+++ b/examples/platform/nxp/k32w/k32w1/app/args.gni
@@ -16,11 +16,6 @@ import("//build_overrides/chip.gni")
import("${chip_root}/src/platform/nxp/k32w/k32w1/args.gni")
-arm_float_abi = "hard"
-arm_cpu = "cortex-m33"
-arm_fpu = "fpv5-sp-d16"
-arm_arch = "armv8-m.main+dsp+fp"
-
openthread_project_core_config_file = "OpenThreadConfig.h"
chip_ble_project_config_include = ""
diff --git a/examples/platform/nxp/k32w/k32w1/app/ldscripts/k32w1_app.ld b/examples/platform/nxp/k32w/k32w1/app/ldscripts/k32w1_app.ld
index de9c882af9fed4..ac8f7bd65d0950 100644
--- a/examples/platform/nxp/k32w/k32w1/app/ldscripts/k32w1_app.ld
+++ b/examples/platform/nxp/k32w/k32w1/app/ldscripts/k32w1_app.ld
@@ -14,7 +14,7 @@
** limitations under the License.
*/
-m_smu2_data_start = 0x489C0000;
+m_smu2_data_start = 0x489C0080;
m_smu2_data_end = 0x489C537B;
m_smu2_data_size = m_smu2_data_end - m_smu2_data_start + 1;
diff --git a/examples/platform/nxp/k32w/k32w1/app/support/BUILD.gn b/examples/platform/nxp/k32w/k32w1/app/support/BUILD.gn
index dafa6de4d3d31d..dc688edc2c78ed 100644
--- a/examples/platform/nxp/k32w/k32w1/app/support/BUILD.gn
+++ b/examples/platform/nxp/k32w/k32w1/app/support/BUILD.gn
@@ -13,7 +13,7 @@
# limitations under the License.
import("//build_overrides/chip.gni")
-import("//build_overrides/k32w1_sdk.gni")
+import("//build_overrides/nxp_sdk.gni")
config("support_config") {
include_dirs = [ "../../../../.." ]
diff --git a/examples/platform/nxp/k32w/k32w1/app/support/FreeRtosHooks.c b/examples/platform/nxp/k32w/k32w1/app/support/FreeRtosHooks.c
index 83549b1dc1f04a..a7c78a77440e03 100644
--- a/examples/platform/nxp/k32w/k32w1/app/support/FreeRtosHooks.c
+++ b/examples/platform/nxp/k32w/k32w1/app/support/FreeRtosHooks.c
@@ -51,10 +51,6 @@
#define APP_DBG_LOG(...)
#endif
-#if (configUSE_TICKLESS_IDLE != 0)
-extern uint64_t PWR_TryEnterLowPower(uint64_t timeoutUs);
-#endif
-
static inline void mutex_init(mbedtls_threading_mutex_t * p_mutex)
{
assert(p_mutex != NULL);
@@ -123,7 +119,7 @@ void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime)
if (abortIdle == false)
{
/* Enter low power with a maximal timeout */
- actualIdleTimeUs = PWR_TryEnterLowPower(expectedIdleTimeUs);
+ actualIdleTimeUs = PWR_EnterLowPower(expectedIdleTimeUs);
/* Re enable systicks and compensate systick timebase */
PWR_SysticksPostProcess(expectedIdleTimeUs, actualIdleTimeUs);
diff --git a/examples/platform/nxp/k32w/k32w1/app/support/Memconfig.cpp b/examples/platform/nxp/k32w/k32w1/app/support/Memconfig.cpp
index e5acf5ea3ceecb..e05281fdee4f4d 100644
--- a/examples/platform/nxp/k32w/k32w1/app/support/Memconfig.cpp
+++ b/examples/platform/nxp/k32w/k32w1/app/support/Memconfig.cpp
@@ -40,6 +40,8 @@
#include
#endif // CHIP_CONFIG_MEMORY_DEBUG_DMALLOC
+#include "fsl_component_mem_manager.h"
+
/* Assumes 8bit bytes! */
#define heapBITS_PER_BYTE ((size_t) 8)
@@ -64,42 +66,6 @@ static size_t xBlockAllocatedBit = ((size_t) 1) << ((sizeof(size_t) * heapBITS_P
extern "C" {
-/* xPortMallocUsableSize relies on heap4 implementation.
-It returns the size of an allocated block and it is
-called by __wrap_realloc.
-Thus it is validated in __wrap_realloc function that the allocated size
-of the old_ptr is smaller than the allocated size of new_ptr */
-size_t xPortMallocUsableSize(void * pv)
-{
- uint8_t * puc = (uint8_t *) pv;
- BlockLink_t * pxLink;
- void * voidp;
- size_t sz = 0;
-
- if (pv != NULL)
- {
- vTaskSuspendAll();
- {
- /* The memory being checked will have an BlockLink_t structure immediately
- before it. */
- puc -= xHeapStructSize;
-
- /* This casting is to keep the compiler from issuing warnings. */
- voidp = (void *) puc;
- pxLink = (BlockLink_t *) voidp;
-
- /* Check if the block is actually allocated. */
- configASSERT((pxLink->xBlockSize & xBlockAllocatedBit) != 0);
- configASSERT(pxLink->pxNextFreeBlock == NULL);
-
- sz = (pxLink->xBlockSize & ~xBlockAllocatedBit) - xHeapStructSize;
- }
- (void) xTaskResumeAll();
- }
-
- return sz;
-}
-
void * __wrap_malloc(size_t size)
{
return pvPortMalloc(size);
@@ -135,34 +101,22 @@ void * __wrap_calloc(size_t num, size_t size)
void * __wrap_realloc(void * ptr, size_t new_size)
{
-
void * new_ptr = NULL;
if (new_size)
{
- size_t old_ptr_size = xPortMallocUsableSize(ptr);
- if (new_size <= old_ptr_size)
- {
- /* Return old pointer if the newly allocated size is smaller
- or equal to the allocated size for old_ptr */
- return ptr;
- }
-
- /* if old_ptr is NULL, then old_ptr_size is zero and new_ptr will be returned */
- new_ptr = pvPortMalloc(new_size);
+ /* MML will only realloc a new pointer if the size is greater than old pointer size.*/
+ vTaskSuspendAll();
+ new_ptr = MEM_BufferRealloc(ptr, new_size);
+ xTaskResumeAll();
if (!new_ptr)
{
ChipLogError(DeviceLayer, "__wrap_realloc: Could not allocate memory!");
return NULL;
}
-
- memset(reinterpret_cast(new_ptr) + old_ptr_size, 0, (new_size - old_ptr_size));
- memcpy(new_ptr, ptr, old_ptr_size);
}
- vPortFree(ptr);
-
return new_ptr;
}
diff --git a/examples/platform/nxp/pw_rpc_server.gni b/examples/platform/nxp/pw_rpc_server.gni
new file mode 100644
index 00000000000000..0ec2d3b121b2d5
--- /dev/null
+++ b/examples/platform/nxp/pw_rpc_server.gni
@@ -0,0 +1,62 @@
+# 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.
+
+import("//build_overrides/chip.gni")
+import("//build_overrides/pigweed.gni")
+
+import("$dir_pw_build/target_types.gni")
+import("${chip_root}/src/platform/device.gni")
+
+nxp_platform_dir = "${chip_root}/examples/platform/nxp"
+
+# Define a scope for pw RPC server dependencies.
+# This .gni file should be imported by applications that want to use pw RPC.
+# These variables shall be copied in the final executable target by adding
+# forward_variables_from(pw_rpc_server, "*") in the beginning of the target scope.
+pw_rpc_server = {
+ sources = [
+ "${chip_root}/examples/common/pigweed/RpcService.cpp",
+ "${chip_root}/examples/common/pigweed/nxp/PigweedLoggerMutex.cpp",
+ "${nxp_platform_dir}/PigweedLogger.cpp",
+ "${nxp_platform_dir}/Rpc.cpp",
+ ]
+
+ include_dirs = [
+ "${chip_root}/examples/common",
+ "${chip_root}/examples/common/pigweed",
+ "${chip_root}/examples/common/pigweed/nxp",
+ "${nxp_platform_dir}",
+ ]
+
+ defines = [
+ "PW_RPC_ENABLED",
+ "PW_RPC_ATTRIBUTE_SERVICE=1",
+ "PW_RPC_BUTTON_SERVICE=1",
+ "PW_RPC_DEVICE_SERVICE=1",
+ "PW_RPC_LIGHTING_SERVICE=1",
+ ]
+
+ deps = [
+ "$dir_pw_hdlc:rpc_channel_output",
+ "$dir_pw_stream:sys_io_stream",
+ "$dir_pw_trace",
+ "${chip_root}/config/nxp/lib/pw_rpc:pw_rpc",
+ "${chip_root}/examples/common/pigweed:attributes_service.nanopb_rpc",
+ "${chip_root}/examples/common/pigweed:button_service.nanopb_rpc",
+ "${chip_root}/examples/common/pigweed:device_service.nanopb_rpc",
+ "${chip_root}/examples/common/pigweed:lighting_service.nanopb_rpc",
+ "${nxp_platform_dir}/pw_sys_io:pw_sys_io_nxp",
+ ]
+ deps += pw_build_LINK_DEPS
+}
diff --git a/examples/platform/nxp/pw_sys_io/BUILD.gn b/examples/platform/nxp/pw_sys_io/BUILD.gn
new file mode 100644
index 00000000000000..ed3d35246093f1
--- /dev/null
+++ b/examples/platform/nxp/pw_sys_io/BUILD.gn
@@ -0,0 +1,42 @@
+# 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.
+
+import("//build_overrides/chip.gni")
+import("//build_overrides/nxp_sdk.gni")
+import("//build_overrides/pigweed.gni")
+
+import("$dir_pw_build/target_types.gni")
+import("${chip_root}/src/platform/device.gni")
+
+config("default_config") {
+ include_dirs = [
+ "public",
+ "${chip_root}/src/",
+ ]
+}
+
+pw_source_set("pw_sys_io_nxp") {
+ sources = [
+ "${chip_root}/src/lib/shell/streamer_nxp.cpp",
+ "sys_io_nxp.cc",
+ ]
+
+ deps = [
+ "$dir_pw_sys_io:default_putget_bytes",
+ "$dir_pw_sys_io:facade",
+ "${nxp_sdk_build_root}/${nxp_sdk_name}:nxp_sdk",
+ ]
+
+ public_configs = [ ":default_config" ]
+}
diff --git a/examples/platform/nxp/pw_sys_io/public/pw_sys_io_nxp/init.h b/examples/platform/nxp/pw_sys_io/public/pw_sys_io_nxp/init.h
new file mode 100644
index 00000000000000..47d18772638d5f
--- /dev/null
+++ b/examples/platform/nxp/pw_sys_io/public/pw_sys_io_nxp/init.h
@@ -0,0 +1,27 @@
+/*
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include "pw_preprocessor/util.h"
+
+PW_EXTERN_C_START
+
+// The actual implement of PreMainInit() in sys_io_BACKEND.
+void pw_sys_io_Init();
+
+PW_EXTERN_C_END
diff --git a/examples/platform/nxp/pw_sys_io/sys_io_nxp.cc b/examples/platform/nxp/pw_sys_io/sys_io_nxp.cc
new file mode 100644
index 00000000000000..8e729f0986bbb3
--- /dev/null
+++ b/examples/platform/nxp/pw_sys_io/sys_io_nxp.cc
@@ -0,0 +1,78 @@
+/*
+ *
+ * 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.
+ */
+
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+
+int16_t console_getchar(char * chr)
+{
+ auto * streamer = chip::Shell::streamer_get();
+ return static_cast(streamer->read_cb(nullptr, chr, 1));
+}
+
+int16_t console_putchar(const char * chr)
+{
+ auto * streamer = chip::Shell::streamer_get();
+ return static_cast(streamer->write_cb(nullptr, chr, 1));
+}
+
+extern "C" void pw_sys_io_Init()
+{
+ auto * streamer = chip::Shell::streamer_get();
+ streamer->init_cb(nullptr);
+}
+
+namespace pw::sys_io {
+
+Status ReadByte(std::byte * dest)
+{
+ if (!dest)
+ return Status::InvalidArgument();
+
+ int16_t ret = console_getchar(reinterpret_cast(dest));
+ return ret < 0 ? Status::FailedPrecondition() : OkStatus();
+}
+
+Status WriteByte(std::byte b)
+{
+ int16_t ret = console_putchar(reinterpret_cast(&b));
+ return ret < 0 ? Status::FailedPrecondition() : OkStatus();
+}
+
+// Writes a string using pw::sys_io, and add newline characters at the end.
+StatusWithSize WriteLine(const std::string_view & s)
+{
+ size_t chars_written = 0;
+ StatusWithSize result = WriteBytes(pw::as_bytes(pw::span(s)));
+ if (!result.ok())
+ {
+ return result;
+ }
+ chars_written += result.size();
+ result = WriteBytes(pw::as_bytes(pw::span("\r\n", 2)));
+ chars_written += result.size();
+
+ return StatusWithSize(result.status(), chars_written);
+}
+
+} // namespace pw::sys_io
diff --git a/examples/pump-app/cc13x2x7_26x2x7/BUILD.gn b/examples/pump-app/cc13x2x7_26x2x7/BUILD.gn
index 4c670552dc2baf..02e87a04f067f0 100644
--- a/examples/pump-app/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/pump-app/cc13x2x7_26x2x7/BUILD.gn
@@ -54,7 +54,7 @@ ti_sysconfig("sysconfig") {
]
}
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x2x7_26x2x7_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/pump-app/cc13x2x7_26x2x7/main/AppTask.cpp b/examples/pump-app/cc13x2x7_26x2x7/main/AppTask.cpp
index 4bfb9afb9713cb..8ac373b643bfce 100644
--- a/examples/pump-app/cc13x2x7_26x2x7/main/AppTask.cpp
+++ b/examples/pump-app/cc13x2x7_26x2x7/main/AppTask.cpp
@@ -467,7 +467,7 @@ void AppTask::InitOnOffClusterState()
status = OnOff::Attributes::OnOff::Set(ONOFF_CLUSTER_ENDPOINT, false);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Init On/Off state %x", status);
+ ChipLogError(NotSpecified, "ERR: Init On/Off state %x", to_underlying(status));
}
}
@@ -503,25 +503,25 @@ void AppTask::UpdateCluster(intptr_t context)
PumpConfigurationAndControl::ControlModeEnum::kConstantFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Constant Flow error %x", status);
+ ChipLogError(NotSpecified, "ERR: Constant Flow error %x", to_underlying(status));
}
status = PumpConfigurationAndControl::Attributes::ControlMode::Set(
PCC_CLUSTER_ENDPOINT, PumpConfigurationAndControl::ControlModeEnum::kConstantPressure);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Constant Pressure error %x", status);
+ ChipLogError(NotSpecified, "ERR: Constant Pressure error %x", to_underlying(status));
}
status = PumpConfigurationAndControl::Attributes::ControlMode::Set(
PCC_CLUSTER_ENDPOINT, PumpConfigurationAndControl::ControlModeEnum::kConstantSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Constant Speed error %x", status);
+ ChipLogError(NotSpecified, "ERR: Constant Speed error %x", to_underlying(status));
}
status = PumpConfigurationAndControl::Attributes::ControlMode::Set(
PCC_CLUSTER_ENDPOINT, PumpConfigurationAndControl::ControlModeEnum::kConstantTemperature);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Constant Temperature error %x", status);
+ ChipLogError(NotSpecified, "ERR: Constant Temperature error %x", to_underlying(status));
}
// Write the new values
@@ -529,98 +529,98 @@ void AppTask::UpdateCluster(intptr_t context)
status = OnOff::Attributes::OnOff::Set(ONOFF_CLUSTER_ENDPOINT, onOffState);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating On/Off state %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating On/Off state %x", to_underlying(status));
}
int16_t maxPressure = PumpMgr().GetMaxPressure();
status = PumpConfigurationAndControl::Attributes::MaxPressure::Set(PCC_CLUSTER_ENDPOINT, maxPressure);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxPressure %x", to_underlying(status));
}
uint16_t maxSpeed = PumpMgr().GetMaxSpeed();
status = PumpConfigurationAndControl::Attributes::MaxSpeed::Set(PCC_CLUSTER_ENDPOINT, maxSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxSpeed %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxSpeed %x", to_underlying(status));
}
uint16_t maxFlow = PumpMgr().GetMaxFlow();
status = PumpConfigurationAndControl::Attributes::MaxFlow::Set(PCC_CLUSTER_ENDPOINT, maxFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxFlow %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxFlow %x", to_underlying(status));
}
int16_t minConstPress = PumpMgr().GetMinConstPressure();
status = PumpConfigurationAndControl::Attributes::MinConstPressure::Set(PCC_CLUSTER_ENDPOINT, minConstPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstPressure %x", to_underlying(status));
}
int16_t maxConstPress = PumpMgr().GetMaxConstPressure();
status = PumpConfigurationAndControl::Attributes::MaxConstPressure::Set(PCC_CLUSTER_ENDPOINT, maxConstPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstPressure %x", to_underlying(status));
}
int16_t minCompPress = PumpMgr().GetMinCompPressure();
status = PumpConfigurationAndControl::Attributes::MinCompPressure::Set(PCC_CLUSTER_ENDPOINT, minCompPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinCompPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinCompPressure %x", to_underlying(status));
}
int16_t maxCompPress = PumpMgr().GetMaxCompPressure();
status = PumpConfigurationAndControl::Attributes::MaxCompPressure::Set(PCC_CLUSTER_ENDPOINT, maxCompPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxCompPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxCompPressure %x", to_underlying(status));
}
uint16_t minConstSpeed = PumpMgr().GetMinConstSpeed();
status = PumpConfigurationAndControl::Attributes::MinConstSpeed::Set(PCC_CLUSTER_ENDPOINT, minConstSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstSpeed %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstSpeed %x", to_underlying(status));
}
uint16_t maxConstSpeed = PumpMgr().GetMaxConstSpeed();
status = PumpConfigurationAndControl::Attributes::MaxConstSpeed::Set(PCC_CLUSTER_ENDPOINT, maxConstSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstSpeed %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstSpeed %x", to_underlying(status));
}
uint16_t minConstFlow = PumpMgr().GetMinConstFlow();
status = PumpConfigurationAndControl::Attributes::MinConstFlow::Set(PCC_CLUSTER_ENDPOINT, minConstFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstFlow %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstFlow %x", to_underlying(status));
}
uint16_t maxConstFlow = PumpMgr().GetMaxConstFlow();
status = PumpConfigurationAndControl::Attributes::MaxConstFlow::Set(PCC_CLUSTER_ENDPOINT, maxConstFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstFlow %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstFlow %x", to_underlying(status));
}
int16_t minConstTemp = PumpMgr().GetMinConstTemp();
status = PumpConfigurationAndControl::Attributes::MinConstTemp::Set(PCC_CLUSTER_ENDPOINT, minConstTemp);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstTemp %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstTemp %x", to_underlying(status));
}
int16_t maxConstTemp = PumpMgr().GetMaxConstTemp();
status = PumpConfigurationAndControl::Attributes::MaxConstTemp::Set(PCC_CLUSTER_ENDPOINT, maxConstTemp);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstTemp %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstTemp %x", to_underlying(status));
}
}
diff --git a/examples/pump-app/cc13x4_26x4/BUILD.gn b/examples/pump-app/cc13x4_26x4/BUILD.gn
index 7cbf21cc41140e..8c68ba70066315 100644
--- a/examples/pump-app/cc13x4_26x4/BUILD.gn
+++ b/examples/pump-app/cc13x4_26x4/BUILD.gn
@@ -62,7 +62,7 @@ ti_sysconfig("sysconfig") {
#"ti_build_config.opt",
]
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x4_26x4_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/pump-app/cc13x4_26x4/main/AppTask.cpp b/examples/pump-app/cc13x4_26x4/main/AppTask.cpp
index 5c5e93919263d9..ea094e96767665 100644
--- a/examples/pump-app/cc13x4_26x4/main/AppTask.cpp
+++ b/examples/pump-app/cc13x4_26x4/main/AppTask.cpp
@@ -464,7 +464,7 @@ void AppTask::InitOnOffClusterState()
status = OnOff::Attributes::OnOff::Set(ONOFF_CLUSTER_ENDPOINT, false);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Init On/Off state %x", status);
+ ChipLogError(NotSpecified, "ERR: Init On/Off state %x", to_underlying(status));
}
}
@@ -500,25 +500,25 @@ void AppTask::UpdateCluster(intptr_t context)
PumpConfigurationAndControl::ControlModeEnum::kConstantFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Constant Flow error %x", status);
+ ChipLogError(NotSpecified, "ERR: Constant Flow error %x", to_underlying(status));
}
status = PumpConfigurationAndControl::Attributes::ControlMode::Set(
PCC_CLUSTER_ENDPOINT, PumpConfigurationAndControl::ControlModeEnum::kConstantPressure);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Constant Pressure error %x", status);
+ ChipLogError(NotSpecified, "ERR: Constant Pressure error %x", to_underlying(status));
}
status = PumpConfigurationAndControl::Attributes::ControlMode::Set(
PCC_CLUSTER_ENDPOINT, PumpConfigurationAndControl::ControlModeEnum::kConstantSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Constant Speed error %x", status);
+ ChipLogError(NotSpecified, "ERR: Constant Speed error %x", to_underlying(status));
}
status = PumpConfigurationAndControl::Attributes::ControlMode::Set(
PCC_CLUSTER_ENDPOINT, PumpConfigurationAndControl::ControlModeEnum::kConstantTemperature);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Constant Temperature error %x", status);
+ ChipLogError(NotSpecified, "ERR: Constant Temperature error %x", to_underlying(status));
}
// Write the new values
@@ -526,98 +526,98 @@ void AppTask::UpdateCluster(intptr_t context)
status = OnOff::Attributes::OnOff::Set(ONOFF_CLUSTER_ENDPOINT, onOffState);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating On/Off state %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating On/Off state %x", to_underlying(status));
}
int16_t maxPressure = PumpMgr().GetMaxPressure();
status = PumpConfigurationAndControl::Attributes::MaxPressure::Set(PCC_CLUSTER_ENDPOINT, maxPressure);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxPressure %x", to_underlying(status));
}
uint16_t maxSpeed = PumpMgr().GetMaxSpeed();
status = PumpConfigurationAndControl::Attributes::MaxSpeed::Set(PCC_CLUSTER_ENDPOINT, maxSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxSpeed %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxSpeed %x", to_underlying(status));
}
uint16_t maxFlow = PumpMgr().GetMaxFlow();
status = PumpConfigurationAndControl::Attributes::MaxFlow::Set(PCC_CLUSTER_ENDPOINT, maxFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxFlow %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxFlow %x", to_underlying(status));
}
int16_t minConstPress = PumpMgr().GetMinConstPressure();
status = PumpConfigurationAndControl::Attributes::MinConstPressure::Set(PCC_CLUSTER_ENDPOINT, minConstPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstPressure %x", to_underlying(status));
}
int16_t maxConstPress = PumpMgr().GetMaxConstPressure();
status = PumpConfigurationAndControl::Attributes::MaxConstPressure::Set(PCC_CLUSTER_ENDPOINT, maxConstPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstPressure %x", to_underlying(status));
}
int16_t minCompPress = PumpMgr().GetMinCompPressure();
status = PumpConfigurationAndControl::Attributes::MinCompPressure::Set(PCC_CLUSTER_ENDPOINT, minCompPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinCompPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinCompPressure %x", to_underlying(status));
}
int16_t maxCompPress = PumpMgr().GetMaxCompPressure();
status = PumpConfigurationAndControl::Attributes::MaxCompPressure::Set(PCC_CLUSTER_ENDPOINT, maxCompPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxCompPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxCompPressure %x", to_underlying(status));
}
uint16_t minConstSpeed = PumpMgr().GetMinConstSpeed();
status = PumpConfigurationAndControl::Attributes::MinConstSpeed::Set(PCC_CLUSTER_ENDPOINT, minConstSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstSpeed %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstSpeed %x", to_underlying(status));
}
uint16_t maxConstSpeed = PumpMgr().GetMaxConstSpeed();
status = PumpConfigurationAndControl::Attributes::MaxConstSpeed::Set(PCC_CLUSTER_ENDPOINT, maxConstSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstSpeed %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstSpeed %x", to_underlying(status));
}
uint16_t minConstFlow = PumpMgr().GetMinConstFlow();
status = PumpConfigurationAndControl::Attributes::MinConstFlow::Set(PCC_CLUSTER_ENDPOINT, minConstFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstFlow %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstFlow %x", to_underlying(status));
}
uint16_t maxConstFlow = PumpMgr().GetMaxConstFlow();
status = PumpConfigurationAndControl::Attributes::MaxConstFlow::Set(PCC_CLUSTER_ENDPOINT, maxConstFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstFlow %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstFlow %x", to_underlying(status));
}
int16_t minConstTemp = PumpMgr().GetMinConstTemp();
status = PumpConfigurationAndControl::Attributes::MinConstTemp::Set(PCC_CLUSTER_ENDPOINT, minConstTemp);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstTemp %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstTemp %x", to_underlying(status));
}
int16_t maxConstTemp = PumpMgr().GetMaxConstTemp();
status = PumpConfigurationAndControl::Attributes::MaxConstTemp::Set(PCC_CLUSTER_ENDPOINT, maxConstTemp);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstTemp %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstTemp %x", to_underlying(status));
}
}
diff --git a/examples/pump-app/nrfconnect/main/AppTask.cpp b/examples/pump-app/nrfconnect/main/AppTask.cpp
index 893c5dfd31794e..3a6eb9023ded0a 100644
--- a/examples/pump-app/nrfconnect/main/AppTask.cpp
+++ b/examples/pump-app/nrfconnect/main/AppTask.cpp
@@ -573,97 +573,97 @@ void AppTask::UpdateClusterState()
status = OnOff::Attributes::OnOff::Set(kOnOffClusterEndpoint, onOffState);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating On/Off state %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating On/Off state %x", to_underlying(status));
}
int16_t maxPressure = PumpMgr().GetMaxPressure();
status = PumpConfigurationAndControl::Attributes::MaxPressure::Set(kPccClusterEndpoint, maxPressure);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxPressure %x", to_underlying(status));
}
uint16_t maxSpeed = PumpMgr().GetMaxSpeed();
status = PumpConfigurationAndControl::Attributes::MaxSpeed::Set(kPccClusterEndpoint, maxSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxSpeed %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxSpeed %x", to_underlying(status));
}
uint16_t maxFlow = PumpMgr().GetMaxFlow();
status = PumpConfigurationAndControl::Attributes::MaxFlow::Set(kPccClusterEndpoint, maxFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxFlow %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxFlow %x", to_underlying(status));
}
int16_t minConstPress = PumpMgr().GetMinConstPressure();
status = PumpConfigurationAndControl::Attributes::MinConstPressure::Set(kPccClusterEndpoint, minConstPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstPressure %x", to_underlying(status));
}
int16_t maxConstPress = PumpMgr().GetMaxConstPressure();
status = PumpConfigurationAndControl::Attributes::MaxConstPressure::Set(kPccClusterEndpoint, maxConstPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstPressure %x", to_underlying(status));
}
int16_t minCompPress = PumpMgr().GetMinCompPressure();
status = PumpConfigurationAndControl::Attributes::MinCompPressure::Set(kPccClusterEndpoint, minCompPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinCompPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinCompPressure %x", to_underlying(status));
}
int16_t maxCompPress = PumpMgr().GetMaxCompPressure();
status = PumpConfigurationAndControl::Attributes::MaxCompPressure::Set(kPccClusterEndpoint, maxCompPress);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxCompPressure %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxCompPressure %x", to_underlying(status));
}
uint16_t minConstSpeed = PumpMgr().GetMinConstSpeed();
status = PumpConfigurationAndControl::Attributes::MinConstSpeed::Set(kPccClusterEndpoint, minConstSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstSpeed %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstSpeed %x", to_underlying(status));
}
uint16_t maxConstSpeed = PumpMgr().GetMaxConstSpeed();
status = PumpConfigurationAndControl::Attributes::MaxConstSpeed::Set(kPccClusterEndpoint, maxConstSpeed);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstSpeed %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstSpeed %x", to_underlying(status));
}
uint16_t minConstFlow = PumpMgr().GetMinConstFlow();
status = PumpConfigurationAndControl::Attributes::MinConstFlow::Set(kPccClusterEndpoint, minConstFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstFlow %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstFlow %x", to_underlying(status));
}
uint16_t maxConstFlow = PumpMgr().GetMaxConstFlow();
status = PumpConfigurationAndControl::Attributes::MaxConstFlow::Set(kPccClusterEndpoint, maxConstFlow);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstFlow %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstFlow %x", to_underlying(status));
}
int16_t minConstTemp = PumpMgr().GetMinConstTemp();
status = PumpConfigurationAndControl::Attributes::MinConstTemp::Set(kPccClusterEndpoint, minConstTemp);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MinConstTemp %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MinConstTemp %x", to_underlying(status));
}
int16_t maxConstTemp = PumpMgr().GetMaxConstTemp();
status = PumpConfigurationAndControl::Attributes::MaxConstTemp::Set(kPccClusterEndpoint, maxConstTemp);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating MaxConstTemp %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating MaxConstTemp %x", to_underlying(status));
}
}
diff --git a/examples/pump-app/silabs/src/AppTask.cpp b/examples/pump-app/silabs/src/AppTask.cpp
index 588cd02001b9e8..365c53fc7a33ac 100644
--- a/examples/pump-app/silabs/src/AppTask.cpp
+++ b/examples/pump-app/silabs/src/AppTask.cpp
@@ -247,6 +247,6 @@ void AppTask::UpdateClusterState(intptr_t context)
status = chip::app::Clusters::OnOff::Attributes::OnOff::Set(PCC_CLUSTER_ENDPOINT, onOffState);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(NotSpecified, "ERR: Updating On/Off state %x", status);
+ ChipLogError(NotSpecified, "ERR: Updating On/Off state %x", to_underlying(status));
}
}
diff --git a/examples/pump-app/telink/src/AppTask.cpp b/examples/pump-app/telink/src/AppTask.cpp
index f2832b2b3e6699..368702d51ae11f 100644
--- a/examples/pump-app/telink/src/AppTask.cpp
+++ b/examples/pump-app/telink/src/AppTask.cpp
@@ -134,7 +134,7 @@ void AppTask::UpdateClusterState()
Protocols::InteractionModel::Status status = Clusters::OnOff::Attributes::OnOff::Set(kOnOffClusterEndpoint, onOffState);
if (status != Protocols::InteractionModel::Status::Success)
{
- LOG_ERR("ERR: Updating On/Off state %x", status);
+ LOG_ERR("ERR: Updating On/Off state %x", to_underlying(status));
}
int16_t maxPressure = PumpMgr().GetMaxPressure();
diff --git a/examples/pump-controller-app/cc13x2x7_26x2x7/BUILD.gn b/examples/pump-controller-app/cc13x2x7_26x2x7/BUILD.gn
index fb118046b876c4..2d66a7f993158b 100644
--- a/examples/pump-controller-app/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/pump-controller-app/cc13x2x7_26x2x7/BUILD.gn
@@ -55,7 +55,7 @@ ti_sysconfig("sysconfig") {
]
}
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x2x7_26x2x7_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/pump-controller-app/cc13x4_26x4/BUILD.gn b/examples/pump-controller-app/cc13x4_26x4/BUILD.gn
index c1b106f0feb1c2..289b10de001294 100644
--- a/examples/pump-controller-app/cc13x4_26x4/BUILD.gn
+++ b/examples/pump-controller-app/cc13x4_26x4/BUILD.gn
@@ -63,7 +63,7 @@ ti_sysconfig("sysconfig") {
#"ti_build_config.opt",
]
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x4_26x4_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/rvc-app/rvc-common/include/rvc-operational-state-delegate.h b/examples/rvc-app/rvc-common/include/rvc-operational-state-delegate.h
index 3081a27ea3e625..6522793ac94dc9 100644
--- a/examples/rvc-app/rvc-common/include/rvc-operational-state-delegate.h
+++ b/examples/rvc-app/rvc-common/include/rvc-operational-state-delegate.h
@@ -20,7 +20,7 @@
#include
#include
-#include
+
#include
namespace chip {
diff --git a/examples/shell/cc13x2x7_26x2x7/BUILD.gn b/examples/shell/cc13x2x7_26x2x7/BUILD.gn
index 5264bd079c02b0..80e342313aaca6 100644
--- a/examples/shell/cc13x2x7_26x2x7/BUILD.gn
+++ b/examples/shell/cc13x2x7_26x2x7/BUILD.gn
@@ -59,7 +59,7 @@ ti_sysconfig("sysconfig") {
#"ti_build_config.opt",
]
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x2x7_26x2x7_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/shell/cc13x4_26x4/BUILD.gn b/examples/shell/cc13x4_26x4/BUILD.gn
index e6db696baa649c..2480f085783384 100644
--- a/examples/shell/cc13x4_26x4/BUILD.gn
+++ b/examples/shell/cc13x4_26x4/BUILD.gn
@@ -59,7 +59,7 @@ ti_sysconfig("sysconfig") {
#"ti_build_config.opt",
]
- public_configs = [ ":sdk_dmm_config" ]
+ public_configs = [ ":sdk_cc13x4_26x4_dmm_config" ]
cflags = [
"-Wno-comment",
diff --git a/examples/smoke-co-alarm-app/telink/prj.conf b/examples/smoke-co-alarm-app/telink/prj.conf
index 36f00385d93d53..3a6c279a6cb9dd 100755
--- a/examples/smoke-co-alarm-app/telink/prj.conf
+++ b/examples/smoke-co-alarm-app/telink/prj.conf
@@ -50,3 +50,5 @@ CONFIG_CHIP_CERTIFICATION_DECLARATION_STORAGE=n
# Enable Power Management
CONFIG_PM=y
+
+CONFIG_CHIP_ICD_LIT_SUPPORT=y
diff --git a/examples/thermostat/qpg/src/ZclCallbacks.cpp b/examples/thermostat/qpg/src/ZclCallbacks.cpp
index 0232634dd2effd..c66901656442cc 100644
--- a/examples/thermostat/qpg/src/ZclCallbacks.cpp
+++ b/examples/thermostat/qpg/src/ZclCallbacks.cpp
@@ -59,7 +59,7 @@ void emberAfThermostatClusterInitCallback(EndpointId endpoint)
const auto logOnFailure = [](Protocols::InteractionModel::Status status, const char * attributeName) {
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "Failed to set DoorLock %s: %x", attributeName, status);
+ ChipLogError(Zcl, "Failed to set DoorLock %s: %x", attributeName, to_underlying(status));
}
};
diff --git a/examples/tv-app/tv-common/tv-app.matter b/examples/tv-app/tv-common/tv-app.matter
index e4099412be31c5..6effacc92c0812 100644
--- a/examples/tv-app/tv-common/tv-app.matter
+++ b/examples/tv-app/tv-common/tv-app.matter
@@ -2024,7 +2024,7 @@ cluster UserLabel = 65 {
}
/** This cluster provides an interface for passing messages to be presented by a device. */
-cluster Messages = 151 {
+provisional cluster Messages = 151 {
revision 3;
enum FutureMessagePreferenceEnum : enum8 {
@@ -3053,7 +3053,7 @@ cluster AccountLogin = 1294 {
}
/** This cluster is used for managing the content control (including "parental control") settings on a media device such as a TV, or Set-top Box. */
-cluster ContentControl = 1295 {
+provisional cluster ContentControl = 1295 {
revision 1; // NOTE: Default/not specifically set
bitmap Feature : bitmap32 {
@@ -3136,7 +3136,7 @@ cluster ContentControl = 1295 {
}
/** This cluster provides an interface for sending targeted commands to an Observer of a Content App on a Video Player device such as a Streaming Media Player, Smart TV or Smart Screen. The cluster server for Content App Observer is implemented by an endpoint that communicates with a Content App, such as a Casting Video Client. The cluster client for Content App Observer is implemented by a Content App endpoint. A Content App is informed of the NodeId of an Observer when a binding is set on the Content App. The Content App can then send the ContentAppMessage to the Observer (server cluster), and the Observer responds with a ContentAppMessageResponse. */
-cluster ContentAppObserver = 1296 {
+provisional cluster ContentAppObserver = 1296 {
revision 1; // NOTE: Default/not specifically set
enum StatusEnum : enum8 {
diff --git a/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp b/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp
index e4bb7647085b40..98f6b197a59e33 100644
--- a/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp
+++ b/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp
@@ -278,7 +278,7 @@ void CastingServer::ReadServerClustersForNode(NodeId nodeId)
" groupId=%d local endpoint=%d remote endpoint=%d cluster=" ChipLogFormatMEI,
binding.type, binding.fabricIndex, ChipLogValueX64(binding.nodeId), binding.groupId, binding.local,
binding.remote, ChipLogValueMEI(binding.clusterId.ValueOr(0)));
- if (binding.type == EMBER_UNICAST_BINDING && nodeId == binding.nodeId)
+ if (binding.type == MATTER_UNICAST_BINDING && nodeId == binding.nodeId)
{
if (!mActiveTargetVideoPlayerInfo.HasEndpoint(binding.remote))
{
@@ -550,7 +550,7 @@ void CastingServer::DeviceEventCallback(const DeviceLayer::ChipDeviceEvent * eve
" groupId=%d local endpoint=%d remote endpoint=%d cluster=" ChipLogFormatMEI,
binding.type, binding.fabricIndex, ChipLogValueX64(binding.nodeId), binding.groupId, binding.local,
binding.remote, ChipLogValueMEI(binding.clusterId.ValueOr(0)));
- if (binding.type == EMBER_UNICAST_BINDING && event->BindingsChanged.fabricIndex == binding.fabricIndex)
+ if (binding.type == MATTER_UNICAST_BINDING && event->BindingsChanged.fabricIndex == binding.fabricIndex)
{
ChipLogProgress(
NotSpecified,
@@ -641,7 +641,7 @@ NodeId CastingServer::GetVideoPlayerNodeForFabricIndex(FabricIndex fabricIndex)
" groupId=%d local endpoint=%d remote endpoint=%d cluster=" ChipLogFormatMEI,
binding.type, binding.fabricIndex, ChipLogValueX64(binding.nodeId), binding.groupId, binding.local,
binding.remote, ChipLogValueMEI(binding.clusterId.ValueOr(0)));
- if (binding.type == EMBER_UNICAST_BINDING && fabricIndex == binding.fabricIndex)
+ if (binding.type == MATTER_UNICAST_BINDING && fabricIndex == binding.fabricIndex)
{
ChipLogProgress(NotSpecified, "GetVideoPlayerNodeForFabricIndex nodeId=0x" ChipLogFormatX64,
ChipLogValueX64(binding.nodeId));
@@ -667,7 +667,7 @@ FabricIndex CastingServer::GetVideoPlayerFabricIndexForNode(NodeId nodeId)
" groupId=%d local endpoint=%d remote endpoint=%d cluster=" ChipLogFormatMEI,
binding.type, binding.fabricIndex, ChipLogValueX64(binding.nodeId), binding.groupId, binding.local,
binding.remote, ChipLogValueMEI(binding.clusterId.ValueOr(0)));
- if (binding.type == EMBER_UNICAST_BINDING && nodeId == binding.nodeId)
+ if (binding.type == MATTER_UNICAST_BINDING && nodeId == binding.nodeId)
{
ChipLogProgress(NotSpecified, "GetVideoPlayerFabricIndexForNode fabricIndex=%d nodeId=0x" ChipLogFormatX64,
binding.fabricIndex, ChipLogValueX64(binding.nodeId));
diff --git a/examples/tv-casting-app/tv-casting-common/support/ChipDeviceEventHandler.cpp b/examples/tv-casting-app/tv-casting-common/support/ChipDeviceEventHandler.cpp
index bced79be4bc102..20558982ea78ca 100644
--- a/examples/tv-casting-app/tv-casting-common/support/ChipDeviceEventHandler.cpp
+++ b/examples/tv-casting-app/tv-casting-common/support/ChipDeviceEventHandler.cpp
@@ -156,7 +156,7 @@ void ChipDeviceEventHandler::HandleBindingsChangedViaCluster(const chip::DeviceL
" groupId=%d local endpoint=%d remote endpoint=%d cluster=" ChipLogFormatMEI,
binding.type, binding.fabricIndex, ChipLogValueX64(binding.nodeId), binding.groupId, binding.local,
binding.remote, ChipLogValueMEI(binding.clusterId.ValueOr(0)));
- if (binding.type == EMBER_UNICAST_BINDING && event->BindingsChanged.fabricIndex == binding.fabricIndex)
+ if (binding.type == MATTER_UNICAST_BINDING && event->BindingsChanged.fabricIndex == binding.fabricIndex)
{
ChipLogProgress(AppServer,
"ChipDeviceEventHandler::HandleBindingsChangedViaCluster Matched accessingFabricIndex with "
diff --git a/examples/tv-casting-app/tv-casting-common/support/EndpointListLoader.cpp b/examples/tv-casting-app/tv-casting-common/support/EndpointListLoader.cpp
index 478847d15a2eca..60d589c1fc640b 100644
--- a/examples/tv-casting-app/tv-casting-common/support/EndpointListLoader.cpp
+++ b/examples/tv-casting-app/tv-casting-common/support/EndpointListLoader.cpp
@@ -53,7 +53,7 @@ void EndpointListLoader::Initialize(chip::Messaging::ExchangeManager * exchangeM
for (const auto & binding : chip::BindingTable::GetInstance())
{
- if (binding.type == EMBER_UNICAST_BINDING && CastingPlayer::GetTargetCastingPlayer()->GetNodeId() == binding.nodeId)
+ if (binding.type == MATTER_UNICAST_BINDING && CastingPlayer::GetTargetCastingPlayer()->GetNodeId() == binding.nodeId)
{
// check to see if we discovered a new endpoint in the bindings
chip::EndpointId endpointId = binding.remote;
@@ -86,7 +86,7 @@ CHIP_ERROR EndpointListLoader::Load()
" groupId=%d local endpoint=%d remote endpoint=%d cluster=" ChipLogFormatMEI,
binding.type, binding.fabricIndex, ChipLogValueX64(binding.nodeId), binding.groupId, binding.local,
binding.remote, ChipLogValueMEI(binding.clusterId.ValueOr(0)));
- if (binding.type == EMBER_UNICAST_BINDING && CastingPlayer::GetTargetCastingPlayer()->GetNodeId() == binding.nodeId)
+ if (binding.type == MATTER_UNICAST_BINDING && CastingPlayer::GetTargetCastingPlayer()->GetNodeId() == binding.nodeId)
{
// if we discovered a new Endpoint from the bindings, read its EndpointAttributes
chip::EndpointId endpointId = binding.remote;
diff --git a/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter b/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter
index 7eee24e57ce285..4bece078774075 100644
--- a/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter
+++ b/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter
@@ -1502,7 +1502,7 @@ cluster FixedLabel = 64 {
}
/** This cluster provides an interface for passing messages to be presented by a device. */
-cluster Messages = 151 {
+provisional cluster Messages = 151 {
revision 3;
enum FutureMessagePreferenceEnum : enum8 {
@@ -2515,7 +2515,7 @@ cluster AccountLogin = 1294 {
}
/** This cluster is used for managing the content control (including "parental control") settings on a media device such as a TV, or Set-top Box. */
-cluster ContentControl = 1295 {
+provisional cluster ContentControl = 1295 {
revision 1; // NOTE: Default/not specifically set
bitmap Feature : bitmap32 {
@@ -2598,7 +2598,7 @@ cluster ContentControl = 1295 {
}
/** This cluster provides an interface for sending targeted commands to an Observer of a Content App on a Video Player device such as a Streaming Media Player, Smart TV or Smart Screen. The cluster server for Content App Observer is implemented by an endpoint that communicates with a Content App, such as a Casting Video Client. The cluster client for Content App Observer is implemented by a Content App endpoint. A Content App is informed of the NodeId of an Observer when a binding is set on the Content App. The Content App can then send the ContentAppMessage to the Observer (server cluster), and the Observer responds with a ContentAppMessageResponse. */
-cluster ContentAppObserver = 1296 {
+provisional cluster ContentAppObserver = 1296 {
revision 1; // NOTE: Default/not specifically set
enum StatusEnum : enum8 {
diff --git a/examples/virtual-device-app/android/java/DoorLockManager.cpp b/examples/virtual-device-app/android/java/DoorLockManager.cpp
index 96c66d6bc5bd34..b3e245ea75dac2 100644
--- a/examples/virtual-device-app/android/java/DoorLockManager.cpp
+++ b/examples/virtual-device-app/android/java/DoorLockManager.cpp
@@ -52,7 +52,8 @@ void emberAfDoorLockClusterInitCallback(EndpointId endpoint)
Protocols::InteractionModel::Status status = DoorLock::Attributes::FeatureMap::Set(endpoint, 0);
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogProgress(Zcl, "Device App::DoorLock::emberAfDoorLockClusterInitCallback()::Updating feature map %x", status);
+ ChipLogProgress(Zcl, "Device App::DoorLock::emberAfDoorLockClusterInitCallback()::Updating feature map %x",
+ to_underlying(status));
}
}
diff --git a/examples/window-app/nrfconnect/main/ZclCallbacks.cpp b/examples/window-app/nrfconnect/main/ZclCallbacks.cpp
index 428d488ceadc0c..12e95a7f566788 100644
--- a/examples/window-app/nrfconnect/main/ZclCallbacks.cpp
+++ b/examples/window-app/nrfconnect/main/ZclCallbacks.cpp
@@ -85,7 +85,7 @@ void emberAfWindowCoveringClusterInitCallback(chip::EndpointId endpoint)
const auto logOnFailure = [](Protocols::InteractionModel::Status status, const char * attributeName) {
if (status != Protocols::InteractionModel::Status::Success)
{
- ChipLogError(Zcl, "Failed to set WindowCovering %s: %x", attributeName, status);
+ ChipLogError(Zcl, "Failed to set WindowCovering %s: %x", attributeName, to_underlying(status));
}
};
diff --git a/examples/window-app/silabs/openthread.gni b/examples/window-app/silabs/openthread.gni
index cdd7f8c0f1f42e..d3d50ab878b211 100644
--- a/examples/window-app/silabs/openthread.gni
+++ b/examples/window-app/silabs/openthread.gni
@@ -36,6 +36,6 @@ sl_ot_idle_interval_ms = 1000 # 1s Idle Intervals
sl_ot_active_interval_ms = 500 # 500ms Active Intervals
# ICD Matter Configuration flags
-sl_idle_mode_interval_s = 600 # 10min Idle Mode Interval
-sl_active_mode_interval_ms = 0 # 0s Active Mode Interval
+sl_idle_mode_duration_s = 600 # 10min Idle Mode Duration
+sl_active_mode_duration_ms = 0 # 0s Active Mode Duration
sl_active_mode_threshold_ms = 0 # 1s Active Mode Threshold
diff --git a/iwyu.imp b/iwyu.imp
new file mode 100644
index 00000000000000..b7572ff9f5a394
--- /dev/null
+++ b/iwyu.imp
@@ -0,0 +1,22 @@
+# General IWYU command example:
+#
+# iwyu_tool.py \
+# -p out/linux-x64-all-clusters-clang/compile_commands.json \
+# src/lib/core/ \
+# -- \
+# -Xiwyu --mapping_file=$(pwd)/iwyu.imp \
+# -Xiwyu --no_comments \
+# -Xiwyu --comment_style=none \
+# -Xiwyu --cxx17ns \
+# -Xiwyu no_fwd_decls \
+# | tee out/iwyu.out
+#
+# cd out/linux-x64-all-clusters-clang
+#
+# fix_includes.py <../iwyu.out
+#
+[
+ { include: [ '"system/SystemBuildConfig.h"', private, '', public ] },
+ { include: [ '"core/CHIPBuildConfig.h"', private, '', public ] },
+ { include: [ '@"platform/.*/CHIPPlatformConfig.h"', private, '', public ] },
+]
diff --git a/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/clusters/accessory_server_bridge.py b/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/clusters/accessory_server_bridge.py
index d3e3403fef4954..a8991deb9b7870 100644
--- a/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/clusters/accessory_server_bridge.py
+++ b/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/clusters/accessory_server_bridge.py
@@ -17,6 +17,7 @@
import xmlrpc.client
_DEFAULT_KEY = 'default'
+_DEFAULT_WAIT_FOR_MESSAGE_TIMEOUT_SECONDS = 10
_IP = '127.0.0.1'
_PORT = 9000
@@ -113,9 +114,11 @@ def factoryReset(request):
def waitForMessage(request):
register_key = _get_option(request, 'registerKey', _DEFAULT_KEY)
message = _get_option(request, 'message')
+ timeout_in_seconds = _get_option(
+ request, 'timeoutInSeconds', _DEFAULT_WAIT_FOR_MESSAGE_TIMEOUT_SECONDS)
with xmlrpc.client.ServerProxy(_make_url(), allow_none=True) as proxy:
- proxy.waitForMessage(register_key, [message])
+ proxy.waitForMessage(register_key, [message], timeout_in_seconds)
def createOtaImage(request):
otaImageFilePath = _get_option(request, 'otaImageFilePath')
diff --git a/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/clusters/delay_commands.py b/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/clusters/delay_commands.py
index fdb949da9b1449..7586be6de2239a 100644
--- a/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/clusters/delay_commands.py
+++ b/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/clusters/delay_commands.py
@@ -40,6 +40,7 @@
+
diff --git a/scripts/tests/chiptest/__init__.py b/scripts/tests/chiptest/__init__.py
index 7c537c7a5a3939..bb0c38fe1c8919 100644
--- a/scripts/tests/chiptest/__init__.py
+++ b/scripts/tests/chiptest/__init__.py
@@ -160,6 +160,13 @@ def _GetInDevelopmentTests() -> Set[str]:
}
+def _GetChipToolUnsupportedTests() -> Set[str]:
+ """Tests that fail in chip-tool for some reason"""
+ return {
+ "TestDiagnosticLogsDownloadCommand", # chip-tool does not implement a bdx download command.
+ }
+
+
def _GetDarwinFrameworkToolUnsupportedTests() -> Set[str]:
"""Tests that fail in darwin-framework-tool for some reason"""
return {
@@ -258,6 +265,7 @@ def _GetChipReplUnsupportedTests() -> Set[str]:
"Test_TC_RVCCLEANM_3_3.yaml", # chip-repl does not support EqualityCommands pseudo-cluster
"Test_TC_BINFO_2_1.yaml", # chip-repl does not support EqualityCommands pseudo-cluster
"TestDiagnosticLogs.yaml", # chip-repl does not implement a BDXTransferServerDelegate
+ "TestDiagnosticLogsDownloadCommand.yaml", # chip-repl does not implement the bdx download command
}
@@ -342,7 +350,7 @@ def tests_with_command(chip_tool: str, is_manual: bool):
)
-def _AllFoundYamlTests(treat_repl_unsupported_as_in_development: bool, treat_dft_unsupported_as_in_development: bool, use_short_run_name: bool):
+def _AllFoundYamlTests(treat_repl_unsupported_as_in_development: bool, treat_dft_unsupported_as_in_development: bool, treat_chip_tool_unsupported_as_in_development: bool, use_short_run_name: bool):
"""
use_short_run_name should be true if we want the run_name to be "Test_ABC" instead of "some/path/Test_ABC.yaml"
"""
@@ -352,7 +360,8 @@ def _AllFoundYamlTests(treat_repl_unsupported_as_in_development: bool, treat_dft
extra_slow_tests = _GetExtraSlowTests()
in_development_tests = _GetInDevelopmentTests()
chip_repl_unsupported_tests = _GetChipReplUnsupportedTests()
- treat_dft_unsupported_as_in_development_tests = _GetDarwinFrameworkToolUnsupportedTests()
+ dft_unsupported_as_in_development_tests = _GetDarwinFrameworkToolUnsupportedTests()
+ chip_tool_unsupported_as_in_development_tests = _GetChipToolUnsupportedTests()
purposeful_failure_tests = _GetPurposefulFailureTests()
for path in _AllYamlTests():
@@ -386,7 +395,10 @@ def _AllFoundYamlTests(treat_repl_unsupported_as_in_development: bool, treat_dft
else:
run_name = str(path)
- if treat_dft_unsupported_as_in_development and run_name in treat_dft_unsupported_as_in_development_tests:
+ if treat_dft_unsupported_as_in_development and run_name in dft_unsupported_as_in_development_tests:
+ tags.add(TestTag.IN_DEVELOPMENT)
+
+ if treat_chip_tool_unsupported_as_in_development and run_name in chip_tool_unsupported_as_in_development_tests:
tags.add(TestTag.IN_DEVELOPMENT)
yield TestDefinition(
@@ -398,17 +410,17 @@ def _AllFoundYamlTests(treat_repl_unsupported_as_in_development: bool, treat_dft
def AllReplYamlTests():
- for test in _AllFoundYamlTests(treat_repl_unsupported_as_in_development=True, treat_dft_unsupported_as_in_development=False, use_short_run_name=False):
+ for test in _AllFoundYamlTests(treat_repl_unsupported_as_in_development=True, treat_dft_unsupported_as_in_development=False, treat_chip_tool_unsupported_as_in_development=False, use_short_run_name=False):
yield test
def AllChipToolYamlTests():
- for test in _AllFoundYamlTests(treat_repl_unsupported_as_in_development=False, treat_dft_unsupported_as_in_development=False, use_short_run_name=True):
+ for test in _AllFoundYamlTests(treat_repl_unsupported_as_in_development=False, treat_dft_unsupported_as_in_development=False, treat_chip_tool_unsupported_as_in_development=True, use_short_run_name=True):
yield test
def AllDarwinFrameworkToolYamlTests():
- for test in _AllFoundYamlTests(treat_repl_unsupported_as_in_development=False, treat_dft_unsupported_as_in_development=True, use_short_run_name=True):
+ for test in _AllFoundYamlTests(treat_repl_unsupported_as_in_development=False, treat_dft_unsupported_as_in_development=True, treat_chip_tool_unsupported_as_in_development=False, use_short_run_name=True):
yield test
diff --git a/scripts/tests/chiptest/accessories.py b/scripts/tests/chiptest/accessories.py
index 60e2136209ec19..99433d7ed88660 100644
--- a/scripts/tests/chiptest/accessories.py
+++ b/scripts/tests/chiptest/accessories.py
@@ -98,12 +98,12 @@ def factoryReset(self, name):
return accessory.factoryReset()
return False
- def waitForMessage(self, name, message):
+ def waitForMessage(self, name, message, timeoutInSeconds=10):
accessory = self.__accessories[name]
if accessory:
# The message param comes directly from the sys.argv[2:] of WaitForMessage.py and should contain a list of strings that
# comprise the entire message to wait for
- return accessory.waitForMessage(' '.join(message))
+ return accessory.waitForMessage(' '.join(message), timeoutInSeconds)
return False
def createOtaImage(self, otaImageFilePath, rawImageFilePath, rawImageContent, vid='0xDEAD', pid='0xBEEF'):
diff --git a/scripts/tests/chiptest/test_definition.py b/scripts/tests/chiptest/test_definition.py
index 138a1919736fae..12c59cfad0cc41 100644
--- a/scripts/tests/chiptest/test_definition.py
+++ b/scripts/tests/chiptest/test_definition.py
@@ -83,8 +83,8 @@ def factoryReset(self):
def waitForAnyAdvertisement(self):
self.__waitFor("mDNS service published:", self.process, self.outpipe)
- def waitForMessage(self, message):
- self.__waitFor(message, self.process, self.outpipe)
+ def waitForMessage(self, message, timeoutInSeconds=10):
+ self.__waitFor(message, self.process, self.outpipe, timeoutInSeconds)
return True
def kill(self):
@@ -124,7 +124,7 @@ def __startServer(self, runner, command):
self.kvsPathSet.add(value)
return runner.RunSubprocess(app_cmd, name='APP ', wait=False)
- def __waitFor(self, waitForString, server_process, outpipe):
+ def __waitFor(self, waitForString, server_process, outpipe, timeoutInSeconds=10):
logging.debug('Waiting for %s' % waitForString)
start_time = time.monotonic()
@@ -139,7 +139,7 @@ def __waitFor(self, waitForString, server_process, outpipe):
(waitForString, server_process.returncode))
logging.error(died_str)
raise Exception(died_str)
- if time.monotonic() - start_time > 10:
+ if time.monotonic() - start_time > timeoutInSeconds:
raise Exception('Timeout while waiting for %s' % waitForString)
time.sleep(0.1)
ready, self.lastLogIndex = outpipe.CapturedLogContains(
@@ -340,6 +340,13 @@ def Run(self, runner, apps_register, paths: ApplicationPaths, pics_file: str,
# so it will be commissionable again.
app.factoryReset()
+ # It may sometimes be useful to run the same app multiple times depending
+ # on the implementation. So this code creates a duplicate entry but with a different
+ # key.
+ app = App(runner, path)
+ apps_register.add(f'{key}#2', app)
+ app.factoryReset()
+
if dry_run:
tool_storage_dir = None
tool_storage_args = []
diff --git a/scripts/tools/nxp/factory_data_generator/custom.py b/scripts/tools/nxp/factory_data_generator/custom.py
index 13b1a34fc98c12..e2f7584e2d7fa2 100644
--- a/scripts/tools/nxp/factory_data_generator/custom.py
+++ b/scripts/tools/nxp/factory_data_generator/custom.py
@@ -96,11 +96,14 @@ def encode(self):
assert (self.private_key is not None)
return self.private_key
- def generate_private_key(self, password):
- keys = load_der_private_key(self.val, password, backend=default_backend())
- self.private_key = keys.private_numbers().private_value.to_bytes(
- 32, byteorder='big'
- )
+ def generate_private_key(self, password, use_sss_blob=False):
+ if use_sss_blob:
+ self.private_key = self.val
+ else:
+ keys = load_der_private_key(self.val, password, backend=default_backend())
+ self.private_key = keys.private_numbers().private_value.to_bytes(
+ 32, byteorder='big'
+ )
class DacCert(FileArgument):
diff --git a/scripts/tools/nxp/factory_data_generator/generate.py b/scripts/tools/nxp/factory_data_generator/generate.py
index a203ac9dee749e..1fb7d91edeedaf 100755
--- a/scripts/tools/nxp/factory_data_generator/generate.py
+++ b/scripts/tools/nxp/factory_data_generator/generate.py
@@ -78,7 +78,7 @@ def __init__(self, args):
self.spake2p = Spake2p()
if self.args.spake2p_verifier is None:
self.spake2p.generate(self.args)
- self.args.dac_key.generate_private_key(self.args.dac_key_password)
+ self.args.dac_key.generate_private_key(self.args.dac_key_password, self.args.dac_key_use_sss_blob)
def _validate_args(self):
if self.args.dac_key_password is None:
@@ -217,6 +217,8 @@ def main():
optional.add_argument("--dac_key_password", type=str,
help="[path] Password to decode DAC Key if available")
+ optional.add_argument("--dac_key_use_sss_blob", action='store_true',
+ help="[bool] If present, DAC private key area is populated by an encrypted blob")
optional.add_argument("--spake2p_verifier", type=Verifier,
help="[base64 str] Already generated spake2p verifier")
optional.add_argument("--aes128_key",
diff --git a/scripts/tools/nxp/factory_data_generator/k32w1/example_convert_dac_private_key.jlink b/scripts/tools/nxp/factory_data_generator/k32w1/example_convert_dac_private_key.jlink
new file mode 100644
index 00000000000000..d31c1370933ace
--- /dev/null
+++ b/scripts/tools/nxp/factory_data_generator/k32w1/example_convert_dac_private_key.jlink
@@ -0,0 +1,16 @@
+reset
+halt
+// Factory data size is one internal flash sector (8K).
+// Factory data address is retrieved from the map file.
+erase 0xec000 0xee000 noreset
+// Load factory data and conversion application, then
+// wait for 10 seconds and load the "real" application.
+loadfile factory_data.bin 0xec000
+loadfile chip-k32w1-light-example-before-conversion.srec
+reset
+go
+Sleep 10000
+loadfile chip-k32w1-light-example-after-conversion.srec
+reset
+go
+quit
\ No newline at end of file
diff --git a/src/app/ReadHandler.h b/src/app/ReadHandler.h
index d602273a8611a9..71070c357147df 100644
--- a/src/app/ReadHandler.h
+++ b/src/app/ReadHandler.h
@@ -275,7 +275,7 @@ class ReadHandler : public Messaging::ExchangeDelegate
/**
* Returns SUBSCRIPTION_MAX_INTERVAL_PUBLISHER_LIMIT
- * For an ICD publisher, this SHALL be set to the idle mode interval.
+ * For an ICD publisher, this SHALL be set to the idle mode duration.
* Otherwise, this SHALL be set to 60 minutes.
*/
uint16_t GetPublisherSelectedIntervalLimit();
diff --git a/src/app/app-platform/ContentApp.cpp b/src/app/app-platform/ContentApp.cpp
index 571561454162ac..3bc16e9555ced5 100644
--- a/src/app/app-platform/ContentApp.cpp
+++ b/src/app/app-platform/ContentApp.cpp
@@ -29,35 +29,37 @@
#include
#include
#include
+#include
#if CHIP_DEVICE_CONFIG_APP_PLATFORM_ENABLED
using namespace chip;
using namespace chip::AppPlatform;
+using chip::Protocols::InteractionModel::Status;
+
namespace chip {
namespace AppPlatform {
#define ZCL_DESCRIPTOR_CLUSTER_REVISION (1u)
#define ZCL_APPLICATION_BASIC_CLUSTER_REVISION (1u)
-EmberAfStatus ContentApp::HandleReadAttribute(ClusterId clusterId, AttributeId attributeId, uint8_t * buffer,
- uint16_t maxReadLength)
+Status ContentApp::HandleReadAttribute(ClusterId clusterId, AttributeId attributeId, uint8_t * buffer, uint16_t maxReadLength)
{
ChipLogProgress(DeviceLayer,
"Read Attribute for endpoint " ChipLogFormatMEI " cluster " ChipLogFormatMEI " attribute " ChipLogFormatMEI,
ChipLogValueMEI(mEndpointId), ChipLogValueMEI(clusterId), ChipLogValueMEI(attributeId));
- return EMBER_ZCL_STATUS_FAILURE;
+ return Status::Failure;
}
-EmberAfStatus ContentApp::HandleWriteAttribute(ClusterId clusterId, AttributeId attributeId, uint8_t * buffer)
+Status ContentApp::HandleWriteAttribute(ClusterId clusterId, AttributeId attributeId, uint8_t * buffer)
{
ChipLogProgress(DeviceLayer,
"Read Attribute for endpoint " ChipLogFormatMEI " cluster " ChipLogFormatMEI " attribute " ChipLogFormatMEI,
ChipLogValueMEI(mEndpointId), ChipLogValueMEI(clusterId), ChipLogValueMEI(attributeId));
- return EMBER_ZCL_STATUS_FAILURE;
+ return Status::Failure;
}
} // namespace AppPlatform
diff --git a/src/app/app-platform/ContentApp.h b/src/app/app-platform/ContentApp.h
index 6fed23cf7d64da..d3b7d1fb2b2187 100644
--- a/src/app/app-platform/ContentApp.h
+++ b/src/app/app-platform/ContentApp.h
@@ -33,6 +33,7 @@
#include
#include
#include
+#include
namespace chip {
namespace AppPlatform {
@@ -65,8 +66,9 @@ class DLL_EXPORT ContentApp
virtual MediaPlaybackDelegate * GetMediaPlaybackDelegate() = 0;
virtual TargetNavigatorDelegate * GetTargetNavigatorDelegate() = 0;
- EmberAfStatus HandleReadAttribute(ClusterId clusterId, AttributeId attributeId, uint8_t * buffer, uint16_t maxReadLength);
- EmberAfStatus HandleWriteAttribute(ClusterId clusterId, AttributeId attributeId, uint8_t * buffer);
+ Protocols::InteractionModel::Status HandleReadAttribute(ClusterId clusterId, AttributeId attributeId, uint8_t * buffer,
+ uint16_t maxReadLength);
+ Protocols::InteractionModel::Status HandleWriteAttribute(ClusterId clusterId, AttributeId attributeId, uint8_t * buffer);
protected:
EndpointId mEndpointId = 0;
diff --git a/src/app/app-platform/ContentAppPlatform.cpp b/src/app/app-platform/ContentAppPlatform.cpp
index bb4638c45d95ba..abcaa981843037 100644
--- a/src/app/app-platform/ContentAppPlatform.cpp
+++ b/src/app/app-platform/ContentAppPlatform.cpp
@@ -32,6 +32,7 @@
#include
#include
#include
+#include
#if CHIP_DEVICE_CONFIG_APP_PLATFORM_ENABLED
@@ -41,19 +42,20 @@ using namespace chip::app::Clusters;
using namespace chip::Access;
using ApplicationStatusEnum = app::Clusters::ApplicationBasic::ApplicationStatusEnum;
using GetSetupPINResponseType = app::Clusters::AccountLogin::Commands::GetSetupPINResponse::Type;
+using chip::Protocols::InteractionModel::Status;
// Device Version for dynamic endpoints:
#define DEVICE_VERSION_DEFAULT 1
-EmberAfStatus emberAfExternalAttributeReadCallback(EndpointId endpoint, ClusterId clusterId,
- const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer,
- uint16_t maxReadLength)
+Status emberAfExternalAttributeReadCallback(EndpointId endpoint, ClusterId clusterId,
+ const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer,
+ uint16_t maxReadLength)
{
uint16_t endpointIndex = emberAfGetDynamicIndexFromEndpoint(endpoint);
ChipLogDetail(DeviceLayer, "emberAfExternalAttributeReadCallback endpoint %d ", endpointIndex);
- EmberAfStatus ret = EMBER_ZCL_STATUS_FAILURE;
+ Status ret = Status::Failure;
ContentApp * app = ContentAppPlatform::GetInstance().GetContentApp(endpoint);
if (app != nullptr)
@@ -68,14 +70,14 @@ EmberAfStatus emberAfExternalAttributeReadCallback(EndpointId endpoint, ClusterI
return ret;
}
-EmberAfStatus emberAfExternalAttributeWriteCallback(EndpointId endpoint, ClusterId clusterId,
- const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer)
+Status emberAfExternalAttributeWriteCallback(EndpointId endpoint, ClusterId clusterId,
+ const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer)
{
uint16_t endpointIndex = emberAfGetDynamicIndexFromEndpoint(endpoint);
ChipLogDetail(DeviceLayer, "emberAfExternalAttributeWriteCallback endpoint %d ", endpointIndex);
- EmberAfStatus ret = EMBER_ZCL_STATUS_FAILURE;
+ Status ret = Status::Failure;
ContentApp * app = ContentAppPlatform::GetInstance().GetContentApp(endpoint);
if (app != nullptr)
@@ -93,18 +95,18 @@ EmberAfStatus emberAfExternalAttributeWriteCallback(EndpointId endpoint, Cluster
namespace chip {
namespace AppPlatform {
-EmberAfStatus __attribute__((weak)) AppPlatformExternalAttributeReadCallback(EndpointId endpoint, ClusterId clusterId,
- const EmberAfAttributeMetadata * attributeMetadata,
- uint8_t * buffer, uint16_t maxReadLength)
+Status __attribute__((weak)) AppPlatformExternalAttributeReadCallback(EndpointId endpoint, ClusterId clusterId,
+ const EmberAfAttributeMetadata * attributeMetadata,
+ uint8_t * buffer, uint16_t maxReadLength)
{
- return (EMBER_ZCL_STATUS_FAILURE);
+ return (Status::Failure);
}
-EmberAfStatus __attribute__((weak))
+Status __attribute__((weak))
AppPlatformExternalAttributeWriteCallback(EndpointId endpoint, ClusterId clusterId,
const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer)
{
- return (EMBER_ZCL_STATUS_FAILURE);
+ return (Status::Failure);
}
EndpointId ContentAppPlatform::AddContentApp(ContentApp * app, EmberAfEndpointType * ep,
diff --git a/src/app/app-platform/ContentAppPlatform.h b/src/app/app-platform/ContentAppPlatform.h
index 3dd0b138d2e9d1..16a47c26a3b991 100644
--- a/src/app/app-platform/ContentAppPlatform.h
+++ b/src/app/app-platform/ContentAppPlatform.h
@@ -27,6 +27,7 @@
#include
#include
#include
+#include
#include
using chip::app::Clusters::ApplicationBasic::CatalogVendorApp;
@@ -40,14 +41,15 @@ namespace AppPlatform {
// The AppPlatform overrides emberAfExternalAttributeReadCallback to handle external attribute reads for ContentApps.
// This callback can be used to handle external attribute reads for attributes belonging to static endpoints.
-EmberAfStatus AppPlatformExternalAttributeReadCallback(EndpointId endpoint, ClusterId clusterId,
- const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer,
- uint16_t maxReadLength);
+Protocols::InteractionModel::Status AppPlatformExternalAttributeReadCallback(EndpointId endpoint, ClusterId clusterId,
+ const EmberAfAttributeMetadata * attributeMetadata,
+ uint8_t * buffer, uint16_t maxReadLength);
// The AppPlatform overrides emberAfExternalAttributeWriteCallback to handle external attribute writes for ContentApps.
// This callback can be used to handle external attribute writes for attributes belonging to static endpoints.
-EmberAfStatus AppPlatformExternalAttributeWriteCallback(EndpointId endpoint, ClusterId clusterId,
- const EmberAfAttributeMetadata * attributeMetadata, uint8_t * buffer);
+Protocols::InteractionModel::Status AppPlatformExternalAttributeWriteCallback(EndpointId endpoint, ClusterId clusterId,
+ const EmberAfAttributeMetadata * attributeMetadata,
+ uint8_t * buffer);
inline constexpr EndpointId kTargetBindingClusterEndpointId = 0;
inline constexpr EndpointId kLocalVideoPlayerEndpointId = 1;
@@ -157,7 +159,7 @@ class DLL_EXPORT ContentAppPlatform
// loads given app and calls HandleGetSetupPasscode. Sets passcode to 0 if it cannot be obtained.
// return true if a matching app was found (and it granted this client access), even if a passcode was not obtained
bool HasTargetContentApp(uint16_t vendorId, uint16_t productId, CharSpan rotatingId,
- chip::Protocols::UserDirectedCommissioning::TargetAppInfo & info, uint32_t & passcode);
+ Protocols::UserDirectedCommissioning::TargetAppInfo & info, uint32_t & passcode);
/**
* @brief
diff --git a/src/app/clusters/account-login-server/account-login-server.cpp b/src/app/clusters/account-login-server/account-login-server.cpp
index aa939ae810bb10..684558eec0f0bc 100644
--- a/src/app/clusters/account-login-server/account-login-server.cpp
+++ b/src/app/clusters/account-login-server/account-login-server.cpp
@@ -34,6 +34,7 @@
#include
#include
#include
+#include
#if CHIP_DEVICE_CONFIG_APP_PLATFORM_ENABLED
#include
diff --git a/src/app/clusters/application-launcher-server/application-launcher-server.cpp b/src/app/clusters/application-launcher-server/application-launcher-server.cpp
index aa72d8ad499620..18a30bb1190659 100644
--- a/src/app/clusters/application-launcher-server/application-launcher-server.cpp
+++ b/src/app/clusters/application-launcher-server/application-launcher-server.cpp
@@ -116,8 +116,8 @@ bool HasFeature(chip::EndpointId endpoint, Feature feature)
bool hasFeature = false;
uint32_t featureMap = 0;
- EmberAfStatus status = Attributes::FeatureMap::Get(endpoint, &featureMap);
- if (EMBER_ZCL_STATUS_SUCCESS == status)
+ Status status = Attributes::FeatureMap::Get(endpoint, &featureMap);
+ if (Status::Success == status)
{
hasFeature = (featureMap & chip::to_underlying(feature));
}
diff --git a/src/app/clusters/audio-output-server/audio-output-server.cpp b/src/app/clusters/audio-output-server/audio-output-server.cpp
index f47fc528456a78..297d1ea9d8d8b3 100644
--- a/src/app/clusters/audio-output-server/audio-output-server.cpp
+++ b/src/app/clusters/audio-output-server/audio-output-server.cpp
@@ -92,8 +92,8 @@ bool HasFeature(chip::EndpointId endpoint, Feature feature)
bool hasFeature = false;
uint32_t featureMap = 0;
- EmberAfStatus status = Attributes::FeatureMap::Get(endpoint, &featureMap);
- if (EMBER_ZCL_STATUS_SUCCESS == status)
+ Status status = Attributes::FeatureMap::Get(endpoint, &featureMap);
+ if (Status::Success == status)
{
hasFeature = (featureMap & chip::to_underlying(feature));
}
diff --git a/src/app/clusters/barrier-control-server/barrier-control-server.cpp b/src/app/clusters/barrier-control-server/barrier-control-server.cpp
index e4e72eeb2ae930..99bd0621ba793d 100644
--- a/src/app/clusters/barrier-control-server/barrier-control-server.cpp
+++ b/src/app/clusters/barrier-control-server/barrier-control-server.cpp
@@ -102,29 +102,29 @@ static void cancelEndpointTimerCallback(EndpointId endpoint)
uint8_t emAfPluginBarrierControlServerGetBarrierPosition(EndpointId endpoint)
{
uint8_t position;
- EmberAfStatus status = Attributes::BarrierPosition::Get(endpoint, &position);
- assert(status == EMBER_ZCL_STATUS_SUCCESS);
+ Status status = Attributes::BarrierPosition::Get(endpoint, &position);
+ assert(status == Status::Success);
return position;
}
void emAfPluginBarrierControlServerSetBarrierPosition(EndpointId endpoint, uint8_t position)
{
- EmberAfStatus status = Attributes::BarrierPosition::Set(endpoint, position);
- assert(status == EMBER_ZCL_STATUS_SUCCESS);
+ Status status = Attributes::BarrierPosition::Set(endpoint, position);
+ assert(status == Status::Success);
}
bool emAfPluginBarrierControlServerIsPartialBarrierSupported(EndpointId endpoint)
{
uint8_t bitmap;
- EmberAfStatus status = Attributes::BarrierCapabilities::Get(endpoint, &bitmap);
- assert(status == EMBER_ZCL_STATUS_SUCCESS);
+ Status status = Attributes::BarrierCapabilities::Get(endpoint, &bitmap);
+ assert(status == Status::Success);
return (bitmap & to_underlying(BarrierControlCapabilities::kPartialBarrier)) != 0;
}
static uint16_t getOpenOrClosePeriod(EndpointId endpoint, bool open)
{
- uint16_t period = 0;
- EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS;
+ uint16_t period = 0;
+ Status status = Status::Success;
#if defined(ZCL_USING_BARRIER_CONTROL_CLUSTER_BARRIER_OPEN_PERIOD_ATTRIBUTE)
if (open)
{
@@ -137,21 +137,21 @@ static uint16_t getOpenOrClosePeriod(EndpointId endpoint, bool open)
status = Attributes::BarrierClosePeriod::Get(endpoint, &period);
}
#endif
- assert(status == EMBER_ZCL_STATUS_SUCCESS);
+ assert(status == Status::Success);
return period;
}
static void setMovingState(EndpointId endpoint, uint8_t newState)
{
- EmberAfStatus status = Attributes::BarrierMovingState::Set(endpoint, newState);
- assert(status == EMBER_ZCL_STATUS_SUCCESS);
+ Status status = Attributes::BarrierMovingState::Set(endpoint, newState);
+ assert(status == Status::Success);
}
uint16_t emAfPluginBarrierControlServerGetSafetyStatus(EndpointId endpoint)
{
uint16_t safetyStatus;
- EmberAfStatus status = Attributes::BarrierSafetyStatus::Get(endpoint, &safetyStatus);
- assert(status == EMBER_ZCL_STATUS_SUCCESS);
+ Status status = Attributes::BarrierSafetyStatus::Get(endpoint, &safetyStatus);
+ assert(status == Status::Success);
return safetyStatus;
}
@@ -163,8 +163,8 @@ static bool isRemoteLockoutOn(EndpointId endpoint)
void emAfPluginBarrierControlServerIncrementEvents(EndpointId endpoint, bool open, bool command)
{
- EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS;
- uint16_t events = 0;
+ Status status = Status::Success;
+ uint16_t events = 0;
#if defined(ZCL_USING_BARRIER_CONTROL_CLUSTER_BARRIER_OPEN_EVENTS_ATTRIBUTE)
if (open && !command)
@@ -190,7 +190,7 @@ void emAfPluginBarrierControlServerIncrementEvents(EndpointId endpoint, bool ope
status = Attributes::BarrierCommandCloseEvents::Get(endpoint, &events);
}
#endif
- assert(status == EMBER_ZCL_STATUS_SUCCESS);
+ assert(status == Status::Success);
// Section 7.1.2.1.5-8 says that this events counter SHALL NOT roll over.
// The maximum 16-bit unsigned integer in Zigbee is 0xFFFE, so we have this
@@ -225,7 +225,7 @@ void emAfPluginBarrierControlServerIncrementEvents(EndpointId endpoint, bool ope
status = Attributes::BarrierCommandCloseEvents::Set(endpoint, events);
}
#endif
- assert(status == EMBER_ZCL_STATUS_SUCCESS);
+ assert(status == Status::Success);
}
// -----------------------------------------------------------------------------
diff --git a/src/app/clusters/basic-information/basic-information.cpp b/src/app/clusters/basic-information/basic-information.cpp
index f241bb2cf5a008..641dc59a853dd6 100644
--- a/src/app/clusters/basic-information/basic-information.cpp
+++ b/src/app/clusters/basic-information/basic-information.cpp
@@ -30,6 +30,7 @@
#include
#include
#include
+#include
#include
#include
@@ -41,6 +42,7 @@ using namespace chip::app::Clusters;
using namespace chip::app::Clusters::BasicInformation;
using namespace chip::app::Clusters::BasicInformation::Attributes;
using namespace chip::DeviceLayer;
+using chip::Protocols::InteractionModel::Status;
namespace {
@@ -463,9 +465,9 @@ namespace Clusters {
namespace BasicInformation {
bool IsLocalConfigDisabled()
{
- bool disabled = false;
- EmberAfStatus status = LocalConfigDisabled::Get(0, &disabled);
- return status == EMBER_ZCL_STATUS_SUCCESS && disabled;
+ bool disabled = false;
+ Status status = LocalConfigDisabled::Get(0, &disabled);
+ return status == Status::Success && disabled;
}
} // namespace BasicInformation
} // namespace Clusters
diff --git a/src/app/clusters/bindings/BindingManager.cpp b/src/app/clusters/bindings/BindingManager.cpp
index 7243fdcfb3b744..b765146ed55153 100644
--- a/src/app/clusters/bindings/BindingManager.cpp
+++ b/src/app/clusters/bindings/BindingManager.cpp
@@ -88,7 +88,7 @@ CHIP_ERROR BindingManager::Init(const BindingManagerInitParams & params)
{
for (const EmberBindingTableEntry & entry : BindingTable::GetInstance())
{
- if (entry.type == EMBER_UNICAST_BINDING)
+ if (entry.type == MATTER_UNICAST_BINDING)
{
// The CASE connection can also fail if the unicast peer is offline.
// There is recovery mechanism to retry connection on-demand so ignore error.
@@ -187,14 +187,14 @@ CHIP_ERROR BindingManager::NotifyBoundClusterChanged(EndpointId endpoint, Cluste
{
if (iter->local == endpoint && (!iter->clusterId.HasValue() || iter->clusterId.Value() == cluster))
{
- if (iter->type == EMBER_UNICAST_BINDING)
+ if (iter->type == MATTER_UNICAST_BINDING)
{
error = mPendingNotificationMap.AddPendingNotification(iter.GetIndex(), bindingContext);
SuccessOrExit(error);
error = EstablishConnection(ScopedNodeId(iter->nodeId, iter->fabricIndex));
SuccessOrExit(error);
}
- else if (iter->type == EMBER_MULTICAST_BINDING)
+ else if (iter->type == MATTER_MULTICAST_BINDING)
{
mBoundDeviceChangedHandler(*iter, nullptr, bindingContext->GetContext());
}
diff --git a/src/app/clusters/bindings/PendingNotificationMap.cpp b/src/app/clusters/bindings/PendingNotificationMap.cpp
index 3499bddc090046..a7299b2d1f4663 100644
--- a/src/app/clusters/bindings/PendingNotificationMap.cpp
+++ b/src/app/clusters/bindings/PendingNotificationMap.cpp
@@ -30,17 +30,17 @@ CHIP_ERROR PendingNotificationMap::FindLRUConnectPeer(ScopedNodeId & nodeId)
// to the start of the list than the last entry of any other peer.
// First, set up a way to easily track which entries correspond to the same peer.
- uint8_t bindingWithSamePeer[EMBER_BINDING_TABLE_SIZE];
+ uint8_t bindingWithSamePeer[MATTER_BINDING_TABLE_SIZE];
for (auto iter = BindingTable::GetInstance().begin(); iter != BindingTable::GetInstance().end(); ++iter)
{
- if (iter->type != EMBER_UNICAST_BINDING)
+ if (iter->type != MATTER_UNICAST_BINDING)
{
continue;
}
for (auto checkIter = BindingTable::GetInstance().begin(); checkIter != BindingTable::GetInstance().end(); ++checkIter)
{
- if (checkIter->type == EMBER_UNICAST_BINDING && checkIter->fabricIndex == iter->fabricIndex &&
+ if (checkIter->type == MATTER_UNICAST_BINDING && checkIter->fabricIndex == iter->fabricIndex &&
checkIter->nodeId == iter->nodeId)
{
bindingWithSamePeer[iter.GetIndex()] = checkIter.GetIndex();
@@ -49,7 +49,7 @@ CHIP_ERROR PendingNotificationMap::FindLRUConnectPeer(ScopedNodeId & nodeId)
}
}
- uint16_t lastAppear[EMBER_BINDING_TABLE_SIZE];
+ uint16_t lastAppear[MATTER_BINDING_TABLE_SIZE];
for (uint16_t & value : lastAppear)
{
value = UINT16_MAX;
@@ -62,7 +62,7 @@ CHIP_ERROR PendingNotificationMap::FindLRUConnectPeer(ScopedNodeId & nodeId)
}
uint8_t lruBindingEntryIndex;
uint16_t minLastAppearValue = UINT16_MAX;
- for (uint8_t i = 0; i < EMBER_BINDING_TABLE_SIZE; i++)
+ for (uint8_t i = 0; i < MATTER_BINDING_TABLE_SIZE; i++)
{
if (lastAppear[i] < minLastAppearValue)
{
@@ -82,7 +82,7 @@ CHIP_ERROR PendingNotificationMap::FindLRUConnectPeer(ScopedNodeId & nodeId)
CHIP_ERROR PendingNotificationMap::AddPendingNotification(uint8_t bindingEntryId, PendingNotificationContext * context)
{
RemoveEntry(bindingEntryId);
- if (mNumEntries == EMBER_BINDING_TABLE_SIZE)
+ if (mNumEntries == MATTER_BINDING_TABLE_SIZE)
{
// We know that the RemoveEntry above did not do anything so we don't need to try restoring it.
return CHIP_ERROR_NO_MEMORY;
diff --git a/src/app/clusters/bindings/PendingNotificationMap.h b/src/app/clusters/bindings/PendingNotificationMap.h
index d0697b0dac32ff..c06a0a426d434c 100644
--- a/src/app/clusters/bindings/PendingNotificationMap.h
+++ b/src/app/clusters/bindings/PendingNotificationMap.h
@@ -68,7 +68,7 @@ struct PendingNotificationEntry
class PendingNotificationMap
{
public:
- static constexpr uint8_t kMaxPendingNotifications = EMBER_BINDING_TABLE_SIZE;
+ static constexpr uint8_t kMaxPendingNotifications = MATTER_BINDING_TABLE_SIZE;
friend class Iterator;
diff --git a/src/app/clusters/bindings/bindings.cpp b/src/app/clusters/bindings/bindings.cpp
index 22c4fba0be6920..7e0f3ce306da32 100644
--- a/src/app/clusters/bindings/bindings.cpp
+++ b/src/app/clusters/bindings/bindings.cpp
@@ -114,7 +114,7 @@ CHIP_ERROR CheckValidBindingList(const EndpointId localEndpoint, const Decodable
oldListSize++;
}
}
- ReturnErrorCodeIf(BindingTable::GetInstance().Size() - oldListSize + listSize > EMBER_BINDING_TABLE_SIZE,
+ ReturnErrorCodeIf(BindingTable::GetInstance().Size() - oldListSize + listSize > MATTER_BINDING_TABLE_SIZE,
CHIP_IM_GLOBAL_STATUS(ResourceExhausted));
return CHIP_NO_ERROR;
}
@@ -153,7 +153,7 @@ CHIP_ERROR BindingTableAccess::ReadBindingTable(EndpointId endpoint, AttributeVa
return encoder.EncodeList([&](const auto & subEncoder) {
for (const EmberBindingTableEntry & entry : BindingTable::GetInstance())
{
- if (entry.local == endpoint && entry.type == EMBER_UNICAST_BINDING)
+ if (entry.local == endpoint && entry.type == MATTER_UNICAST_BINDING)
{
Binding::Structs::TargetStruct::Type value = {
.node = MakeOptional(entry.nodeId),
@@ -164,7 +164,7 @@ CHIP_ERROR BindingTableAccess::ReadBindingTable(EndpointId endpoint, AttributeVa
};
ReturnErrorOnFailure(subEncoder.Encode(value));
}
- else if (entry.local == endpoint && entry.type == EMBER_MULTICAST_BINDING)
+ else if (entry.local == endpoint && entry.type == MATTER_MULTICAST_BINDING)
{
Binding::Structs::TargetStruct::Type value = {
.node = NullOptional,
@@ -214,7 +214,7 @@ CHIP_ERROR BindingTableAccess::WriteBindingTable(const ConcreteDataAttributePath
{
if (bindingTableIter->local == path.mEndpointId && bindingTableIter->fabricIndex == mAccessingFabricIndex)
{
- if (bindingTableIter->type == EMBER_UNICAST_BINDING)
+ if (bindingTableIter->type == MATTER_UNICAST_BINDING)
{
BindingManager::GetInstance().UnicastBindingRemoved(bindingTableIter.GetIndex());
}
@@ -284,7 +284,7 @@ CHIP_ERROR AddBindingEntry(const EmberBindingTableEntry & entry)
return err;
}
- if (entry.type == EMBER_UNICAST_BINDING)
+ if (entry.type == MATTER_UNICAST_BINDING)
{
err = BindingManager::GetInstance().UnicastBindingCreated(entry.fabricIndex, entry.nodeId);
if (err != CHIP_NO_ERROR)
diff --git a/src/app/clusters/boolean-state-configuration-server/boolean-state-configuration-server.cpp b/src/app/clusters/boolean-state-configuration-server/boolean-state-configuration-server.cpp
index 8fa2f36d3a3aab..b302f468aa38e4 100644
--- a/src/app/clusters/boolean-state-configuration-server/boolean-state-configuration-server.cpp
+++ b/src/app/clusters/boolean-state-configuration-server/boolean-state-configuration-server.cpp
@@ -102,7 +102,7 @@ CHIP_ERROR BooleanStateConfigAttrAccess::ReadCurrentSensitivityLevel(const Concr
if (err == CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND)
{
uint8_t supportedSensLevel;
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == SupportedSensitivityLevels::Get(aPath.mEndpointId, &supportedSensLevel),
+ VerifyOrReturnError(Status::Success == SupportedSensitivityLevels::Get(aPath.mEndpointId, &supportedSensLevel),
CHIP_IM_GLOBAL_STATUS(Failure));
VerifyOrReturnError(supportedSensLevel >= kMinSupportedSensitivityLevels, CHIP_IM_GLOBAL_STATUS(Failure));
VerifyOrReturnError(supportedSensLevel <= kMaxSupportedSensitivityLevels, CHIP_IM_GLOBAL_STATUS(Failure));
@@ -168,13 +168,13 @@ static bool emitAlarmsStateChangedEvent(EndpointId ep)
BooleanStateConfiguration::Events::AlarmsStateChanged::Type event;
BitMask active;
- VerifyOrReturnValue(EMBER_ZCL_STATUS_SUCCESS == AlarmsActive::Get(ep, &active), false);
+ VerifyOrReturnValue(Status::Success == AlarmsActive::Get(ep, &active), false);
event.alarmsActive = active;
if (HasFeature(ep, BooleanStateConfiguration::Feature::kAlarmSuppress))
{
BitMask suppressed;
- VerifyOrReturnValue(EMBER_ZCL_STATUS_SUCCESS == AlarmsSuppressed::Get(ep, &suppressed), false);
+ VerifyOrReturnValue(Status::Success == AlarmsSuppressed::Get(ep, &suppressed), false);
event.alarmsSuppressed.SetValue(suppressed);
}
@@ -214,7 +214,7 @@ static CHIP_ERROR emitSensorFaultEvent(EndpointId ep, BitMask= kMinSupportedSensitivityLevels, CHIP_IM_GLOBAL_STATUS(ConstraintError));
VerifyOrReturnError(supportedSensLevel <= kMaxSupportedSensitivityLevels, CHIP_IM_GLOBAL_STATUS(ConstraintError));
@@ -254,11 +254,10 @@ CHIP_ERROR SetAlarmsActive(EndpointId ep, BitMask alarmsEnabled;
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsEnabled::Get(ep, &alarmsEnabled),
- CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
+ VerifyOrReturnError(Status::Success == AlarmsEnabled::Get(ep, &alarmsEnabled), CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
VerifyOrReturnError(alarmsEnabled.HasAll(alarms), CHIP_IM_GLOBAL_STATUS(Failure));
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsActive::Set(ep, alarms), CHIP_IM_GLOBAL_STATUS(Failure));
+ VerifyOrReturnError(Status::Success == AlarmsActive::Set(ep, alarms), CHIP_IM_GLOBAL_STATUS(Failure));
emitAlarmsStateChangedEvent(ep);
return CHIP_NO_ERROR;
@@ -271,12 +270,11 @@ CHIP_ERROR SetAllEnabledAlarmsActive(EndpointId ep)
CHIP_IM_GLOBAL_STATUS(Failure));
BitMask alarmsEnabled;
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsEnabled::Get(ep, &alarmsEnabled),
- CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
+ VerifyOrReturnError(Status::Success == AlarmsEnabled::Get(ep, &alarmsEnabled), CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
if (alarmsEnabled.HasAny())
{
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsActive::Set(ep, alarmsEnabled), CHIP_IM_GLOBAL_STATUS(Failure));
+ VerifyOrReturnError(Status::Success == AlarmsActive::Set(ep, alarmsEnabled), CHIP_IM_GLOBAL_STATUS(Failure));
emitAlarmsStateChangedEvent(ep);
}
@@ -288,23 +286,21 @@ CHIP_ERROR ClearAllAlarms(EndpointId ep)
BitMask alarmsActive, alarmsSuppressed;
bool emitEvent = false;
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsActive::Get(ep, &alarmsActive),
- CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsSuppressed::Get(ep, &alarmsSuppressed),
+ VerifyOrReturnError(Status::Success == AlarmsActive::Get(ep, &alarmsActive), CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
+ VerifyOrReturnError(Status::Success == AlarmsSuppressed::Get(ep, &alarmsSuppressed),
CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
if (alarmsActive.HasAny())
{
alarmsActive.ClearAll();
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsActive::Set(ep, alarmsActive),
- CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
+ VerifyOrReturnError(Status::Success == AlarmsActive::Set(ep, alarmsActive), CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
emitEvent = true;
}
if (alarmsSuppressed.HasAny())
{
alarmsSuppressed.ClearAll();
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsSuppressed::Set(ep, alarmsSuppressed),
+ VerifyOrReturnError(Status::Success == AlarmsSuppressed::Set(ep, alarmsSuppressed),
CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
emitEvent = true;
}
@@ -329,10 +325,10 @@ CHIP_ERROR SuppressAlarms(EndpointId ep, BitMask alarmsActive, alarmsSuppressed, alarmsSupported;
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsSupported::Get(ep, &alarmsSupported), attribute_error);
+ VerifyOrReturnError(Status::Success == AlarmsSupported::Get(ep, &alarmsSupported), attribute_error);
VerifyOrReturnError(alarmsSupported.HasAll(alarm), CHIP_IM_GLOBAL_STATUS(ConstraintError));
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsActive::Get(ep, &alarmsActive), attribute_error);
+ VerifyOrReturnError(Status::Success == AlarmsActive::Get(ep, &alarmsActive), attribute_error);
VerifyOrReturnError(alarmsActive.HasAll(alarm), CHIP_IM_GLOBAL_STATUS(InvalidInState));
Delegate * delegate = GetDelegate(ep);
@@ -341,9 +337,9 @@ CHIP_ERROR SuppressAlarms(EndpointId ep, BitMaskHandleSuppressAlarm(alarm);
}
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsSuppressed::Get(ep, &alarmsSuppressed), attribute_error);
+ VerifyOrReturnError(Status::Success == AlarmsSuppressed::Get(ep, &alarmsSuppressed), attribute_error);
alarmsSuppressed.Set(alarm);
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == AlarmsSuppressed::Set(ep, alarmsSuppressed), attribute_error);
+ VerifyOrReturnError(Status::Success == AlarmsSuppressed::Set(ep, alarmsSuppressed), attribute_error);
emitAlarmsStateChangedEvent(ep);
@@ -409,29 +405,29 @@ bool emberAfBooleanStateConfigurationClusterEnableDisableAlarmCallback(
uint8_t rawAlarm = static_cast(~alarms.Raw() & 0x03); // 0x03 is the current max bitmap
alarmsToDisable = BitMask(rawAlarm);
- VerifyOrExit(EMBER_ZCL_STATUS_SUCCESS == AlarmsSupported::Get(ep, &alarmsSupported), status.Emplace(Status::Failure));
+ VerifyOrExit(Status::Success == AlarmsSupported::Get(ep, &alarmsSupported), status.Emplace(Status::Failure));
VerifyOrExit(alarmsSupported.HasAll(alarms), status.Emplace(Status::ConstraintError));
- VerifyOrExit(EMBER_ZCL_STATUS_SUCCESS == AlarmsEnabled::Set(ep, alarms), status.Emplace(Status::Failure));
+ VerifyOrExit(Status::Success == AlarmsEnabled::Set(ep, alarms), status.Emplace(Status::Failure));
if (!isDelegateNull(delegate))
{
delegate->HandleEnableDisableAlarms(alarms);
}
- VerifyOrExit(EMBER_ZCL_STATUS_SUCCESS == AlarmsActive::Get(ep, &alarmsActive), status.Emplace(Status::Failure));
+ VerifyOrExit(Status::Success == AlarmsActive::Get(ep, &alarmsActive), status.Emplace(Status::Failure));
if (alarmsActive.HasAny(alarmsToDisable))
{
alarmsActive.Clear(alarmsToDisable);
- VerifyOrExit(EMBER_ZCL_STATUS_SUCCESS == AlarmsActive::Set(ep, alarmsActive), status.Emplace(Status::Failure));
+ VerifyOrExit(Status::Success == AlarmsActive::Set(ep, alarmsActive), status.Emplace(Status::Failure));
emit = true;
}
- VerifyOrExit(EMBER_ZCL_STATUS_SUCCESS == AlarmsSuppressed::Get(ep, &alarmsSuppressed), status.Emplace(Status::Failure));
+ VerifyOrExit(Status::Success == AlarmsSuppressed::Get(ep, &alarmsSuppressed), status.Emplace(Status::Failure));
if (alarmsSuppressed.HasAny(alarmsToDisable))
{
alarmsSuppressed.Clear(alarmsToDisable);
- VerifyOrExit(EMBER_ZCL_STATUS_SUCCESS == AlarmsSuppressed::Set(ep, alarmsSuppressed), status.Emplace(Status::Failure));
+ VerifyOrExit(Status::Success == AlarmsSuppressed::Set(ep, alarmsSuppressed), status.Emplace(Status::Failure));
emit = true;
}
diff --git a/src/app/clusters/boolean-state-configuration-server/boolean-state-configuration-server.h b/src/app/clusters/boolean-state-configuration-server/boolean-state-configuration-server.h
index 21813208c77249..547096053d04ea 100644
--- a/src/app/clusters/boolean-state-configuration-server/boolean-state-configuration-server.h
+++ b/src/app/clusters/boolean-state-configuration-server/boolean-state-configuration-server.h
@@ -27,6 +27,7 @@
#include
#include
#include
+#include
namespace chip {
namespace app {
@@ -46,7 +47,7 @@ CHIP_ERROR EmitSensorFault(EndpointId ep, chip::BitMask
#include
#include
-#include
+
#include
#include
#include
@@ -33,13 +33,15 @@ using namespace chip::app;
using namespace chip::app::Clusters;
using namespace chip::app::Clusters::BridgedDeviceBasicInformation;
+using chip::Protocols::InteractionModel::Status;
+
namespace {
void ReachableChanged(EndpointId endpointId)
{
MATTER_TRACE_INSTANT("ReachableChanged", "BridgeBasicInfo");
bool reachable = false;
- if (EMBER_ZCL_STATUS_SUCCESS != Attributes::Reachable::Get(endpointId, &reachable))
+ if (Status::Success != Attributes::Reachable::Get(endpointId, &reachable))
{
ChipLogError(Zcl, "ReachabledChanged: Failed to get Reachable value");
}
diff --git a/src/app/clusters/color-control-server/color-control-server.cpp b/src/app/clusters/color-control-server/color-control-server.cpp
index 941f9d5a5f5842..3e883cf5165e3a 100644
--- a/src/app/clusters/color-control-server/color-control-server.cpp
+++ b/src/app/clusters/color-control-server/color-control-server.cpp
@@ -109,14 +109,14 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
if (ColorControlServer::Instance().HasFeature(endpoint, ColorControlServer::Feature::kXy))
{
uint16_t xValue;
- if (EMBER_ZCL_STATUS_SUCCESS != Attributes::CurrentX::Get(endpoint, &xValue))
+ if (Status::Success != Attributes::CurrentX::Get(endpoint, &xValue))
{
xValue = 0x616B; // Default X value according to spec
}
AddAttributeValuePair(pairs, Attributes::CurrentX::Id, xValue, attributeCount);
uint16_t yValue;
- if (EMBER_ZCL_STATUS_SUCCESS != Attributes::CurrentY::Get(endpoint, &yValue))
+ if (Status::Success != Attributes::CurrentY::Get(endpoint, &yValue))
{
yValue = 0x607D; // Default Y value according to spec
}
@@ -133,7 +133,7 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
if (ColorControlServer::Instance().HasFeature(endpoint, ColorControlServer::Feature::kHueAndSaturation))
{
uint8_t saturationValue;
- if (EMBER_ZCL_STATUS_SUCCESS != Attributes::CurrentSaturation::Get(endpoint, &saturationValue))
+ if (Status::Success != Attributes::CurrentSaturation::Get(endpoint, &saturationValue))
{
saturationValue = 0x00;
}
@@ -143,21 +143,21 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
if (ColorControlServer::Instance().HasFeature(endpoint, ColorControlServer::Feature::kColorLoop))
{
uint8_t loopActiveValue;
- if (EMBER_ZCL_STATUS_SUCCESS != Attributes::ColorLoopActive::Get(endpoint, &loopActiveValue))
+ if (Status::Success != Attributes::ColorLoopActive::Get(endpoint, &loopActiveValue))
{
loopActiveValue = 0x00;
}
AddAttributeValuePair(pairs, Attributes::ColorLoopActive::Id, loopActiveValue, attributeCount);
uint8_t loopDirectionValue;
- if (EMBER_ZCL_STATUS_SUCCESS != Attributes::ColorLoopDirection::Get(endpoint, &loopDirectionValue))
+ if (Status::Success != Attributes::ColorLoopDirection::Get(endpoint, &loopDirectionValue))
{
loopDirectionValue = 0x00;
}
AddAttributeValuePair(pairs, Attributes::ColorLoopDirection::Id, loopDirectionValue, attributeCount);
uint16_t loopTimeValue;
- if (EMBER_ZCL_STATUS_SUCCESS != Attributes::ColorLoopTime::Get(endpoint, &loopTimeValue))
+ if (Status::Success != Attributes::ColorLoopTime::Get(endpoint, &loopTimeValue))
{
loopTimeValue = 0x0019; // Default loop time value according to spec
}
@@ -167,7 +167,7 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
if (ColorControlServer::Instance().HasFeature(endpoint, ColorControlServer::Feature::kColorTemperature))
{
uint16_t temperatureValue;
- if (EMBER_ZCL_STATUS_SUCCESS != Attributes::ColorTemperatureMireds::Get(endpoint, &temperatureValue))
+ if (Status::Success != Attributes::ColorTemperatureMireds::Get(endpoint, &temperatureValue))
{
temperatureValue = 0x00FA; // Default temperature value according to spec
}
@@ -175,7 +175,7 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
}
uint8_t modeValue;
- if (EMBER_ZCL_STATUS_SUCCESS != Attributes::EnhancedColorMode::Get(endpoint, &modeValue))
+ if (Status::Success != Attributes::EnhancedColorMode::Get(endpoint, &modeValue))
{
modeValue = ColorControl::EnhancedColorMode::kCurrentXAndCurrentY; // Default mode value according to spec
}
@@ -446,7 +446,7 @@ bool ColorControlServer::HasFeature(chip::EndpointId endpoint, Feature feature)
{
bool success;
uint32_t featureMap;
- success = (Attributes::FeatureMap::Get(endpoint, &featureMap) == EMBER_ZCL_STATUS_SUCCESS);
+ success = (Attributes::FeatureMap::Get(endpoint, &featureMap) == Status::Success);
return success ? ((featureMap & to_underlying(feature)) != 0) : false;
}
@@ -2509,11 +2509,11 @@ Status ColorControlServer::moveToColorTemp(EndpointId aEndpoint, uint16_t colorT
uint16_t ColorControlServer::getTemperatureCoupleToLevelMin(EndpointId endpoint)
{
uint16_t colorTemperatureCoupleToLevelMin;
- EmberAfStatus status;
+ Status status;
status = Attributes::CoupleColorTempToLevelMinMireds::Get(endpoint, &colorTemperatureCoupleToLevelMin);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
// Not less than the physical min.
Attributes::ColorTempPhysicalMinMireds::Get(endpoint, &colorTemperatureCoupleToLevelMin);
@@ -2552,14 +2552,14 @@ void ColorControlServer::startUpColorTempCommand(EndpointId endpoint)
// Initialize startUpColorTempMireds to "maintain previous value" value null
app::DataModel::Nullable startUpColorTemp;
- EmberAfStatus status = Attributes::StartUpColorTemperatureMireds::Get(endpoint, startUpColorTemp);
+ Status status = Attributes::StartUpColorTemperatureMireds::Get(endpoint, startUpColorTemp);
- if (status == EMBER_ZCL_STATUS_SUCCESS && !startUpColorTemp.IsNull())
+ if (status == Status::Success && !startUpColorTemp.IsNull())
{
uint16_t updatedColorTemp = MAX_TEMPERATURE_VALUE;
status = Attributes::ColorTemperatureMireds::Get(endpoint, &updatedColorTemp);
- if (status == EMBER_ZCL_STATUS_SUCCESS)
+ if (status == Status::Success)
{
uint16_t tempPhysicalMin = MIN_TEMPERATURE_VALUE;
Attributes::ColorTempPhysicalMinMireds::Get(endpoint, &tempPhysicalMin);
@@ -2576,7 +2576,7 @@ void ColorControlServer::startUpColorTempCommand(EndpointId endpoint)
updatedColorTemp = startUpColorTemp.Value();
status = Attributes::ColorTemperatureMireds::Set(endpoint, updatedColorTemp);
- if (status == EMBER_ZCL_STATUS_SUCCESS)
+ if (status == Status::Success)
{
// Set ColorMode attributes to reflect ColorTemperature.
uint8_t updateColorMode = ColorControl::EnhancedColorMode::kColorTemperature;
@@ -2607,7 +2607,7 @@ void ColorControlServer::updateTempCommand(EndpointId endpoint)
// Check whether our color temperature has actually changed. If not, do
// nothing, and wait for it to change.
uint16_t currentColorTemp;
- if (Attributes::ColorTemperatureMireds::Get(endpoint, ¤tColorTemp) != EMBER_ZCL_STATUS_SUCCESS)
+ if (Attributes::ColorTemperatureMireds::Get(endpoint, ¤tColorTemp) != Status::Success)
{
// Why can't we read our attribute?
return;
@@ -2906,9 +2906,9 @@ void ColorControlServer::levelControlColorTempChangeCommand(EndpointId endpoint)
if (colorMode == ColorControl::EnhancedColorMode::kColorTemperature)
{
app::DataModel::Nullable currentLevel;
- EmberAfStatus status = LevelControl::Attributes::CurrentLevel::Get(endpoint, currentLevel);
+ Status status = LevelControl::Attributes::CurrentLevel::Get(endpoint, currentLevel);
- if (status != EMBER_ZCL_STATUS_SUCCESS || currentLevel.IsNull())
+ if (status != Status::Success || currentLevel.IsNull())
{
currentLevel.SetNonNull((uint8_t) 0x7F);
}
diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.h b/src/app/clusters/device-energy-management-server/device-energy-management-server.h
index 3620379d4ed8e2..7aeb06da661cd1 100644
--- a/src/app/clusters/device-energy-management-server/device-energy-management-server.h
+++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.h
@@ -27,6 +27,7 @@
#include
#include
#include
+#include
namespace chip {
namespace app {
@@ -35,8 +36,6 @@ namespace DeviceEnergyManagement {
using namespace chip::app::Clusters::DeviceEnergyManagement::Attributes;
-using chip::Protocols::InteractionModel::Status;
-
class Delegate
{
public:
@@ -52,7 +51,8 @@ class Delegate
* @param duration The duration that the ESA SHALL maintain the requested power for.
* @return Success if the adjustment is accepted; otherwise the command SHALL be rejected with appropriate error.
*/
- virtual Status PowerAdjustRequest(const int64_t power, const uint32_t duration, AdjustmentCauseEnum cause) = 0;
+ virtual Protocols::InteractionModel::Status PowerAdjustRequest(const int64_t power, const uint32_t duration,
+ AdjustmentCauseEnum cause) = 0;
/**
* @brief Delegate SHALL make the ESA end the active power adjustment session & return to normal (or idle) power levels.
@@ -60,7 +60,7 @@ class Delegate
*
* @return It should report SUCCESS if successful and FAILURE otherwise.
*/
- virtual Status CancelPowerAdjustRequest() = 0;
+ virtual Protocols::InteractionModel::Status CancelPowerAdjustRequest() = 0;
/**
* @brief Delegate for the ESA SHALL update its Forecast attribute with the RequestedStartTime including a new ForecastId.
@@ -76,7 +76,8 @@ class Delegate
* @return Success if the StartTime in the Forecast is updated, otherwise the command SHALL be rejected with appropriate
* IM_Status.
*/
- virtual Status StartTimeAdjustRequest(const uint32_t requestedStartTime, AdjustmentCauseEnum cause) = 0;
+ virtual Protocols::InteractionModel::Status StartTimeAdjustRequest(const uint32_t requestedStartTime,
+ AdjustmentCauseEnum cause) = 0;
/**
* @brief Delegate handler for PauseRequest command
@@ -91,7 +92,7 @@ class Delegate
* @param duration Duration that the ESA SHALL be paused for.
* @return Success if the ESA is paused, otherwise returns other IM_Status.
*/
- virtual Status PauseRequest(const uint32_t duration, AdjustmentCauseEnum cause) = 0;
+ virtual Protocols::InteractionModel::Status PauseRequest(const uint32_t duration, AdjustmentCauseEnum cause) = 0;
/**
* @brief Delegate handler for ResumeRequest command
@@ -102,7 +103,7 @@ class Delegate
*
* @return Success if the ESA is resumed, otherwise returns other IM_Status.
*/
- virtual Status ResumeRequest() = 0;
+ virtual Protocols::InteractionModel::Status ResumeRequest() = 0;
/**
* @brief Delegate handler for ModifyForecastRequest
@@ -118,9 +119,10 @@ class Delegate
* @return Success if the entire list of SlotAdjustmentStruct are accepted, otherwise the command
* SHALL be rejected returning other IM_Status.
*/
- virtual Status ModifyForecastRequest(const uint32_t forecastId,
- const DataModel::DecodableList & slotAdjustments,
- AdjustmentCauseEnum cause) = 0;
+ virtual Protocols::InteractionModel::Status
+ ModifyForecastRequest(const uint32_t forecastId,
+ const DataModel::DecodableList & slotAdjustments,
+ AdjustmentCauseEnum cause) = 0;
/**
* @brief Delegate handler for RequestConstraintBasedForecast
@@ -133,8 +135,9 @@ class Delegate
* @param constraints Sequence of turn up/down power requests that the ESA is being asked to constrain its operation within.
* @return Success if successful, otherwise the command SHALL be rejected returning other IM_Status.
*/
- virtual Status RequestConstraintBasedForecast(const DataModel::DecodableList & constraints,
- AdjustmentCauseEnum cause) = 0;
+ virtual Protocols::InteractionModel::Status
+ RequestConstraintBasedForecast(const DataModel::DecodableList & constraints,
+ AdjustmentCauseEnum cause) = 0;
/**
* @brief Delegate handler for CancelRequest
@@ -153,7 +156,7 @@ class Delegate
*
* @return Success if successful, otherwise the command SHALL be rejected returning other IM_Status.
*/
- virtual Status CancelRequest() = 0;
+ virtual Protocols::InteractionModel::Status CancelRequest() = 0;
// ------------------------------------------------------------------
// Get attribute methods
@@ -210,7 +213,7 @@ class Instance : public AttributeAccessInterface, public CommandHandlerInterface
void InvokeCommand(HandlerContext & handlerContext) override;
CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) override;
- Status CheckOptOutAllowsRequest(AdjustmentCauseEnum adjustmentCause);
+ Protocols::InteractionModel::Status CheckOptOutAllowsRequest(AdjustmentCauseEnum adjustmentCause);
void HandlePowerAdjustRequest(HandlerContext & ctx, const Commands::PowerAdjustRequest::DecodableType & commandData);
void HandleCancelPowerAdjustRequest(HandlerContext & ctx,
const Commands::CancelPowerAdjustRequest::DecodableType & commandData);
diff --git a/src/app/clusters/dishwasher-alarm-server/dishwasher-alarm-server.cpp b/src/app/clusters/dishwasher-alarm-server/dishwasher-alarm-server.cpp
index 73a626e73e4f34..40321f8c53297c 100644
--- a/src/app/clusters/dishwasher-alarm-server/dishwasher-alarm-server.cpp
+++ b/src/app/clusters/dishwasher-alarm-server/dishwasher-alarm-server.cpp
@@ -76,67 +76,67 @@ DishwasherAlarmServer & DishwasherAlarmServer::Instance()
return instance;
}
-EmberAfStatus DishwasherAlarmServer::GetMaskValue(EndpointId endpoint, BitMask * mask)
+Status DishwasherAlarmServer::GetMaskValue(EndpointId endpoint, BitMask * mask)
{
- EmberAfStatus status = Attributes::Mask::Get(endpoint, mask);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Attributes::Mask::Get(endpoint, mask);
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: reading mask, err:0x%x", status);
+ ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: reading mask, err:0x%x", to_underlying(status));
return status;
}
return status;
}
-EmberAfStatus DishwasherAlarmServer::GetLatchValue(EndpointId endpoint, BitMask * latch)
+Status DishwasherAlarmServer::GetLatchValue(EndpointId endpoint, BitMask * latch)
{
if (!HasResetFeature(endpoint))
{
ChipLogProgress(Zcl, "Dishwasher Alarm feature: Unsupport Latch attribute");
- return EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE;
+ return Status::UnsupportedAttribute;
}
- EmberAfStatus status = Attributes::Latch::Get(endpoint, latch);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Attributes::Latch::Get(endpoint, latch);
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: reading latch, err:0x%x", status);
+ ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: reading latch, err:0x%x", to_underlying(status));
return status;
}
return status;
}
-EmberAfStatus DishwasherAlarmServer::GetStateValue(EndpointId endpoint, BitMask * state)
+Status DishwasherAlarmServer::GetStateValue(EndpointId endpoint, BitMask * state)
{
- EmberAfStatus status = Attributes::State::Get(endpoint, state);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Attributes::State::Get(endpoint, state);
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: get state, err:0x%x", status);
+ ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: get state, err:0x%x", to_underlying(status));
return status;
}
return status;
}
-EmberAfStatus DishwasherAlarmServer::GetSupportedValue(EndpointId endpoint, BitMask * supported)
+Status DishwasherAlarmServer::GetSupportedValue(EndpointId endpoint, BitMask * supported)
{
- EmberAfStatus status = Attributes::Supported::Get(endpoint, supported);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Attributes::Supported::Get(endpoint, supported);
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: reading supported, err:0x%x", status);
+ ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: reading supported, err:0x%x", to_underlying(status));
}
return status;
}
-EmberAfStatus DishwasherAlarmServer::SetSupportedValue(EndpointId endpoint, const BitMask supported)
+Status DishwasherAlarmServer::SetSupportedValue(EndpointId endpoint, const BitMask supported)
{
- EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS;
+ Status status = Status::Success;
;
- if ((status = Attributes::Supported::Set(endpoint, supported)) != EMBER_ZCL_STATUS_SUCCESS)
+ if ((status = Attributes::Supported::Set(endpoint, supported)) != Status::Success)
{
- ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: writing supported, err:0x%x", status);
+ ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: writing supported, err:0x%x", to_underlying(status));
return status;
}
// Whenever there is change in Supported attribute, Latch should change accordingly (if possible).
BitMask latch;
- if (GetLatchValue(endpoint, &latch) == EMBER_ZCL_STATUS_SUCCESS && !supported.HasAll(latch))
+ if (GetLatchValue(endpoint, &latch) == Status::Success && !supported.HasAll(latch))
{
latch = latch & supported;
status = SetLatchValue(endpoint, latch);
@@ -144,7 +144,7 @@ EmberAfStatus DishwasherAlarmServer::SetSupportedValue(EndpointId endpoint, cons
// Whenever there is change in Supported attribute, Mask, State should change accordingly.
BitMask mask;
- if ((status = GetMaskValue(endpoint, &mask)) != EMBER_ZCL_STATUS_SUCCESS)
+ if ((status = GetMaskValue(endpoint, &mask)) != Status::Success)
{
return status;
}
@@ -157,26 +157,26 @@ EmberAfStatus DishwasherAlarmServer::SetSupportedValue(EndpointId endpoint, cons
return status;
}
-EmberAfStatus DishwasherAlarmServer::SetMaskValue(EndpointId endpoint, const BitMask mask)
+Status DishwasherAlarmServer::SetMaskValue(EndpointId endpoint, const BitMask mask)
{
BitMask supported;
- if (GetSupportedValue(endpoint, &supported) || !supported.HasAll(mask))
+ if (Status::Success != GetSupportedValue(endpoint, &supported) || !supported.HasAll(mask))
{
ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: Mask is not supported");
- return EMBER_ZCL_STATUS_FAILURE;
+ return Status::Failure;
}
- EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS;
- if ((status = Attributes::Mask::Set(endpoint, mask)) != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Status::Success;
+ if ((status = Attributes::Mask::Set(endpoint, mask)) != Status::Success)
{
- ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: writing mask, err:0x%x", status);
+ ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: writing mask, err:0x%x", to_underlying(status));
return status;
}
// Whenever there is change in Mask, State should change accordingly.
BitMask state;
status = GetStateValue(endpoint, &state);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
return status;
}
@@ -189,61 +189,61 @@ EmberAfStatus DishwasherAlarmServer::SetMaskValue(EndpointId endpoint, const Bit
return status;
}
-EmberAfStatus DishwasherAlarmServer::SetLatchValue(EndpointId endpoint, const BitMask latch)
+Status DishwasherAlarmServer::SetLatchValue(EndpointId endpoint, const BitMask latch)
{
if (!HasResetFeature(endpoint))
{
ChipLogProgress(Zcl, "Dishwasher Alarm feature: Unsupport Latch attribute");
- return EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE;
+ return Status::UnsupportedAttribute;
}
BitMask supported;
- if (GetSupportedValue(endpoint, &supported) || !supported.HasAll(latch))
+ if (Status::Success != GetSupportedValue(endpoint, &supported) || !supported.HasAll(latch))
{
ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: Latch is not supported");
- return EMBER_ZCL_STATUS_FAILURE;
+ return Status::Failure;
}
- EmberAfStatus status = Attributes::Latch::Set(endpoint, latch);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Attributes::Latch::Set(endpoint, latch);
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: writing latch, err:0x%x", status);
+ ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: writing latch, err:0x%x", to_underlying(status));
return status;
}
return status;
}
-EmberAfStatus DishwasherAlarmServer::SetStateValue(EndpointId endpoint, const BitMask newState, bool ignoreLatchState)
+Status DishwasherAlarmServer::SetStateValue(EndpointId endpoint, const BitMask newState, bool ignoreLatchState)
{
BitMask supported;
BitMask finalNewState;
finalNewState.Set(newState);
- if (GetSupportedValue(endpoint, &supported) || !supported.HasAll(finalNewState))
+ if (Status::Success != GetSupportedValue(endpoint, &supported) || !supported.HasAll(finalNewState))
{
ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: Alarm is not supported");
- return EMBER_ZCL_STATUS_FAILURE;
+ return Status::Failure;
}
BitMask mask;
- if (GetMaskValue(endpoint, &mask) || !mask.HasAll(finalNewState))
+ if (Status::Success != GetMaskValue(endpoint, &mask) || !mask.HasAll(finalNewState))
{
ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: Alarm is suppressed");
- return EMBER_ZCL_STATUS_FAILURE;
+ return Status::Failure;
}
- EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS;
+ Status status = Status::Success;
BitMask currentState;
status = Attributes::State::Get(endpoint, ¤tState);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: reading state, err:0x%x", status);
+ ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: reading state, err:0x%x", to_underlying(status));
return status;
}
BitMask latch;
- if (!ignoreLatchState && (GetLatchValue(endpoint, &latch) == EMBER_ZCL_STATUS_SUCCESS))
+ if (!ignoreLatchState && (GetLatchValue(endpoint, &latch) == Status::Success))
{
// Restore bits that have their Latch bit set.
auto bitsToKeep = latch & currentState;
@@ -252,9 +252,9 @@ EmberAfStatus DishwasherAlarmServer::SetStateValue(EndpointId endpoint, const Bi
// Store the new value of the State attribute.
status = Attributes::State::Set(endpoint, finalNewState);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: writing state, err:0x%x", status);
+ ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: writing state, err:0x%x", to_underlying(status));
return status;
}
@@ -268,19 +268,19 @@ EmberAfStatus DishwasherAlarmServer::SetStateValue(EndpointId endpoint, const Bi
return status;
}
-EmberAfStatus DishwasherAlarmServer::ResetLatchedAlarms(EndpointId endpoint, const BitMask alarms)
+Status DishwasherAlarmServer::ResetLatchedAlarms(EndpointId endpoint, const BitMask alarms)
{
BitMask supported;
- if (GetSupportedValue(endpoint, &supported) || !supported.HasAll(alarms))
+ if (Status::Success != GetSupportedValue(endpoint, &supported) || !supported.HasAll(alarms))
{
ChipLogProgress(Zcl, "Dishwasher Alarm: ERR: Alarm is not supported");
- return EMBER_ZCL_STATUS_FAILURE;
+ return Status::Failure;
}
BitMask state;
- if (GetStateValue(endpoint, &state) != EMBER_ZCL_STATUS_SUCCESS)
+ if (GetStateValue(endpoint, &state) != Status::Success)
{
- return EMBER_ZCL_STATUS_FAILURE;
+ return Status::Failure;
}
state.Clear(alarms);
@@ -290,7 +290,7 @@ EmberAfStatus DishwasherAlarmServer::ResetLatchedAlarms(EndpointId endpoint, con
bool DishwasherAlarmServer::HasResetFeature(EndpointId endpoint)
{
uint32_t featureMap = 0;
- if (Attributes::FeatureMap::Get(endpoint, &featureMap) != EMBER_ZCL_STATUS_SUCCESS)
+ if (Attributes::FeatureMap::Get(endpoint, &featureMap) != Status::Success)
{
return false;
}
@@ -319,7 +319,7 @@ static Status ModifyEnabledHandler(const app::ConcreteCommandPath & commandPath,
EndpointId endpoint = commandPath.mEndpointId;
BitMask supported;
- if (DishwasherAlarmServer::Instance().GetSupportedValue(endpoint, &supported) != EMBER_ZCL_STATUS_SUCCESS)
+ if (DishwasherAlarmServer::Instance().GetSupportedValue(endpoint, &supported) != Status::Success)
{
return Status::Failure;
}
@@ -340,7 +340,7 @@ static Status ModifyEnabledHandler(const app::ConcreteCommandPath & commandPath,
return Status::Failure;
}
// The cluster will do this update if delegate.ModifyEnabledAlarmsCallback() returns true.
- if (DishwasherAlarmServer::Instance().SetMaskValue(endpoint, mask) != EMBER_ZCL_STATUS_SUCCESS)
+ if (DishwasherAlarmServer::Instance().SetMaskValue(endpoint, mask) != Status::Success)
{
return Status::Failure;
}
@@ -354,7 +354,7 @@ static Status ResetHandler(const app::ConcreteCommandPath & commandPath, const B
if (!DishwasherAlarmServer::Instance().HasResetFeature(endpoint))
{
ChipLogProgress(Zcl, "Dishwasher Alarm feature: Unsupport Reset Command");
- return EMBER_ZCL_STATUS_UNSUPPORTED_COMMAND;
+ return Status::UnsupportedCommand;
}
// A server that is unable to reset alarms SHALL respond with a status code of FAILURE
@@ -366,7 +366,7 @@ static Status ResetHandler(const app::ConcreteCommandPath & commandPath, const B
}
// The cluster will do this update if delegate.ResetAlarmsCallback() returns true.
- if (DishwasherAlarmServer::Instance().ResetLatchedAlarms(endpoint, alarms) != EMBER_ZCL_STATUS_SUCCESS)
+ if (DishwasherAlarmServer::Instance().ResetLatchedAlarms(endpoint, alarms) != Status::Success)
{
ChipLogProgress(Zcl, "reset alarms fail");
return Status::Failure;
diff --git a/src/app/clusters/dishwasher-alarm-server/dishwasher-alarm-server.h b/src/app/clusters/dishwasher-alarm-server/dishwasher-alarm-server.h
index d03662f29333fd..5aff983ca6e84f 100644
--- a/src/app/clusters/dishwasher-alarm-server/dishwasher-alarm-server.h
+++ b/src/app/clusters/dishwasher-alarm-server/dishwasher-alarm-server.h
@@ -24,6 +24,7 @@
#include
#include
#include
+#include
namespace chip {
namespace app {
@@ -35,16 +36,16 @@ class DishwasherAlarmServer
public:
static DishwasherAlarmServer & Instance();
- EmberAfStatus GetMaskValue(EndpointId endpoint, BitMask * mask);
- EmberAfStatus GetStateValue(EndpointId endpoint, BitMask * state);
- EmberAfStatus GetLatchValue(EndpointId endpoint, BitMask * latch);
- EmberAfStatus GetSupportedValue(EndpointId endpoint, BitMask * suppported);
+ Protocols::InteractionModel::Status GetMaskValue(EndpointId endpoint, BitMask * mask);
+ Protocols::InteractionModel::Status GetStateValue(EndpointId endpoint, BitMask * state);
+ Protocols::InteractionModel::Status GetLatchValue(EndpointId endpoint, BitMask * latch);
+ Protocols::InteractionModel::Status GetSupportedValue(EndpointId endpoint, BitMask * suppported);
// Whenever there is change on Mask we should change State accordingly.
- EmberAfStatus SetMaskValue(EndpointId endpoint, const BitMask mask);
- EmberAfStatus SetLatchValue(EndpointId endpoint, const BitMask latch);
+ Protocols::InteractionModel::Status SetMaskValue(EndpointId endpoint, const BitMask mask);
+ Protocols::InteractionModel::Status SetLatchValue(EndpointId endpoint, const BitMask latch);
// A change in supported value will result in a corresponding change in mask and state.
- EmberAfStatus SetSupportedValue(EndpointId endpoint, const BitMask supported);
+ Protocols::InteractionModel::Status SetSupportedValue(EndpointId endpoint, const BitMask supported);
/**
* @brief Set the value of the State attribute
@@ -60,7 +61,8 @@ class DishwasherAlarmServer
* honoring the Mask and Supported attributes.
* The default value for the ignoreLatchState parameter is false.
*/
- EmberAfStatus SetStateValue(EndpointId endpoint, const BitMask newState, bool ignoreLatchState = false);
+ Protocols::InteractionModel::Status SetStateValue(EndpointId endpoint, const BitMask newState,
+ bool ignoreLatchState = false);
/**
* @brief Reset the value of latched alarms in the State attribute.
@@ -69,7 +71,7 @@ class DishwasherAlarmServer
* @param[in] alarms Each bit set to a 1 in this parameter corresponds to a bit in the
* State attribute will SHALL be reset to false.
*/
- EmberAfStatus ResetLatchedAlarms(EndpointId endpoint, const BitMask alarms);
+ Protocols::InteractionModel::Status ResetLatchedAlarms(EndpointId endpoint, const BitMask alarms);
// check whether the Alarm featureMap has enabled Reset feature.
bool HasResetFeature(EndpointId endpoint);
diff --git a/src/app/clusters/door-lock-server/door-lock-server.cpp b/src/app/clusters/door-lock-server/door-lock-server.cpp
index 8f1037ac3fba17..c049e34ba0cec2 100644
--- a/src/app/clusters/door-lock-server/door-lock-server.cpp
+++ b/src/app/clusters/door-lock-server/door-lock-server.cpp
@@ -41,6 +41,7 @@ using namespace chip::app;
using namespace chip::app::DataModel;
using namespace chip::app::Clusters::DoorLock;
using namespace chip::app::Clusters::DoorLock::Attributes;
+using chip::Protocols::InteractionModel::ClusterStatusCode;
using chip::Protocols::InteractionModel::Status;
static constexpr uint8_t DOOR_LOCK_SCHEDULE_MAX_HOUR = 23;
@@ -120,9 +121,9 @@ void DoorLockServer::InitServer(chip::EndpointId endpointId)
ChipLogProgress(Zcl, "Door Lock cluster initialized at endpoint #%u", endpointId);
auto status = Attributes::LockState::SetNull(endpointId);
- if (EMBER_ZCL_STATUS_SUCCESS != status)
+ if (Status::Success != status)
{
- ChipLogError(Zcl, "[InitDoorLockServer] Unable to set the Lock State attribute to null [status=%d]", status);
+ ChipLogError(Zcl, "[InitDoorLockServer] Unable to set the Lock State attribute to null [status=%d]", to_underlying(status));
}
SetActuatorEnabled(endpointId, true);
@@ -260,7 +261,7 @@ bool DoorLockServer::HandleWrongCodeEntry(chip::EndpointId endpointId)
uint8_t wrongCodeEntryLimit = 0xFF;
auto status = Attributes::WrongCodeEntryLimit::Get(endpointId, &wrongCodeEntryLimit);
- if (EMBER_ZCL_STATUS_SUCCESS == status)
+ if (Status::Success == status)
{
if (++endpointContext->wrongCodeEntryAttempts >= wrongCodeEntryLimit)
{
@@ -269,7 +270,7 @@ bool DoorLockServer::HandleWrongCodeEntry(chip::EndpointId endpointId)
engageLockout(endpointId);
}
}
- else if (EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE != status)
+ else if (Status::UnsupportedAttribute != status)
{
ChipLogError(Zcl, "Failed to read Wrong Code Entry Limit attribute, status=0x%x", to_underlying(status));
return false;
@@ -300,11 +301,11 @@ bool DoorLockServer::engageLockout(chip::EndpointId endpointId)
}
auto status = Attributes::UserCodeTemporaryDisableTime::Get(endpointId, &lockoutTimeout);
- if (EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE == status)
+ if (Status::UnsupportedAttribute == status)
{
return false;
}
- if (EMBER_ZCL_STATUS_SUCCESS != status)
+ if (Status::Success != status)
{
ChipLogError(Zcl, "Unable to read the UserCodeTemporaryDisableTime attribute [status=%d]", to_underlying(status));
return false;
@@ -401,7 +402,7 @@ void DoorLockServer::setUserCommandHandler(chip::app::CommandHandler * commandOb
if (!SupportsUSR(commandPath.mEndpointId))
{
ChipLogProgress(Zcl, "[SetUser] User management is not supported [endpointId=%d]", commandPath.mEndpointId);
- sendClusterResponse(commandObj, commandPath, EMBER_ZCL_STATUS_UNSUPPORTED_COMMAND);
+ sendClusterResponse(commandObj, commandPath, ClusterStatusCode(Status::UnsupportedCommand));
return;
}
@@ -410,7 +411,7 @@ void DoorLockServer::setUserCommandHandler(chip::app::CommandHandler * commandOb
{
ChipLogError(Zcl, "[SetUser] Unable to get the fabric IDX [endpointId=%d,userIndex=%d]", commandPath.mEndpointId,
userIndex);
- sendClusterResponse(commandObj, commandPath, EMBER_ZCL_STATUS_FAILURE);
+ sendClusterResponse(commandObj, commandPath, ClusterStatusCode(Status::Failure));
return;
}
@@ -419,7 +420,7 @@ void DoorLockServer::setUserCommandHandler(chip::app::CommandHandler * commandOb
{
ChipLogError(Zcl, "[SetUser] Unable to get the source node index [endpointId=%d,userIndex=%d]", commandPath.mEndpointId,
userIndex);
- sendClusterResponse(commandObj, commandPath, EMBER_ZCL_STATUS_FAILURE);
+ sendClusterResponse(commandObj, commandPath, ClusterStatusCode(Status::Failure));
return;
}
@@ -433,7 +434,7 @@ void DoorLockServer::setUserCommandHandler(chip::app::CommandHandler * commandOb
if (!userIndexValid(commandPath.mEndpointId, userIndex))
{
ChipLogProgress(Zcl, "[SetUser] User index out of bounds [endpointId=%d,userIndex=%d]", commandPath.mEndpointId, userIndex);
- sendClusterResponse(commandObj, commandPath, EMBER_ZCL_STATUS_INVALID_COMMAND);
+ sendClusterResponse(commandObj, commandPath, ClusterStatusCode(Status::InvalidCommand));
return;
}
@@ -443,7 +444,7 @@ void DoorLockServer::setUserCommandHandler(chip::app::CommandHandler * commandOb
ChipLogProgress(Zcl, "[SetUser] Unable to set user: userName too long [endpointId=%d,userIndex=%d,userNameSize=%u]",
commandPath.mEndpointId, userIndex, static_cast(userName.Value().size()));
- sendClusterResponse(commandObj, commandPath, EMBER_ZCL_STATUS_INVALID_COMMAND);
+ sendClusterResponse(commandObj, commandPath, ClusterStatusCode(Status::InvalidCommand));
return;
}
@@ -453,7 +454,7 @@ void DoorLockServer::setUserCommandHandler(chip::app::CommandHandler * commandOb
"[SetUser] Unable to set the user: user status is out of range [endpointId=%d,userIndex=%d,userStatus=%u]",
commandPath.mEndpointId, userIndex, to_underlying(userStatus.Value()));
- sendClusterResponse(commandObj, commandPath, EMBER_ZCL_STATUS_INVALID_COMMAND);
+ sendClusterResponse(commandObj, commandPath, ClusterStatusCode(Status::InvalidCommand));
return;
}
@@ -462,11 +463,11 @@ void DoorLockServer::setUserCommandHandler(chip::app::CommandHandler * commandOb
ChipLogProgress(Zcl, "[SetUser] Unable to set the user: user type is unknown [endpointId=%d,userIndex=%d,userType=%u]",
commandPath.mEndpointId, userIndex, to_underlying(userType.Value()));
- sendClusterResponse(commandObj, commandPath, EMBER_ZCL_STATUS_INVALID_COMMAND);
+ sendClusterResponse(commandObj, commandPath, ClusterStatusCode(Status::InvalidCommand));
return;
}
- EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS;
+ ClusterStatusCode status(Status::Success);
switch (operationType)
{
case DataOperationTypeEnum::kAdd:
@@ -474,14 +475,14 @@ void DoorLockServer::setUserCommandHandler(chip::app::CommandHandler * commandOb
userType, credentialRule);
break;
case DataOperationTypeEnum::kModify:
- status = modifyUser(commandPath.mEndpointId, fabricIdx, sourceNodeId, userIndex, userName, userUniqueId, userStatus,
- userType, credentialRule);
+ status = ClusterStatusCode(modifyUser(commandPath.mEndpointId, fabricIdx, sourceNodeId, userIndex, userName, userUniqueId,
+ userStatus, userType, credentialRule));
break;
case DataOperationTypeEnum::kClear:
default:
// appclusters, 5.2.4.34: SetUser command allow only kAdd/kModify, we should respond with INVALID_COMMAND if we got kClear
// or anything else
- status = EMBER_ZCL_STATUS_INVALID_COMMAND;
+ status = ClusterStatusCode(Status::InvalidCommand);
ChipLogProgress(Zcl, "[SetUser] Invalid operation type [endpointId=%d,operationType=%u]", commandPath.mEndpointId,
to_underlying(operationType));
break;
@@ -1873,25 +1874,25 @@ bool DoorLockServer::findUserIndexByCredential(chip::EndpointId endpointId, Cred
return false;
}
-EmberAfStatus DoorLockServer::createUser(chip::EndpointId endpointId, chip::FabricIndex creatorFabricIdx, chip::NodeId sourceNodeId,
- uint16_t userIndex, const Nullable & userName,
- const Nullable & userUniqueId, const Nullable & userStatus,
- const Nullable & userType,
- const Nullable & credentialRule,
- const Nullable & credential)
+ClusterStatusCode DoorLockServer::createUser(chip::EndpointId endpointId, chip::FabricIndex creatorFabricIdx,
+ chip::NodeId sourceNodeId, uint16_t userIndex,
+ const Nullable & userName, const Nullable & userUniqueId,
+ const Nullable & userStatus, const Nullable & userType,
+ const Nullable & credentialRule,
+ const Nullable & credential)
{
EmberAfPluginDoorLockUserInfo user;
if (!emberAfPluginDoorLockGetUser(endpointId, userIndex, user))
{
ChipLogError(Zcl, "[createUser] Unable to get the user from app [endpointId=%d,userIndex=%d]", endpointId, userIndex);
- return EMBER_ZCL_STATUS_FAILURE;
+ return ClusterStatusCode(Status::Failure);
}
// appclusters, 5.2.4.34: to modify user its status should be set to Available. If it is we should return OCCUPIED.
if (UserStatusEnum::kAvailable != user.userStatus)
{
ChipLogProgress(Zcl, "[createUser] Unable to overwrite existing user [endpointId=%d,userIndex=%d]", endpointId, userIndex);
- return static_cast(DlStatus::kOccupied);
+ return ClusterStatusCode::ClusterSpecificFailure(DlStatus::kOccupied);
}
const auto & newUserName = !userName.IsNull() ? userName.Value() : ""_span;
@@ -1917,7 +1918,7 @@ EmberAfStatus DoorLockServer::createUser(chip::EndpointId endpointId, chip::Fabr
endpointId, creatorFabricIdx, userIndex, static_cast(newUserName.size()), newUserName.data(),
newUserUniqueId, to_underlying(newUserStatus), to_underlying(newUserType), to_underlying(newCredentialRule),
static_cast(newTotalCredentials));
- return EMBER_ZCL_STATUS_FAILURE;
+ return ClusterStatusCode(Status::Failure);
}
ChipLogProgress(Zcl,
@@ -1931,28 +1932,27 @@ EmberAfStatus DoorLockServer::createUser(chip::EndpointId endpointId, chip::Fabr
sendRemoteLockUserChange(endpointId, LockDataTypeEnum::kUserIndex, DataOperationTypeEnum::kAdd, sourceNodeId, creatorFabricIdx,
userIndex, userIndex);
- return EMBER_ZCL_STATUS_SUCCESS;
+ return ClusterStatusCode(Status::Success);
}
-EmberAfStatus DoorLockServer::modifyUser(chip::EndpointId endpointId, chip::FabricIndex modifierFabricIndex,
- chip::NodeId sourceNodeId, uint16_t userIndex, const Nullable & userName,
- const Nullable & userUniqueId, const Nullable & userStatus,
- const Nullable & userType,
- const Nullable & credentialRule)
+Status DoorLockServer::modifyUser(chip::EndpointId endpointId, chip::FabricIndex modifierFabricIndex, chip::NodeId sourceNodeId,
+ uint16_t userIndex, const Nullable & userName,
+ const Nullable & userUniqueId, const Nullable & userStatus,
+ const Nullable & userType, const Nullable & credentialRule)
{
// We should get the user by that index first
EmberAfPluginDoorLockUserInfo user;
if (!emberAfPluginDoorLockGetUser(endpointId, userIndex, user))
{
ChipLogError(Zcl, "[modifyUser] Unable to get the user from app [endpointId=%d,userIndex=%d]", endpointId, userIndex);
- return EMBER_ZCL_STATUS_FAILURE;
+ return Status::Failure;
}
// appclusters, 5.2.4.34: to modify user its status should NOT be set to Available. If it is we should return INVALID_COMMAND.
if (UserStatusEnum::kAvailable == user.userStatus)
{
ChipLogProgress(Zcl, "[modifyUser] Unable to modify non-existing user [endpointId=%d,userIndex=%d]", endpointId, userIndex);
- return EMBER_ZCL_STATUS_INVALID_COMMAND;
+ return Status::InvalidCommand;
}
// appclusters, 5.2.4.34: UserName SHALL be null if modifying a user record that was not created by the accessing fabric
@@ -1962,7 +1962,7 @@ EmberAfStatus DoorLockServer::modifyUser(chip::EndpointId endpointId, chip::Fabr
"[modifyUser] Unable to modify name of user created by different fabric "
"[endpointId=%d,userIndex=%d,creatorIdx=%d,modifierIdx=%d]",
endpointId, userIndex, user.createdBy, modifierFabricIndex);
- return EMBER_ZCL_STATUS_INVALID_COMMAND;
+ return Status::InvalidCommand;
}
// appclusters, 5.2.4.34: UserUniqueID SHALL be null if modifying the user record that was not created by the accessing fabric.
@@ -1972,7 +1972,7 @@ EmberAfStatus DoorLockServer::modifyUser(chip::EndpointId endpointId, chip::Fabr
"[modifyUser] Unable to modify UUID of user created by different fabric "
"[endpointId=%d,userIndex=%d,creatorIdx=%d,modifierIdx=%d]",
endpointId, userIndex, user.createdBy, modifierFabricIndex);
- return EMBER_ZCL_STATUS_INVALID_COMMAND;
+ return Status::InvalidCommand;
}
const auto & newUserName = !userName.IsNull() ? userName.Value() : user.userName;
@@ -1991,7 +1991,7 @@ EmberAfStatus DoorLockServer::modifyUser(chip::EndpointId endpointId, chip::Fabr
",userType=%u,credentialRule=%u]",
endpointId, modifierFabricIndex, userIndex, static_cast(newUserName.size()), newUserName.data(),
newUserUniqueId, to_underlying(newUserStatus), to_underlying(newUserType), to_underlying(newCredentialRule));
- return EMBER_ZCL_STATUS_FAILURE;
+ return Status::Failure;
}
ChipLogProgress(Zcl,
@@ -2004,7 +2004,7 @@ EmberAfStatus DoorLockServer::modifyUser(chip::EndpointId endpointId, chip::Fabr
sendRemoteLockUserChange(endpointId, LockDataTypeEnum::kUserIndex, DataOperationTypeEnum::kModify, sourceNodeId,
modifierFabricIndex, userIndex, userIndex);
- return EMBER_ZCL_STATUS_SUCCESS;
+ return Status::Success;
}
Status DoorLockServer::clearUser(chip::EndpointId endpointId, chip::FabricIndex modifierFabricId, chip::NodeId sourceNodeId,
@@ -2129,15 +2129,17 @@ DlStatus DoorLockServer::createNewCredentialAndUser(chip::EndpointId endpointId,
return DlStatus::kOccupied;
}
- auto status =
+ ClusterStatusCode status =
createUser(endpointId, creatorFabricIdx, sourceNodeId, availableUserIndex, Nullable(), Nullable(),
userStatus, userType, Nullable(), Nullable(credential));
- if (EMBER_ZCL_STATUS_SUCCESS != status)
+ if (!status.IsSuccess())
{
ChipLogProgress(Zcl,
"[SetCredential] Unable to create new user for credential: internal error "
"[endpointId=%d,credentialIndex=%d,userIndex=%d,status=%d]",
- endpointId, credential.credentialIndex, availableUserIndex, status);
+ endpointId, credential.credentialIndex, availableUserIndex,
+ status.HasClusterSpecificCode() ? status.GetClusterSpecificCode().Value()
+ : (to_underlying(status.GetStatus())));
return DlStatus::kFailure;
}
@@ -3406,18 +3408,17 @@ bool DoorLockServer::RemoteOperationEnabled(chip::EndpointId endpointId) const
}
void DoorLockServer::sendClusterResponse(chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
- EmberAfStatus status)
+ ClusterStatusCode status)
{
VerifyOrDie(nullptr != commandObj);
- auto statusAsInteger = to_underlying(status);
- if (statusAsInteger == to_underlying(DlStatus::kOccupied) || statusAsInteger == to_underlying(DlStatus::kDuplicate))
+ if (status.HasClusterSpecificCode())
{
- VerifyOrDie(commandObj->AddClusterSpecificFailure(commandPath, static_cast(status)) == CHIP_NO_ERROR);
+ VerifyOrDie(commandObj->AddClusterSpecificFailure(commandPath, status.GetClusterSpecificCode().Value()) == CHIP_NO_ERROR);
}
else
{
- commandObj->AddStatus(commandPath, status);
+ commandObj->AddStatus(commandPath, status.GetStatus());
}
}
@@ -3514,7 +3515,7 @@ bool DoorLockServer::HandleRemoteLockOperation(chip::app::CommandHandler * comma
{
auto status = Attributes::RequirePINforRemoteOperation::Get(endpoint, &requirePin);
VerifyOrExit(
- EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE == status || EMBER_ZCL_STATUS_SUCCESS == status,
+ Status::UnsupportedAttribute == status || Status::Success == status,
ChipLogError(Zcl, "Failed to read Require PIN For Remote Operation attribute, status=0x%x", to_underlying(status)));
}
// If the PIN is required but not provided we should exit
@@ -3627,10 +3628,10 @@ void DoorLockServer::SendEvent(chip::EndpointId endpointId, T & event)
template
bool DoorLockServer::GetAttribute(chip::EndpointId endpointId, chip::AttributeId attributeId,
- EmberAfStatus (*getFn)(chip::EndpointId endpointId, T * value), T & value) const
+ Status (*getFn)(chip::EndpointId endpointId, T * value), T & value) const
{
- EmberAfStatus status = getFn(endpointId, &value);
- bool success = (EMBER_ZCL_STATUS_SUCCESS == status);
+ Status status = getFn(endpointId, &value);
+ bool success = (Status::Success == status);
if (!success)
{
@@ -3642,10 +3643,10 @@ bool DoorLockServer::GetAttribute(chip::EndpointId endpointId, chip::AttributeId
template
bool DoorLockServer::SetAttribute(chip::EndpointId endpointId, chip::AttributeId attributeId,
- EmberAfStatus (*setFn)(chip::EndpointId endpointId, T value), T value)
+ Status (*setFn)(chip::EndpointId endpointId, T value), T value)
{
- EmberAfStatus status = setFn(endpointId, value);
- bool success = (EMBER_ZCL_STATUS_SUCCESS == status);
+ Status status = setFn(endpointId, value);
+ bool success = (Status::Success == status);
if (!success)
{
@@ -3951,13 +3952,13 @@ void DoorLockServer::setAliroReaderConfigCommandHandler(CommandHandler * command
return;
}
- EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS;
+ Status status = Status::Success;
if (!emberAfPluginDoorLockSetAliroReaderConfig(endpointID, signingKey, verificationKey, groupIdentifier, groupResolvingKey))
{
ChipLogProgress(Zcl, "[SetAliroReaderConfig] Unable to set aliro reader config [endpointId=%d]", endpointID);
- status = EMBER_ZCL_STATUS_FAILURE;
+ status = Status::Failure;
}
- sendClusterResponse(commandObj, commandPath, status);
+ sendClusterResponse(commandObj, commandPath, ClusterStatusCode(status));
}
void DoorLockServer::clearAliroReaderConfigCommandHandler(CommandHandler * commandObj, const ConcreteCommandPath & commandPath)
@@ -3973,13 +3974,13 @@ void DoorLockServer::clearAliroReaderConfigCommandHandler(CommandHandler * comma
return;
}
- EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS;
+ Status status = Status::Success;
if (!emberAfPluginDoorLockClearAliroReaderConfig(endpointID))
{
ChipLogProgress(Zcl, "[SetAliroReaderConfig] Unable to set aliro reader config [endpointId=%d]", endpointID);
- status = EMBER_ZCL_STATUS_FAILURE;
+ status = Status::Failure;
}
- sendClusterResponse(commandObj, commandPath, status);
+ sendClusterResponse(commandObj, commandPath, ClusterStatusCode(status));
}
// =============================================================================
@@ -4125,7 +4126,7 @@ void DoorLockServer::DoorLockOnAutoRelockCallback(System::Layer *, void * callba
auto endpointId = static_cast(reinterpret_cast(callbackContext));
Nullable lockState;
- if (Attributes::LockState::Get(endpointId, lockState) != EMBER_ZCL_STATUS_SUCCESS || lockState.IsNull() ||
+ if (Attributes::LockState::Get(endpointId, lockState) != Status::Success || lockState.IsNull() ||
lockState.Value() != DlLockState::kLocked)
{
ChipLogProgress(Zcl, "Door Auto relock timer expired. %s", "Locking...");
diff --git a/src/app/clusters/door-lock-server/door-lock-server.h b/src/app/clusters/door-lock-server/door-lock-server.h
index 9b1a7f6fd27791..f50a666ca67721 100644
--- a/src/app/clusters/door-lock-server/door-lock-server.h
+++ b/src/app/clusters/door-lock-server/door-lock-server.h
@@ -307,15 +307,17 @@ class DoorLockServer : public chip::app::AttributeAccessInterface
bool findUserIndexByCredential(chip::EndpointId endpointId, CredentialTypeEnum credentialType, chip::ByteSpan credentialData,
uint16_t & userIndex, uint16_t & credentialIndex, EmberAfPluginDoorLockUserInfo & userInfo);
- EmberAfStatus createUser(chip::EndpointId endpointId, chip::FabricIndex creatorFabricIdx, chip::NodeId sourceNodeId,
- uint16_t userIndex, const Nullable & userName, const Nullable & userUniqueId,
- const Nullable & userStatus, const Nullable & userType,
- const Nullable & credentialRule,
- const Nullable & credential = Nullable());
- EmberAfStatus modifyUser(chip::EndpointId endpointId, chip::FabricIndex modifierFabricIndex, chip::NodeId sourceNodeId,
- uint16_t userIndex, const Nullable & userName, const Nullable & userUniqueId,
- const Nullable & userStatus, const Nullable & userType,
- const Nullable & credentialRule);
+ chip::Protocols::InteractionModel::ClusterStatusCode
+ createUser(chip::EndpointId endpointId, chip::FabricIndex creatorFabricIdx, chip::NodeId sourceNodeId, uint16_t userIndex,
+ const Nullable & userName, const Nullable & userUniqueId,
+ const Nullable & userStatus, const Nullable & userType,
+ const Nullable & credentialRule,
+ const Nullable & credential = Nullable());
+ chip::Protocols::InteractionModel::Status
+ modifyUser(chip::EndpointId endpointId, chip::FabricIndex modifierFabricIndex, chip::NodeId sourceNodeId, uint16_t userIndex,
+ const Nullable & userName, const Nullable & userUniqueId,
+ const Nullable & userStatus, const Nullable & userType,
+ const Nullable & credentialRule);
chip::Protocols::InteractionModel::Status clearUser(chip::EndpointId endpointId, chip::FabricIndex modifierFabricId,
chip::NodeId sourceNodeId, uint16_t userIndex, bool sendUserChangeEvent);
chip::Protocols::InteractionModel::Status clearUser(chip::EndpointId endpointId, chip::FabricIndex modifierFabricId,
@@ -477,7 +479,7 @@ class DoorLockServer : public chip::app::AttributeAccessInterface
bool engageLockout(chip::EndpointId endpointId);
static void sendClusterResponse(chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
- EmberAfStatus status);
+ chip::Protocols::InteractionModel::ClusterStatusCode status);
/**
* @brief Common handler for LockDoor, UnlockDoor, UnlockWithTimeout commands
@@ -544,7 +546,7 @@ class DoorLockServer : public chip::app::AttributeAccessInterface
*/
template
bool GetAttribute(chip::EndpointId endpointId, chip::AttributeId attributeId,
- EmberAfStatus (*getFn)(chip::EndpointId endpointId, T * value), T & value) const;
+ chip::Protocols::InteractionModel::Status (*getFn)(chip::EndpointId endpointId, T * value), T & value) const;
/**
* @brief Set generic attribute value
@@ -559,7 +561,7 @@ class DoorLockServer : public chip::app::AttributeAccessInterface
*/
template
bool SetAttribute(chip::EndpointId endpointId, chip::AttributeId attributeId,
- EmberAfStatus (*setFn)(chip::EndpointId endpointId, T value), T value);
+ chip::Protocols::InteractionModel::Status (*setFn)(chip::EndpointId endpointId, T value), T value);
// AttributeAccessInterface's Read API
CHIP_ERROR Read(const chip::app::ConcreteReadAttributePath & aPath, chip::app::AttributeValueEncoder & aEncoder) override;
diff --git a/src/app/clusters/electrical-power-measurement-server/electrical-power-measurement-server.h b/src/app/clusters/electrical-power-measurement-server/electrical-power-measurement-server.h
index 0b5d45f1dc447b..28af3fa0abb343 100644
--- a/src/app/clusters/electrical-power-measurement-server/electrical-power-measurement-server.h
+++ b/src/app/clusters/electrical-power-measurement-server/electrical-power-measurement-server.h
@@ -22,6 +22,7 @@
#include
#include
#include
+#include
namespace chip {
namespace app {
@@ -31,8 +32,6 @@ namespace ElectricalPowerMeasurement {
using namespace chip::app::Clusters::ElectricalPowerMeasurement::Attributes;
using namespace chip::app::Clusters::ElectricalPowerMeasurement::Structs;
-using chip::Protocols::InteractionModel::Status;
-
class Delegate
{
public:
diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.h b/src/app/clusters/energy-evse-server/energy-evse-server.h
index dfead37517d4e8..2ff46f339ff6ad 100644
--- a/src/app/clusters/energy-evse-server/energy-evse-server.h
+++ b/src/app/clusters/energy-evse-server/energy-evse-server.h
@@ -27,6 +27,7 @@
#include
#include
#include
+#include
namespace chip {
namespace app {
@@ -38,7 +39,6 @@ constexpr int64_t kMinimumChargeCurrent = 0;
constexpr int64_t kMaximumChargeCurrent = 80000;
constexpr uint32_t kMaxRandomizationDelayWindow = 86400;
-using chip::Protocols::InteractionModel::Status;
/** @brief
* Defines methods for implementing application-specific logic for the EVSE Management Cluster.
*/
@@ -55,30 +55,31 @@ class Delegate
* It should report Status::Success if successful and may
* return other Status codes if it fails
*/
- virtual Status Disable() = 0;
+ virtual Protocols::InteractionModel::Status Disable() = 0;
/**
* @brief Delegate should implement a handler to enable EVSE Charging.
* It should report Status::Success if successful and may
* return other Status codes if it fails
*/
- virtual Status EnableCharging(const DataModel::Nullable & enableChargeTime, const int64_t & minimumChargeCurrent,
- const int64_t & maximumChargeCurrent) = 0;
+ virtual Protocols::InteractionModel::Status EnableCharging(const DataModel::Nullable & enableChargeTime,
+ const int64_t & minimumChargeCurrent,
+ const int64_t & maximumChargeCurrent) = 0;
/**
* @brief Delegate should implement a handler to enable EVSE Discharging.
* It should report Status::Success if successful and may
* return other Status codes if it fails
*/
- virtual Status EnableDischarging(const DataModel::Nullable & enableDischargeTime,
- const int64_t & maximumDischargeCurrent) = 0;
+ virtual Protocols::InteractionModel::Status EnableDischarging(const DataModel::Nullable & enableDischargeTime,
+ const int64_t & maximumDischargeCurrent) = 0;
/**
* @brief Delegate should implement a handler to enable EVSE Diagnostics.
* It should report Status::Success if successful and may
* return other Status codes if it fails
*/
- virtual Status StartDiagnostics() = 0;
+ virtual Protocols::InteractionModel::Status StartDiagnostics() = 0;
// ------------------------------------------------------------------
// Get attribute methods
diff --git a/src/app/clusters/fan-control-server/fan-control-server.cpp b/src/app/clusters/fan-control-server/fan-control-server.cpp
index 8bca0d1e86c129..b297acdd1e80cf 100644
--- a/src/app/clusters/fan-control-server/fan-control-server.cpp
+++ b/src/app/clusters/fan-control-server/fan-control-server.cpp
@@ -34,6 +34,7 @@
#include
#include
#include
+#include
using namespace chip;
using namespace chip::app;
@@ -41,6 +42,8 @@ using namespace chip::app::Clusters;
using namespace chip::app::Clusters::FanControl;
using namespace chip::app::Clusters::FanControl::Attributes;
+using Protocols::InteractionModel::Status;
+
namespace {
constexpr size_t kFanControlDelegateTableSize =
@@ -85,11 +88,11 @@ namespace {
// Indicates if the write operation is from the cluster server itself
bool gWriteFromClusterLogic = false;
-EmberAfStatus SetFanModeToOff(EndpointId endpointId)
+Status SetFanModeToOff(EndpointId endpointId)
{
FanModeEnum currentFanMode;
- EmberAfStatus status = FanMode::Get(endpointId, ¤tFanMode);
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, status);
+ Status status = FanMode::Get(endpointId, ¤tFanMode);
+ VerifyOrReturnError(Status::Success == status, status);
if (currentFanMode != FanModeEnum::kOff)
{
@@ -103,7 +106,7 @@ bool HasFeature(EndpointId endpoint, Feature feature)
{
bool success;
uint32_t featureMap;
- success = (Attributes::FeatureMap::Get(endpoint, &featureMap) == EMBER_ZCL_STATUS_SUCCESS);
+ success = (Attributes::FeatureMap::Get(endpoint, &featureMap) == Status::Success);
return success ? ((featureMap & to_underlying(feature)) != 0) : false;
}
@@ -163,8 +166,8 @@ MatterFanControlClusterServerPreAttributeChangedCallback(const ConcreteAttribute
else if (*value == to_underlying(FanModeEnum::kSmart))
{
FanModeSequenceEnum fanModeSequence;
- EmberAfStatus status = FanModeSequence::Get(attributePath.mEndpointId, &fanModeSequence);
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, Status::Failure);
+ Status status = FanModeSequence::Get(attributePath.mEndpointId, &fanModeSequence);
+ VerifyOrReturnError(Status::Success == status, Status::Failure);
if (SupportsAuto(attributePath.mEndpointId) &&
((fanModeSequence == FanModeSequenceEnum::kOffLowHighAuto) ||
@@ -204,8 +207,8 @@ MatterFanControlClusterServerPreAttributeChangedCallback(const ConcreteAttribute
else
{
uint8_t speedMax;
- EmberAfStatus status = SpeedMax::Get(attributePath.mEndpointId, &speedMax);
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, Status::ConstraintError);
+ Status status = SpeedMax::Get(attributePath.mEndpointId, &speedMax);
+ VerifyOrReturnError(Status::Success == status, Status::ConstraintError);
if (*value <= speedMax)
{
@@ -247,8 +250,8 @@ MatterFanControlClusterServerPreAttributeChangedCallback(const ConcreteAttribute
if (SupportsRocking(attributePath.mEndpointId))
{
BitMask rockSupport;
- EmberAfStatus status = RockSupport::Get(attributePath.mEndpointId, &rockSupport);
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, Status::ConstraintError);
+ Status status = RockSupport::Get(attributePath.mEndpointId, &rockSupport);
+ VerifyOrReturnError(Status::Success == status, Status::ConstraintError);
auto rawRockSupport = rockSupport.Raw();
if ((*value & rawRockSupport) == *value)
{
@@ -269,8 +272,8 @@ MatterFanControlClusterServerPreAttributeChangedCallback(const ConcreteAttribute
if (SupportsWind(attributePath.mEndpointId))
{
BitMask windSupport;
- EmberAfStatus status = WindSupport::Get(attributePath.mEndpointId, &windSupport);
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == status, Status::ConstraintError);
+ Status status = WindSupport::Get(attributePath.mEndpointId, &windSupport);
+ VerifyOrReturnError(Status::Success == status, Status::ConstraintError);
auto rawWindSupport = windSupport.Raw();
if ((*value & rawWindSupport) == *value)
{
@@ -312,30 +315,30 @@ void MatterFanControlClusterServerAttributeChangedCallback(const app::ConcreteAt
{
case FanMode::Id: {
FanModeEnum mode;
- EmberAfStatus status = FanMode::Get(attributePath.mEndpointId, &mode);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status);
+ Status status = FanMode::Get(attributePath.mEndpointId, &mode);
+ VerifyOrReturn(Status::Success == status);
// Setting the FanMode value to Off SHALL set the values of PercentSetting, PercentCurrent,
// SpeedSetting, SpeedCurrent attributes to 0 (zero).
if (mode == FanModeEnum::kOff)
{
status = PercentSetting::Set(attributePath.mEndpointId, 0);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to write PercentSetting with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to write PercentSetting with error: 0x%02x", to_underlying(status)));
status = PercentCurrent::Set(attributePath.mEndpointId, 0);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to write PercentCurrent with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to write PercentCurrent with error: 0x%02x", to_underlying(status)));
if (SupportsMultiSpeed(attributePath.mEndpointId))
{
status = SpeedSetting::Set(attributePath.mEndpointId, 0);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to write SpeedSetting with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to write SpeedSetting with error: 0x%02x", to_underlying(status)));
status = SpeedCurrent::Set(attributePath.mEndpointId, 0);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to write SpeedCurrent with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to write SpeedCurrent with error: 0x%02x", to_underlying(status)));
}
}
@@ -345,30 +348,30 @@ void MatterFanControlClusterServerAttributeChangedCallback(const app::ConcreteAt
{
gWriteFromClusterLogic = true;
status = PercentSetting::SetNull(attributePath.mEndpointId);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to write PercentSetting with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to write PercentSetting with error: 0x%02x", to_underlying(status)));
if (SupportsMultiSpeed(attributePath.mEndpointId))
{
gWriteFromClusterLogic = true;
status = SpeedSetting::SetNull(attributePath.mEndpointId);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to write SpeedSetting with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to write SpeedSetting with error: 0x%02x", to_underlying(status)));
}
}
break;
}
case PercentSetting::Id: {
DataModel::Nullable percentSetting;
- EmberAfStatus status = PercentSetting::Get(attributePath.mEndpointId, percentSetting);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status && !percentSetting.IsNull());
+ Status status = PercentSetting::Get(attributePath.mEndpointId, percentSetting);
+ VerifyOrReturn(Status::Success == status && !percentSetting.IsNull());
// If PercentSetting is set to 0, the server SHALL set the FanMode attribute value to Off.
if (percentSetting.Value() == 0)
{
status = SetFanModeToOff(attributePath.mEndpointId);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to set FanMode to off with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to set FanMode to off with error: 0x%02x", to_underlying(status)));
}
if (SupportsMultiSpeed(attributePath.mEndpointId))
@@ -377,13 +380,13 @@ void MatterFanControlClusterServerAttributeChangedCallback(const app::ConcreteAt
// speed = ceil( SpeedMax * (percent * 0.01) )
uint8_t speedMax;
status = SpeedMax::Get(attributePath.mEndpointId, &speedMax);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to get SpeedMax with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to get SpeedMax with error: 0x%02x", to_underlying(status)));
DataModel::Nullable currentSpeedSetting;
status = SpeedSetting::Get(attributePath.mEndpointId, currentSpeedSetting);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to get SpeedSetting with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to get SpeedSetting with error: 0x%02x", to_underlying(status)));
uint16_t percent = percentSetting.Value();
// Plus 99 then integer divide by 100 instead of multiplying 0.01 to avoid floating point precision error
@@ -392,8 +395,8 @@ void MatterFanControlClusterServerAttributeChangedCallback(const app::ConcreteAt
if (currentSpeedSetting.IsNull() || speedSetting != currentSpeedSetting.Value())
{
status = SpeedSetting::Set(attributePath.mEndpointId, speedSetting);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to set SpeedSetting with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to set SpeedSetting with error: 0x%02x", to_underlying(status)));
}
}
break;
@@ -402,28 +405,28 @@ void MatterFanControlClusterServerAttributeChangedCallback(const app::ConcreteAt
if (SupportsMultiSpeed(attributePath.mEndpointId))
{
DataModel::Nullable speedSetting;
- EmberAfStatus status = SpeedSetting::Get(attributePath.mEndpointId, speedSetting);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status && !speedSetting.IsNull());
+ Status status = SpeedSetting::Get(attributePath.mEndpointId, speedSetting);
+ VerifyOrReturn(Status::Success == status && !speedSetting.IsNull());
// If SpeedSetting is set to 0, the server SHALL set the FanMode attribute value to Off.
if (speedSetting.Value() == 0)
{
status = SetFanModeToOff(attributePath.mEndpointId);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to set FanMode to off with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to set FanMode to off with error: 0x%02x", to_underlying(status)));
}
// Adjust PercentSetting from a speed value change for SpeedSetting
// percent = floor( speed/SpeedMax * 100 )
uint8_t speedMax;
status = SpeedMax::Get(attributePath.mEndpointId, &speedMax);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to get SpeedMax with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to get SpeedMax with error: 0x%02x", to_underlying(status)));
DataModel::Nullable currentPercentSetting;
status = PercentSetting::Get(attributePath.mEndpointId, currentPercentSetting);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to get PercentSetting with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to get PercentSetting with error: 0x%02x", to_underlying(status)));
float speed = speedSetting.Value();
Percent percentSetting = static_cast(speed / speedMax * 100);
@@ -431,8 +434,8 @@ void MatterFanControlClusterServerAttributeChangedCallback(const app::ConcreteAt
if (currentPercentSetting.IsNull() || percentSetting != currentPercentSetting.Value())
{
status = PercentSetting::Set(attributePath.mEndpointId, percentSetting);
- VerifyOrReturn(EMBER_ZCL_STATUS_SUCCESS == status,
- ChipLogError(Zcl, "Failed to set PercentSetting with error: 0x%02x", status));
+ VerifyOrReturn(Status::Success == status,
+ ChipLogError(Zcl, "Failed to set PercentSetting with error: 0x%02x", to_underlying(status)));
}
}
break;
diff --git a/src/app/clusters/groups-server/groups-server.cpp b/src/app/clusters/groups-server/groups-server.cpp
index d591c3f3d6e331..65bfbc1c3e5952 100644
--- a/src/app/clusters/groups-server/groups-server.cpp
+++ b/src/app/clusters/groups-server/groups-server.cpp
@@ -102,40 +102,40 @@ static Status GroupAdd(FabricIndex fabricIndex, EndpointId endpointId, GroupId g
return Status::ResourceExhausted;
}
-static EmberAfStatus GroupRemove(FabricIndex fabricIndex, EndpointId endpointId, GroupId groupId)
+static Status GroupRemove(FabricIndex fabricIndex, EndpointId endpointId, GroupId groupId)
{
- VerifyOrReturnError(IsValidGroupId(groupId), EMBER_ZCL_STATUS_CONSTRAINT_ERROR);
- VerifyOrReturnError(GroupExists(fabricIndex, endpointId, groupId), EMBER_ZCL_STATUS_NOT_FOUND);
+ VerifyOrReturnError(IsValidGroupId(groupId), Status::ConstraintError);
+ VerifyOrReturnError(GroupExists(fabricIndex, endpointId, groupId), Status::NotFound);
GroupDataProvider * provider = GetGroupDataProvider();
- VerifyOrReturnError(nullptr != provider, EMBER_ZCL_STATUS_NOT_FOUND);
+ VerifyOrReturnError(nullptr != provider, Status::NotFound);
CHIP_ERROR err = provider->RemoveEndpoint(fabricIndex, groupId, endpointId);
if (CHIP_NO_ERROR == err)
{
MatterReportingAttributeChangeCallback(kRootEndpointId, GroupKeyManagement::Id,
GroupKeyManagement::Attributes::GroupTable::Id);
- return EMBER_ZCL_STATUS_SUCCESS;
+ return Status::Success;
}
ChipLogDetail(Zcl, "ERR: Failed to remove mapping (end:%d, group:0x%x), err:%" CHIP_ERROR_FORMAT, endpointId, groupId,
err.Format());
- return EMBER_ZCL_STATUS_NOT_FOUND;
+ return Status::NotFound;
}
void emberAfGroupsClusterServerInitCallback(EndpointId endpointId)
{
// According to spec, highest bit (Group Names) MUST match feature bit 0 (Group Names)
- EmberAfStatus status = Attributes::NameSupport::Set(endpointId, NameSupportBitmap::kGroupNames);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Attributes::NameSupport::Set(endpointId, NameSupportBitmap::kGroupNames);
+ if (status != Status::Success)
{
- ChipLogDetail(Zcl, "ERR: writing NameSupport %x", status);
+ ChipLogDetail(Zcl, "ERR: writing NameSupport %x", to_underlying(status));
}
status = Attributes::FeatureMap::Set(endpointId, static_cast(Feature::kGroupNames));
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogDetail(Zcl, "ERR: writing group feature map %x", status);
+ ChipLogDetail(Zcl, "ERR: writing group feature map %x", to_underlying(status));
}
}
@@ -161,21 +161,21 @@ bool emberAfGroupsClusterViewGroupCallback(app::CommandHandler * commandObj, con
GroupDataProvider * provider = GetGroupDataProvider();
GroupDataProvider::GroupInfo info;
Groups::Commands::ViewGroupResponse::Type response;
- CHIP_ERROR err = CHIP_NO_ERROR;
- EmberAfStatus status = EMBER_ZCL_STATUS_NOT_FOUND;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ Status status = Status::NotFound;
- VerifyOrExit(IsValidGroupId(groupId), status = EMBER_ZCL_STATUS_CONSTRAINT_ERROR);
- VerifyOrExit(nullptr != provider, status = EMBER_ZCL_STATUS_FAILURE);
- VerifyOrExit(provider->HasEndpoint(fabricIndex, groupId, commandPath.mEndpointId), status = EMBER_ZCL_STATUS_NOT_FOUND);
+ VerifyOrExit(IsValidGroupId(groupId), status = Status::ConstraintError);
+ VerifyOrExit(nullptr != provider, status = Status::Failure);
+ VerifyOrExit(provider->HasEndpoint(fabricIndex, groupId, commandPath.mEndpointId), status = Status::NotFound);
err = provider->GetGroupInfo(fabricIndex, groupId, info);
- VerifyOrExit(CHIP_NO_ERROR == err, status = EMBER_ZCL_STATUS_NOT_FOUND);
+ VerifyOrExit(CHIP_NO_ERROR == err, status = Status::NotFound);
response.groupName = CharSpan(info.name, strnlen(info.name, GroupDataProvider::GroupInfo::kGroupNameMax));
- status = EMBER_ZCL_STATUS_SUCCESS;
+ status = Status::Success;
exit:
response.groupID = groupId;
- response.status = status;
+ response.status = to_underlying(status);
commandObj->AddResponse(commandPath, response);
return true;
}
@@ -297,7 +297,7 @@ bool emberAfGroupsClusterRemoveGroupCallback(app::CommandHandler * commandObj, c
ScenesManagement::ScenesServer::Instance().GroupWillBeRemoved(fabricIndex, commandPath.mEndpointId, commandData.groupID);
#endif
response.groupID = commandData.groupID;
- response.status = GroupRemove(fabricIndex, commandPath.mEndpointId, commandData.groupID);
+ response.status = to_underlying(GroupRemove(fabricIndex, commandPath.mEndpointId, commandData.groupID));
commandObj->AddResponse(commandPath, response);
return true;
diff --git a/src/app/clusters/icd-management-server/icd-management-server.cpp b/src/app/clusters/icd-management-server/icd-management-server.cpp
index 90953e3b814dd2..27ecfe778a33bb 100644
--- a/src/app/clusters/icd-management-server/icd-management-server.cpp
+++ b/src/app/clusters/icd-management-server/icd-management-server.cpp
@@ -23,7 +23,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -36,6 +35,8 @@ using namespace chip::app::Clusters::IcdManagement;
using namespace Protocols;
using namespace chip::Access;
+using chip::Protocols::InteractionModel::Status;
+
namespace {
/**
@@ -49,9 +50,11 @@ class IcdManagementAttributeAccess : public AttributeAccessInterface
void Init(PersistentStorageDelegate & storage, Crypto::SymmetricKeystore * symmetricKeystore, FabricTable & fabricTable,
ICDConfigurationData & icdConfigurationData)
{
- mStorage = &storage;
- mSymmetricKeystore = symmetricKeystore;
- mFabricTable = &fabricTable;
+#if CHIP_CONFIG_ENABLE_ICD_CIP
+ mStorage = &storage;
+ mSymmetricKeystore = symmetricKeystore;
+ mFabricTable = &fabricTable;
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
mICDConfigurationData = &icdConfigurationData;
}
@@ -61,6 +64,8 @@ class IcdManagementAttributeAccess : public AttributeAccessInterface
CHIP_ERROR ReadIdleModeDuration(EndpointId endpoint, AttributeValueEncoder & encoder);
CHIP_ERROR ReadActiveModeDuration(EndpointId endpoint, AttributeValueEncoder & encoder);
CHIP_ERROR ReadActiveModeThreshold(EndpointId endpoint, AttributeValueEncoder & encoder);
+
+#if CHIP_CONFIG_ENABLE_ICD_CIP
CHIP_ERROR ReadRegisteredClients(EndpointId endpoint, AttributeValueEncoder & encoder);
CHIP_ERROR ReadICDCounter(EndpointId endpoint, AttributeValueEncoder & encoder);
CHIP_ERROR ReadClientsSupportedPerFabric(EndpointId endpoint, AttributeValueEncoder & encoder);
@@ -68,7 +73,9 @@ class IcdManagementAttributeAccess : public AttributeAccessInterface
PersistentStorageDelegate * mStorage = nullptr;
Crypto::SymmetricKeystore * mSymmetricKeystore = nullptr;
FabricTable * mFabricTable = nullptr;
- ICDConfigurationData * mICDConfigurationData = nullptr;
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
+
+ ICDConfigurationData * mICDConfigurationData = nullptr;
};
CHIP_ERROR IcdManagementAttributeAccess::Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder)
@@ -86,6 +93,7 @@ CHIP_ERROR IcdManagementAttributeAccess::Read(const ConcreteReadAttributePath &
case IcdManagement::Attributes::ActiveModeThreshold::Id:
return ReadActiveModeThreshold(aPath.mEndpointId, aEncoder);
+#if CHIP_CONFIG_ENABLE_ICD_CIP
case IcdManagement::Attributes::RegisteredClients::Id:
return ReadRegisteredClients(aPath.mEndpointId, aEncoder);
@@ -94,6 +102,7 @@ CHIP_ERROR IcdManagementAttributeAccess::Read(const ConcreteReadAttributePath &
case IcdManagement::Attributes::ClientsSupportedPerFabric::Id:
return ReadClientsSupportedPerFabric(aPath.mEndpointId, aEncoder);
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
}
return CHIP_NO_ERROR;
@@ -114,6 +123,60 @@ CHIP_ERROR IcdManagementAttributeAccess::ReadActiveModeThreshold(EndpointId endp
return encoder.Encode(mICDConfigurationData->GetActiveModeThreshold().count());
}
+#if CHIP_CONFIG_ENABLE_ICD_CIP
+/**
+ * @brief Implementation of Fabric Delegate for ICD Management cluster
+ */
+class IcdManagementFabricDelegate : public FabricTable::Delegate
+{
+public:
+ void Init(PersistentStorageDelegate & storage, Crypto::SymmetricKeystore * symmetricKeystore,
+ ICDConfigurationData & icdConfigurationData)
+ {
+ mStorage = &storage;
+ mSymmetricKeystore = symmetricKeystore;
+ mICDConfigurationData = &icdConfigurationData;
+ }
+
+ void OnFabricRemoved(const FabricTable & fabricTable, FabricIndex fabricIndex) override
+ {
+ uint16_t supported_clients = mICDConfigurationData->GetClientsSupportedPerFabric();
+ ICDMonitoringTable table(*mStorage, fabricIndex, supported_clients, mSymmetricKeystore);
+ table.RemoveAll();
+ ICDNotifier::GetInstance().NotifyICDManagementEvent(ICDListener::ICDManagementEvents::kTableUpdated);
+ }
+
+private:
+ PersistentStorageDelegate * mStorage = nullptr;
+ Crypto::SymmetricKeystore * mSymmetricKeystore = nullptr;
+ ICDConfigurationData * mICDConfigurationData = nullptr;
+};
+
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
+
+} // namespace
+
+/*
+ * ICD Management Implementation
+ */
+#if CHIP_CONFIG_ENABLE_ICD_CIP
+PersistentStorageDelegate * ICDManagementServer::mStorage = nullptr;
+Crypto::SymmetricKeystore * ICDManagementServer::mSymmetricKeystore = nullptr;
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
+
+ICDConfigurationData * ICDManagementServer::mICDConfigurationData = nullptr;
+
+namespace {
+IcdManagementAttributeAccess gAttribute;
+#if CHIP_CONFIG_ENABLE_ICD_CIP
+IcdManagementFabricDelegate gFabricDelegate;
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
+} // namespace
+
+#if CHIP_CONFIG_ENABLE_ICD_CIP
+
+namespace {
+
CHIP_ERROR IcdManagementAttributeAccess::ReadRegisteredClients(EndpointId endpoint, AttributeValueEncoder & encoder)
{
uint16_t supported_clients = mICDConfigurationData->GetClientsSupportedPerFabric();
@@ -157,37 +220,6 @@ CHIP_ERROR IcdManagementAttributeAccess::ReadClientsSupportedPerFabric(EndpointI
return encoder.Encode(mICDConfigurationData->GetClientsSupportedPerFabric());
}
-/**
- * @brief Implementation of Fabric Delegate for ICD Management cluster
- */
-class IcdManagementFabricDelegate : public FabricTable::Delegate
-{
-public:
- void Init(PersistentStorageDelegate & storage, Crypto::SymmetricKeystore * symmetricKeystore,
- ICDConfigurationData & icdConfigurationData)
- {
- mStorage = &storage;
- mSymmetricKeystore = symmetricKeystore;
- mICDConfigurationData = &icdConfigurationData;
- }
-
- void OnFabricRemoved(const FabricTable & fabricTable, FabricIndex fabricIndex) override
- {
- uint16_t supported_clients = mICDConfigurationData->GetClientsSupportedPerFabric();
- ICDMonitoringTable table(*mStorage, fabricIndex, supported_clients, mSymmetricKeystore);
- table.RemoveAll();
- ICDNotifier::GetInstance().NotifyICDManagementEvent(ICDListener::ICDManagementEvents::kTableUpdated);
- }
-
-private:
- PersistentStorageDelegate * mStorage = nullptr;
- Crypto::SymmetricKeystore * mSymmetricKeystore = nullptr;
- ICDConfigurationData * mICDConfigurationData = nullptr;
-};
-
-IcdManagementFabricDelegate gFabricDelegate;
-IcdManagementAttributeAccess gAttribute;
-
/**
* @brief Function checks if the client has admin permissions to the cluster in the commandPath
*
@@ -214,14 +246,6 @@ CHIP_ERROR CheckAdmin(CommandHandler * commandObj, const ConcreteCommandPath & c
} // namespace
-/*
- * ICD Management Implementation
- */
-
-PersistentStorageDelegate * ICDManagementServer::mStorage = nullptr;
-Crypto::SymmetricKeystore * ICDManagementServer::mSymmetricKeystore = nullptr;
-ICDConfigurationData * ICDManagementServer::mICDConfigurationData = nullptr;
-
Status ICDManagementServer::RegisterClient(CommandHandler * commandObj, const ConcreteCommandPath & commandPath,
const Commands::RegisterClient::DecodableType & commandData, uint32_t & icdCounter)
{
@@ -333,6 +357,13 @@ Status ICDManagementServer::UnregisterClient(CommandHandler * commandObj, const
return InteractionModel::Status::Success;
}
+void ICDManagementServer::TriggerICDMTableUpdatedEvent()
+{
+ ICDNotifier::GetInstance().NotifyICDManagementEvent(ICDListener::ICDManagementEvents::kTableUpdated);
+}
+
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
+
Status ICDManagementServer::StayActiveRequest(FabricIndex fabricIndex)
{
// TODO: Implementent stay awake logic for end device
@@ -341,16 +372,13 @@ Status ICDManagementServer::StayActiveRequest(FabricIndex fabricIndex)
return InteractionModel::Status::UnsupportedCommand;
}
-void ICDManagementServer::TriggerICDMTableUpdatedEvent()
-{
- ICDNotifier::GetInstance().NotifyICDManagementEvent(ICDListener::ICDManagementEvents::kTableUpdated);
-}
-
void ICDManagementServer::Init(PersistentStorageDelegate & storage, Crypto::SymmetricKeystore * symmetricKeystore,
ICDConfigurationData & icdConfigurationData)
{
- mStorage = &storage;
- mSymmetricKeystore = symmetricKeystore;
+#if CHIP_CONFIG_ENABLE_ICD_CIP
+ mStorage = &storage;
+ mSymmetricKeystore = symmetricKeystore;
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
mICDConfigurationData = &icdConfigurationData;
}
@@ -358,6 +386,7 @@ void ICDManagementServer::Init(PersistentStorageDelegate & storage, Crypto::Symm
* Callbacks Implementation
*********************************************************/
+#if CHIP_CONFIG_ENABLE_ICD_CIP
/**
* @brief ICD Management Cluster RegisterClient Command callback (from client)
*
@@ -396,6 +425,7 @@ bool emberAfIcdManagementClusterUnregisterClientCallback(CommandHandler * comman
commandObj->AddStatus(commandPath, status);
return true;
}
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
/**
* @brief ICD Management Cluster StayActiveRequest Command callback (from client)
@@ -413,13 +443,15 @@ bool emberAfIcdManagementClusterStayActiveRequestCallback(CommandHandler * comma
void MatterIcdManagementPluginServerInitCallback()
{
PersistentStorageDelegate & storage = Server::GetInstance().GetPersistentStorage();
- FabricTable & fabricTable = Server::GetInstance().GetFabricTable();
Crypto::SymmetricKeystore * symmetricKeystore = Server::GetInstance().GetSessionKeystore();
+ FabricTable & fabricTable = Server::GetInstance().GetFabricTable();
ICDConfigurationData & icdConfigurationData = ICDConfigurationData::GetInstance().GetInstance();
+#if CHIP_CONFIG_ENABLE_ICD_CIP
// Configure and register Fabric delegate
gFabricDelegate.Init(storage, symmetricKeystore, icdConfigurationData);
fabricTable.AddFabricDelegate(&gFabricDelegate);
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
// Configure and register Attribute Access Override
gAttribute.Init(storage, symmetricKeystore, fabricTable, icdConfigurationData);
diff --git a/src/app/clusters/icd-management-server/icd-management-server.h b/src/app/clusters/icd-management-server/icd-management-server.h
index 308d50859d2d4b..4462cb96d9c9f2 100644
--- a/src/app/clusters/icd-management-server/icd-management-server.h
+++ b/src/app/clusters/icd-management-server/icd-management-server.h
@@ -19,18 +19,29 @@
#include
#include
-#include
#include
-#include
#include
#include
-#include
#include
#include
#include
+#include
+
+#if CHIP_CONFIG_ENABLE_ICD_CIP
+#include
+#include
+#include
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
+
using chip::Protocols::InteractionModel::Status;
+namespace chip {
+namespace Crypto {
+using SymmetricKeystore = SessionKeystore;
+} // namespace Crypto
+} // namespace chip
+
class ICDManagementServer
{
public:
@@ -39,6 +50,7 @@ class ICDManagementServer
static void Init(chip::PersistentStorageDelegate & storage, chip::Crypto::SymmetricKeystore * symmetricKeystore,
chip::ICDConfigurationData & ICDConfigurationData);
+#if CHIP_CONFIG_ENABLE_ICD_CIP
/**
* @brief Function that executes the business logic of the RegisterClient Command
*
@@ -46,23 +58,31 @@ class ICDManagementServer
* ICDConfigurationData If function fails, icdCounter will be unchanged
* @return Status
*/
- Status RegisterClient(chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
- const chip::app::Clusters::IcdManagement::Commands::RegisterClient::DecodableType & commandData,
- uint32_t & icdCounter);
+ chip::Protocols::InteractionModel::Status
+ RegisterClient(chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
+ const chip::app::Clusters::IcdManagement::Commands::RegisterClient::DecodableType & commandData,
+ uint32_t & icdCounter);
- Status UnregisterClient(chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
- const chip::app::Clusters::IcdManagement::Commands::UnregisterClient::DecodableType & commandData);
+ chip::Protocols::InteractionModel::Status
+ UnregisterClient(chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
+ const chip::app::Clusters::IcdManagement::Commands::UnregisterClient::DecodableType & commandData);
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
- Status StayActiveRequest(chip::FabricIndex fabricIndex);
+ chip::Protocols::InteractionModel::Status StayActiveRequest(chip::FabricIndex fabricIndex);
private:
+#if CHIP_CONFIG_ENABLE_ICD_CIP
/**
* @brief Triggers table update events to notify subscribers that an entry was added or removed
* from the ICDMonitoringTable.
*/
void TriggerICDMTableUpdatedEvent();
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
+ static chip::ICDConfigurationData * mICDConfigurationData;
+
+#if CHIP_CONFIG_ENABLE_ICD_CIP
static chip::PersistentStorageDelegate * mStorage;
static chip::Crypto::SymmetricKeystore * mSymmetricKeystore;
- static chip::ICDConfigurationData * mICDConfigurationData;
+#endif // CHIP_CONFIG_ENABLE_ICD_CIP
};
diff --git a/src/app/clusters/identify-server/identify-server.cpp b/src/app/clusters/identify-server/identify-server.cpp
index c93d96d3016e7e..257adf934a5328 100644
--- a/src/app/clusters/identify-server/identify-server.cpp
+++ b/src/app/clusters/identify-server/identify-server.cpp
@@ -104,7 +104,7 @@ static void onIdentifyClusterTick(chip::System::Layer * systemLayer, void * appS
{
EndpointId endpoint = identify->mEndpoint;
- if (EMBER_ZCL_STATUS_SUCCESS == Attributes::IdentifyTime::Get(endpoint, &identifyTime) && 0 != identifyTime)
+ if (Status::Success == Attributes::IdentifyTime::Get(endpoint, &identifyTime) && 0 != identifyTime)
{
identifyTime = static_cast(identifyTime == 0 ? 0 : identifyTime - 1);
// This tick writes the new attribute, which will trigger the Attribute
@@ -145,7 +145,7 @@ void MatterIdentifyClusterServerAttributeChangedCallback(const app::ConcreteAttr
return;
}
- if (EMBER_ZCL_STATUS_SUCCESS == Attributes::IdentifyTime::Get(endpoint, &identifyTime))
+ if (Status::Success == Attributes::IdentifyTime::Get(endpoint, &identifyTime))
{
/* effect identifier changed during identify */
if (identify->mTargetEffectIdentifier != identify->mCurrentEffectIdentifier)
@@ -229,8 +229,8 @@ bool emberAfIdentifyClusterTriggerEffectCallback(CommandHandler * commandObj, co
identify->mEffectVariant = effectVariant;
/* only call the callback if no identify is in progress */
- if (nullptr != identify->mOnEffectIdentifier &&
- EMBER_ZCL_STATUS_SUCCESS == Attributes::IdentifyTime::Get(endpoint, &identifyTime) && 0 == identifyTime)
+ if (nullptr != identify->mOnEffectIdentifier && Status::Success == Attributes::IdentifyTime::Get(endpoint, &identifyTime) &&
+ 0 == identifyTime)
{
identify->mCurrentEffectIdentifier = identify->mTargetEffectIdentifier;
identify->mOnEffectIdentifier(identify);
diff --git a/src/app/clusters/laundry-dryer-controls-server/laundry-dryer-controls-server.cpp b/src/app/clusters/laundry-dryer-controls-server/laundry-dryer-controls-server.cpp
index c3107015ca6f0c..7a3d47f823c409 100644
--- a/src/app/clusters/laundry-dryer-controls-server/laundry-dryer-controls-server.cpp
+++ b/src/app/clusters/laundry-dryer-controls-server/laundry-dryer-controls-server.cpp
@@ -82,12 +82,12 @@ LaundryDryerControlsServer & LaundryDryerControlsServer::Instance()
return sInstance;
}
-EmberAfStatus LaundryDryerControlsServer::SetSelectedDrynessLevel(EndpointId endpointId, DrynessLevelEnum newSelectedDrynessLevel)
+Status LaundryDryerControlsServer::SetSelectedDrynessLevel(EndpointId endpointId, DrynessLevelEnum newSelectedDrynessLevel)
{
DataModel::Nullable selectedDrynessLevel;
- EmberAfStatus res = SelectedDrynessLevel::Get(endpointId, selectedDrynessLevel);
+ Status res = SelectedDrynessLevel::Get(endpointId, selectedDrynessLevel);
- if ((res == EMBER_ZCL_STATUS_SUCCESS) && (selectedDrynessLevel != newSelectedDrynessLevel))
+ if ((res == Status::Success) && (selectedDrynessLevel != newSelectedDrynessLevel))
{
res = SelectedDrynessLevel::Set(endpointId, newSelectedDrynessLevel);
}
@@ -95,8 +95,8 @@ EmberAfStatus LaundryDryerControlsServer::SetSelectedDrynessLevel(EndpointId end
return res;
}
-EmberAfStatus LaundryDryerControlsServer::GetSelectedDrynessLevel(EndpointId endpointId,
- DataModel::Nullable & selectedDrynessLevel)
+Status LaundryDryerControlsServer::GetSelectedDrynessLevel(EndpointId endpointId,
+ DataModel::Nullable & selectedDrynessLevel)
{
return SelectedDrynessLevel::Get(endpointId, selectedDrynessLevel);
}
diff --git a/src/app/clusters/laundry-dryer-controls-server/laundry-dryer-controls-server.h b/src/app/clusters/laundry-dryer-controls-server/laundry-dryer-controls-server.h
index 454c029e21fc52..5a7123c0ee78e0 100644
--- a/src/app/clusters/laundry-dryer-controls-server/laundry-dryer-controls-server.h
+++ b/src/app/clusters/laundry-dryer-controls-server/laundry-dryer-controls-server.h
@@ -21,6 +21,7 @@
#include
#include
#include
+#include
namespace chip {
namespace app {
@@ -46,8 +47,9 @@ class LaundryDryerControlsServer : public AttributeAccessInterface
/**
* API to set/get the SelectedDrynessLevel attribute
*/
- EmberAfStatus SetSelectedDrynessLevel(EndpointId endpointId, DrynessLevelEnum newSelectedDrynessLevel);
- EmberAfStatus GetSelectedDrynessLevel(EndpointId endpointId, DataModel::Nullable & selectedDrynessLevel);
+ Protocols::InteractionModel::Status SetSelectedDrynessLevel(EndpointId endpointId, DrynessLevelEnum newSelectedDrynessLevel);
+ Protocols::InteractionModel::Status GetSelectedDrynessLevel(EndpointId endpointId,
+ DataModel::Nullable & selectedDrynessLevel);
private:
CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override;
diff --git a/src/app/clusters/laundry-washer-controls-server/laundry-washer-controls-server.cpp b/src/app/clusters/laundry-washer-controls-server/laundry-washer-controls-server.cpp
index cc8d7100e07367..4e58236e9b2cad 100644
--- a/src/app/clusters/laundry-washer-controls-server/laundry-washer-controls-server.cpp
+++ b/src/app/clusters/laundry-washer-controls-server/laundry-washer-controls-server.cpp
@@ -81,11 +81,11 @@ LaundryWasherControlsServer & LaundryWasherControlsServer::Instance()
return sInstance;
}
-EmberAfStatus LaundryWasherControlsServer::SetSpinSpeedCurrent(EndpointId endpointId, DataModel::Nullable spinSpeedCurrent)
+Status LaundryWasherControlsServer::SetSpinSpeedCurrent(EndpointId endpointId, DataModel::Nullable spinSpeedCurrent)
{
DataModel::Nullable spinSpeedCurrentNow;
- EmberAfStatus res = SpinSpeedCurrent::Get(endpointId, spinSpeedCurrentNow);
- if ((res == EMBER_ZCL_STATUS_SUCCESS) && (spinSpeedCurrentNow != spinSpeedCurrent))
+ Status res = SpinSpeedCurrent::Get(endpointId, spinSpeedCurrentNow);
+ if ((res == Status::Success) && (spinSpeedCurrentNow != spinSpeedCurrent))
{
res = SpinSpeedCurrent::Set(endpointId, spinSpeedCurrent);
}
@@ -93,18 +93,17 @@ EmberAfStatus LaundryWasherControlsServer::SetSpinSpeedCurrent(EndpointId endpoi
return res;
}
-EmberAfStatus LaundryWasherControlsServer::GetSpinSpeedCurrent(EndpointId endpointId,
- DataModel::Nullable & spinSpeedCurrent)
+Status LaundryWasherControlsServer::GetSpinSpeedCurrent(EndpointId endpointId, DataModel::Nullable & spinSpeedCurrent)
{
return SpinSpeedCurrent::Get(endpointId, spinSpeedCurrent);
}
-EmberAfStatus LaundryWasherControlsServer::SetNumberOfRinses(EndpointId endpointId, NumberOfRinsesEnum newNumberOfRinses)
+Status LaundryWasherControlsServer::SetNumberOfRinses(EndpointId endpointId, NumberOfRinsesEnum newNumberOfRinses)
{
NumberOfRinsesEnum numberOfRinses;
- EmberAfStatus res = NumberOfRinses::Get(endpointId, &numberOfRinses);
+ Status res = NumberOfRinses::Get(endpointId, &numberOfRinses);
- if ((res == EMBER_ZCL_STATUS_SUCCESS) && (numberOfRinses != newNumberOfRinses))
+ if ((res == Status::Success) && (numberOfRinses != newNumberOfRinses))
{
res = NumberOfRinses::Set(endpointId, newNumberOfRinses);
}
@@ -112,7 +111,7 @@ EmberAfStatus LaundryWasherControlsServer::SetNumberOfRinses(EndpointId endpoint
return res;
}
-EmberAfStatus LaundryWasherControlsServer::GetNumberOfRinses(EndpointId endpointId, NumberOfRinsesEnum & numberOfRinses)
+Status LaundryWasherControlsServer::GetNumberOfRinses(EndpointId endpointId, NumberOfRinsesEnum & numberOfRinses)
{
return NumberOfRinses::Get(endpointId, &numberOfRinses);
}
diff --git a/src/app/clusters/laundry-washer-controls-server/laundry-washer-controls-server.h b/src/app/clusters/laundry-washer-controls-server/laundry-washer-controls-server.h
index f01069135b3e7c..c19b6f88518bf8 100644
--- a/src/app/clusters/laundry-washer-controls-server/laundry-washer-controls-server.h
+++ b/src/app/clusters/laundry-washer-controls-server/laundry-washer-controls-server.h
@@ -22,6 +22,8 @@
#include
#include
+#include
+
namespace chip {
namespace app {
namespace Clusters {
@@ -48,14 +50,14 @@ class LaundryWasherControlsServer : public AttributeAccessInterface
/**
* API to set/get the SpinSpeedCurrent attribute
*/
- EmberAfStatus SetSpinSpeedCurrent(EndpointId endpointId, DataModel::Nullable spinSpeedCurrent);
- EmberAfStatus GetSpinSpeedCurrent(EndpointId endpointId, DataModel::Nullable & spinSpeedCurrent);
+ Protocols::InteractionModel::Status SetSpinSpeedCurrent(EndpointId endpointId, DataModel::Nullable spinSpeedCurrent);
+ Protocols::InteractionModel::Status GetSpinSpeedCurrent(EndpointId endpointId, DataModel::Nullable & spinSpeedCurrent);
/**
* API to set/get the NumberOfRinses attribute
*/
- EmberAfStatus SetNumberOfRinses(EndpointId endpointId, NumberOfRinsesEnum newNumberOfRinses);
- EmberAfStatus GetNumberOfRinses(EndpointId endpointId, NumberOfRinsesEnum & numberOfRinses);
+ Protocols::InteractionModel::Status SetNumberOfRinses(EndpointId endpointId, NumberOfRinsesEnum newNumberOfRinses);
+ Protocols::InteractionModel::Status GetNumberOfRinses(EndpointId endpointId, NumberOfRinsesEnum & numberOfRinses);
private:
CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override;
diff --git a/src/app/clusters/level-control/level-control.cpp b/src/app/clusters/level-control/level-control.cpp
index b1edc341cdd3cc..b04d32fe69c448 100644
--- a/src/app/clusters/level-control/level-control.cpp
+++ b/src/app/clusters/level-control/level-control.cpp
@@ -161,12 +161,12 @@ class DefaultLevelControlSceneHandler : public scenes::DefaultSceneHandlerImpl
using AttributeValuePair = ScenesManagement::Structs::AttributeValuePair::Type;
app::DataModel::Nullable level;
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == Attributes::CurrentLevel::Get(endpoint, level), CHIP_ERROR_READ_FAILED);
+ VerifyOrReturnError(Status::Success == Attributes::CurrentLevel::Get(endpoint, level), CHIP_ERROR_READ_FAILED);
AttributeValuePair pairs[kLevelMaxScenableAttributes];
uint8_t maxLevel;
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == Attributes::MaxLevel::Get(endpoint, &maxLevel), CHIP_ERROR_READ_FAILED);
+ VerifyOrReturnError(Status::Success == Attributes::MaxLevel::Get(endpoint, &maxLevel), CHIP_ERROR_READ_FAILED);
pairs[0].attributeID = Attributes::CurrentLevel::Id;
if (!level.IsNull())
@@ -181,8 +181,7 @@ class DefaultLevelControlSceneHandler : public scenes::DefaultSceneHandlerImpl
if (LevelControlHasFeature(endpoint, LevelControl::Feature::kFrequency))
{
uint16_t frequency;
- VerifyOrReturnError(EMBER_ZCL_STATUS_SUCCESS == Attributes::CurrentFrequency::Get(endpoint, &frequency),
- CHIP_ERROR_READ_FAILED);
+ VerifyOrReturnError(Status::Success == Attributes::CurrentFrequency::Get(endpoint, &frequency), CHIP_ERROR_READ_FAILED);
pairs[attributeCount].attributeID = Attributes::CurrentFrequency::Id;
pairs[attributeCount].attributeValue = frequency;
attributeCount++;
@@ -337,10 +336,10 @@ static EmberAfLevelControlState * getState(EndpointId endpoint)
static void reallyUpdateCoupledColorTemp(EndpointId endpoint)
{
LevelControl::Attributes::Options::TypeInfo::Type options;
- EmberAfStatus status = Attributes::Options::Get(endpoint, &options);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Attributes::Options::Get(endpoint, &options);
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "Unable to read Options attribute: 0x%X", status);
+ ChipLogProgress(Zcl, "Unable to read Options attribute: 0x%X", to_underlying(status));
return;
}
@@ -357,7 +356,7 @@ static void reallyUpdateCoupledColorTemp(EndpointId endpoint)
void emberAfLevelControlClusterServerTickCallback(EndpointId endpoint)
{
EmberAfLevelControlState * state = getState(endpoint);
- EmberAfStatus status;
+ Status status;
app::DataModel::Nullable currentLevel;
const auto callbackStartTimestamp = System::SystemClock().GetMonotonicTimestamp();
@@ -371,9 +370,9 @@ void emberAfLevelControlClusterServerTickCallback(EndpointId endpoint)
// Read the attribute; print error message and return if it can't be read
status = LevelControl::Attributes::CurrentLevel::Get(endpoint, currentLevel);
- if (status != EMBER_ZCL_STATUS_SUCCESS || currentLevel.IsNull())
+ if (status != Status::Success || currentLevel.IsNull())
{
- ChipLogProgress(Zcl, "ERR: reading current level %x", status);
+ ChipLogProgress(Zcl, "ERR: reading current level %x", to_underlying(status));
state->callbackSchedule.runTime = System::Clock::Milliseconds32(0);
writeRemainingTime(endpoint, 0);
return;
@@ -404,9 +403,9 @@ void emberAfLevelControlClusterServerTickCallback(EndpointId endpoint)
ChipLogDetail(Zcl, "(diff %c1)", state->increasing ? '+' : '-');
status = Attributes::CurrentLevel::Set(endpoint, currentLevel);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "ERR: writing current level %x", status);
+ ChipLogProgress(Zcl, "ERR: writing current level %x", to_underlying(status));
state->callbackSchedule.runTime = System::Clock::Milliseconds32(0);
writeRemainingTime(endpoint, 0);
return;
@@ -427,9 +426,9 @@ void emberAfLevelControlClusterServerTickCallback(EndpointId endpoint)
{
uint8_t storedLevel8u = (uint8_t) state->storedLevel;
status = Attributes::CurrentLevel::Set(endpoint, storedLevel8u);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "ERR: writing current level %x", status);
+ ChipLogProgress(Zcl, "ERR: writing current level %x", to_underlying(status));
}
else
{
@@ -469,10 +468,10 @@ static void writeRemainingTime(EndpointId endpoint, uint16_t remainingTimeMs)
// This is done to ensure that the attribute, in tenths of a second, only
// goes to zero when the remaining time in milliseconds is actually zero.
uint16_t remainingTimeDs = static_cast((remainingTimeMs + 99) / 100);
- EmberAfStatus status = LevelControl::Attributes::RemainingTime::Set(endpoint, remainingTimeDs);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = LevelControl::Attributes::RemainingTime::Set(endpoint, remainingTimeDs);
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "ERR: writing remaining time %x", status);
+ ChipLogProgress(Zcl, "ERR: writing remaining time %x", to_underlying(status));
}
}
#endif // IGNORE_LEVEL_CONTROL_CLUSTER_LEVEL_CONTROL_REMAINING_TIME
@@ -515,19 +514,19 @@ static bool shouldExecuteIfOff(EndpointId endpoint, CommandId commandId, chip::O
}
LevelControl::Attributes::Options::TypeInfo::Type options;
- EmberAfStatus status = Attributes::Options::Get(endpoint, &options);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Attributes::Options::Get(endpoint, &options);
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "Unable to read Options attribute: 0x%X", status);
+ ChipLogProgress(Zcl, "Unable to read Options attribute: 0x%X", to_underlying(status));
// If we can't read the attribute, then we should just assume that it has its
// default value.
}
bool on;
status = OnOff::Attributes::OnOff::Get(endpoint, &on);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "Unable to read OnOff attribute: 0x%X", status);
+ ChipLogProgress(Zcl, "Unable to read OnOff attribute: 0x%X", to_underlying(status));
return true;
}
// The device is on - hence ExecuteIfOff does not matter
@@ -803,10 +802,10 @@ static Status moveToLevelHandler(EndpointId endpoint, CommandId commandId, uint8
// Cancel any currently active command before fiddling with the state.
cancelEndpointTimerCallback(endpoint);
- EmberAfStatus status = Attributes::CurrentLevel::Get(endpoint, currentLevel);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Attributes::CurrentLevel::Get(endpoint, currentLevel);
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "ERR: reading current level %x", status);
+ ChipLogProgress(Zcl, "ERR: reading current level %x", to_underlying(status));
return status;
}
@@ -869,9 +868,9 @@ static Status moveToLevelHandler(EndpointId endpoint, CommandId commandId, uint8
{
uint16_t onOffTransitionTime = 0;
status = Attributes::OnOffTransitionTime::Get(endpoint, &onOffTransitionTime);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "ERR: reading on/off transition time %x", status);
+ ChipLogProgress(Zcl, "ERR: reading on/off transition time %x", to_underlying(status));
return status;
}
@@ -1243,7 +1242,7 @@ void emberAfOnOffClusterLevelControlEffectCallback(EndpointId endpoint, bool new
app::DataModel::Nullable transitionTime;
uint16_t currentOnOffTransitionTime;
- EmberAfStatus status;
+ Status status;
bool useOnLevel = false;
EmberAfLevelControlState * state = getState(endpoint);
@@ -1257,9 +1256,9 @@ void emberAfOnOffClusterLevelControlEffectCallback(EndpointId endpoint, bool new
// "Temporarily store CurrentLevel."
status = Attributes::CurrentLevel::Get(endpoint, temporaryCurrentLevelCache);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "ERR: reading current level %x", status);
+ ChipLogProgress(Zcl, "ERR: reading current level %x", to_underlying(status));
return;
}
@@ -1273,9 +1272,9 @@ void emberAfOnOffClusterLevelControlEffectCallback(EndpointId endpoint, bool new
if (emberAfContainsAttribute(endpoint, LevelControl::Id, Attributes::OnLevel::Id))
{
status = Attributes::OnLevel::Get(endpoint, resolvedLevel);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "ERR: reading on level %x", status);
+ ChipLogProgress(Zcl, "ERR: reading on level %x", to_underlying(status));
return;
}
@@ -1302,9 +1301,9 @@ void emberAfOnOffClusterLevelControlEffectCallback(EndpointId endpoint, bool new
if (emberAfContainsAttribute(endpoint, LevelControl::Id, Attributes::OnOffTransitionTime::Id))
{
status = Attributes::OnOffTransitionTime::Get(endpoint, ¤tOnOffTransitionTime);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "ERR: reading current level %x", status);
+ ChipLogProgress(Zcl, "ERR: reading current level %x", to_underlying(status));
return;
}
transitionTime.SetNonNull(currentOnOffTransitionTime);
@@ -1322,9 +1321,9 @@ void emberAfOnOffClusterLevelControlEffectCallback(EndpointId endpoint, bool new
// If newValue is OnOff::Commands::On::Id...
// "Set CurrentLevel to minimum level allowed for the device."
status = Attributes::CurrentLevel::Set(endpoint, minimumLevelAllowedForTheDevice);
- if (status != EMBER_ZCL_STATUS_SUCCESS)
+ if (status != Status::Success)
{
- ChipLogProgress(Zcl, "ERR: reading current level %x", status);
+ ChipLogProgress(Zcl, "ERR: reading current level %x", to_underlying(status));
return;
}
@@ -1386,8 +1385,8 @@ void emberAfLevelControlClusterServerInitCallback(EndpointId endpoint)
}
app::DataModel::Nullable currentLevel;
- EmberAfStatus status = Attributes::CurrentLevel::Get(endpoint, currentLevel);
- if (status == EMBER_ZCL_STATUS_SUCCESS)
+ Status status = Attributes::CurrentLevel::Get(endpoint, currentLevel);
+ if (status == Status::Success)
{
#ifndef IGNORE_LEVEL_CONTROL_CLUSTER_START_UP_CURRENT_LEVEL
// StartUp behavior relies StartUpCurrentLevel attributes being Non Volatile.
@@ -1408,7 +1407,7 @@ void emberAfLevelControlClusterServerInitCallback(EndpointId endpoint)
app::DataModel::Nullable