From a8dd074a45bca4ccabfb6fb5d6017e71202883f0 Mon Sep 17 00:00:00 2001 From: jczhang Date: Fri, 17 May 2024 17:56:50 +0800 Subject: [PATCH] First commit --- BUILD.gn | 6 + build_overrides/qcc74x_iot_sdk.gni | 19 + config/qcc74x/args.gni | 19 + config/qcc74x/common/lib/pw_rpc/BUILD.gn | 46 + config/qcc74x/common/lib/pw_rpc/pw_rpc.gni | 31 + config/qcc74x/toolchain/BUILD.gn | 20 + config/qcc74x/toolchain/riscv_toolchain.gni | 48 + examples/build_overrides/qcc74x_sdk.gni | 20 + .../lighting-app/qcc74x/common/AppTask.cpp | 530 ++ examples/lighting-app/qcc74x/common/AppTask.h | 143 + .../qcc74x/common/ZclCallbacks.cpp | 96 + .../data_model/lighting-app-ethernet.matter | 2250 +++++++ .../data_model/lighting-app-ethernet.zap | 4329 ++++++++++++++ .../data_model/lighting-app-thread.matter | 2436 ++++++++ .../qcc74x/data_model/lighting-app-thread.zap | 5305 +++++++++++++++++ .../data_model/lighting-app-wifi.matter | 2299 +++++++ .../qcc74x/data_model/lighting-app-wifi.zap | 4512 ++++++++++++++ examples/lighting-app/qcc74x/qcc743/.gn | 28 + examples/lighting-app/qcc74x/qcc743/BUILD.gn | 251 + .../qcc74x/qcc743/CHIPProjectConfig.h | 129 + examples/lighting-app/qcc74x/qcc743/args.gni | 35 + .../qcc74x/qcc743/build_overrides | 1 + examples/lighting-app/qcc74x/qcc743/mboard.h | 46 + .../qcc74x/qcc743/third_party/connectedhomeip | 1 + .../qcc74x/common/bouffalo_sdk/demo_pwm.c | 148 + .../common/bouffalo_sdk/platform_port.cpp | 62 + .../qcc74x/common/bouffalo_sdk/uart.c | 228 + .../qcc74x/common/bouffalo_sdk/uart.h | 37 + .../platform/qcc74x/common/iot_sdk/aos_task.c | 40 + .../platform/qcc74x/common/iot_sdk/demo_pwm.c | 193 + .../qcc74x/common/iot_sdk/platform_port.cpp | 425 ++ .../platform/qcc74x/common/iot_sdk/uart.cpp | 226 + .../platform/qcc74x/common/plat/LEDWidget.cpp | 126 + .../platform/qcc74x/common/plat/LEDWidget.h | 60 + .../qcc74x/common/plat/MemMonitoring.cpp | 68 + .../qcc74x/common/plat/MemMonitoring.h | 35 + .../platform/qcc74x/common/plat/OTAConfig.cpp | 56 + .../platform/qcc74x/common/plat/OTAConfig.h | 34 + .../platform/qcc74x/common/plat/demo_pwm.h | 21 + examples/platform/qcc74x/common/plat/main.cpp | 70 + examples/platform/qcc74x/common/plat/plat.h | 37 + .../platform/qcc74x/common/plat/platform.cpp | 286 + examples/platform/qcc74x/common/plat/uart.h | 29 + .../qcc74x/common/route_hook/bl_lwip_hooks.h | 13 + .../qcc74x/common/route_hook/bl_route_hook.c | 214 + .../qcc74x/common/route_hook/bl_route_hook.h | 10 + .../qcc74x/common/route_hook/bl_route_table.c | 174 + .../qcc74x/common/route_hook/bl_route_table.h | 76 + .../qcc74x/common/rpc/PigweedLogger.cpp | 107 + .../qcc74x/common/rpc/PigweedLogger.h | 31 + examples/platform/qcc74x/common/rpc/Rpc.cpp | 243 + examples/platform/qcc74x/common/rpc/Rpc.h | 30 + .../qcc74x/common/rpc/pw_sys_io/BUILD.gn | 40 + .../rpc/pw_sys_io/public/pw_sys_io/init.h | 27 + .../qcc74x/common/rpc/pw_sys_io/sys_io.cc | 60 + .../qcc74x/doc/chart/BL602-IoT-Matter_V1.png | Bin 0 -> 2355140 bytes .../qcc74x/doc/chart/bl706_dev_board.jpg | Bin 0 -> 1612953 bytes examples/platform/qcc74x/qcc743/BUILD.gn | 22 + .../platform/qcc74x/qcc743/FreeRTOSConfig.h | 138 + examples/platform/qcc74x/qcc743/args.gni | 21 + .../platform/qcc74x/qcc743/bl616_lwip_hooks.h | 15 + .../qcc743/flash_config/partition_cfg_4M.toml | 141 + .../qcc74x/qcc743/ldscripts/bl616_flash.ld | 358 ++ examples/platform/qcc74x/qcc743/lwipopts.h | 167 + scripts/build/BUILD.gn | 1 + scripts/build/build/targets.py | 30 + scripts/build/builders/qcc74x.py | 278 + scripts/checkout_submodules.py | 1 + scripts/flashing/qcc74x_firmware_utils.py | 321 + scripts/tools/check_includes_config.py | 1 + scripts/tools/qcc74x/factory_qrcode.py | 84 + src/lib/shell/BUILD.gn | 12 +- src/lib/shell/streamer_qcc74x.cpp | 105 + src/lwip/BUILD.gn | 12 + src/platform/BUILD.gn | 8 + src/platform/device.gni | 2 + src/platform/qcc74x/common/BLConfig.cpp | 324 + src/platform/qcc74x/common/BLConfig.h | 112 + .../qcc74x/common/BLConfig_littlefs.cpp | 345 ++ src/platform/qcc74x/common/BLEManagerImpl.cpp | 860 +++ src/platform/qcc74x/common/BLEManagerImpl.h | 187 + .../qcc74x/common/BlePlatformConfig.h | 25 + .../qcc74x/common/CHIPDevicePlatformConfig.h | 61 + .../qcc74x/common/CHIPDevicePlatformEvent.h | 102 + .../qcc74x/common/CHIPPlatformConfig.h | 90 + .../common/ConfigurationManagerImpl.cpp | 210 + .../qcc74x/common/ConfigurationManagerImpl.h | 76 + .../qcc74x/common/ConnectivityManagerImpl.cpp | 347 ++ .../qcc74x/common/ConnectivityManagerImpl.h | 181 + .../common/DiagnosticDataProviderImpl.cpp | 297 + .../common/DiagnosticDataProviderImpl.h | 69 + .../qcc74x/common/FactoryDataProvider.cpp | 694 +++ .../qcc74x/common/FactoryDataProvider.h | 68 + .../qcc74x/common/InetPlatformConfig.h | 34 + .../common/KeyValueStoreManagerImpl.cpp | 62 + .../qcc74x/common/KeyValueStoreManagerImpl.h | 64 + src/platform/qcc74x/common/Logging.cpp | 160 + .../qcc74x/common/OTAImageProcessorImpl.cpp | 309 + .../qcc74x/common/OTAImageProcessorImpl.h | 64 + .../qcc74x/common/PlatformManagerImpl.cpp | 70 + .../qcc74x/common/PlatformManagerImpl.h | 105 + .../qcc74x/common/SystemPlatformConfig.h | 46 + .../qcc74x/common/ThreadStackManagerImpl.h | 111 + src/platform/qcc74x/common/args.gni | 22 + src/platform/qcc74x/qcc743/BUILD.gn | 81 + .../qcc74x/qcc743/CHIPMem-Platform.cpp | 89 + .../qcc743/ConfigurationManagerImpl.cpp | 46 + .../qcc74x/qcc743/ConnectivityManagerImpl.cpp | 103 + .../qcc743/DiagnosticDataProviderImpl.cpp | 135 + .../qcc743/NetworkCommissioningDriver.cpp | 432 ++ .../qcc743/NetworkCommissioningDriver.h | 150 + .../qcc74x/qcc743/PlatformManagerImpl.cpp | 76 + src/platform/qcc74x/qcc743/args.gni | 40 + .../qcc74x/qcc743/bl616-chip-mbedtls-config.h | 173 + .../qcc74x/qcc743/wifi_mgmr_portable.c | 64 + .../qcc74x/qcc743/wifi_mgmr_portable.h | 18 + src/system/BUILD.gn | 2 + .../qcc74x/common/bouffalolab_board.gni | 25 + .../qcc74x/common/bouffalolab_executable.gni | 101 + third_party/qcc74x/common/rsicv.gni | 26 + third_party/qcc74x/env-setup.sh | 86 + third_party/qcc74x/qcc743/BUILD.gn | 27 + third_party/qcc74x/qcc743/bouffalo_sdk.gni | 1207 ++++ third_party/qcc74x/qcc74x_sdk | 1 + third_party/qcc74x/repo | 1 + 125 files changed, 35499 insertions(+), 2 deletions(-) create mode 100644 build_overrides/qcc74x_iot_sdk.gni create mode 100644 config/qcc74x/args.gni create mode 100644 config/qcc74x/common/lib/pw_rpc/BUILD.gn create mode 100644 config/qcc74x/common/lib/pw_rpc/pw_rpc.gni create mode 100644 config/qcc74x/toolchain/BUILD.gn create mode 100644 config/qcc74x/toolchain/riscv_toolchain.gni create mode 100644 examples/build_overrides/qcc74x_sdk.gni create mode 100644 examples/lighting-app/qcc74x/common/AppTask.cpp create mode 100644 examples/lighting-app/qcc74x/common/AppTask.h create mode 100644 examples/lighting-app/qcc74x/common/ZclCallbacks.cpp create mode 100644 examples/lighting-app/qcc74x/data_model/lighting-app-ethernet.matter create mode 100644 examples/lighting-app/qcc74x/data_model/lighting-app-ethernet.zap create mode 100644 examples/lighting-app/qcc74x/data_model/lighting-app-thread.matter create mode 100644 examples/lighting-app/qcc74x/data_model/lighting-app-thread.zap create mode 100644 examples/lighting-app/qcc74x/data_model/lighting-app-wifi.matter create mode 100644 examples/lighting-app/qcc74x/data_model/lighting-app-wifi.zap create mode 100644 examples/lighting-app/qcc74x/qcc743/.gn create mode 100644 examples/lighting-app/qcc74x/qcc743/BUILD.gn create mode 100644 examples/lighting-app/qcc74x/qcc743/CHIPProjectConfig.h create mode 100644 examples/lighting-app/qcc74x/qcc743/args.gni create mode 120000 examples/lighting-app/qcc74x/qcc743/build_overrides create mode 100644 examples/lighting-app/qcc74x/qcc743/mboard.h create mode 120000 examples/lighting-app/qcc74x/qcc743/third_party/connectedhomeip create mode 100644 examples/platform/qcc74x/common/bouffalo_sdk/demo_pwm.c create mode 100644 examples/platform/qcc74x/common/bouffalo_sdk/platform_port.cpp create mode 100644 examples/platform/qcc74x/common/bouffalo_sdk/uart.c create mode 100644 examples/platform/qcc74x/common/bouffalo_sdk/uart.h create mode 100644 examples/platform/qcc74x/common/iot_sdk/aos_task.c create mode 100644 examples/platform/qcc74x/common/iot_sdk/demo_pwm.c create mode 100644 examples/platform/qcc74x/common/iot_sdk/platform_port.cpp create mode 100644 examples/platform/qcc74x/common/iot_sdk/uart.cpp create mode 100644 examples/platform/qcc74x/common/plat/LEDWidget.cpp create mode 100644 examples/platform/qcc74x/common/plat/LEDWidget.h create mode 100644 examples/platform/qcc74x/common/plat/MemMonitoring.cpp create mode 100644 examples/platform/qcc74x/common/plat/MemMonitoring.h create mode 100644 examples/platform/qcc74x/common/plat/OTAConfig.cpp create mode 100644 examples/platform/qcc74x/common/plat/OTAConfig.h create mode 100644 examples/platform/qcc74x/common/plat/demo_pwm.h create mode 100644 examples/platform/qcc74x/common/plat/main.cpp create mode 100644 examples/platform/qcc74x/common/plat/plat.h create mode 100644 examples/platform/qcc74x/common/plat/platform.cpp create mode 100644 examples/platform/qcc74x/common/plat/uart.h create mode 100644 examples/platform/qcc74x/common/route_hook/bl_lwip_hooks.h create mode 100644 examples/platform/qcc74x/common/route_hook/bl_route_hook.c create mode 100644 examples/platform/qcc74x/common/route_hook/bl_route_hook.h create mode 100644 examples/platform/qcc74x/common/route_hook/bl_route_table.c create mode 100644 examples/platform/qcc74x/common/route_hook/bl_route_table.h create mode 100644 examples/platform/qcc74x/common/rpc/PigweedLogger.cpp create mode 100644 examples/platform/qcc74x/common/rpc/PigweedLogger.h create mode 100644 examples/platform/qcc74x/common/rpc/Rpc.cpp create mode 100644 examples/platform/qcc74x/common/rpc/Rpc.h create mode 100644 examples/platform/qcc74x/common/rpc/pw_sys_io/BUILD.gn create mode 100644 examples/platform/qcc74x/common/rpc/pw_sys_io/public/pw_sys_io/init.h create mode 100644 examples/platform/qcc74x/common/rpc/pw_sys_io/sys_io.cc create mode 100644 examples/platform/qcc74x/doc/chart/BL602-IoT-Matter_V1.png create mode 100644 examples/platform/qcc74x/doc/chart/bl706_dev_board.jpg create mode 100644 examples/platform/qcc74x/qcc743/BUILD.gn create mode 100644 examples/platform/qcc74x/qcc743/FreeRTOSConfig.h create mode 100644 examples/platform/qcc74x/qcc743/args.gni create mode 100644 examples/platform/qcc74x/qcc743/bl616_lwip_hooks.h create mode 100644 examples/platform/qcc74x/qcc743/flash_config/partition_cfg_4M.toml create mode 100644 examples/platform/qcc74x/qcc743/ldscripts/bl616_flash.ld create mode 100644 examples/platform/qcc74x/qcc743/lwipopts.h create mode 100644 scripts/build/builders/qcc74x.py create mode 100644 scripts/flashing/qcc74x_firmware_utils.py create mode 100644 scripts/tools/qcc74x/factory_qrcode.py create mode 100644 src/lib/shell/streamer_qcc74x.cpp create mode 100644 src/platform/qcc74x/common/BLConfig.cpp create mode 100644 src/platform/qcc74x/common/BLConfig.h create mode 100644 src/platform/qcc74x/common/BLConfig_littlefs.cpp create mode 100644 src/platform/qcc74x/common/BLEManagerImpl.cpp create mode 100644 src/platform/qcc74x/common/BLEManagerImpl.h create mode 100644 src/platform/qcc74x/common/BlePlatformConfig.h create mode 100644 src/platform/qcc74x/common/CHIPDevicePlatformConfig.h create mode 100644 src/platform/qcc74x/common/CHIPDevicePlatformEvent.h create mode 100644 src/platform/qcc74x/common/CHIPPlatformConfig.h create mode 100644 src/platform/qcc74x/common/ConfigurationManagerImpl.cpp create mode 100644 src/platform/qcc74x/common/ConfigurationManagerImpl.h create mode 100644 src/platform/qcc74x/common/ConnectivityManagerImpl.cpp create mode 100644 src/platform/qcc74x/common/ConnectivityManagerImpl.h create mode 100644 src/platform/qcc74x/common/DiagnosticDataProviderImpl.cpp create mode 100644 src/platform/qcc74x/common/DiagnosticDataProviderImpl.h create mode 100644 src/platform/qcc74x/common/FactoryDataProvider.cpp create mode 100644 src/platform/qcc74x/common/FactoryDataProvider.h create mode 100644 src/platform/qcc74x/common/InetPlatformConfig.h create mode 100644 src/platform/qcc74x/common/KeyValueStoreManagerImpl.cpp create mode 100644 src/platform/qcc74x/common/KeyValueStoreManagerImpl.h create mode 100644 src/platform/qcc74x/common/Logging.cpp create mode 100644 src/platform/qcc74x/common/OTAImageProcessorImpl.cpp create mode 100644 src/platform/qcc74x/common/OTAImageProcessorImpl.h create mode 100644 src/platform/qcc74x/common/PlatformManagerImpl.cpp create mode 100644 src/platform/qcc74x/common/PlatformManagerImpl.h create mode 100644 src/platform/qcc74x/common/SystemPlatformConfig.h create mode 100644 src/platform/qcc74x/common/ThreadStackManagerImpl.h create mode 100644 src/platform/qcc74x/common/args.gni create mode 100644 src/platform/qcc74x/qcc743/BUILD.gn create mode 100644 src/platform/qcc74x/qcc743/CHIPMem-Platform.cpp create mode 100644 src/platform/qcc74x/qcc743/ConfigurationManagerImpl.cpp create mode 100644 src/platform/qcc74x/qcc743/ConnectivityManagerImpl.cpp create mode 100644 src/platform/qcc74x/qcc743/DiagnosticDataProviderImpl.cpp create mode 100644 src/platform/qcc74x/qcc743/NetworkCommissioningDriver.cpp create mode 100644 src/platform/qcc74x/qcc743/NetworkCommissioningDriver.h create mode 100644 src/platform/qcc74x/qcc743/PlatformManagerImpl.cpp create mode 100644 src/platform/qcc74x/qcc743/args.gni create mode 100644 src/platform/qcc74x/qcc743/bl616-chip-mbedtls-config.h create mode 100644 src/platform/qcc74x/qcc743/wifi_mgmr_portable.c create mode 100644 src/platform/qcc74x/qcc743/wifi_mgmr_portable.h create mode 100644 third_party/qcc74x/common/bouffalolab_board.gni create mode 100644 third_party/qcc74x/common/bouffalolab_executable.gni create mode 100644 third_party/qcc74x/common/rsicv.gni create mode 100755 third_party/qcc74x/env-setup.sh create mode 100644 third_party/qcc74x/qcc743/BUILD.gn create mode 100644 third_party/qcc74x/qcc743/bouffalo_sdk.gni create mode 160000 third_party/qcc74x/qcc74x_sdk create mode 160000 third_party/qcc74x/repo diff --git a/BUILD.gn b/BUILD.gn index 0992c61b0510c6..c67fc7a9c0136f 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -272,6 +272,9 @@ if (current_toolchain != "${dir_pw_toolchain}/default:default") { # Set this to true to enable bl602 builds by default. enable_bl602_builds = false + # Set this to true to enable qcc743 builds by default. + enable_qcc743_builds = false + # Set this to true to enable bl702 builds by default. enable_bl702_builds = false @@ -402,6 +405,9 @@ if (current_toolchain != "${dir_pw_toolchain}/default:default") { # Build the bl602 lighting app example. enable_bl602_lighting_app_build = enable_bl602_builds + # Build the qcc743 lighting app example. + enable_qcc743_lighting_app_build = enable_qcc743_builds + # Build the bl702 lighting app example. enable_bl702_lighting_app_build = enable_bl702_builds diff --git a/build_overrides/qcc74x_iot_sdk.gni b/build_overrides/qcc74x_iot_sdk.gni new file mode 100644 index 00000000000000..788d2a6a2714c3 --- /dev/null +++ b/build_overrides/qcc74x_iot_sdk.gni @@ -0,0 +1,19 @@ +# 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. + +declare_args() { + qcc74x_iot_sdk_build_root = "//third_party/qcc74x/" + + qcc74x_sdk_root = "/opt/qcc74x_sdk" +} diff --git a/config/qcc74x/args.gni b/config/qcc74x/args.gni new file mode 100644 index 00000000000000..ca2eca869106cc --- /dev/null +++ b/config/qcc74x/args.gni @@ -0,0 +1,19 @@ +# Copyright (c) 2022 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. + +# Options from standalone-chip.mk that differ from configure defaults. These +# options are used from examples/. + +custom_toolchain = + "//third_party/connectedhomeip/config/qcc74x/toolchain:riscv_gcc" diff --git a/config/qcc74x/common/lib/pw_rpc/BUILD.gn b/config/qcc74x/common/lib/pw_rpc/BUILD.gn new file mode 100644 index 00000000000000..897c5f4e402270 --- /dev/null +++ b/config/qcc74x/common/lib/pw_rpc/BUILD.gn @@ -0,0 +1,46 @@ +# 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") +import("$dir_pw_build/target_types.gni") + +config("pw_string_config") { + defines = [ + "_GLIBCXX_USE_C99_MATH_TR1", + "_LDBL_EQ_DBL", + ] +} + +pw_source_set("pw_string_dep") { + public_configs = [ ":pw_string_config" ] +} + +static_library("pw_rpc") { + output_name = "libPwRpc" + + public_configs = [ "${dir_pigweed}/pw_hdlc:default_config" ] + + public_deps = [ + "$dir_pw_rpc:server", + "$dir_pw_rpc/nanopb:echo_service", + "${chip_root}/examples/platform/qcc74x/common/rpc/pw_sys_io:pw_sys_io", + dir_pw_assert, + dir_pw_checksum, + dir_pw_hdlc, + dir_pw_log, + ] + + output_dir = "${root_out_dir}/lib" +} diff --git a/config/qcc74x/common/lib/pw_rpc/pw_rpc.gni b/config/qcc74x/common/lib/pw_rpc/pw_rpc.gni new file mode 100644 index 00000000000000..ef3943d5097314 --- /dev/null +++ b/config/qcc74x/common/lib/pw_rpc/pw_rpc.gni @@ -0,0 +1,31 @@ +# 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") + +pw_log_BACKEND = "$dir_pw_log_basic" +pw_assert_BACKEND = "$dir_pw_assert_log" +pw_sys_io_BACKEND = + "${chip_root}/examples/platform/qcc74x/common/rpc/pw_sys_io:pw_sys_io" + +pw_string_CONFIG = + "${chip_root}/config/qcc74x/common/lib/pw_rpc:pw_string_dep" + +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/qcc74x/toolchain/BUILD.gn b/config/qcc74x/toolchain/BUILD.gn new file mode 100644 index 00000000000000..b6eefabe6ed041 --- /dev/null +++ b/config/qcc74x/toolchain/BUILD.gn @@ -0,0 +1,20 @@ +# 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("riscv_toolchain.gni") + +riscv_toolchain("riscv_gcc") { + toolchain_args = { + } +} diff --git a/config/qcc74x/toolchain/riscv_toolchain.gni b/config/qcc74x/toolchain/riscv_toolchain.gni new file mode 100644 index 00000000000000..14eb800d8fa3f8 --- /dev/null +++ b/config/qcc74x/toolchain/riscv_toolchain.gni @@ -0,0 +1,48 @@ +# 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/build.gni") +import("//build_overrides/chip.gni") + +import("//build_overrides/qcc74x_iot_sdk.gni") +import("${build_root}/toolchain/gcc_toolchain.gni") +import("${chip_root}/src/platform/device.gni") + +template("riscv_toolchain") { + gcc_toolchain(target_name) { + _tool_name_root = "" + + if ("linux" == host_os) { + if (chip_device_platform == "qcc743") { + _tool_name_root = "${qcc74x_sdk_root}/toolchain/t-head-riscv/gcc_t-head_v2.6.1/bin/riscv64-unknown-elf-" + } else { + _tool_name_root = "${qcc74x_sdk_root}/toolchain/riscv/Linux/bin/riscv64-unknown-elf-" + } + } else if ("mac" == host_os || "darwin" == host_os) { + _tool_name_root = "${qcc74x_sdk_root}/toolchain/riscv/Darwin/bin/riscv64-unknown-elf-" + } + + ar = _tool_name_root + "ar" + cc = _tool_name_root + "gcc" + cxx = _tool_name_root + "g++" + + toolchain_args = { + current_cpu = "riscv" + current_os = invoker.current_os + is_clang = false + + forward_variables_from(invoker.toolchain_args, "*") + } + } +} diff --git a/examples/build_overrides/qcc74x_sdk.gni b/examples/build_overrides/qcc74x_sdk.gni new file mode 100644 index 00000000000000..c8b9b483e4a5d2 --- /dev/null +++ b/examples/build_overrides/qcc74x_sdk.gni @@ -0,0 +1,20 @@ +# 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. + +declare_args() { + qcc74x_iot_sdk_build_root = + "//third_party/connectedhomeip/third_party/qcc74x" + + qcc74x_sdk_root = "/opt/qcc74x_sdk" +} diff --git a/examples/lighting-app/qcc74x/common/AppTask.cpp b/examples/lighting-app/qcc74x/common/AppTask.cpp new file mode 100644 index 00000000000000..9c6665bb78d826 --- /dev/null +++ b/examples/lighting-app/qcc74x/common/AppTask.cpp @@ -0,0 +1,530 @@ +/* + * + * Copyright (c) 2020 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 +#include + +#include +#include +#include +#include +#include +#include +#include + +#if HEAP_MONITORING +#include "MemMonitoring.h" +#endif + +#if CHIP_ENABLE_OPENTHREAD +#include +#include +#include +#include +#endif + +#if CONFIG_ENABLE_CHIP_SHELL +#include +#include +#endif + +#include +#include + +#if CHIP_DEVICE_LAYER_TARGET_QCC743 +#ifdef BOOT_PIN_RESET +#include +#endif +#else +extern "C" { +#include +#include +#include +} +#include +#endif + +#include "AppTask.h" +#include "mboard.h" + +using namespace ::chip; +using namespace ::chip::app; +using namespace ::chip::Credentials; +using namespace ::chip::DeviceLayer; + +#if CONFIG_ENABLE_CHIP_SHELL +using namespace chip::Shell; +#endif + +namespace { + +#if defined(BL706_NIGHT_LIGHT) || defined(BL602_NIGHT_LIGHT) +ColorLEDWidget sLightLED; +#else +DimmableLEDWidget sLightLED; +#endif + +Identify sIdentify = { + APP_LIGHT_ENDPOINT_ID, + AppTask::IdentifyStartHandler, + AppTask::IdentifyStopHandler, + Clusters::Identify::IdentifyTypeEnum::kLightOutput, +}; + +} // namespace + +AppTask AppTask::sAppTask; +StackType_t AppTask::appStack[APP_TASK_STACK_SIZE / sizeof(StackType_t)]; +StaticTask_t AppTask::appTaskStruct; + +void StartAppTask(void) +{ + GetAppTask().sAppTaskHandle = xTaskCreateStatic(GetAppTask().AppTaskMain, APP_TASK_NAME, ArraySize(GetAppTask().appStack), NULL, + APP_TASK_PRIORITY, GetAppTask().appStack, &GetAppTask().appTaskStruct); + if (GetAppTask().sAppTaskHandle == NULL) + { + ChipLogError(NotSpecified, "Failed to create app task"); + appError(APP_ERROR_EVENT_QUEUE_FAILED); + } +} + +#if CONFIG_ENABLE_CHIP_SHELL +#if CHIP_DEVICE_LAYER_TARGET_QCC743 +CHIP_ERROR AppTask::StartAppShellTask() +{ + Engine::Root().Init(); + + cmd_misc_init(); + + Engine::Root().RunMainLoop(); + + return CHIP_NO_ERROR; +} +#else +void AppTask::AppShellTask(void * args) +{ + Engine::Root().RunMainLoop(); +} + +CHIP_ERROR AppTask::StartAppShellTask() +{ + static TaskHandle_t shellTask; + + Engine::Root().Init(); + + cmd_misc_init(); + + xTaskCreate(AppTask::AppShellTask, "chip_shell", 1024 / sizeof(configSTACK_DEPTH_TYPE), NULL, APP_TASK_PRIORITY, &shellTask); + + return CHIP_NO_ERROR; +} +#endif +#endif + +void AppTask::PostEvent(app_event_t event) +{ + if (xPortIsInsideInterrupt()) + { + BaseType_t higherPrioTaskWoken = pdFALSE; + xTaskNotifyFromISR(sAppTaskHandle, event, eSetBits, &higherPrioTaskWoken); + } + else + { + xTaskNotify(sAppTaskHandle, event, eSetBits); + } +} + +void AppTask::AppTaskMain(void * pvParameter) +{ + app_event_t appEvent; + bool onoff = false; + uint64_t currentHeapFree = 0; + +#if !(CHIP_DEVICE_LAYER_TARGET_BL702 && CHIP_DEVICE_CONFIG_ENABLE_ETHERNET) + sLightLED.Init(); +#endif + +#ifdef BOOT_PIN_RESET + ButtonInit(); +#else + /** Without RESET PIN defined, factory reset will be executed if power cycle count(resetCnt) >= APP_REBOOT_RESET_COUNT */ + uint32_t resetCnt = 0; + size_t saved_value_len = 0; + ef_get_env_blob(APP_REBOOT_RESET_COUNT_KEY, &resetCnt, sizeof(resetCnt), &saved_value_len); + + if (resetCnt > APP_REBOOT_RESET_COUNT) + { + resetCnt = 0; + /** To share with RESET PIN logic, mButtonPressedTime is used to recorded resetCnt increased. + * +1 makes sure mButtonPressedTime is not zero; + * a power cycle during factory reset confirm time APP_BUTTON_PRESS_LONG will cancel factoryreset */ + GetAppTask().mButtonPressedTime = System::SystemClock().GetMonotonicMilliseconds64().count() + 1; + } + else + { + resetCnt++; + GetAppTask().mButtonPressedTime = 0; + } + ef_set_env_blob(APP_REBOOT_RESET_COUNT_KEY, &resetCnt, sizeof(resetCnt)); +#endif + + GetAppTask().sTimer = + xTimerCreate("lightTmr", pdMS_TO_TICKS(APP_TIMER_EVENT_DEFAULT_ITVL), false, NULL, AppTask::TimerCallback); + if (GetAppTask().sTimer == NULL) + { + ChipLogError(NotSpecified, "Failed to create timer task"); + appError(APP_ERROR_EVENT_QUEUE_FAILED); + } + + ChipLogProgress(NotSpecified, "Starting Platform Manager Event Loop"); + CHIP_ERROR ret = PlatformMgr().StartEventLoopTask(); + if (ret != CHIP_NO_ERROR) + { + ChipLogError(NotSpecified, "PlatformMgr().StartEventLoopTask() failed"); + appError(ret); + } + + GetAppTask().PostEvent(APP_EVENT_TIMER); + GetAppTask().PostEvent(APP_EVENT_LIGHTING_MASK); + + vTaskSuspend(NULL); + + DiagnosticDataProviderImpl::GetDefaultInstance().GetCurrentHeapFree(currentHeapFree); + ChipLogProgress(NotSpecified, "App Task started, with SRAM heap %lld left\r\n",currentHeapFree); + + while (true) + { + appEvent = APP_EVENT_NONE; + BaseType_t eventReceived = xTaskNotifyWait(0, APP_EVENT_ALL_MASK, (uint32_t *) &appEvent, portMAX_DELAY); + + if (eventReceived) + { + PlatformMgr().LockChipStack(); + + if (APP_EVENT_LIGHTING_MASK & appEvent) + { + LightingUpdate(appEvent); + } + + if (APP_EVENT_BTN_SHORT & appEvent) + { + if (Server::GetInstance().GetFabricTable().FabricCount()) + { + Clusters::OnOff::Attributes::OnOff::Get(GetAppTask().GetEndpointId(), &onoff); + onoff = !onoff; + Clusters::OnOff::Attributes::OnOff::Set(GetAppTask().GetEndpointId(), onoff); + } + else + { + sLightLED.Toggle(); + } + } + +#ifdef BOOT_PIN_RESET + if (APP_EVENT_BTN_LONG & appEvent) + { + /** Turn off light to indicate button long press for factory reset is confirmed */ + sLightLED.SetOnoff(false); + } +#endif + if (APP_EVENT_IDENTIFY_MASK & appEvent) + { + IdentifyHandleOp(appEvent); + } + + if (APP_EVENT_FACTORY_RESET & appEvent) + { + DeviceLayer::ConfigurationMgr().InitiateFactoryReset(); + } + + TimerEventHandler(appEvent); + + PlatformMgr().UnlockChipStack(); + } + } +} + +void AppTask::LightingUpdate(app_event_t status) +{ + uint8_t hue, sat; + bool onoff; + DataModel::Nullable v(0); + EndpointId endpoint = GetAppTask().GetEndpointId(); + + if (APP_EVENT_LIGHTING_MASK & status) + { + + if (Server::GetInstance().GetFabricTable().FabricCount()) + { + do + { + if (Protocols::InteractionModel::Status::Success != Clusters::OnOff::Attributes::OnOff::Get(endpoint, &onoff)) + { + break; + } + + if (Protocols::InteractionModel::Status::Success != + Clusters::LevelControl::Attributes::CurrentLevel::Get(endpoint, v)) + { + break; + } + + if (Protocols::InteractionModel::Status::Success != + Clusters::ColorControl::Attributes::CurrentHue::Get(endpoint, &hue)) + { + break; + } + + if (Protocols::InteractionModel::Status::Success != + Clusters::ColorControl::Attributes::CurrentSaturation::Get(endpoint, &sat)) + { + break; + } + + if (!onoff) + { + sLightLED.SetLevel(0); + } + else + { + if (v.IsNull()) + { + v.SetNonNull(254); + } +#if defined(BL706_NIGHT_LIGHT) || defined(BL602_NIGHT_LIGHT) + sLightLED.SetColor(v.Value(), hue, sat); +#else + sLightLED.SetLevel(v.Value()); +#endif + } + } while (0); + } + else + { +#if defined(BL706_NIGHT_LIGHT) || defined(BL602_NIGHT_LIGHT) + /** show yellow to indicate not-provision state for extended color light */ + sLightLED.SetColor(254, 35, 254); +#else + /** show 30% brightness to indicate not-provision state */ + sLightLED.SetLevel(25); +#endif + } + } +} + +bool AppTask::StartTimer(void) +{ + if (xTimerIsTimerActive(GetAppTask().sTimer)) + { + CancelTimer(); + } + + if (GetAppTask().mTimerIntvl == 0) + { + GetAppTask().mTimerIntvl = APP_TIMER_EVENT_DEFAULT_ITVL; + } + + if (xTimerChangePeriod(GetAppTask().sTimer, pdMS_TO_TICKS(GetAppTask().mTimerIntvl), pdMS_TO_TICKS(100)) != pdPASS) + { + ChipLogProgress(NotSpecified, "Failed to access timer with 100 ms delay."); + } + + return true; +} + +void AppTask::CancelTimer(void) +{ + xTimerStop(GetAppTask().sTimer, 0); +} + +void AppTask::TimerCallback(TimerHandle_t xTimer) +{ + GetAppTask().PostEvent(APP_EVENT_TIMER); +} + +void AppTask::TimerEventHandler(app_event_t event) +{ + uint32_t pressedTime = 0; + + if (GetAppTask().mButtonPressedTime) + { + pressedTime = System::SystemClock().GetMonotonicMilliseconds64().count() - GetAppTask().mButtonPressedTime; +#ifdef BOOT_PIN_RESET + if (ButtonPressed()) + { + if (pressedTime > APP_BUTTON_PRESS_LONG) + { + GetAppTask().PostEvent(APP_EVENT_BTN_LONG); + } + else if (pressedTime >= APP_BUTTON_PRESS_SHORT) + { +#if defined(BL602_NIGHT_LIGHT) || defined(BL706_NIGHT_LIGHT) + /** change color to indicate to wait factory reset confirm */ + sLightLED.SetColor(254, 0, 210); +#else + /** toggle led to indicate to wait factory reset confirm */ + sLightLED.Toggle(); +#endif + } + } + else + { + if (pressedTime >= APP_BUTTON_PRESS_LONG) + { + GetAppTask().PostEvent(APP_EVENT_FACTORY_RESET); + } + else if (APP_BUTTON_PRESS_SHORT >= pressedTime && pressedTime >= APP_BUTTON_PRESS_JITTER) + { + GetAppTask().PostEvent(APP_EVENT_BTN_SHORT); + } + else + { + GetAppTask().PostEvent(APP_EVENT_LIGHTING_MASK); + } + + GetAppTask().mTimerIntvl = APP_BUTTON_PRESSED_ITVL; + GetAppTask().mButtonPressedTime = 0; + } +#else + if (pressedTime > APP_BUTTON_PRESS_LONG) + { + /** factory reset confirm timeout */ + GetAppTask().mButtonPressedTime = 0; + GetAppTask().PostEvent(APP_EVENT_FACTORY_RESET); + } + else + { +#if defined(BL602_NIGHT_LIGHT) || defined(BL706_NIGHT_LIGHT) + /** change color to indicate to wait factory reset confirm */ + sLightLED.SetColor(254, 0, 210); +#else + /** toggle led to indicate to wait factory reset confirm */ + sLightLED.Toggle(); +#endif + } +#endif + } +#ifdef BOOT_PIN_RESET + else + { + if (ButtonPressed()) + { + GetAppTask().mTimerIntvl = APP_BUTTON_PRESSED_ITVL; + GetAppTask().mButtonPressedTime = System::SystemClock().GetMonotonicMilliseconds64().count(); + } + } +#endif + + StartTimer(); +} + +void AppTask::IdentifyStartHandler(Identify *) +{ + GetAppTask().PostEvent(APP_EVENT_IDENTIFY_START); +} + +void AppTask::IdentifyStopHandler(Identify *) +{ + GetAppTask().PostEvent(APP_EVENT_IDENTIFY_STOP); +} + +void AppTask::IdentifyHandleOp(app_event_t event) +{ + static uint32_t identifyState = 0; + + if (APP_EVENT_IDENTIFY_START & event) + { + identifyState = 1; + ChipLogProgress(NotSpecified, "identify start"); + } + + if ((APP_EVENT_IDENTIFY_IDENTIFY & event) && identifyState) + { + sLightLED.Toggle(); + ChipLogProgress(NotSpecified, "identify"); + } + + if (APP_EVENT_IDENTIFY_STOP & event) + { + identifyState = 0; + GetAppTask().PostEvent(APP_EVENT_LIGHTING_MASK); + ChipLogProgress(NotSpecified, "identify stop"); + } +} + +void AppTask::ButtonEventHandler(uint8_t btnIdx, uint8_t btnAction) +{ + GetAppTask().PostEvent(APP_EVENT_FACTORY_RESET); +} + +#ifdef BOOT_PIN_RESET +#if CHIP_DEVICE_LAYER_TARGET_QCC743 +static struct bflb_device_s * app_task_gpio_var = NULL; +static void app_task_gpio_isr(int irq, void *arg) +{ + bool intstatus = bflb_gpio_get_intstatus(app_task_gpio_var, BOOT_PIN_RESET); + if (intstatus) { + bflb_gpio_int_clear(app_task_gpio_var, BOOT_PIN_RESET); + } + + GetAppTask().ButtonEventHandler(arg); +} +#else +static hosal_gpio_dev_t gpio_key = { .port = BOOT_PIN_RESET, .config = INPUT_HIGH_IMPEDANCE, .priv = NULL }; +#endif + +void AppTask::ButtonInit(void) +{ + GetAppTask().mButtonPressedTime = 0; + +#if CHIP_DEVICE_LAYER_TARGET_QCC743 + app_task_gpio_var = bflb_device_get_by_name("gpio"); + + bflb_gpio_init(app_task_gpio_var, BOOT_PIN_RESET, GPIO_INPUT); + bflb_gpio_int_init(app_task_gpio_var, BOOT_PIN_RESET, GPIO_INT_TRIG_MODE_SYNC_FALLING_RISING_EDGE); + bflb_gpio_int_mask(app_task_gpio_var, BOOT_PIN_RESET, false); + + bflb_irq_attach(app_task_gpio_var->irq_num, app_task_gpio_isr, app_task_gpio_var); + bflb_irq_enable(app_task_gpio_var->irq_num); +#else + hosal_gpio_init(&gpio_key); + hosal_gpio_irq_set(&gpio_key, HOSAL_IRQ_TRIG_POS_PULSE, GetAppTask().ButtonEventHandler, NULL); +#endif +} + +bool AppTask::ButtonPressed(void) +{ +#if CHIP_DEVICE_LAYER_TARGET_QCC743 + return bflb_gpio_read(app_task_gpio_var, BOOT_PIN_RESET); +#else + uint8_t val = 1; + + hosal_gpio_input_get(&gpio_key, &val); + + return val == 1; +#endif +} + +void AppTask::ButtonEventHandler(void * arg) +{ + if (ButtonPressed()) + { + GetAppTask().PostEvent(APP_EVENT_BTN_ISR); + } +} +#endif diff --git a/examples/lighting-app/qcc74x/common/AppTask.h b/examples/lighting-app/qcc74x/common/AppTask.h new file mode 100644 index 00000000000000..bcc9dbaec7a4b5 --- /dev/null +++ b/examples/lighting-app/qcc74x/common/AppTask.h @@ -0,0 +1,143 @@ +/* + * + * Copyright (c) 2020 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 +#include + +#include "FreeRTOS.h" +#include "timers.h" + +#include + +using namespace ::chip; +using namespace ::chip::DeviceLayer; + +#define APP_BUTTON_PRESSED_ITVL 50 +#define APP_BUTTON_PRESS_JITTER 100 +#define APP_BUTTON_PRESS_SHORT 1000 +#define APP_BUTTON_PRESS_LONG 4000 +#define APP_TIMER_EVENT_DEFAULT_ITVL 1000 + +#define APP_LIGHT_ENDPOINT_ID 1 +#define APP_REBOOT_RESET_COUNT 3 +#define APP_REBOOT_RESET_COUNT_KEY "app_reset_cnt" + +// Application-defined error codes in the CHIP_ERROR space. +#define APP_ERROR_EVENT_QUEUE_FAILED CHIP_APPLICATION_ERROR(0x01) +#define APP_ERROR_CREATE_TASK_FAILED CHIP_APPLICATION_ERROR(0x02) +#define APP_ERROR_UNHANDLED_EVENT CHIP_APPLICATION_ERROR(0x03) +#define APP_ERROR_CREATE_TIMER_FAILED CHIP_APPLICATION_ERROR(0x04) +#define APP_ERROR_START_TIMER_FAILED CHIP_APPLICATION_ERROR(0x05) +#define APP_ERROR_STOP_TIMER_FAILED CHIP_APPLICATION_ERROR(0x06) + +struct Identify; + +class AppTask +{ +public: + friend AppTask & GetAppTask(void); + + enum app_event_t + { + APP_EVENT_NONE = 0x00000000, + + APP_EVENT_TIMER = 0x00000010, + APP_EVENT_BTN_SHORT = 0x00000020, + APP_EVENT_FACTORY_RESET = 0x00000040, + APP_EVENT_BTN_LONG = 0x00000080, + APP_EVENT_BTN_ISR = 0x00000100, + + APP_EVENT_LIGHTING_ONOFF = 0x00010000, + APP_EVENT_LIGHTING_LEVEL = 0x00020000, + APP_EVENT_LIGHTING_COLOR = 0x00040000, + APP_EVENT_LIGHTING_MASK = APP_EVENT_LIGHTING_ONOFF | APP_EVENT_LIGHTING_LEVEL | APP_EVENT_LIGHTING_COLOR, + + APP_EVENT_IDENTIFY_START = 0x01000000, + APP_EVENT_IDENTIFY_IDENTIFY = 0x02000000, + APP_EVENT_IDENTIFY_STOP = 0x04000000, + APP_EVENT_IDENTIFY_MASK = APP_EVENT_IDENTIFY_START | APP_EVENT_IDENTIFY_IDENTIFY | APP_EVENT_IDENTIFY_STOP, + + APP_EVENT_ALL_MASK = APP_EVENT_LIGHTING_MASK | APP_EVENT_TIMER | APP_EVENT_BTN_SHORT | APP_EVENT_BTN_LONG | + APP_EVENT_BTN_ISR | APP_EVENT_IDENTIFY_MASK, + }; + + void SetEndpointId(EndpointId endpointId) + { + if (mEndpointId != (EndpointId) -1) + mEndpointId = endpointId; + } + + EndpointId GetEndpointId(void) { return mEndpointId; } + void PostEvent(app_event_t event); + void ButtonEventHandler(uint8_t btnIdx, uint8_t btnAction); +#ifdef BOOT_PIN_RESET + static void ButtonEventHandler(void * arg); +#endif + + static void IdentifyStartHandler(Identify *); + static void IdentifyStopHandler(Identify *); + static void IdentifyHandleOp(app_event_t event); + +private: + friend void StartAppTask(void); + friend PlatformManagerImpl; + + static uint32_t AppRebootCheck(uint32_t time = 0); + + static void LightingSetBleAdv(void); + static void LightingSetProvisioned(void); + static void LightingSetFactoryReset(void); + + static void LightingUpdate(app_event_t event = APP_EVENT_NONE); + + static bool StartTimer(void); + static void CancelTimer(void); + static void TimerEventHandler(app_event_t event); + static void TimerCallback(TimerHandle_t xTimer); + +#ifdef BOOT_PIN_RESET + static void ButtonInit(void); + static bool ButtonPressed(void); +#endif + + static void ScheduleInit(intptr_t arg); + static void AppTaskMain(void * pvParameter); + + static CHIP_ERROR StartAppShellTask(); + static void AppShellTask(void * args); + + EndpointId mEndpointId = (EndpointId) 1; + TaskHandle_t sAppTaskHandle; + QueueHandle_t sAppEventQueue; + TimerHandle_t sTimer; + uint32_t mTimerIntvl; + uint64_t mButtonPressedTime; + + static StackType_t appStack[APP_TASK_STACK_SIZE / sizeof(StackType_t)]; + static StaticTask_t appTaskStruct; + static AppTask sAppTask; +}; + +inline AppTask & GetAppTask(void) +{ + return AppTask::sAppTask; +} + +void StartAppTask(); diff --git a/examples/lighting-app/qcc74x/common/ZclCallbacks.cpp b/examples/lighting-app/qcc74x/common/ZclCallbacks.cpp new file mode 100644 index 00000000000000..e987fcbd325112 --- /dev/null +++ b/examples/lighting-app/qcc74x/common/ZclCallbacks.cpp @@ -0,0 +1,96 @@ +/* + * + * Copyright (c) 2020 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. + */ + +/** + * @file + * This file implements the handler for data model messages. + */ + +#include + +#include +#include +#include +#include +#include + +using namespace ::chip; +using namespace ::chip::app::Clusters; + +void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath & attributePath, uint8_t type, uint16_t size, + uint8_t * value) +{ + ClusterId clusterId = attributePath.mClusterId; + AttributeId attributeId = attributePath.mAttributeId; + ChipLogProgress(Zcl, "Cluster callback: " ChipLogFormatMEI, ChipLogValueMEI(clusterId)); + + if (clusterId == OnOff::Id && attributeId == OnOff::Attributes::OnOff::Id) + { + GetAppTask().PostEvent(AppTask::APP_EVENT_LIGHTING_ONOFF); + ChipLogProgress(Zcl, "OnOff attribute ID: " ChipLogFormatMEI " Type: %u Value: %u, length %u", ChipLogValueMEI(attributeId), + type, *value, size); + } + else if (clusterId == LevelControl::Id) + { + GetAppTask().PostEvent(AppTask::APP_EVENT_LIGHTING_LEVEL); + ChipLogProgress(Zcl, "Level Control attribute ID: " ChipLogFormatMEI " Type: %u Value: %u, length %u", + ChipLogValueMEI(attributeId), type, *value, size); + } + else if (clusterId == ColorControl::Id) + { + GetAppTask().PostEvent(AppTask::APP_EVENT_LIGHTING_COLOR); + ChipLogProgress(Zcl, "Color Control attribute ID: " ChipLogFormatMEI " Type: %u Value: %u, length %u", + ChipLogValueMEI(attributeId), type, *value, size); + } + else if (clusterId == OnOffSwitchConfiguration::Id) + { + GetAppTask().PostEvent(AppTask::APP_EVENT_LIGHTING_ONOFF); + ChipLogProgress(Zcl, "OnOff Switch Configuration attribute ID: " ChipLogFormatMEI " Type: %u Value: %u, length %u", + ChipLogValueMEI(attributeId), type, *value, size); + } + else if (clusterId == Identify::Id) + { + GetAppTask().PostEvent(AppTask::APP_EVENT_IDENTIFY_IDENTIFY); + ChipLogProgress(Zcl, "Identify attribute ID: " ChipLogFormatMEI " Type: %u Value: %u, length %u", + ChipLogValueMEI(attributeId), type, *value, size); + } +} + +/** @brief OnOff Cluster Init + * + * This function is called when a specific cluster is initialized. It gives the + * application an opportunity to take care of cluster initialization procedures. + * It is called exactly once for each endpoint where cluster is present. + * + * @param endpoint Ver.: always + * + * TODO Issue #3841 + * emberAfOnOffClusterInitCallback happens before the stack initialize the cluster + * attributes to the default value. + * The logic here expects something similar to the deprecated Plugins callback + * emberAfPluginOnOffClusterServerPostInitCallback. + * + */ +void emberAfOnOffClusterInitCallback(EndpointId endpoint) +{ + // TODO: implement any additional Cluster Server init actions +} + +void emberAfColorControlClusterInitCallback(EndpointId endpoint) +{ + GetAppTask().SetEndpointId(endpoint); +} diff --git a/examples/lighting-app/qcc74x/data_model/lighting-app-ethernet.matter b/examples/lighting-app/qcc74x/data_model/lighting-app-ethernet.matter new file mode 100644 index 00000000000000..626d1bce2be886 --- /dev/null +++ b/examples/lighting-app/qcc74x/data_model/lighting-app-ethernet.matter @@ -0,0 +1,2250 @@ +// 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; +} + +/** Attributes and commands for group configuration and manipulation. */ +cluster Groups = 4 { + revision 4; + + bitmap Feature : bitmap32 { + kGroupNames = 0x1; + } + + bitmap NameSupportBitmap : bitmap8 { + kGroupNames = 0x80; + } + + readonly attribute NameSupportBitmap nameSupport = 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; + + request struct AddGroupRequest { + group_id groupID = 0; + char_string<16> groupName = 1; + } + + response struct AddGroupResponse = 0 { + enum8 status = 0; + group_id groupID = 1; + } + + request struct ViewGroupRequest { + group_id groupID = 0; + } + + response struct ViewGroupResponse = 1 { + enum8 status = 0; + group_id groupID = 1; + char_string<16> groupName = 2; + } + + request struct GetGroupMembershipRequest { + group_id groupList[] = 0; + } + + response struct GetGroupMembershipResponse = 2 { + nullable int8u capacity = 0; + group_id groupList[] = 1; + } + + request struct RemoveGroupRequest { + group_id groupID = 0; + } + + response struct RemoveGroupResponse = 3 { + enum8 status = 0; + group_id groupID = 1; + } + + request struct AddGroupIfIdentifyingRequest { + group_id groupID = 0; + char_string<16> groupName = 1; + } + + /** Command description for AddGroup */ + fabric command access(invoke: manage) AddGroup(AddGroupRequest): AddGroupResponse = 0; + /** Command description for ViewGroup */ + fabric command ViewGroup(ViewGroupRequest): ViewGroupResponse = 1; + /** Command description for GetGroupMembership */ + fabric command GetGroupMembership(GetGroupMembershipRequest): GetGroupMembershipResponse = 2; + /** Command description for RemoveGroup */ + fabric command access(invoke: manage) RemoveGroup(RemoveGroupRequest): RemoveGroupResponse = 3; + /** Command description for RemoveAllGroups */ + fabric command access(invoke: manage) RemoveAllGroups(): DefaultSuccess = 4; + /** Command description for AddGroupIfIdentifying */ + fabric command access(invoke: manage) AddGroupIfIdentifying(AddGroupIfIdentifyingRequest): DefaultSuccess = 5; +} + +/** Attributes and commands for switching devices between 'On' and 'Off' states. */ +cluster OnOff = 6 { + revision 6; + + enum DelayedAllOffEffectVariantEnum : enum8 { + kDelayedOffFastFade = 0; + kNoFade = 1; + kDelayedOffSlowFade = 2; + } + + enum DyingLightEffectVariantEnum : enum8 { + kDyingLightFadeOff = 0; + } + + enum EffectIdentifierEnum : enum8 { + kDelayedAllOff = 0; + kDyingLight = 1; + } + + enum StartUpOnOffEnum : enum8 { + kOff = 0; + kOn = 1; + kToggle = 2; + } + + bitmap Feature : bitmap32 { + kLighting = 0x1; + kDeadFrontBehavior = 0x2; + kOffOnly = 0x4; + } + + bitmap OnOffControlBitmap : bitmap8 { + kAcceptOnlyWhenOn = 0x1; + } + + readonly attribute boolean onOff = 0; + readonly attribute optional boolean globalSceneControl = 16384; + attribute optional int16u onTime = 16385; + attribute optional int16u offWaitTime = 16386; + attribute access(write: manage) optional nullable StartUpOnOffEnum startUpOnOff = 16387; + 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 OffWithEffectRequest { + EffectIdentifierEnum effectIdentifier = 0; + enum8 effectVariant = 1; + } + + request struct OnWithTimedOffRequest { + OnOffControlBitmap onOffControl = 0; + int16u onTime = 1; + int16u offWaitTime = 2; + } + + /** On receipt of this command, a device SHALL enter its ‘Off’ state. This state is device dependent, but it is recommended that it is used for power off or similar functions. On receipt of the Off command, the OnTime attribute SHALL be set to 0. */ + command Off(): DefaultSuccess = 0; + /** On receipt of this command, a device SHALL enter its ‘On’ state. This state is device dependent, but it is recommended that it is used for power on or similar functions. On receipt of the On command, if the value of the OnTime attribute is equal to 0, the device SHALL set the OffWaitTime attribute to 0. */ + command On(): DefaultSuccess = 1; + /** On receipt of this command, if a device is in its ‘Off’ state it SHALL enter its ‘On’ state. Otherwise, if it is in its ‘On’ state it SHALL enter its ‘Off’ state. On receipt of the Toggle command, if the value of the OnOff attribute is equal to FALSE and if the value of the OnTime attribute is equal to 0, the device SHALL set the OffWaitTime attribute to 0. If the value of the OnOff attribute is equal to TRUE, the OnTime attribute SHALL be set to 0. */ + command Toggle(): DefaultSuccess = 2; + /** The OffWithEffect command allows devices to be turned off using enhanced ways of fading. */ + command OffWithEffect(OffWithEffectRequest): DefaultSuccess = 64; + /** The OnWithRecallGlobalScene command allows the recall of the settings when the device was turned off. */ + command OnWithRecallGlobalScene(): DefaultSuccess = 65; + /** The OnWithTimedOff command allows devices to be turned on for a specific duration with a guarded off duration so that SHOULD the device be subsequently switched off, further OnWithTimedOff commands, received during this time, are prevented from turning the devices back on. */ + command OnWithTimedOff(OnWithTimedOffRequest): DefaultSuccess = 66; +} + +/** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ +cluster LevelControl = 8 { + revision 5; + + enum MoveModeEnum : enum8 { + kUp = 0; + kDown = 1; + } + + enum StepModeEnum : enum8 { + kUp = 0; + kDown = 1; + } + + bitmap Feature : bitmap32 { + kOnOff = 0x1; + kLighting = 0x2; + kFrequency = 0x4; + } + + bitmap OptionsBitmap : bitmap8 { + kExecuteIfOff = 0x1; + kCoupleColorTempToLevel = 0x2; + } + + readonly attribute nullable int8u currentLevel = 0; + readonly attribute optional int16u remainingTime = 1; + readonly attribute optional int8u minLevel = 2; + readonly attribute optional int8u maxLevel = 3; + readonly attribute optional int16u currentFrequency = 4; + readonly attribute optional int16u minFrequency = 5; + readonly attribute optional int16u maxFrequency = 6; + attribute OptionsBitmap options = 15; + attribute optional int16u onOffTransitionTime = 16; + attribute nullable int8u onLevel = 17; + attribute optional nullable int16u onTransitionTime = 18; + attribute optional nullable int16u offTransitionTime = 19; + attribute optional nullable int8u defaultMoveRate = 20; + attribute access(write: manage) optional nullable int8u startUpCurrentLevel = 16384; + 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 MoveToLevelRequest { + int8u level = 0; + nullable int16u transitionTime = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct MoveRequest { + MoveModeEnum moveMode = 0; + nullable int8u rate = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct StepRequest { + StepModeEnum stepMode = 0; + int8u stepSize = 1; + nullable int16u transitionTime = 2; + OptionsBitmap optionsMask = 3; + OptionsBitmap optionsOverride = 4; + } + + request struct StopRequest { + OptionsBitmap optionsMask = 0; + OptionsBitmap optionsOverride = 1; + } + + request struct MoveToLevelWithOnOffRequest { + int8u level = 0; + nullable int16u transitionTime = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct MoveWithOnOffRequest { + MoveModeEnum moveMode = 0; + nullable int8u rate = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct StepWithOnOffRequest { + StepModeEnum stepMode = 0; + int8u stepSize = 1; + nullable int16u transitionTime = 2; + OptionsBitmap optionsMask = 3; + OptionsBitmap optionsOverride = 4; + } + + request struct StopWithOnOffRequest { + OptionsBitmap optionsMask = 0; + OptionsBitmap optionsOverride = 1; + } + + request struct MoveToClosestFrequencyRequest { + int16u frequency = 0; + } + + /** Command description for MoveToLevel */ + command MoveToLevel(MoveToLevelRequest): DefaultSuccess = 0; + /** Command description for Move */ + command Move(MoveRequest): DefaultSuccess = 1; + /** Command description for Step */ + command Step(StepRequest): DefaultSuccess = 2; + /** Command description for Stop */ + command Stop(StopRequest): DefaultSuccess = 3; + /** Command description for MoveToLevelWithOnOff */ + command MoveToLevelWithOnOff(MoveToLevelWithOnOffRequest): DefaultSuccess = 4; + /** Command description for MoveWithOnOff */ + command MoveWithOnOff(MoveWithOnOffRequest): DefaultSuccess = 5; + /** Command description for StepWithOnOff */ + command StepWithOnOff(StepWithOnOffRequest): DefaultSuccess = 6; + /** Command description for StopWithOnOff */ + command StopWithOnOff(StopWithOnOffRequest): DefaultSuccess = 7; + /** Change the currrent frequency to the provided one, or a close + approximation if the exact provided one is not possible. */ + command MoveToClosestFrequency(MoveToClosestFrequencyRequest): DefaultSuccess = 8; +} + +/** 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; +} + +/** Nodes should be expected to be deployed to any and all regions of the world. These global regions + may have differing common languages, units of measurements, and numerical formatting + standards. As such, Nodes that visually or audibly convey information need a mechanism by which + they can be configured to use a user’s preferred language, units, etc */ +cluster LocalizationConfiguration = 43 { + revision 1; // NOTE: Default/not specifically set + + attribute access(write: manage) char_string<35> activeLocale = 0; + readonly attribute char_string supportedLocales[] = 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; +} + +/** Nodes should be expected to be deployed to any and all regions of the world. These global regions + may have differing preferences for how dates and times are conveyed. As such, Nodes that visually + or audibly convey time information need a mechanism by which they can be configured to use a + user’s preferred format. */ +cluster TimeFormatLocalization = 44 { + revision 1; // NOTE: Default/not specifically set + + enum CalendarTypeEnum : enum8 { + kBuddhist = 0; + kChinese = 1; + kCoptic = 2; + kEthiopian = 3; + kGregorian = 4; + kHebrew = 5; + kIndian = 6; + kIslamic = 7; + kJapanese = 8; + kKorean = 9; + kPersian = 10; + kTaiwanese = 11; + kUseActiveLocale = 255; + } + + enum HourFormatEnum : enum8 { + k12hr = 0; + k24hr = 1; + kUseActiveLocale = 255; + } + + bitmap Feature : bitmap32 { + kCalendarFormat = 0x1; + } + + attribute access(write: manage) HourFormatEnum hourFormat = 0; + attribute access(write: manage) optional CalendarTypeEnum activeCalendarType = 1; + readonly attribute optional CalendarTypeEnum supportedCalendarTypes[] = 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; +} + +/** 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 cluster provides commands for retrieving unstructured diagnostic logs from a Node that may be used to aid in diagnostics. */ +cluster DiagnosticLogs = 50 { + revision 1; // NOTE: Default/not specifically set + + enum IntentEnum : enum8 { + kEndUserSupport = 0; + kNetworkDiag = 1; + kCrashLogs = 2; + } + + enum StatusEnum : enum8 { + kSuccess = 0; + kExhausted = 1; + kNoLogs = 2; + kBusy = 3; + kDenied = 4; + } + + enum TransferProtocolEnum : enum8 { + kResponsePayload = 0; + kBDX = 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 RetrieveLogsRequestRequest { + IntentEnum intent = 0; + TransferProtocolEnum requestedProtocol = 1; + optional char_string<32> transferFileDesignator = 2; + } + + response struct RetrieveLogsResponse = 1 { + StatusEnum status = 0; + long_octet_string logContent = 1; + optional epoch_us UTCTimeStamp = 2; + optional systime_us timeSinceBoot = 3; + } + + /** Retrieving diagnostic logs from a Node */ + command RetrieveLogsRequest(RetrieveLogsRequestRequest): RetrieveLogsResponse = 0; +} + +/** 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 Ethernet 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 EthernetNetworkDiagnostics = 55 { + revision 1; // NOTE: Default/not specifically set + + enum PHYRateEnum : enum8 { + kRate10M = 0; + kRate100M = 1; + kRate1G = 2; + kRate25G = 3; + kRate5G = 4; + kRate10G = 5; + kRate40G = 6; + kRate100G = 7; + kRate200G = 8; + kRate400G = 9; + } + + bitmap Feature : bitmap32 { + kPacketCounts = 0x1; + kErrorCounts = 0x2; + } + + readonly attribute optional nullable PHYRateEnum PHYRate = 0; + readonly attribute optional nullable boolean fullDuplex = 1; + readonly attribute optional int64u packetRxCount = 2; + readonly attribute optional int64u packetTxCount = 3; + readonly attribute optional int64u txErrCount = 4; + readonly attribute optional int64u collisionCount = 5; + readonly attribute optional int64u overrunCount = 6; + readonly attribute optional nullable boolean carrierDetect = 7; + readonly attribute optional int64u timeSinceReset = 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; + + /** Reception of this command SHALL reset the attributes: PacketRxCount, PacketTxCount, TxErrCount, CollisionCount, OverrunCount 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; +} + +/** The Fixed Label Cluster provides a feature for the device to tag an endpoint with zero or more read only +labels. */ +cluster FixedLabel = 64 { + revision 1; // NOTE: Default/not specifically set + + struct LabelStruct { + char_string<16> label = 0; + char_string<16> value = 1; + } + + readonly attribute LabelStruct labelList[] = 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; +} + +/** The User Label Cluster provides a feature to tag an endpoint with zero or more labels. */ +cluster UserLabel = 65 { + revision 1; // NOTE: Default/not specifically set + + struct LabelStruct { + char_string<16> label = 0; + char_string<16> value = 1; + } + + attribute access(write: manage) LabelStruct labelList[] = 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; +} + +/** Attributes and commands for controlling the color properties of a color-capable light. */ +cluster ColorControl = 768 { + revision 6; + + enum ColorLoopAction : enum8 { + kDeactivate = 0; + kActivateFromColorLoopStartEnhancedHue = 1; + kActivateFromEnhancedCurrentHue = 2; + } + + enum ColorLoopDirection : enum8 { + kDecrementHue = 0; + kIncrementHue = 1; + } + + enum ColorMode : enum8 { + kCurrentHueAndCurrentSaturation = 0; + kCurrentXAndCurrentY = 1; + kColorTemperature = 2; + } + + enum HueDirection : enum8 { + kShortestDistance = 0; + kLongestDistance = 1; + kUp = 2; + kDown = 3; + } + + enum HueMoveMode : enum8 { + kStop = 0; + kUp = 1; + kDown = 3; + } + + enum HueStepMode : enum8 { + kUp = 1; + kDown = 3; + } + + enum SaturationMoveMode : enum8 { + kStop = 0; + kUp = 1; + kDown = 3; + } + + enum SaturationStepMode : enum8 { + kUp = 1; + kDown = 3; + } + + bitmap ColorCapabilities : bitmap16 { + kHueSaturationSupported = 0x1; + kEnhancedHueSupported = 0x2; + kColorLoopSupported = 0x4; + kXYAttributesSupported = 0x8; + kColorTemperatureSupported = 0x10; + } + + bitmap ColorLoopUpdateFlags : bitmap8 { + kUpdateAction = 0x1; + kUpdateDirection = 0x2; + kUpdateTime = 0x4; + kUpdateStartHue = 0x8; + } + + bitmap Feature : bitmap32 { + kHueAndSaturation = 0x1; + kEnhancedHue = 0x2; + kColorLoop = 0x4; + kXY = 0x8; + kColorTemperature = 0x10; + } + + readonly attribute optional int8u currentHue = 0; + readonly attribute optional int8u currentSaturation = 1; + readonly attribute optional int16u remainingTime = 2; + readonly attribute optional int16u currentX = 3; + readonly attribute optional int16u currentY = 4; + readonly attribute optional enum8 driftCompensation = 5; + readonly attribute optional char_string<254> compensationText = 6; + readonly attribute optional int16u colorTemperatureMireds = 7; + readonly attribute enum8 colorMode = 8; + attribute bitmap8 options = 15; + readonly attribute nullable int8u numberOfPrimaries = 16; + readonly attribute optional int16u primary1X = 17; + readonly attribute optional int16u primary1Y = 18; + readonly attribute optional nullable int8u primary1Intensity = 19; + readonly attribute optional int16u primary2X = 21; + readonly attribute optional int16u primary2Y = 22; + readonly attribute optional nullable int8u primary2Intensity = 23; + readonly attribute optional int16u primary3X = 25; + readonly attribute optional int16u primary3Y = 26; + readonly attribute optional nullable int8u primary3Intensity = 27; + readonly attribute optional int16u primary4X = 32; + readonly attribute optional int16u primary4Y = 33; + readonly attribute optional nullable int8u primary4Intensity = 34; + readonly attribute optional int16u primary5X = 36; + readonly attribute optional int16u primary5Y = 37; + readonly attribute optional nullable int8u primary5Intensity = 38; + readonly attribute optional int16u primary6X = 40; + readonly attribute optional int16u primary6Y = 41; + readonly attribute optional nullable int8u primary6Intensity = 42; + attribute access(write: manage) optional int16u whitePointX = 48; + attribute access(write: manage) optional int16u whitePointY = 49; + attribute access(write: manage) optional int16u colorPointRX = 50; + attribute access(write: manage) optional int16u colorPointRY = 51; + attribute access(write: manage) optional nullable int8u colorPointRIntensity = 52; + attribute access(write: manage) optional int16u colorPointGX = 54; + attribute access(write: manage) optional int16u colorPointGY = 55; + attribute access(write: manage) optional nullable int8u colorPointGIntensity = 56; + attribute access(write: manage) optional int16u colorPointBX = 58; + attribute access(write: manage) optional int16u colorPointBY = 59; + attribute access(write: manage) optional nullable int8u colorPointBIntensity = 60; + readonly attribute optional int16u enhancedCurrentHue = 16384; + readonly attribute enum8 enhancedColorMode = 16385; + readonly attribute optional int8u colorLoopActive = 16386; + readonly attribute optional int8u colorLoopDirection = 16387; + readonly attribute optional int16u colorLoopTime = 16388; + readonly attribute optional int16u colorLoopStartEnhancedHue = 16389; + readonly attribute optional int16u colorLoopStoredEnhancedHue = 16390; + readonly attribute bitmap16 colorCapabilities = 16394; + readonly attribute optional int16u colorTempPhysicalMinMireds = 16395; + readonly attribute optional int16u colorTempPhysicalMaxMireds = 16396; + readonly attribute optional int16u coupleColorTempToLevelMinMireds = 16397; + attribute access(write: manage) optional nullable int16u startUpColorTemperatureMireds = 16400; + 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 MoveToHueRequest { + int8u hue = 0; + HueDirection direction = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveHueRequest { + HueMoveMode moveMode = 0; + int8u rate = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct StepHueRequest { + HueStepMode stepMode = 0; + int8u stepSize = 1; + int8u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToSaturationRequest { + int8u saturation = 0; + int16u transitionTime = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct MoveSaturationRequest { + SaturationMoveMode moveMode = 0; + int8u rate = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct StepSaturationRequest { + SaturationStepMode stepMode = 0; + int8u stepSize = 1; + int8u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToHueAndSaturationRequest { + int8u hue = 0; + int8u saturation = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToColorRequest { + int16u colorX = 0; + int16u colorY = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveColorRequest { + int16s rateX = 0; + int16s rateY = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct StepColorRequest { + int16s stepX = 0; + int16s stepY = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToColorTemperatureRequest { + int16u colorTemperatureMireds = 0; + int16u transitionTime = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct EnhancedMoveToHueRequest { + int16u enhancedHue = 0; + HueDirection direction = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct EnhancedMoveHueRequest { + HueMoveMode moveMode = 0; + int16u rate = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct EnhancedStepHueRequest { + HueStepMode stepMode = 0; + int16u stepSize = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct EnhancedMoveToHueAndSaturationRequest { + int16u enhancedHue = 0; + int8u saturation = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct ColorLoopSetRequest { + ColorLoopUpdateFlags updateFlags = 0; + ColorLoopAction action = 1; + ColorLoopDirection direction = 2; + int16u time = 3; + int16u startHue = 4; + bitmap8 optionsMask = 5; + bitmap8 optionsOverride = 6; + } + + request struct StopMoveStepRequest { + bitmap8 optionsMask = 0; + bitmap8 optionsOverride = 1; + } + + request struct MoveColorTemperatureRequest { + HueMoveMode moveMode = 0; + int16u rate = 1; + int16u colorTemperatureMinimumMireds = 2; + int16u colorTemperatureMaximumMireds = 3; + bitmap8 optionsMask = 4; + bitmap8 optionsOverride = 5; + } + + request struct StepColorTemperatureRequest { + HueStepMode stepMode = 0; + int16u stepSize = 1; + int16u transitionTime = 2; + int16u colorTemperatureMinimumMireds = 3; + int16u colorTemperatureMaximumMireds = 4; + bitmap8 optionsMask = 5; + bitmap8 optionsOverride = 6; + } + + /** Move to specified hue. */ + command MoveToHue(MoveToHueRequest): DefaultSuccess = 0; + /** Move hue up or down at specified rate. */ + command MoveHue(MoveHueRequest): DefaultSuccess = 1; + /** Step hue up or down by specified size at specified rate. */ + command StepHue(StepHueRequest): DefaultSuccess = 2; + /** Move to specified saturation. */ + command MoveToSaturation(MoveToSaturationRequest): DefaultSuccess = 3; + /** Move saturation up or down at specified rate. */ + command MoveSaturation(MoveSaturationRequest): DefaultSuccess = 4; + /** Step saturation up or down by specified size at specified rate. */ + command StepSaturation(StepSaturationRequest): DefaultSuccess = 5; + /** Move to hue and saturation. */ + command MoveToHueAndSaturation(MoveToHueAndSaturationRequest): DefaultSuccess = 6; + /** Move to specified color. */ + command MoveToColor(MoveToColorRequest): DefaultSuccess = 7; + /** Moves the color. */ + command MoveColor(MoveColorRequest): DefaultSuccess = 8; + /** Steps the lighting to a specific color. */ + command StepColor(StepColorRequest): DefaultSuccess = 9; + /** Move to a specific color temperature. */ + command MoveToColorTemperature(MoveToColorTemperatureRequest): DefaultSuccess = 10; + /** Command description for EnhancedMoveToHue */ + command EnhancedMoveToHue(EnhancedMoveToHueRequest): DefaultSuccess = 64; + /** Command description for EnhancedMoveHue */ + command EnhancedMoveHue(EnhancedMoveHueRequest): DefaultSuccess = 65; + /** Command description for EnhancedStepHue */ + command EnhancedStepHue(EnhancedStepHueRequest): DefaultSuccess = 66; + /** Command description for EnhancedMoveToHueAndSaturation */ + command EnhancedMoveToHueAndSaturation(EnhancedMoveToHueAndSaturationRequest): DefaultSuccess = 67; + /** Command description for ColorLoopSet */ + command ColorLoopSet(ColorLoopSetRequest): DefaultSuccess = 68; + /** Command description for StopMoveStep */ + command StopMoveStep(StopMoveStepRequest): DefaultSuccess = 71; + /** Command description for MoveColorTemperature */ + command MoveColorTemperature(MoveColorTemperatureRequest): DefaultSuccess = 75; + /** Command description for StepColorTemperature */ + command StepColorTemperature(StepColorTemperatureRequest): DefaultSuccess = 76; +} + +endpoint 0 { + device type ma_rootdevice = 22, version 1; + + binding cluster OtaSoftwareUpdateProvider; + + server cluster AccessControl { + emits event AccessControlEntryChanged; + emits event AccessControlExtensionChanged; + callback attribute acl; + callback attribute extension; + 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 manufacturingDate; + callback attribute partNumber; + callback attribute productURL; + callback attribute productLabel; + callback attribute serialNumber; + persist attribute localConfigDisabled default = 0; + callback attribute uniqueID; + callback attribute capabilityMinima; + callback attribute specificationVersion; + callback attribute maxPathsPerInvoke; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 3; + } + + 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 LocalizationConfiguration { + persist attribute activeLocale default = "en-US"; + callback attribute supportedLocales; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster TimeFormatLocalization { + persist attribute hourFormat default = 0; + persist attribute activeCalendarType default = 0; + callback attribute supportedCalendarTypes; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + 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 = 1; + ram attribute clusterRevision default = 1; + + handle command ScanNetworks; + handle command ScanNetworksResponse; + handle command AddOrUpdateWiFiNetwork; + handle command AddOrUpdateThreadNetwork; + handle command RemoveNetwork; + handle command NetworkConfigResponse; + handle command ConnectNetwork; + handle command ConnectNetworkResponse; + handle command ReorderNetwork; + } + + server cluster DiagnosticLogs { + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + + handle command RetrieveLogsRequest; + } + + server cluster GeneralDiagnostics { + emits event HardwareFaultChange; + emits event RadioFaultChange; + emits event NetworkFaultChange; + emits event BootReason; + callback attribute networkInterfaces; + callback attribute rebootCount; + callback attribute upTime; + callback attribute totalOperationalHours; + callback attribute bootReason; + callback attribute activeHardwareFaults; + callback attribute activeRadioFaults; + callback attribute activeNetworkFaults; + callback attribute testEventTriggersEnabled default = false; + callback attribute featureMap; + callback attribute clusterRevision; + + handle command TestEventTrigger; + handle command TimeSnapshot; + handle command TimeSnapshotResponse; + } + + server cluster SoftwareDiagnostics { + callback attribute currentHeapFree; + callback attribute currentHeapUsed; + callback attribute currentHeapHighWatermark; + callback attribute featureMap; + ram attribute clusterRevision default = 1; + + handle command ResetWatermarks; + } + + server cluster EthernetNetworkDiagnostics { + callback attribute PHYRate; + callback attribute fullDuplex; + callback attribute packetRxCount; + callback attribute packetTxCount; + callback attribute txErrCount; + callback attribute collisionCount; + callback attribute overrunCount; + callback attribute carrierDetect; + callback attribute timeSinceReset; + ram attribute featureMap default = 3; + 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 OpenBasicCommissioningWindow; + 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 FixedLabel { + callback attribute labelList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster UserLabel { + callback attribute labelList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } +} +endpoint 1 { + device type ma_extendedcolorlight = 269, version 1; + + + server cluster Identify { + ram attribute identifyTime default = 0x0000; + ram attribute identifyType default = 0x0; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 4; + + handle command Identify; + handle command TriggerEffect; + } + + server cluster Groups { + ram attribute nameSupport; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 4; + + handle command AddGroup; + handle command AddGroupResponse; + handle command ViewGroup; + handle command ViewGroupResponse; + handle command GetGroupMembership; + handle command GetGroupMembershipResponse; + handle command RemoveGroup; + handle command RemoveGroupResponse; + handle command RemoveAllGroups; + handle command AddGroupIfIdentifying; + } + + server cluster OnOff { + persist attribute onOff default = 0x1; + ram attribute globalSceneControl default = 0x01; + ram attribute onTime default = 0x0000; + ram attribute offWaitTime default = 0x0000; + persist attribute startUpOnOff; + ram attribute featureMap default = 1; + ram attribute clusterRevision default = 5; + + handle command Off; + handle command On; + handle command Toggle; + handle command OffWithEffect; + handle command OnWithRecallGlobalScene; + handle command OnWithTimedOff; + } + + server cluster LevelControl { + persist attribute currentLevel default = 0x254; + ram attribute remainingTime default = 0x0000; + ram attribute minLevel default = 0x01; + ram attribute maxLevel default = 0xFE; + ram attribute currentFrequency default = 0x0000; + ram attribute minFrequency default = 0x0000; + ram attribute maxFrequency default = 0x0000; + ram attribute options default = 0x00; + ram attribute onOffTransitionTime default = 0x0000; + ram attribute onLevel; + ram attribute onTransitionTime; + ram attribute offTransitionTime; + ram attribute defaultMoveRate default = 50; + persist attribute startUpCurrentLevel; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 5; + + handle command MoveToLevel; + handle command Move; + handle command Step; + handle command Stop; + handle command MoveToLevelWithOnOff; + handle command MoveWithOnOff; + handle command StepWithOnOff; + handle command StopWithOnOff; + } + + server cluster Descriptor { + callback attribute deviceTypeList; + callback attribute serverList; + callback attribute clientList; + callback attribute partsList; + callback attribute featureMap; + callback attribute clusterRevision; + } + + server cluster ColorControl { + ram attribute currentHue default = 0x00; + ram attribute currentSaturation default = 0x00; + ram attribute remainingTime default = 0x0000; + ram attribute currentX default = 0x616B; + ram attribute currentY default = 0x607D; + ram attribute colorTemperatureMireds default = 0x00FA; + ram attribute colorMode default = 0x01; + ram attribute options default = 0x00; + ram attribute numberOfPrimaries; + ram attribute primary1X; + ram attribute primary1Y; + ram attribute primary1Intensity; + ram attribute primary2X; + ram attribute primary2Y; + ram attribute primary2Intensity; + ram attribute primary3X; + ram attribute primary3Y; + ram attribute primary3Intensity; + ram attribute primary4X; + ram attribute primary4Y; + ram attribute primary4Intensity; + ram attribute primary5X; + ram attribute primary5Y; + ram attribute primary5Intensity; + ram attribute primary6X; + ram attribute primary6Y; + ram attribute primary6Intensity; + ram attribute enhancedCurrentHue default = 0x0000; + ram attribute enhancedColorMode default = 0x01; + ram attribute colorLoopActive default = 0x00; + ram attribute colorLoopDirection default = 0x00; + ram attribute colorLoopTime default = 0x0019; + ram attribute colorLoopStartEnhancedHue default = 0x2300; + ram attribute colorLoopStoredEnhancedHue default = 0x0000; + ram attribute colorCapabilities default = 0x1F; + ram attribute colorTempPhysicalMinMireds default = 0x0000; + ram attribute colorTempPhysicalMaxMireds default = 0xFEFF; + ram attribute coupleColorTempToLevelMinMireds; + ram attribute startUpColorTemperatureMireds; + ram attribute featureMap default = 0x1F; + ram attribute clusterRevision default = 6; + + handle command MoveToHue; + handle command MoveHue; + handle command StepHue; + handle command MoveToSaturation; + handle command MoveSaturation; + handle command StepSaturation; + handle command MoveToHueAndSaturation; + handle command MoveToColor; + handle command MoveColor; + handle command StepColor; + handle command MoveToColorTemperature; + handle command EnhancedMoveToHue; + handle command EnhancedMoveHue; + handle command EnhancedStepHue; + handle command EnhancedMoveToHueAndSaturation; + handle command ColorLoopSet; + handle command StopMoveStep; + handle command MoveColorTemperature; + handle command StepColorTemperature; + } +} + + diff --git a/examples/lighting-app/qcc74x/data_model/lighting-app-ethernet.zap b/examples/lighting-app/qcc74x/data_model/lighting-app-ethernet.zap new file mode 100644 index 00000000000000..d8848ce3f5234d --- /dev/null +++ b/examples/lighting-app/qcc74x/data_model/lighting-app-ethernet.zap @@ -0,0 +1,4329 @@ +{ + "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": [ + 1 + ], + "deviceIdentifiers": [ + 22 + ], + "deviceTypeName": "MA-rootdevice", + "deviceTypeCode": 22, + "deviceTypeProfileId": 259, + "clusters": [ + { + "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": "Extension", + "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": "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": "ManufacturingDate", + "code": 11, + "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": "PartNumber", + "code": 12, + "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": "ProductURL", + "code": 13, + "mfgCode": null, + "side": "server", + "type": "long_char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ProductLabel", + "code": 14, + "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": "SerialNumber", + "code": 15, + "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": "LocalConfigDisabled", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "NVM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "UniqueID", + "code": 18, + "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": null, + "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": 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": 1, + "bounded": 0, + "defaultValue": "3", + "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": "Localization Configuration", + "code": 43, + "mfgCode": null, + "define": "LOCALIZATION_CONFIGURATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "ActiveLocale", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "en-US", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportedLocales", + "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": "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 + } + ] + }, + { + "name": "Time Format Localization", + "code": 44, + "mfgCode": null, + "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "HourFormat", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "HourFormatEnum", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveCalendarType", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "CalendarTypeEnum", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportedCalendarTypes", + "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": "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 + } + ] + }, + { + "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": "AddOrUpdateWiFiNetwork", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "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": "1", + "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": "Diagnostic Logs", + "code": 50, + "mfgCode": null, + "define": "DIAGNOSTIC_LOGS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "RetrieveLogsRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "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 + } + ] + }, + { + "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 + }, + { + "name": "TimeSnapshot", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "TimeSnapshotResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "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": "UpTime", + "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": "TotalOperationalHours", + "code": 3, + "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": "BootReason", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "BootReasonEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveHardwareFaults", + "code": 5, + "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": "ActiveRadioFaults", + "code": 6, + "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": "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": "0x0002", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "HardwareFaultChange", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "RadioFaultChange", + "code": 1, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "NetworkFaultChange", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "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": "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": "Ethernet Network Diagnostics", + "code": 55, + "mfgCode": null, + "define": "ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "ResetCounts", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "PHYRate", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "PHYRateEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FullDuplex", + "code": 1, + "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": "PacketRxCount", + "code": 2, + "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": "PacketTxCount", + "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": "TxErrCount", + "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": "CollisionCount", + "code": 5, + "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": "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": "CarrierDetect", + "code": 7, + "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": "TimeSinceReset", + "code": 8, + "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": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "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": "OpenBasicCommissioningWindow", + "code": 1, + "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": "Fixed Label", + "code": 64, + "mfgCode": null, + "define": "FIXED_LABEL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "LabelList", + "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": "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 + } + ] + }, + { + "name": "User Label", + "code": 65, + "mfgCode": null, + "define": "USER_LABEL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "LabelList", + "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": "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 + } + ] + } + ] + }, + { + "id": 2, + "name": "MA-extendedcolorlight", + "deviceTypeRef": { + "code": 269, + "profileId": 259, + "label": "MA-extendedcolorlight", + "name": "MA-extendedcolorlight" + }, + "deviceTypes": [ + { + "code": 269, + "profileId": 259, + "label": "MA-extendedcolorlight", + "name": "MA-extendedcolorlight" + } + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 269 + ], + "deviceTypeName": "MA-extendedcolorlight", + "deviceTypeCode": 269, + "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": "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": "Groups", + "code": 4, + "mfgCode": null, + "define": "GROUPS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "AddGroup", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddGroupResponse", + "code": 0, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "ViewGroup", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ViewGroupResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "GetGroupMembership", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "GetGroupMembershipResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveGroup", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveGroupResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveAllGroups", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddGroupIfIdentifying", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "NameSupport", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "NameSupportBitmap", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "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": "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": "On/Off", + "code": 6, + "mfgCode": null, + "define": "ON_OFF_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "Off", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "On", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Toggle", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OffWithEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OnWithRecallGlobalScene", + "code": 65, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OnWithTimedOff", + "code": 66, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "OnOff", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "GlobalSceneControl", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OnTime", + "code": 16385, + "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": "OffWaitTime", + "code": 16386, + "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": "StartUpOnOff", + "code": 16387, + "mfgCode": null, + "side": "server", + "type": "StartUpOnOffEnum", + "included": 1, + "storageOption": "NVM", + "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": "1", + "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": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Level Control", + "code": 8, + "mfgCode": null, + "define": "LEVEL_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "MoveToLevel", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Move", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Step", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Stop", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToLevelWithOnOff", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveWithOnOff", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepWithOnOff", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StopWithOnOff", + "code": 7, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "CurrentLevel", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x254", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RemainingTime", + "code": 1, + "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": "MinLevel", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxLevel", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFE", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CurrentFrequency", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinFrequency", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxFrequency", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "OptionsBitmap", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OnOffTransitionTime", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnLevel", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnTransitionTime", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OffTransitionTime", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DefaultMoveRate", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "50", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "StartUpCurrentLevel", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "NVM", + "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": "3", + "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": "5", + "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": "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": "Color Control", + "code": 768, + "mfgCode": null, + "define": "COLOR_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "MoveToHue", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveHue", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepHue", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToSaturation", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveSaturation", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepSaturation", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToHueAndSaturation", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToColor", + "code": 7, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveColor", + "code": 8, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepColor", + "code": 9, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToColorTemperature", + "code": 10, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedMoveToHue", + "code": 64, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedMoveHue", + "code": 65, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedStepHue", + "code": 66, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedMoveToHueAndSaturation", + "code": 67, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ColorLoopSet", + "code": 68, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StopMoveStep", + "code": 71, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveColorTemperature", + "code": 75, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepColorTemperature", + "code": 76, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "CurrentHue", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentSaturation", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RemainingTime", + "code": 2, + "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": "CurrentX", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x616B", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentY", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x607D", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorTemperatureMireds", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00FA", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorMode", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "NumberOfPrimaries", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary1X", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary1Y", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary1Intensity", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary2X", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary2Y", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary2Intensity", + "code": 23, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary3X", + "code": 25, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary3Y", + "code": 26, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary3Intensity", + "code": 27, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary4X", + "code": 32, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary4Y", + "code": 33, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary4Intensity", + "code": 34, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary5X", + "code": 36, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary5Y", + "code": 37, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary5Intensity", + "code": 38, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary6X", + "code": 40, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary6Y", + "code": 41, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary6Intensity", + "code": 42, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EnhancedCurrentHue", + "code": 16384, + "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": "EnhancedColorMode", + "code": 16385, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopActive", + "code": 16386, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopDirection", + "code": 16387, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopTime", + "code": 16388, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0019", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopStartEnhancedHue", + "code": 16389, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x2300", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopStoredEnhancedHue", + "code": 16390, + "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": "ColorCapabilities", + "code": 16394, + "mfgCode": null, + "side": "server", + "type": "bitmap16", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x1F", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorTempPhysicalMinMireds", + "code": 16395, + "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": "ColorTempPhysicalMaxMireds", + "code": 16396, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFEFF", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CoupleColorTempToLevelMinMireds", + "code": 16397, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "StartUpColorTemperatureMireds", + "code": 16400, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "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": "0x1F", + "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": "6", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + } + ] + } + ], + "endpoints": [ + { + "endpointTypeName": "MA-rootdevice", + "endpointTypeIndex": 0, + "profileId": 259, + "endpointId": 0, + "networkId": 0 + }, + { + "endpointTypeName": "MA-extendedcolorlight", + "endpointTypeIndex": 1, + "profileId": 259, + "endpointId": 1, + "networkId": 0 + } + ] +} \ No newline at end of file diff --git a/examples/lighting-app/qcc74x/data_model/lighting-app-thread.matter b/examples/lighting-app/qcc74x/data_model/lighting-app-thread.matter new file mode 100644 index 00000000000000..392e08c39bf977 --- /dev/null +++ b/examples/lighting-app/qcc74x/data_model/lighting-app-thread.matter @@ -0,0 +1,2436 @@ +// 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; +} + +/** Attributes and commands for group configuration and manipulation. */ +cluster Groups = 4 { + revision 4; + + bitmap Feature : bitmap32 { + kGroupNames = 0x1; + } + + bitmap NameSupportBitmap : bitmap8 { + kGroupNames = 0x80; + } + + readonly attribute NameSupportBitmap nameSupport = 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; + + request struct AddGroupRequest { + group_id groupID = 0; + char_string<16> groupName = 1; + } + + response struct AddGroupResponse = 0 { + enum8 status = 0; + group_id groupID = 1; + } + + request struct ViewGroupRequest { + group_id groupID = 0; + } + + response struct ViewGroupResponse = 1 { + enum8 status = 0; + group_id groupID = 1; + char_string<16> groupName = 2; + } + + request struct GetGroupMembershipRequest { + group_id groupList[] = 0; + } + + response struct GetGroupMembershipResponse = 2 { + nullable int8u capacity = 0; + group_id groupList[] = 1; + } + + request struct RemoveGroupRequest { + group_id groupID = 0; + } + + response struct RemoveGroupResponse = 3 { + enum8 status = 0; + group_id groupID = 1; + } + + request struct AddGroupIfIdentifyingRequest { + group_id groupID = 0; + char_string<16> groupName = 1; + } + + /** Command description for AddGroup */ + fabric command access(invoke: manage) AddGroup(AddGroupRequest): AddGroupResponse = 0; + /** Command description for ViewGroup */ + fabric command ViewGroup(ViewGroupRequest): ViewGroupResponse = 1; + /** Command description for GetGroupMembership */ + fabric command GetGroupMembership(GetGroupMembershipRequest): GetGroupMembershipResponse = 2; + /** Command description for RemoveGroup */ + fabric command access(invoke: manage) RemoveGroup(RemoveGroupRequest): RemoveGroupResponse = 3; + /** Command description for RemoveAllGroups */ + fabric command access(invoke: manage) RemoveAllGroups(): DefaultSuccess = 4; + /** Command description for AddGroupIfIdentifying */ + fabric command access(invoke: manage) AddGroupIfIdentifying(AddGroupIfIdentifyingRequest): DefaultSuccess = 5; +} + +/** Attributes and commands for switching devices between 'On' and 'Off' states. */ +cluster OnOff = 6 { + revision 6; + + enum DelayedAllOffEffectVariantEnum : enum8 { + kDelayedOffFastFade = 0; + kNoFade = 1; + kDelayedOffSlowFade = 2; + } + + enum DyingLightEffectVariantEnum : enum8 { + kDyingLightFadeOff = 0; + } + + enum EffectIdentifierEnum : enum8 { + kDelayedAllOff = 0; + kDyingLight = 1; + } + + enum StartUpOnOffEnum : enum8 { + kOff = 0; + kOn = 1; + kToggle = 2; + } + + bitmap Feature : bitmap32 { + kLighting = 0x1; + kDeadFrontBehavior = 0x2; + kOffOnly = 0x4; + } + + bitmap OnOffControlBitmap : bitmap8 { + kAcceptOnlyWhenOn = 0x1; + } + + readonly attribute boolean onOff = 0; + readonly attribute optional boolean globalSceneControl = 16384; + attribute optional int16u onTime = 16385; + attribute optional int16u offWaitTime = 16386; + attribute access(write: manage) optional nullable StartUpOnOffEnum startUpOnOff = 16387; + 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 OffWithEffectRequest { + EffectIdentifierEnum effectIdentifier = 0; + enum8 effectVariant = 1; + } + + request struct OnWithTimedOffRequest { + OnOffControlBitmap onOffControl = 0; + int16u onTime = 1; + int16u offWaitTime = 2; + } + + /** On receipt of this command, a device SHALL enter its ‘Off’ state. This state is device dependent, but it is recommended that it is used for power off or similar functions. On receipt of the Off command, the OnTime attribute SHALL be set to 0. */ + command Off(): DefaultSuccess = 0; + /** On receipt of this command, a device SHALL enter its ‘On’ state. This state is device dependent, but it is recommended that it is used for power on or similar functions. On receipt of the On command, if the value of the OnTime attribute is equal to 0, the device SHALL set the OffWaitTime attribute to 0. */ + command On(): DefaultSuccess = 1; + /** On receipt of this command, if a device is in its ‘Off’ state it SHALL enter its ‘On’ state. Otherwise, if it is in its ‘On’ state it SHALL enter its ‘Off’ state. On receipt of the Toggle command, if the value of the OnOff attribute is equal to FALSE and if the value of the OnTime attribute is equal to 0, the device SHALL set the OffWaitTime attribute to 0. If the value of the OnOff attribute is equal to TRUE, the OnTime attribute SHALL be set to 0. */ + command Toggle(): DefaultSuccess = 2; + /** The OffWithEffect command allows devices to be turned off using enhanced ways of fading. */ + command OffWithEffect(OffWithEffectRequest): DefaultSuccess = 64; + /** The OnWithRecallGlobalScene command allows the recall of the settings when the device was turned off. */ + command OnWithRecallGlobalScene(): DefaultSuccess = 65; + /** The OnWithTimedOff command allows devices to be turned on for a specific duration with a guarded off duration so that SHOULD the device be subsequently switched off, further OnWithTimedOff commands, received during this time, are prevented from turning the devices back on. */ + command OnWithTimedOff(OnWithTimedOffRequest): DefaultSuccess = 66; +} + +/** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ +cluster LevelControl = 8 { + revision 5; + + enum MoveModeEnum : enum8 { + kUp = 0; + kDown = 1; + } + + enum StepModeEnum : enum8 { + kUp = 0; + kDown = 1; + } + + bitmap Feature : bitmap32 { + kOnOff = 0x1; + kLighting = 0x2; + kFrequency = 0x4; + } + + bitmap OptionsBitmap : bitmap8 { + kExecuteIfOff = 0x1; + kCoupleColorTempToLevel = 0x2; + } + + readonly attribute nullable int8u currentLevel = 0; + readonly attribute optional int16u remainingTime = 1; + readonly attribute optional int8u minLevel = 2; + readonly attribute optional int8u maxLevel = 3; + readonly attribute optional int16u currentFrequency = 4; + readonly attribute optional int16u minFrequency = 5; + readonly attribute optional int16u maxFrequency = 6; + attribute OptionsBitmap options = 15; + attribute optional int16u onOffTransitionTime = 16; + attribute nullable int8u onLevel = 17; + attribute optional nullable int16u onTransitionTime = 18; + attribute optional nullable int16u offTransitionTime = 19; + attribute optional nullable int8u defaultMoveRate = 20; + attribute access(write: manage) optional nullable int8u startUpCurrentLevel = 16384; + 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 MoveToLevelRequest { + int8u level = 0; + nullable int16u transitionTime = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct MoveRequest { + MoveModeEnum moveMode = 0; + nullable int8u rate = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct StepRequest { + StepModeEnum stepMode = 0; + int8u stepSize = 1; + nullable int16u transitionTime = 2; + OptionsBitmap optionsMask = 3; + OptionsBitmap optionsOverride = 4; + } + + request struct StopRequest { + OptionsBitmap optionsMask = 0; + OptionsBitmap optionsOverride = 1; + } + + request struct MoveToLevelWithOnOffRequest { + int8u level = 0; + nullable int16u transitionTime = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct MoveWithOnOffRequest { + MoveModeEnum moveMode = 0; + nullable int8u rate = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct StepWithOnOffRequest { + StepModeEnum stepMode = 0; + int8u stepSize = 1; + nullable int16u transitionTime = 2; + OptionsBitmap optionsMask = 3; + OptionsBitmap optionsOverride = 4; + } + + request struct StopWithOnOffRequest { + OptionsBitmap optionsMask = 0; + OptionsBitmap optionsOverride = 1; + } + + request struct MoveToClosestFrequencyRequest { + int16u frequency = 0; + } + + /** Command description for MoveToLevel */ + command MoveToLevel(MoveToLevelRequest): DefaultSuccess = 0; + /** Command description for Move */ + command Move(MoveRequest): DefaultSuccess = 1; + /** Command description for Step */ + command Step(StepRequest): DefaultSuccess = 2; + /** Command description for Stop */ + command Stop(StopRequest): DefaultSuccess = 3; + /** Command description for MoveToLevelWithOnOff */ + command MoveToLevelWithOnOff(MoveToLevelWithOnOffRequest): DefaultSuccess = 4; + /** Command description for MoveWithOnOff */ + command MoveWithOnOff(MoveWithOnOffRequest): DefaultSuccess = 5; + /** Command description for StepWithOnOff */ + command StepWithOnOff(StepWithOnOffRequest): DefaultSuccess = 6; + /** Command description for StopWithOnOff */ + command StopWithOnOff(StopWithOnOffRequest): DefaultSuccess = 7; + /** Change the currrent frequency to the provided one, or a close + approximation if the exact provided one is not possible. */ + command MoveToClosestFrequency(MoveToClosestFrequencyRequest): DefaultSuccess = 8; +} + +/** 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; +} + +/** Nodes should be expected to be deployed to any and all regions of the world. These global regions + may have differing common languages, units of measurements, and numerical formatting + standards. As such, Nodes that visually or audibly convey information need a mechanism by which + they can be configured to use a user’s preferred language, units, etc */ +cluster LocalizationConfiguration = 43 { + revision 1; // NOTE: Default/not specifically set + + attribute access(write: manage) char_string<35> activeLocale = 0; + readonly attribute char_string supportedLocales[] = 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; +} + +/** Nodes should be expected to be deployed to any and all regions of the world. These global regions + may have differing preferences for how dates and times are conveyed. As such, Nodes that visually + or audibly convey time information need a mechanism by which they can be configured to use a + user’s preferred format. */ +cluster TimeFormatLocalization = 44 { + revision 1; // NOTE: Default/not specifically set + + enum CalendarTypeEnum : enum8 { + kBuddhist = 0; + kChinese = 1; + kCoptic = 2; + kEthiopian = 3; + kGregorian = 4; + kHebrew = 5; + kIndian = 6; + kIslamic = 7; + kJapanese = 8; + kKorean = 9; + kPersian = 10; + kTaiwanese = 11; + kUseActiveLocale = 255; + } + + enum HourFormatEnum : enum8 { + k12hr = 0; + k24hr = 1; + kUseActiveLocale = 255; + } + + bitmap Feature : bitmap32 { + kCalendarFormat = 0x1; + } + + attribute access(write: manage) HourFormatEnum hourFormat = 0; + attribute access(write: manage) optional CalendarTypeEnum activeCalendarType = 1; + readonly attribute optional CalendarTypeEnum supportedCalendarTypes[] = 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; +} + +/** 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 cluster provides commands for retrieving unstructured diagnostic logs from a Node that may be used to aid in diagnostics. */ +cluster DiagnosticLogs = 50 { + revision 1; // NOTE: Default/not specifically set + + enum IntentEnum : enum8 { + kEndUserSupport = 0; + kNetworkDiag = 1; + kCrashLogs = 2; + } + + enum StatusEnum : enum8 { + kSuccess = 0; + kExhausted = 1; + kNoLogs = 2; + kBusy = 3; + kDenied = 4; + } + + enum TransferProtocolEnum : enum8 { + kResponsePayload = 0; + kBDX = 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 RetrieveLogsRequestRequest { + IntentEnum intent = 0; + TransferProtocolEnum requestedProtocol = 1; + optional char_string<32> transferFileDesignator = 2; + } + + response struct RetrieveLogsResponse = 1 { + StatusEnum status = 0; + long_octet_string logContent = 1; + optional epoch_us UTCTimeStamp = 2; + optional systime_us timeSinceBoot = 3; + } + + /** Retrieving diagnostic logs from a Node */ + command RetrieveLogsRequest(RetrieveLogsRequestRequest): RetrieveLogsResponse = 0; +} + +/** 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; +} + +/** The Fixed Label Cluster provides a feature for the device to tag an endpoint with zero or more read only +labels. */ +cluster FixedLabel = 64 { + revision 1; // NOTE: Default/not specifically set + + struct LabelStruct { + char_string<16> label = 0; + char_string<16> value = 1; + } + + readonly attribute LabelStruct labelList[] = 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; +} + +/** The User Label Cluster provides a feature to tag an endpoint with zero or more labels. */ +cluster UserLabel = 65 { + revision 1; // NOTE: Default/not specifically set + + struct LabelStruct { + char_string<16> label = 0; + char_string<16> value = 1; + } + + attribute access(write: manage) LabelStruct labelList[] = 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; +} + +/** Attributes and commands for controlling the color properties of a color-capable light. */ +cluster ColorControl = 768 { + revision 6; + + enum ColorLoopAction : enum8 { + kDeactivate = 0; + kActivateFromColorLoopStartEnhancedHue = 1; + kActivateFromEnhancedCurrentHue = 2; + } + + enum ColorLoopDirection : enum8 { + kDecrementHue = 0; + kIncrementHue = 1; + } + + enum ColorMode : enum8 { + kCurrentHueAndCurrentSaturation = 0; + kCurrentXAndCurrentY = 1; + kColorTemperature = 2; + } + + enum HueDirection : enum8 { + kShortestDistance = 0; + kLongestDistance = 1; + kUp = 2; + kDown = 3; + } + + enum HueMoveMode : enum8 { + kStop = 0; + kUp = 1; + kDown = 3; + } + + enum HueStepMode : enum8 { + kUp = 1; + kDown = 3; + } + + enum SaturationMoveMode : enum8 { + kStop = 0; + kUp = 1; + kDown = 3; + } + + enum SaturationStepMode : enum8 { + kUp = 1; + kDown = 3; + } + + bitmap ColorCapabilities : bitmap16 { + kHueSaturationSupported = 0x1; + kEnhancedHueSupported = 0x2; + kColorLoopSupported = 0x4; + kXYAttributesSupported = 0x8; + kColorTemperatureSupported = 0x10; + } + + bitmap ColorLoopUpdateFlags : bitmap8 { + kUpdateAction = 0x1; + kUpdateDirection = 0x2; + kUpdateTime = 0x4; + kUpdateStartHue = 0x8; + } + + bitmap Feature : bitmap32 { + kHueAndSaturation = 0x1; + kEnhancedHue = 0x2; + kColorLoop = 0x4; + kXY = 0x8; + kColorTemperature = 0x10; + } + + readonly attribute optional int8u currentHue = 0; + readonly attribute optional int8u currentSaturation = 1; + readonly attribute optional int16u remainingTime = 2; + readonly attribute optional int16u currentX = 3; + readonly attribute optional int16u currentY = 4; + readonly attribute optional enum8 driftCompensation = 5; + readonly attribute optional char_string<254> compensationText = 6; + readonly attribute optional int16u colorTemperatureMireds = 7; + readonly attribute enum8 colorMode = 8; + attribute bitmap8 options = 15; + readonly attribute nullable int8u numberOfPrimaries = 16; + readonly attribute optional int16u primary1X = 17; + readonly attribute optional int16u primary1Y = 18; + readonly attribute optional nullable int8u primary1Intensity = 19; + readonly attribute optional int16u primary2X = 21; + readonly attribute optional int16u primary2Y = 22; + readonly attribute optional nullable int8u primary2Intensity = 23; + readonly attribute optional int16u primary3X = 25; + readonly attribute optional int16u primary3Y = 26; + readonly attribute optional nullable int8u primary3Intensity = 27; + readonly attribute optional int16u primary4X = 32; + readonly attribute optional int16u primary4Y = 33; + readonly attribute optional nullable int8u primary4Intensity = 34; + readonly attribute optional int16u primary5X = 36; + readonly attribute optional int16u primary5Y = 37; + readonly attribute optional nullable int8u primary5Intensity = 38; + readonly attribute optional int16u primary6X = 40; + readonly attribute optional int16u primary6Y = 41; + readonly attribute optional nullable int8u primary6Intensity = 42; + attribute access(write: manage) optional int16u whitePointX = 48; + attribute access(write: manage) optional int16u whitePointY = 49; + attribute access(write: manage) optional int16u colorPointRX = 50; + attribute access(write: manage) optional int16u colorPointRY = 51; + attribute access(write: manage) optional nullable int8u colorPointRIntensity = 52; + attribute access(write: manage) optional int16u colorPointGX = 54; + attribute access(write: manage) optional int16u colorPointGY = 55; + attribute access(write: manage) optional nullable int8u colorPointGIntensity = 56; + attribute access(write: manage) optional int16u colorPointBX = 58; + attribute access(write: manage) optional int16u colorPointBY = 59; + attribute access(write: manage) optional nullable int8u colorPointBIntensity = 60; + readonly attribute optional int16u enhancedCurrentHue = 16384; + readonly attribute enum8 enhancedColorMode = 16385; + readonly attribute optional int8u colorLoopActive = 16386; + readonly attribute optional int8u colorLoopDirection = 16387; + readonly attribute optional int16u colorLoopTime = 16388; + readonly attribute optional int16u colorLoopStartEnhancedHue = 16389; + readonly attribute optional int16u colorLoopStoredEnhancedHue = 16390; + readonly attribute bitmap16 colorCapabilities = 16394; + readonly attribute optional int16u colorTempPhysicalMinMireds = 16395; + readonly attribute optional int16u colorTempPhysicalMaxMireds = 16396; + readonly attribute optional int16u coupleColorTempToLevelMinMireds = 16397; + attribute access(write: manage) optional nullable int16u startUpColorTemperatureMireds = 16400; + 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 MoveToHueRequest { + int8u hue = 0; + HueDirection direction = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveHueRequest { + HueMoveMode moveMode = 0; + int8u rate = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct StepHueRequest { + HueStepMode stepMode = 0; + int8u stepSize = 1; + int8u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToSaturationRequest { + int8u saturation = 0; + int16u transitionTime = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct MoveSaturationRequest { + SaturationMoveMode moveMode = 0; + int8u rate = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct StepSaturationRequest { + SaturationStepMode stepMode = 0; + int8u stepSize = 1; + int8u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToHueAndSaturationRequest { + int8u hue = 0; + int8u saturation = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToColorRequest { + int16u colorX = 0; + int16u colorY = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveColorRequest { + int16s rateX = 0; + int16s rateY = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct StepColorRequest { + int16s stepX = 0; + int16s stepY = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToColorTemperatureRequest { + int16u colorTemperatureMireds = 0; + int16u transitionTime = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct EnhancedMoveToHueRequest { + int16u enhancedHue = 0; + HueDirection direction = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct EnhancedMoveHueRequest { + HueMoveMode moveMode = 0; + int16u rate = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct EnhancedStepHueRequest { + HueStepMode stepMode = 0; + int16u stepSize = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct EnhancedMoveToHueAndSaturationRequest { + int16u enhancedHue = 0; + int8u saturation = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct ColorLoopSetRequest { + ColorLoopUpdateFlags updateFlags = 0; + ColorLoopAction action = 1; + ColorLoopDirection direction = 2; + int16u time = 3; + int16u startHue = 4; + bitmap8 optionsMask = 5; + bitmap8 optionsOverride = 6; + } + + request struct StopMoveStepRequest { + bitmap8 optionsMask = 0; + bitmap8 optionsOverride = 1; + } + + request struct MoveColorTemperatureRequest { + HueMoveMode moveMode = 0; + int16u rate = 1; + int16u colorTemperatureMinimumMireds = 2; + int16u colorTemperatureMaximumMireds = 3; + bitmap8 optionsMask = 4; + bitmap8 optionsOverride = 5; + } + + request struct StepColorTemperatureRequest { + HueStepMode stepMode = 0; + int16u stepSize = 1; + int16u transitionTime = 2; + int16u colorTemperatureMinimumMireds = 3; + int16u colorTemperatureMaximumMireds = 4; + bitmap8 optionsMask = 5; + bitmap8 optionsOverride = 6; + } + + /** Move to specified hue. */ + command MoveToHue(MoveToHueRequest): DefaultSuccess = 0; + /** Move hue up or down at specified rate. */ + command MoveHue(MoveHueRequest): DefaultSuccess = 1; + /** Step hue up or down by specified size at specified rate. */ + command StepHue(StepHueRequest): DefaultSuccess = 2; + /** Move to specified saturation. */ + command MoveToSaturation(MoveToSaturationRequest): DefaultSuccess = 3; + /** Move saturation up or down at specified rate. */ + command MoveSaturation(MoveSaturationRequest): DefaultSuccess = 4; + /** Step saturation up or down by specified size at specified rate. */ + command StepSaturation(StepSaturationRequest): DefaultSuccess = 5; + /** Move to hue and saturation. */ + command MoveToHueAndSaturation(MoveToHueAndSaturationRequest): DefaultSuccess = 6; + /** Move to specified color. */ + command MoveToColor(MoveToColorRequest): DefaultSuccess = 7; + /** Moves the color. */ + command MoveColor(MoveColorRequest): DefaultSuccess = 8; + /** Steps the lighting to a specific color. */ + command StepColor(StepColorRequest): DefaultSuccess = 9; + /** Move to a specific color temperature. */ + command MoveToColorTemperature(MoveToColorTemperatureRequest): DefaultSuccess = 10; + /** Command description for EnhancedMoveToHue */ + command EnhancedMoveToHue(EnhancedMoveToHueRequest): DefaultSuccess = 64; + /** Command description for EnhancedMoveHue */ + command EnhancedMoveHue(EnhancedMoveHueRequest): DefaultSuccess = 65; + /** Command description for EnhancedStepHue */ + command EnhancedStepHue(EnhancedStepHueRequest): DefaultSuccess = 66; + /** Command description for EnhancedMoveToHueAndSaturation */ + command EnhancedMoveToHueAndSaturation(EnhancedMoveToHueAndSaturationRequest): DefaultSuccess = 67; + /** Command description for ColorLoopSet */ + command ColorLoopSet(ColorLoopSetRequest): DefaultSuccess = 68; + /** Command description for StopMoveStep */ + command StopMoveStep(StopMoveStepRequest): DefaultSuccess = 71; + /** Command description for MoveColorTemperature */ + command MoveColorTemperature(MoveColorTemperatureRequest): DefaultSuccess = 75; + /** Command description for StepColorTemperature */ + command StepColorTemperature(StepColorTemperatureRequest): DefaultSuccess = 76; +} + +endpoint 0 { + device type ma_rootdevice = 22, version 1; + + 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 extension; + 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 manufacturingDate; + callback attribute partNumber; + callback attribute productURL; + callback attribute productLabel; + callback attribute serialNumber; + persist attribute localConfigDisabled default = 0; + callback attribute uniqueID; + callback attribute capabilityMinima; + callback attribute specificationVersion; + callback attribute maxPathsPerInvoke; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 3; + } + + 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 LocalizationConfiguration { + persist attribute activeLocale default = "en-US"; + callback attribute supportedLocales; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster TimeFormatLocalization { + persist attribute hourFormat default = 0; + persist attribute activeCalendarType default = 0; + callback attribute supportedCalendarTypes; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + 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 AddOrUpdateWiFiNetwork; + handle command AddOrUpdateThreadNetwork; + handle command RemoveNetwork; + handle command NetworkConfigResponse; + handle command ConnectNetwork; + handle command ConnectNetworkResponse; + handle command ReorderNetwork; + } + + server cluster DiagnosticLogs { + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + + handle command RetrieveLogsRequest; + } + + server cluster GeneralDiagnostics { + emits event HardwareFaultChange; + emits event RadioFaultChange; + emits event NetworkFaultChange; + emits event BootReason; + callback attribute networkInterfaces; + callback attribute rebootCount; + callback attribute upTime; + callback attribute totalOperationalHours; + callback attribute bootReason; + callback attribute activeHardwareFaults; + callback attribute activeRadioFaults; + callback attribute activeNetworkFaults; + callback attribute testEventTriggersEnabled default = false; + callback attribute featureMap; + callback attribute clusterRevision; + + handle command TestEventTrigger; + handle command TimeSnapshot; + handle command TimeSnapshotResponse; + } + + 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 activeTimestamp; + callback attribute pendingTimestamp; + callback attribute delay; + callback attribute securityPolicy; + callback attribute channelPage0Mask; + callback attribute operationalDatasetComponents; + callback attribute activeNetworkFaultsList; + ram attribute featureMap default = 0x000F; + ram attribute clusterRevision default = 1; + } + + 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 OpenBasicCommissioningWindow; + 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 FixedLabel { + callback attribute labelList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster UserLabel { + callback attribute labelList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } +} +endpoint 1 { + device type ma_extendedcolorlight = 269, version 1; + + + server cluster Identify { + ram attribute identifyTime default = 0x0000; + ram attribute identifyType default = 0x0; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 4; + + handle command Identify; + handle command TriggerEffect; + } + + server cluster Groups { + ram attribute nameSupport; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 4; + + handle command AddGroup; + handle command AddGroupResponse; + handle command ViewGroup; + handle command ViewGroupResponse; + handle command GetGroupMembership; + handle command GetGroupMembershipResponse; + handle command RemoveGroup; + handle command RemoveGroupResponse; + handle command RemoveAllGroups; + handle command AddGroupIfIdentifying; + } + + server cluster OnOff { + persist attribute onOff default = 0x01; + ram attribute globalSceneControl default = 0x01; + ram attribute onTime default = 0x0000; + ram attribute offWaitTime default = 0x0000; + persist attribute startUpOnOff; + ram attribute featureMap default = 1; + ram attribute clusterRevision default = 5; + + handle command Off; + handle command On; + handle command Toggle; + handle command OffWithEffect; + handle command OnWithRecallGlobalScene; + handle command OnWithTimedOff; + } + + server cluster LevelControl { + persist attribute currentLevel default = 0x254; + ram attribute remainingTime default = 0x0000; + ram attribute minLevel default = 0x01; + ram attribute maxLevel default = 0xFE; + ram attribute currentFrequency default = 0x0000; + ram attribute minFrequency default = 0x0000; + ram attribute maxFrequency default = 0x0000; + ram attribute options default = 0x00; + ram attribute onOffTransitionTime default = 0x0000; + ram attribute onLevel; + ram attribute onTransitionTime; + ram attribute offTransitionTime; + ram attribute defaultMoveRate default = 50; + persist attribute startUpCurrentLevel; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 5; + + handle command MoveToLevel; + handle command Move; + handle command Step; + handle command Stop; + handle command MoveToLevelWithOnOff; + handle command MoveWithOnOff; + handle command StepWithOnOff; + handle command StopWithOnOff; + } + + server cluster Descriptor { + callback attribute deviceTypeList; + callback attribute serverList; + callback attribute clientList; + callback attribute partsList; + callback attribute featureMap; + callback attribute clusterRevision; + } + + server cluster ColorControl { + ram attribute currentHue default = 0x00; + ram attribute currentSaturation default = 0x00; + ram attribute remainingTime default = 0x0000; + ram attribute currentX default = 0x616B; + ram attribute currentY default = 0x607D; + ram attribute colorTemperatureMireds default = 0x00FA; + ram attribute colorMode default = 0x01; + ram attribute options default = 0x00; + ram attribute numberOfPrimaries; + ram attribute primary1X; + ram attribute primary1Y; + ram attribute primary1Intensity; + ram attribute primary2X; + ram attribute primary2Y; + ram attribute primary2Intensity; + ram attribute primary3X; + ram attribute primary3Y; + ram attribute primary3Intensity; + ram attribute primary4X; + ram attribute primary4Y; + ram attribute primary4Intensity; + ram attribute primary5X; + ram attribute primary5Y; + ram attribute primary5Intensity; + ram attribute primary6X; + ram attribute primary6Y; + ram attribute primary6Intensity; + ram attribute enhancedCurrentHue default = 0x0000; + ram attribute enhancedColorMode default = 0x01; + ram attribute colorLoopActive default = 0x00; + ram attribute colorLoopDirection default = 0x00; + ram attribute colorLoopTime default = 0x0019; + ram attribute colorLoopStartEnhancedHue default = 0x2300; + ram attribute colorLoopStoredEnhancedHue default = 0x0000; + ram attribute colorCapabilities default = 0x1F; + ram attribute colorTempPhysicalMinMireds default = 0x0000; + ram attribute colorTempPhysicalMaxMireds default = 0xFEFF; + ram attribute coupleColorTempToLevelMinMireds; + ram attribute startUpColorTemperatureMireds; + ram attribute featureMap default = 0x1F; + ram attribute clusterRevision default = 6; + + handle command MoveToHue; + handle command MoveHue; + handle command StepHue; + handle command MoveToSaturation; + handle command MoveSaturation; + handle command StepSaturation; + handle command MoveToHueAndSaturation; + handle command MoveToColor; + handle command MoveColor; + handle command StepColor; + handle command MoveToColorTemperature; + handle command EnhancedMoveToHue; + handle command EnhancedMoveHue; + handle command EnhancedStepHue; + handle command EnhancedMoveToHueAndSaturation; + handle command ColorLoopSet; + handle command StopMoveStep; + handle command MoveColorTemperature; + handle command StepColorTemperature; + } +} + + diff --git a/examples/lighting-app/qcc74x/data_model/lighting-app-thread.zap b/examples/lighting-app/qcc74x/data_model/lighting-app-thread.zap new file mode 100644 index 00000000000000..1a410c2d751a7c --- /dev/null +++ b/examples/lighting-app/qcc74x/data_model/lighting-app-thread.zap @@ -0,0 +1,5305 @@ +{ + "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": [ + 1 + ], + "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": "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": "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": "Extension", + "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": "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": "ManufacturingDate", + "code": 11, + "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": "PartNumber", + "code": 12, + "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": "ProductURL", + "code": 13, + "mfgCode": null, + "side": "server", + "type": "long_char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ProductLabel", + "code": 14, + "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": "SerialNumber", + "code": 15, + "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": "LocalConfigDisabled", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "NVM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "UniqueID", + "code": 18, + "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": null, + "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": 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": 1, + "bounded": 0, + "defaultValue": "3", + "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": "Localization Configuration", + "code": 43, + "mfgCode": null, + "define": "LOCALIZATION_CONFIGURATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "ActiveLocale", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "en-US", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportedLocales", + "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": "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 + } + ] + }, + { + "name": "Time Format Localization", + "code": 44, + "mfgCode": null, + "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "HourFormat", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "HourFormatEnum", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveCalendarType", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "CalendarTypeEnum", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportedCalendarTypes", + "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": "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 + } + ] + }, + { + "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": "AddOrUpdateWiFiNetwork", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "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": "Diagnostic Logs", + "code": 50, + "mfgCode": null, + "define": "DIAGNOSTIC_LOGS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "RetrieveLogsRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "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 + } + ] + }, + { + "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 + }, + { + "name": "TimeSnapshot", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "TimeSnapshotResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "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": "UpTime", + "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": "TotalOperationalHours", + "code": 3, + "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": "BootReason", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "BootReasonEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveHardwareFaults", + "code": 5, + "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": "ActiveRadioFaults", + "code": 6, + "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": "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": "0x0002", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "HardwareFaultChange", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "RadioFaultChange", + "code": 1, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "NetworkFaultChange", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "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, + "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": "ActiveTimestamp", + "code": 56, + "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": "PendingTimestamp", + "code": 57, + "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": "Delay", + "code": 58, + "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": "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": "OpenBasicCommissioningWindow", + "code": 1, + "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": "Fixed Label", + "code": 64, + "mfgCode": null, + "define": "FIXED_LABEL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "LabelList", + "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": "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 + } + ] + }, + { + "name": "User Label", + "code": 65, + "mfgCode": null, + "define": "USER_LABEL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "LabelList", + "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": "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 + } + ] + } + ] + }, + { + "id": 2, + "name": "MA-extendedcolorlight", + "deviceTypeRef": { + "code": 269, + "profileId": 259, + "label": "MA-extendedcolorlight", + "name": "MA-extendedcolorlight" + }, + "deviceTypes": [ + { + "code": 269, + "profileId": 259, + "label": "MA-extendedcolorlight", + "name": "MA-extendedcolorlight" + } + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 269 + ], + "deviceTypeName": "MA-extendedcolorlight", + "deviceTypeCode": 269, + "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": "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": "Groups", + "code": 4, + "mfgCode": null, + "define": "GROUPS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "AddGroup", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddGroupResponse", + "code": 0, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "ViewGroup", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ViewGroupResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "GetGroupMembership", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "GetGroupMembershipResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveGroup", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveGroupResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveAllGroups", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddGroupIfIdentifying", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "NameSupport", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "NameSupportBitmap", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "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": "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": "On/Off", + "code": 6, + "mfgCode": null, + "define": "ON_OFF_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "Off", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "On", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Toggle", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OffWithEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OnWithRecallGlobalScene", + "code": 65, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OnWithTimedOff", + "code": 66, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "OnOff", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "GlobalSceneControl", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OnTime", + "code": 16385, + "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": "OffWaitTime", + "code": 16386, + "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": "StartUpOnOff", + "code": 16387, + "mfgCode": null, + "side": "server", + "type": "StartUpOnOffEnum", + "included": 1, + "storageOption": "NVM", + "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": "1", + "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": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Level Control", + "code": 8, + "mfgCode": null, + "define": "LEVEL_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "MoveToLevel", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Move", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Step", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Stop", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToLevelWithOnOff", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveWithOnOff", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepWithOnOff", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StopWithOnOff", + "code": 7, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "CurrentLevel", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x254", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RemainingTime", + "code": 1, + "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": "MinLevel", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxLevel", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFE", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CurrentFrequency", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinFrequency", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxFrequency", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "OptionsBitmap", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OnOffTransitionTime", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnLevel", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnTransitionTime", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OffTransitionTime", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DefaultMoveRate", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "50", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "StartUpCurrentLevel", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "NVM", + "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": "3", + "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": "5", + "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": "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": "Color Control", + "code": 768, + "mfgCode": null, + "define": "COLOR_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "MoveToHue", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveHue", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepHue", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToSaturation", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveSaturation", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepSaturation", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToHueAndSaturation", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToColor", + "code": 7, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveColor", + "code": 8, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepColor", + "code": 9, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToColorTemperature", + "code": 10, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedMoveToHue", + "code": 64, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedMoveHue", + "code": 65, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedStepHue", + "code": 66, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedMoveToHueAndSaturation", + "code": 67, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ColorLoopSet", + "code": 68, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StopMoveStep", + "code": 71, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveColorTemperature", + "code": 75, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepColorTemperature", + "code": 76, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "CurrentHue", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentSaturation", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RemainingTime", + "code": 2, + "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": "CurrentX", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x616B", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentY", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x607D", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorTemperatureMireds", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00FA", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorMode", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "NumberOfPrimaries", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary1X", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary1Y", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary1Intensity", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary2X", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary2Y", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary2Intensity", + "code": 23, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary3X", + "code": 25, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary3Y", + "code": 26, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary3Intensity", + "code": 27, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary4X", + "code": 32, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary4Y", + "code": 33, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary4Intensity", + "code": 34, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary5X", + "code": 36, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary5Y", + "code": 37, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary5Intensity", + "code": 38, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary6X", + "code": 40, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary6Y", + "code": 41, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary6Intensity", + "code": 42, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EnhancedCurrentHue", + "code": 16384, + "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": "EnhancedColorMode", + "code": 16385, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopActive", + "code": 16386, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopDirection", + "code": 16387, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopTime", + "code": 16388, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0019", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopStartEnhancedHue", + "code": 16389, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x2300", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopStoredEnhancedHue", + "code": 16390, + "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": "ColorCapabilities", + "code": 16394, + "mfgCode": null, + "side": "server", + "type": "bitmap16", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x1F", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorTempPhysicalMinMireds", + "code": 16395, + "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": "ColorTempPhysicalMaxMireds", + "code": 16396, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFEFF", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CoupleColorTempToLevelMinMireds", + "code": 16397, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "StartUpColorTemperatureMireds", + "code": 16400, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "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": "0x1F", + "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": "6", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + } + ] + } + ], + "endpoints": [ + { + "endpointTypeName": "MA-rootdevice", + "endpointTypeIndex": 0, + "profileId": 259, + "endpointId": 0, + "networkId": 0 + }, + { + "endpointTypeName": "MA-extendedcolorlight", + "endpointTypeIndex": 1, + "profileId": 259, + "endpointId": 1, + "networkId": 0 + } + ] +} \ No newline at end of file diff --git a/examples/lighting-app/qcc74x/data_model/lighting-app-wifi.matter b/examples/lighting-app/qcc74x/data_model/lighting-app-wifi.matter new file mode 100644 index 00000000000000..4bc07365ff7564 --- /dev/null +++ b/examples/lighting-app/qcc74x/data_model/lighting-app-wifi.matter @@ -0,0 +1,2299 @@ +// 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; +} + +/** Attributes and commands for group configuration and manipulation. */ +cluster Groups = 4 { + revision 4; + + bitmap Feature : bitmap32 { + kGroupNames = 0x1; + } + + bitmap NameSupportBitmap : bitmap8 { + kGroupNames = 0x80; + } + + readonly attribute NameSupportBitmap nameSupport = 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; + + request struct AddGroupRequest { + group_id groupID = 0; + char_string<16> groupName = 1; + } + + response struct AddGroupResponse = 0 { + enum8 status = 0; + group_id groupID = 1; + } + + request struct ViewGroupRequest { + group_id groupID = 0; + } + + response struct ViewGroupResponse = 1 { + enum8 status = 0; + group_id groupID = 1; + char_string<16> groupName = 2; + } + + request struct GetGroupMembershipRequest { + group_id groupList[] = 0; + } + + response struct GetGroupMembershipResponse = 2 { + nullable int8u capacity = 0; + group_id groupList[] = 1; + } + + request struct RemoveGroupRequest { + group_id groupID = 0; + } + + response struct RemoveGroupResponse = 3 { + enum8 status = 0; + group_id groupID = 1; + } + + request struct AddGroupIfIdentifyingRequest { + group_id groupID = 0; + char_string<16> groupName = 1; + } + + /** Command description for AddGroup */ + fabric command access(invoke: manage) AddGroup(AddGroupRequest): AddGroupResponse = 0; + /** Command description for ViewGroup */ + fabric command ViewGroup(ViewGroupRequest): ViewGroupResponse = 1; + /** Command description for GetGroupMembership */ + fabric command GetGroupMembership(GetGroupMembershipRequest): GetGroupMembershipResponse = 2; + /** Command description for RemoveGroup */ + fabric command access(invoke: manage) RemoveGroup(RemoveGroupRequest): RemoveGroupResponse = 3; + /** Command description for RemoveAllGroups */ + fabric command access(invoke: manage) RemoveAllGroups(): DefaultSuccess = 4; + /** Command description for AddGroupIfIdentifying */ + fabric command access(invoke: manage) AddGroupIfIdentifying(AddGroupIfIdentifyingRequest): DefaultSuccess = 5; +} + +/** Attributes and commands for switching devices between 'On' and 'Off' states. */ +cluster OnOff = 6 { + revision 6; + + enum DelayedAllOffEffectVariantEnum : enum8 { + kDelayedOffFastFade = 0; + kNoFade = 1; + kDelayedOffSlowFade = 2; + } + + enum DyingLightEffectVariantEnum : enum8 { + kDyingLightFadeOff = 0; + } + + enum EffectIdentifierEnum : enum8 { + kDelayedAllOff = 0; + kDyingLight = 1; + } + + enum StartUpOnOffEnum : enum8 { + kOff = 0; + kOn = 1; + kToggle = 2; + } + + bitmap Feature : bitmap32 { + kLighting = 0x1; + kDeadFrontBehavior = 0x2; + kOffOnly = 0x4; + } + + bitmap OnOffControlBitmap : bitmap8 { + kAcceptOnlyWhenOn = 0x1; + } + + readonly attribute boolean onOff = 0; + readonly attribute optional boolean globalSceneControl = 16384; + attribute optional int16u onTime = 16385; + attribute optional int16u offWaitTime = 16386; + attribute access(write: manage) optional nullable StartUpOnOffEnum startUpOnOff = 16387; + 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 OffWithEffectRequest { + EffectIdentifierEnum effectIdentifier = 0; + enum8 effectVariant = 1; + } + + request struct OnWithTimedOffRequest { + OnOffControlBitmap onOffControl = 0; + int16u onTime = 1; + int16u offWaitTime = 2; + } + + /** On receipt of this command, a device SHALL enter its ‘Off’ state. This state is device dependent, but it is recommended that it is used for power off or similar functions. On receipt of the Off command, the OnTime attribute SHALL be set to 0. */ + command Off(): DefaultSuccess = 0; + /** On receipt of this command, a device SHALL enter its ‘On’ state. This state is device dependent, but it is recommended that it is used for power on or similar functions. On receipt of the On command, if the value of the OnTime attribute is equal to 0, the device SHALL set the OffWaitTime attribute to 0. */ + command On(): DefaultSuccess = 1; + /** On receipt of this command, if a device is in its ‘Off’ state it SHALL enter its ‘On’ state. Otherwise, if it is in its ‘On’ state it SHALL enter its ‘Off’ state. On receipt of the Toggle command, if the value of the OnOff attribute is equal to FALSE and if the value of the OnTime attribute is equal to 0, the device SHALL set the OffWaitTime attribute to 0. If the value of the OnOff attribute is equal to TRUE, the OnTime attribute SHALL be set to 0. */ + command Toggle(): DefaultSuccess = 2; + /** The OffWithEffect command allows devices to be turned off using enhanced ways of fading. */ + command OffWithEffect(OffWithEffectRequest): DefaultSuccess = 64; + /** The OnWithRecallGlobalScene command allows the recall of the settings when the device was turned off. */ + command OnWithRecallGlobalScene(): DefaultSuccess = 65; + /** The OnWithTimedOff command allows devices to be turned on for a specific duration with a guarded off duration so that SHOULD the device be subsequently switched off, further OnWithTimedOff commands, received during this time, are prevented from turning the devices back on. */ + command OnWithTimedOff(OnWithTimedOffRequest): DefaultSuccess = 66; +} + +/** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ +cluster LevelControl = 8 { + revision 5; + + enum MoveModeEnum : enum8 { + kUp = 0; + kDown = 1; + } + + enum StepModeEnum : enum8 { + kUp = 0; + kDown = 1; + } + + bitmap Feature : bitmap32 { + kOnOff = 0x1; + kLighting = 0x2; + kFrequency = 0x4; + } + + bitmap OptionsBitmap : bitmap8 { + kExecuteIfOff = 0x1; + kCoupleColorTempToLevel = 0x2; + } + + readonly attribute nullable int8u currentLevel = 0; + readonly attribute optional int16u remainingTime = 1; + readonly attribute optional int8u minLevel = 2; + readonly attribute optional int8u maxLevel = 3; + readonly attribute optional int16u currentFrequency = 4; + readonly attribute optional int16u minFrequency = 5; + readonly attribute optional int16u maxFrequency = 6; + attribute OptionsBitmap options = 15; + attribute optional int16u onOffTransitionTime = 16; + attribute nullable int8u onLevel = 17; + attribute optional nullable int16u onTransitionTime = 18; + attribute optional nullable int16u offTransitionTime = 19; + attribute optional nullable int8u defaultMoveRate = 20; + attribute access(write: manage) optional nullable int8u startUpCurrentLevel = 16384; + 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 MoveToLevelRequest { + int8u level = 0; + nullable int16u transitionTime = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct MoveRequest { + MoveModeEnum moveMode = 0; + nullable int8u rate = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct StepRequest { + StepModeEnum stepMode = 0; + int8u stepSize = 1; + nullable int16u transitionTime = 2; + OptionsBitmap optionsMask = 3; + OptionsBitmap optionsOverride = 4; + } + + request struct StopRequest { + OptionsBitmap optionsMask = 0; + OptionsBitmap optionsOverride = 1; + } + + request struct MoveToLevelWithOnOffRequest { + int8u level = 0; + nullable int16u transitionTime = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct MoveWithOnOffRequest { + MoveModeEnum moveMode = 0; + nullable int8u rate = 1; + OptionsBitmap optionsMask = 2; + OptionsBitmap optionsOverride = 3; + } + + request struct StepWithOnOffRequest { + StepModeEnum stepMode = 0; + int8u stepSize = 1; + nullable int16u transitionTime = 2; + OptionsBitmap optionsMask = 3; + OptionsBitmap optionsOverride = 4; + } + + request struct StopWithOnOffRequest { + OptionsBitmap optionsMask = 0; + OptionsBitmap optionsOverride = 1; + } + + request struct MoveToClosestFrequencyRequest { + int16u frequency = 0; + } + + /** Command description for MoveToLevel */ + command MoveToLevel(MoveToLevelRequest): DefaultSuccess = 0; + /** Command description for Move */ + command Move(MoveRequest): DefaultSuccess = 1; + /** Command description for Step */ + command Step(StepRequest): DefaultSuccess = 2; + /** Command description for Stop */ + command Stop(StopRequest): DefaultSuccess = 3; + /** Command description for MoveToLevelWithOnOff */ + command MoveToLevelWithOnOff(MoveToLevelWithOnOffRequest): DefaultSuccess = 4; + /** Command description for MoveWithOnOff */ + command MoveWithOnOff(MoveWithOnOffRequest): DefaultSuccess = 5; + /** Command description for StepWithOnOff */ + command StepWithOnOff(StepWithOnOffRequest): DefaultSuccess = 6; + /** Command description for StopWithOnOff */ + command StopWithOnOff(StopWithOnOffRequest): DefaultSuccess = 7; + /** Change the currrent frequency to the provided one, or a close + approximation if the exact provided one is not possible. */ + command MoveToClosestFrequency(MoveToClosestFrequencyRequest): DefaultSuccess = 8; +} + +/** 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; +} + +/** Nodes should be expected to be deployed to any and all regions of the world. These global regions + may have differing common languages, units of measurements, and numerical formatting + standards. As such, Nodes that visually or audibly convey information need a mechanism by which + they can be configured to use a user’s preferred language, units, etc */ +cluster LocalizationConfiguration = 43 { + revision 1; // NOTE: Default/not specifically set + + attribute access(write: manage) char_string<35> activeLocale = 0; + readonly attribute char_string supportedLocales[] = 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; +} + +/** Nodes should be expected to be deployed to any and all regions of the world. These global regions + may have differing preferences for how dates and times are conveyed. As such, Nodes that visually + or audibly convey time information need a mechanism by which they can be configured to use a + user’s preferred format. */ +cluster TimeFormatLocalization = 44 { + revision 1; // NOTE: Default/not specifically set + + enum CalendarTypeEnum : enum8 { + kBuddhist = 0; + kChinese = 1; + kCoptic = 2; + kEthiopian = 3; + kGregorian = 4; + kHebrew = 5; + kIndian = 6; + kIslamic = 7; + kJapanese = 8; + kKorean = 9; + kPersian = 10; + kTaiwanese = 11; + kUseActiveLocale = 255; + } + + enum HourFormatEnum : enum8 { + k12hr = 0; + k24hr = 1; + kUseActiveLocale = 255; + } + + bitmap Feature : bitmap32 { + kCalendarFormat = 0x1; + } + + attribute access(write: manage) HourFormatEnum hourFormat = 0; + attribute access(write: manage) optional CalendarTypeEnum activeCalendarType = 1; + readonly attribute optional CalendarTypeEnum supportedCalendarTypes[] = 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; +} + +/** 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 cluster provides commands for retrieving unstructured diagnostic logs from a Node that may be used to aid in diagnostics. */ +cluster DiagnosticLogs = 50 { + revision 1; // NOTE: Default/not specifically set + + enum IntentEnum : enum8 { + kEndUserSupport = 0; + kNetworkDiag = 1; + kCrashLogs = 2; + } + + enum StatusEnum : enum8 { + kSuccess = 0; + kExhausted = 1; + kNoLogs = 2; + kBusy = 3; + kDenied = 4; + } + + enum TransferProtocolEnum : enum8 { + kResponsePayload = 0; + kBDX = 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 RetrieveLogsRequestRequest { + IntentEnum intent = 0; + TransferProtocolEnum requestedProtocol = 1; + optional char_string<32> transferFileDesignator = 2; + } + + response struct RetrieveLogsResponse = 1 { + StatusEnum status = 0; + long_octet_string logContent = 1; + optional epoch_us UTCTimeStamp = 2; + optional systime_us timeSinceBoot = 3; + } + + /** Retrieving diagnostic logs from a Node */ + command RetrieveLogsRequest(RetrieveLogsRequestRequest): RetrieveLogsResponse = 0; +} + +/** 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 Wi-Fi 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 WiFiNetworkDiagnostics = 54 { + revision 1; // NOTE: Default/not specifically set + + enum AssociationFailureCauseEnum : enum8 { + kUnknown = 0; + kAssociationFailed = 1; + kAuthenticationFailed = 2; + kSsidNotFound = 3; + } + + enum ConnectionStatusEnum : enum8 { + kConnected = 0; + kNotConnected = 1; + } + + enum SecurityTypeEnum : enum8 { + kUnspecified = 0; + kNone = 1; + kWEP = 2; + kWPA = 3; + kWPA2 = 4; + kWPA3 = 5; + } + + enum WiFiVersionEnum : enum8 { + kA = 0; + kB = 1; + kG = 2; + kN = 3; + kAc = 4; + kAx = 5; + kAh = 6; + } + + bitmap Feature : bitmap32 { + kPacketCounts = 0x1; + kErrorCounts = 0x2; + } + + info event Disconnection = 0 { + int16u reasonCode = 0; + } + + info event AssociationFailure = 1 { + AssociationFailureCauseEnum associationFailureCause = 0; + int16u status = 1; + } + + info event ConnectionStatus = 2 { + ConnectionStatusEnum connectionStatus = 0; + } + + readonly attribute nullable octet_string<6> bssid = 0; + readonly attribute nullable SecurityTypeEnum securityType = 1; + readonly attribute nullable WiFiVersionEnum wiFiVersion = 2; + readonly attribute nullable int16u channelNumber = 3; + readonly attribute nullable int8s rssi = 4; + readonly attribute optional nullable int32u beaconLostCount = 5; + readonly attribute optional nullable int32u beaconRxCount = 6; + readonly attribute optional nullable int32u packetMulticastRxCount = 7; + readonly attribute optional nullable int32u packetMulticastTxCount = 8; + readonly attribute optional nullable int32u packetUnicastRxCount = 9; + readonly attribute optional nullable int32u packetUnicastTxCount = 10; + readonly attribute optional nullable int64u currentMaxRate = 11; + readonly attribute optional nullable int64u overrunCount = 12; + 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 Breacon and Packet related count attributes to 0 */ + command 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; +} + +/** The Fixed Label Cluster provides a feature for the device to tag an endpoint with zero or more read only +labels. */ +cluster FixedLabel = 64 { + revision 1; // NOTE: Default/not specifically set + + struct LabelStruct { + char_string<16> label = 0; + char_string<16> value = 1; + } + + readonly attribute LabelStruct labelList[] = 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; +} + +/** The User Label Cluster provides a feature to tag an endpoint with zero or more labels. */ +cluster UserLabel = 65 { + revision 1; // NOTE: Default/not specifically set + + struct LabelStruct { + char_string<16> label = 0; + char_string<16> value = 1; + } + + attribute access(write: manage) LabelStruct labelList[] = 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; +} + +/** Attributes and commands for controlling the color properties of a color-capable light. */ +cluster ColorControl = 768 { + revision 6; + + enum ColorLoopAction : enum8 { + kDeactivate = 0; + kActivateFromColorLoopStartEnhancedHue = 1; + kActivateFromEnhancedCurrentHue = 2; + } + + enum ColorLoopDirection : enum8 { + kDecrementHue = 0; + kIncrementHue = 1; + } + + enum ColorMode : enum8 { + kCurrentHueAndCurrentSaturation = 0; + kCurrentXAndCurrentY = 1; + kColorTemperature = 2; + } + + enum HueDirection : enum8 { + kShortestDistance = 0; + kLongestDistance = 1; + kUp = 2; + kDown = 3; + } + + enum HueMoveMode : enum8 { + kStop = 0; + kUp = 1; + kDown = 3; + } + + enum HueStepMode : enum8 { + kUp = 1; + kDown = 3; + } + + enum SaturationMoveMode : enum8 { + kStop = 0; + kUp = 1; + kDown = 3; + } + + enum SaturationStepMode : enum8 { + kUp = 1; + kDown = 3; + } + + bitmap ColorCapabilities : bitmap16 { + kHueSaturationSupported = 0x1; + kEnhancedHueSupported = 0x2; + kColorLoopSupported = 0x4; + kXYAttributesSupported = 0x8; + kColorTemperatureSupported = 0x10; + } + + bitmap ColorLoopUpdateFlags : bitmap8 { + kUpdateAction = 0x1; + kUpdateDirection = 0x2; + kUpdateTime = 0x4; + kUpdateStartHue = 0x8; + } + + bitmap Feature : bitmap32 { + kHueAndSaturation = 0x1; + kEnhancedHue = 0x2; + kColorLoop = 0x4; + kXY = 0x8; + kColorTemperature = 0x10; + } + + readonly attribute optional int8u currentHue = 0; + readonly attribute optional int8u currentSaturation = 1; + readonly attribute optional int16u remainingTime = 2; + readonly attribute optional int16u currentX = 3; + readonly attribute optional int16u currentY = 4; + readonly attribute optional enum8 driftCompensation = 5; + readonly attribute optional char_string<254> compensationText = 6; + readonly attribute optional int16u colorTemperatureMireds = 7; + readonly attribute enum8 colorMode = 8; + attribute bitmap8 options = 15; + readonly attribute nullable int8u numberOfPrimaries = 16; + readonly attribute optional int16u primary1X = 17; + readonly attribute optional int16u primary1Y = 18; + readonly attribute optional nullable int8u primary1Intensity = 19; + readonly attribute optional int16u primary2X = 21; + readonly attribute optional int16u primary2Y = 22; + readonly attribute optional nullable int8u primary2Intensity = 23; + readonly attribute optional int16u primary3X = 25; + readonly attribute optional int16u primary3Y = 26; + readonly attribute optional nullable int8u primary3Intensity = 27; + readonly attribute optional int16u primary4X = 32; + readonly attribute optional int16u primary4Y = 33; + readonly attribute optional nullable int8u primary4Intensity = 34; + readonly attribute optional int16u primary5X = 36; + readonly attribute optional int16u primary5Y = 37; + readonly attribute optional nullable int8u primary5Intensity = 38; + readonly attribute optional int16u primary6X = 40; + readonly attribute optional int16u primary6Y = 41; + readonly attribute optional nullable int8u primary6Intensity = 42; + attribute access(write: manage) optional int16u whitePointX = 48; + attribute access(write: manage) optional int16u whitePointY = 49; + attribute access(write: manage) optional int16u colorPointRX = 50; + attribute access(write: manage) optional int16u colorPointRY = 51; + attribute access(write: manage) optional nullable int8u colorPointRIntensity = 52; + attribute access(write: manage) optional int16u colorPointGX = 54; + attribute access(write: manage) optional int16u colorPointGY = 55; + attribute access(write: manage) optional nullable int8u colorPointGIntensity = 56; + attribute access(write: manage) optional int16u colorPointBX = 58; + attribute access(write: manage) optional int16u colorPointBY = 59; + attribute access(write: manage) optional nullable int8u colorPointBIntensity = 60; + readonly attribute optional int16u enhancedCurrentHue = 16384; + readonly attribute enum8 enhancedColorMode = 16385; + readonly attribute optional int8u colorLoopActive = 16386; + readonly attribute optional int8u colorLoopDirection = 16387; + readonly attribute optional int16u colorLoopTime = 16388; + readonly attribute optional int16u colorLoopStartEnhancedHue = 16389; + readonly attribute optional int16u colorLoopStoredEnhancedHue = 16390; + readonly attribute bitmap16 colorCapabilities = 16394; + readonly attribute optional int16u colorTempPhysicalMinMireds = 16395; + readonly attribute optional int16u colorTempPhysicalMaxMireds = 16396; + readonly attribute optional int16u coupleColorTempToLevelMinMireds = 16397; + attribute access(write: manage) optional nullable int16u startUpColorTemperatureMireds = 16400; + 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 MoveToHueRequest { + int8u hue = 0; + HueDirection direction = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveHueRequest { + HueMoveMode moveMode = 0; + int8u rate = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct StepHueRequest { + HueStepMode stepMode = 0; + int8u stepSize = 1; + int8u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToSaturationRequest { + int8u saturation = 0; + int16u transitionTime = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct MoveSaturationRequest { + SaturationMoveMode moveMode = 0; + int8u rate = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct StepSaturationRequest { + SaturationStepMode stepMode = 0; + int8u stepSize = 1; + int8u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToHueAndSaturationRequest { + int8u hue = 0; + int8u saturation = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToColorRequest { + int16u colorX = 0; + int16u colorY = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveColorRequest { + int16s rateX = 0; + int16s rateY = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct StepColorRequest { + int16s stepX = 0; + int16s stepY = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct MoveToColorTemperatureRequest { + int16u colorTemperatureMireds = 0; + int16u transitionTime = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct EnhancedMoveToHueRequest { + int16u enhancedHue = 0; + HueDirection direction = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct EnhancedMoveHueRequest { + HueMoveMode moveMode = 0; + int16u rate = 1; + bitmap8 optionsMask = 2; + bitmap8 optionsOverride = 3; + } + + request struct EnhancedStepHueRequest { + HueStepMode stepMode = 0; + int16u stepSize = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct EnhancedMoveToHueAndSaturationRequest { + int16u enhancedHue = 0; + int8u saturation = 1; + int16u transitionTime = 2; + bitmap8 optionsMask = 3; + bitmap8 optionsOverride = 4; + } + + request struct ColorLoopSetRequest { + ColorLoopUpdateFlags updateFlags = 0; + ColorLoopAction action = 1; + ColorLoopDirection direction = 2; + int16u time = 3; + int16u startHue = 4; + bitmap8 optionsMask = 5; + bitmap8 optionsOverride = 6; + } + + request struct StopMoveStepRequest { + bitmap8 optionsMask = 0; + bitmap8 optionsOverride = 1; + } + + request struct MoveColorTemperatureRequest { + HueMoveMode moveMode = 0; + int16u rate = 1; + int16u colorTemperatureMinimumMireds = 2; + int16u colorTemperatureMaximumMireds = 3; + bitmap8 optionsMask = 4; + bitmap8 optionsOverride = 5; + } + + request struct StepColorTemperatureRequest { + HueStepMode stepMode = 0; + int16u stepSize = 1; + int16u transitionTime = 2; + int16u colorTemperatureMinimumMireds = 3; + int16u colorTemperatureMaximumMireds = 4; + bitmap8 optionsMask = 5; + bitmap8 optionsOverride = 6; + } + + /** Move to specified hue. */ + command MoveToHue(MoveToHueRequest): DefaultSuccess = 0; + /** Move hue up or down at specified rate. */ + command MoveHue(MoveHueRequest): DefaultSuccess = 1; + /** Step hue up or down by specified size at specified rate. */ + command StepHue(StepHueRequest): DefaultSuccess = 2; + /** Move to specified saturation. */ + command MoveToSaturation(MoveToSaturationRequest): DefaultSuccess = 3; + /** Move saturation up or down at specified rate. */ + command MoveSaturation(MoveSaturationRequest): DefaultSuccess = 4; + /** Step saturation up or down by specified size at specified rate. */ + command StepSaturation(StepSaturationRequest): DefaultSuccess = 5; + /** Move to hue and saturation. */ + command MoveToHueAndSaturation(MoveToHueAndSaturationRequest): DefaultSuccess = 6; + /** Move to specified color. */ + command MoveToColor(MoveToColorRequest): DefaultSuccess = 7; + /** Moves the color. */ + command MoveColor(MoveColorRequest): DefaultSuccess = 8; + /** Steps the lighting to a specific color. */ + command StepColor(StepColorRequest): DefaultSuccess = 9; + /** Move to a specific color temperature. */ + command MoveToColorTemperature(MoveToColorTemperatureRequest): DefaultSuccess = 10; + /** Command description for EnhancedMoveToHue */ + command EnhancedMoveToHue(EnhancedMoveToHueRequest): DefaultSuccess = 64; + /** Command description for EnhancedMoveHue */ + command EnhancedMoveHue(EnhancedMoveHueRequest): DefaultSuccess = 65; + /** Command description for EnhancedStepHue */ + command EnhancedStepHue(EnhancedStepHueRequest): DefaultSuccess = 66; + /** Command description for EnhancedMoveToHueAndSaturation */ + command EnhancedMoveToHueAndSaturation(EnhancedMoveToHueAndSaturationRequest): DefaultSuccess = 67; + /** Command description for ColorLoopSet */ + command ColorLoopSet(ColorLoopSetRequest): DefaultSuccess = 68; + /** Command description for StopMoveStep */ + command StopMoveStep(StopMoveStepRequest): DefaultSuccess = 71; + /** Command description for MoveColorTemperature */ + command MoveColorTemperature(MoveColorTemperatureRequest): DefaultSuccess = 75; + /** Command description for StepColorTemperature */ + command StepColorTemperature(StepColorTemperatureRequest): DefaultSuccess = 76; +} + +endpoint 0 { + device type ma_rootdevice = 22, version 1; + + 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 extension; + 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 manufacturingDate; + callback attribute partNumber; + callback attribute productURL; + callback attribute productLabel; + callback attribute serialNumber; + persist attribute localConfigDisabled default = 0; + callback attribute uniqueID; + callback attribute capabilityMinima; + callback attribute specificationVersion; + callback attribute maxPathsPerInvoke; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 3; + } + + 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 LocalizationConfiguration { + persist attribute activeLocale default = "en-US"; + callback attribute supportedLocales; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster TimeFormatLocalization { + persist attribute hourFormat default = 0; + persist attribute activeCalendarType default = 0; + callback attribute supportedCalendarTypes; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + 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 = 1; + ram attribute clusterRevision default = 1; + + handle command ScanNetworks; + handle command ScanNetworksResponse; + handle command AddOrUpdateWiFiNetwork; + handle command AddOrUpdateThreadNetwork; + handle command RemoveNetwork; + handle command NetworkConfigResponse; + handle command ConnectNetwork; + handle command ConnectNetworkResponse; + handle command ReorderNetwork; + } + + server cluster DiagnosticLogs { + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + + handle command RetrieveLogsRequest; + } + + server cluster GeneralDiagnostics { + emits event HardwareFaultChange; + emits event RadioFaultChange; + emits event NetworkFaultChange; + emits event BootReason; + callback attribute networkInterfaces; + callback attribute rebootCount; + callback attribute upTime; + callback attribute totalOperationalHours; + callback attribute bootReason; + callback attribute activeHardwareFaults; + callback attribute activeRadioFaults; + callback attribute activeNetworkFaults; + callback attribute testEventTriggersEnabled default = false; + callback attribute featureMap; + callback attribute clusterRevision; + + handle command TestEventTrigger; + handle command TimeSnapshot; + handle command TimeSnapshotResponse; + } + + server cluster SoftwareDiagnostics { + callback attribute currentHeapFree; + callback attribute currentHeapUsed; + callback attribute currentHeapHighWatermark; + callback attribute featureMap; + ram attribute clusterRevision default = 1; + + handle command ResetWatermarks; + } + + server cluster WiFiNetworkDiagnostics { + emits event Disconnection; + emits event AssociationFailure; + emits event ConnectionStatus; + callback attribute bssid; + callback attribute securityType; + callback attribute wiFiVersion; + callback attribute channelNumber; + callback attribute rssi; + callback attribute beaconLostCount; + callback attribute beaconRxCount; + callback attribute packetMulticastRxCount; + callback attribute packetMulticastTxCount; + callback attribute packetUnicastRxCount; + callback attribute packetUnicastTxCount; + callback attribute currentMaxRate; + callback attribute overrunCount; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + 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 OpenBasicCommissioningWindow; + 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 FixedLabel { + callback attribute labelList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } + + server cluster UserLabel { + callback attribute labelList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + } +} +endpoint 1 { + device type ma_extendedcolorlight = 269, version 1; + + + server cluster Identify { + ram attribute identifyTime default = 0x0000; + ram attribute identifyType default = 0x0; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 4; + + handle command Identify; + handle command TriggerEffect; + } + + server cluster Groups { + ram attribute nameSupport; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 4; + + handle command AddGroup; + handle command AddGroupResponse; + handle command ViewGroup; + handle command ViewGroupResponse; + handle command GetGroupMembership; + handle command GetGroupMembershipResponse; + handle command RemoveGroup; + handle command RemoveGroupResponse; + handle command RemoveAllGroups; + handle command AddGroupIfIdentifying; + } + + server cluster OnOff { + persist attribute onOff default = 0x1; + ram attribute globalSceneControl default = 0x01; + ram attribute onTime default = 0x0000; + ram attribute offWaitTime default = 0x0000; + persist attribute startUpOnOff; + ram attribute featureMap default = 1; + ram attribute clusterRevision default = 5; + + handle command Off; + handle command On; + handle command Toggle; + handle command OffWithEffect; + handle command OnWithRecallGlobalScene; + handle command OnWithTimedOff; + } + + server cluster LevelControl { + persist attribute currentLevel default = 0x254; + ram attribute remainingTime default = 0x0000; + ram attribute minLevel default = 0x01; + ram attribute maxLevel default = 0xFE; + ram attribute currentFrequency default = 0x0000; + ram attribute minFrequency default = 0x0000; + ram attribute maxFrequency default = 0x0000; + ram attribute options default = 0x00; + ram attribute onOffTransitionTime default = 0x0000; + ram attribute onLevel; + ram attribute onTransitionTime; + ram attribute offTransitionTime; + ram attribute defaultMoveRate default = 50; + persist attribute startUpCurrentLevel; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 5; + + handle command MoveToLevel; + handle command Move; + handle command Step; + handle command Stop; + handle command MoveToLevelWithOnOff; + handle command MoveWithOnOff; + handle command StepWithOnOff; + handle command StopWithOnOff; + } + + server cluster Descriptor { + callback attribute deviceTypeList; + callback attribute serverList; + callback attribute clientList; + callback attribute partsList; + callback attribute featureMap; + callback attribute clusterRevision; + } + + server cluster ColorControl { + ram attribute currentHue default = 0x00; + ram attribute currentSaturation default = 0x00; + ram attribute remainingTime default = 0x0000; + ram attribute currentX default = 0x616B; + ram attribute currentY default = 0x607D; + ram attribute colorTemperatureMireds default = 0x00FA; + ram attribute colorMode default = 0x01; + ram attribute options default = 0x00; + ram attribute numberOfPrimaries; + ram attribute primary1X; + ram attribute primary1Y; + ram attribute primary1Intensity; + ram attribute primary2X; + ram attribute primary2Y; + ram attribute primary2Intensity; + ram attribute primary3X; + ram attribute primary3Y; + ram attribute primary3Intensity; + ram attribute primary4X; + ram attribute primary4Y; + ram attribute primary4Intensity; + ram attribute primary5X; + ram attribute primary5Y; + ram attribute primary5Intensity; + ram attribute primary6X; + ram attribute primary6Y; + ram attribute primary6Intensity; + ram attribute enhancedCurrentHue default = 0x0000; + ram attribute enhancedColorMode default = 0x01; + ram attribute colorLoopActive default = 0x00; + ram attribute colorLoopDirection default = 0x00; + ram attribute colorLoopTime default = 0x0019; + ram attribute colorLoopStartEnhancedHue default = 0x2300; + ram attribute colorLoopStoredEnhancedHue default = 0x0000; + ram attribute colorCapabilities default = 0x1F; + ram attribute colorTempPhysicalMinMireds default = 0x0000; + ram attribute colorTempPhysicalMaxMireds default = 0xFEFF; + ram attribute coupleColorTempToLevelMinMireds; + ram attribute startUpColorTemperatureMireds; + ram attribute featureMap default = 0x1F; + ram attribute clusterRevision default = 6; + + handle command MoveToHue; + handle command MoveHue; + handle command StepHue; + handle command MoveToSaturation; + handle command MoveSaturation; + handle command StepSaturation; + handle command MoveToHueAndSaturation; + handle command MoveToColor; + handle command MoveColor; + handle command StepColor; + handle command MoveToColorTemperature; + handle command EnhancedMoveToHue; + handle command EnhancedMoveHue; + handle command EnhancedStepHue; + handle command EnhancedMoveToHueAndSaturation; + handle command ColorLoopSet; + handle command StopMoveStep; + handle command MoveColorTemperature; + handle command StepColorTemperature; + } +} + + diff --git a/examples/lighting-app/qcc74x/data_model/lighting-app-wifi.zap b/examples/lighting-app/qcc74x/data_model/lighting-app-wifi.zap new file mode 100644 index 00000000000000..94a906a3f532a5 --- /dev/null +++ b/examples/lighting-app/qcc74x/data_model/lighting-app-wifi.zap @@ -0,0 +1,4512 @@ +{ + "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": [ + 1 + ], + "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": "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": "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": "Extension", + "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": "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": "ManufacturingDate", + "code": 11, + "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": "PartNumber", + "code": 12, + "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": "ProductURL", + "code": 13, + "mfgCode": null, + "side": "server", + "type": "long_char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ProductLabel", + "code": 14, + "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": "SerialNumber", + "code": 15, + "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": "LocalConfigDisabled", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "NVM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "UniqueID", + "code": 18, + "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": null, + "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": 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": 1, + "bounded": 0, + "defaultValue": "3", + "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": "Localization Configuration", + "code": 43, + "mfgCode": null, + "define": "LOCALIZATION_CONFIGURATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "ActiveLocale", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "en-US", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportedLocales", + "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": "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 + } + ] + }, + { + "name": "Time Format Localization", + "code": 44, + "mfgCode": null, + "define": "TIME_FORMAT_LOCALIZATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "HourFormat", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "HourFormatEnum", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveCalendarType", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "CalendarTypeEnum", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportedCalendarTypes", + "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": "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 + } + ] + }, + { + "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": "AddOrUpdateWiFiNetwork", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "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": "1", + "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": "Diagnostic Logs", + "code": 50, + "mfgCode": null, + "define": "DIAGNOSTIC_LOGS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "RetrieveLogsRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "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 + } + ] + }, + { + "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 + }, + { + "name": "TimeSnapshot", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "TimeSnapshotResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "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": "UpTime", + "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": "TotalOperationalHours", + "code": 3, + "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": "BootReason", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "BootReasonEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveHardwareFaults", + "code": 5, + "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": "ActiveRadioFaults", + "code": 6, + "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": "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": "0x0002", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "HardwareFaultChange", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "RadioFaultChange", + "code": 1, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "NetworkFaultChange", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "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": "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": "WiFi Network Diagnostics", + "code": 54, + "mfgCode": null, + "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "BSSID", + "code": 0, + "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": "SecurityType", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "SecurityTypeEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "WiFiVersion", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "WiFiVersionEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ChannelNumber", + "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": "RSSI", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int8s", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "BeaconLostCount", + "code": 5, + "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": "BeaconRxCount", + "code": 6, + "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": "PacketMulticastRxCount", + "code": 7, + "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": "PacketMulticastTxCount", + "code": 8, + "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": "PacketUnicastRxCount", + "code": 9, + "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": "PacketUnicastTxCount", + "code": 10, + "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": "CurrentMaxRate", + "code": 11, + "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": "OverrunCount", + "code": 12, + "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": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "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": "Disconnection", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "AssociationFailure", + "code": 1, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "ConnectionStatus", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + } + ] + }, + { + "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": "OpenBasicCommissioningWindow", + "code": 1, + "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": "Fixed Label", + "code": 64, + "mfgCode": null, + "define": "FIXED_LABEL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "LabelList", + "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": "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 + } + ] + }, + { + "name": "User Label", + "code": 65, + "mfgCode": null, + "define": "USER_LABEL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "LabelList", + "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": "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 + } + ] + } + ] + }, + { + "id": 2, + "name": "MA-extendedcolorlight", + "deviceTypeRef": { + "code": 269, + "profileId": 259, + "label": "MA-extendedcolorlight", + "name": "MA-extendedcolorlight" + }, + "deviceTypes": [ + { + "code": 269, + "profileId": 259, + "label": "MA-extendedcolorlight", + "name": "MA-extendedcolorlight" + } + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 269 + ], + "deviceTypeName": "MA-extendedcolorlight", + "deviceTypeCode": 269, + "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": "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": "Groups", + "code": 4, + "mfgCode": null, + "define": "GROUPS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "AddGroup", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddGroupResponse", + "code": 0, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "ViewGroup", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ViewGroupResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "GetGroupMembership", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "GetGroupMembershipResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveGroup", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveGroupResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveAllGroups", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddGroupIfIdentifying", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "NameSupport", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "NameSupportBitmap", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "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": "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": "On/Off", + "code": 6, + "mfgCode": null, + "define": "ON_OFF_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "Off", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "On", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Toggle", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OffWithEffect", + "code": 64, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OnWithRecallGlobalScene", + "code": 65, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OnWithTimedOff", + "code": 66, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "OnOff", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "GlobalSceneControl", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OnTime", + "code": 16385, + "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": "OffWaitTime", + "code": 16386, + "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": "StartUpOnOff", + "code": 16387, + "mfgCode": null, + "side": "server", + "type": "StartUpOnOffEnum", + "included": 1, + "storageOption": "NVM", + "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": "1", + "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": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Level Control", + "code": 8, + "mfgCode": null, + "define": "LEVEL_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "MoveToLevel", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Move", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Step", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "Stop", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToLevelWithOnOff", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveWithOnOff", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepWithOnOff", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StopWithOnOff", + "code": 7, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "CurrentLevel", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x254", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RemainingTime", + "code": 1, + "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": "MinLevel", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxLevel", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFE", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CurrentFrequency", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinFrequency", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxFrequency", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "OptionsBitmap", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OnOffTransitionTime", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnLevel", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnTransitionTime", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OffTransitionTime", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DefaultMoveRate", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "50", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "StartUpCurrentLevel", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "NVM", + "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": "3", + "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": "5", + "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": "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": "Color Control", + "code": 768, + "mfgCode": null, + "define": "COLOR_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "MoveToHue", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveHue", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepHue", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToSaturation", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveSaturation", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepSaturation", + "code": 5, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToHueAndSaturation", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToColor", + "code": 7, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveColor", + "code": 8, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepColor", + "code": 9, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveToColorTemperature", + "code": 10, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedMoveToHue", + "code": 64, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedMoveHue", + "code": 65, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedStepHue", + "code": 66, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "EnhancedMoveToHueAndSaturation", + "code": 67, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ColorLoopSet", + "code": 68, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StopMoveStep", + "code": 71, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "MoveColorTemperature", + "code": 75, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "StepColorTemperature", + "code": 76, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "CurrentHue", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentSaturation", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RemainingTime", + "code": 2, + "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": "CurrentX", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x616B", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentY", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x607D", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorTemperatureMireds", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00FA", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorMode", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "NumberOfPrimaries", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary1X", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary1Y", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary1Intensity", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary2X", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary2Y", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary2Intensity", + "code": 23, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary3X", + "code": 25, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary3Y", + "code": 26, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary3Intensity", + "code": 27, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary4X", + "code": 32, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary4Y", + "code": 33, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary4Intensity", + "code": 34, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary5X", + "code": 36, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary5Y", + "code": 37, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary5Intensity", + "code": 38, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary6X", + "code": 40, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary6Y", + "code": 41, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Primary6Intensity", + "code": 42, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EnhancedCurrentHue", + "code": 16384, + "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": "EnhancedColorMode", + "code": 16385, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopActive", + "code": 16386, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopDirection", + "code": 16387, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopTime", + "code": 16388, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0019", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopStartEnhancedHue", + "code": 16389, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x2300", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopStoredEnhancedHue", + "code": 16390, + "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": "ColorCapabilities", + "code": 16394, + "mfgCode": null, + "side": "server", + "type": "bitmap16", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x1F", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorTempPhysicalMinMireds", + "code": 16395, + "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": "ColorTempPhysicalMaxMireds", + "code": 16396, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFEFF", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CoupleColorTempToLevelMinMireds", + "code": 16397, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "StartUpColorTemperatureMireds", + "code": 16400, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "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": "0x1F", + "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": "6", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + } + ] + } + ], + "endpoints": [ + { + "endpointTypeName": "MA-rootdevice", + "endpointTypeIndex": 0, + "profileId": 259, + "endpointId": 0, + "networkId": 0 + }, + { + "endpointTypeName": "MA-extendedcolorlight", + "endpointTypeIndex": 1, + "profileId": 259, + "endpointId": 1, + "networkId": 0 + } + ] +} \ No newline at end of file diff --git a/examples/lighting-app/qcc74x/qcc743/.gn b/examples/lighting-app/qcc74x/qcc743/.gn new file mode 100644 index 00000000000000..27a24ca4db236b --- /dev/null +++ b/examples/lighting-app/qcc74x/qcc743/.gn @@ -0,0 +1,28 @@ +# 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/build.gni") + +# The location of the build configuration file. +buildconfig = "${build_root}/config/BUILDCONFIG.gn" + +# CHIP uses angle bracket includes. +check_system_includes = true + +default_args = { + target_cpu = "riscv" + target_os = "freertos" + + import("//args.gni") +} diff --git a/examples/lighting-app/qcc74x/qcc743/BUILD.gn b/examples/lighting-app/qcc74x/qcc743/BUILD.gn new file mode 100644 index 00000000000000..afd7a3b11ad0e6 --- /dev/null +++ b/examples/lighting-app/qcc74x/qcc743/BUILD.gn @@ -0,0 +1,251 @@ +# 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/qcc74x_iot_sdk.gni") +import("//build_overrides/build.gni") +import("//build_overrides/chip.gni") + +import("${qcc74x_iot_sdk_build_root}/qcc743/qcc74x_sdk.gni") +import("${qcc74x_iot_sdk_build_root}/common/qcc74x_executable.gni") +import("${build_root}/config/defaults.gni") +import("${chip_root}/examples/common/pigweed/pigweed_rpcs.gni") +import("${chip_root}/src/platform/qcc74x/common/args.gni") +import("${chip_root}/src/platform/device.gni") + +import("${chip_root}/src/app/chip_data_model.gni") + +if (chip_enable_pw_rpc) { + import("//build_overrides/pigweed.gni") + import("$dir_pw_build/target_types.gni") +} + +assert(current_os == "freertos") + +example_dir = "${chip_root}/examples/lighting-app/qcc74x" +examples_plat_dir = "${chip_root}/examples/platform/qcc74x" + +declare_args() { + # Dump memory usage at link time. + chip_print_memory_usage = true + + # OTA periodic query timeout in seconds + ota_periodic_query_timeout_seconds = 86400 + + # reboot delay in seconds to apply new OTA image + ota_auto_reboot_delay_seconds = 5 + + enable_heap_monitoring = false + enable_reset_counter = false + + setupPinCode = 20202021 + setupDiscriminator = 3840 + + board = "qcc743DK" + module_type = "qcc743" + baudrate = 2000000 +} + +qcc74x_sdk("sdk") { + + include_dirs = [ + "${example_dir}/qcc743", + "${examples_plat_dir}/qcc743", + "${examples_plat_dir}/qcc743/lwipopts", + "${examples_plat_dir}/common/route_hook", + "${chip_root}/src/platform/qcc74x/qcc743", + "${chip_root}/src/platform/qcc74x/common", + ] + + defines = [ + "INCLUDE_xSemaphoreGetMutexHolder=1", + "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE=${setupPinCode}", + "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR=${setupDiscriminator}", + "OTA_PERIODIC_TIMEOUT=${ota_periodic_query_timeout_seconds}", + "OTA_AUTO_REBOOT_DELAY=${ota_auto_reboot_delay_seconds}", + "CHIP_UART_BAUDRATE=${baudrate}", + ] + + defines += [ "PW_RPC_ENABLED=${chip_enable_pw_rpc}" ] + if (chip_enable_pw_rpc) { + include_dirs += [ "${examples_plat_dir}/common/rpc" ] + defines += [ "PW_RPC_ENABLED=1" ] + defines += [ "DISABLE_PRINT=1" ] + } else if (chip_build_libshell) { + include_dirs += [ "${examples_plat_dir}/common/plat" ] + } +} + +chip_data_model("qcc74x-lighting") { + zap_file = "${example_dir}/data_model/lighting-app-wifi.zap" + is_server = true +} + +qcc74x_executable("lighting_app") { + output_name = "chip-qcc743-lighting-example.out" + + defines = [ + "APP_TASK_STACK_SIZE=4096", + "CHIP_UART_BAUDRATE=${baudrate}", + "qcc743_ENABLE", + "START_ENTRY=main", + ] + + if (false == enable_reset_counter) { + defines += [ "BOOT_PIN_RESET=2" ] + } + + defines += [ "CONF_ENABLE_FRAME_PTR=${enable_debug_frame_ptr}" ] + defines += + [ "CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE=${chip_enable_factory_data}" ] + defines += [ + "CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST=${chip_enable_factory_data_test}", + ] + + bl_plat_name = "qcc743" + sources = [ + "${examples_plat_dir}/common/route_hook/bl_route_hook.c", + "${examples_plat_dir}/common/route_hook/bl_route_table.c", + ] + + defines += [ "qcc743DK" ] + + if (chip_config_network_layer_ble) { + defines += [ "CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE=1" ] + } + + sources += [ + "${chip_root}/examples/providers/DeviceInfoProviderImpl.cpp", + "${example_dir}/common/AppTask.cpp", + "${example_dir}/common/ZclCallbacks.cpp", + "${examples_plat_dir}/common/qcc74x_sdk/demo_pwm.c", + "${examples_plat_dir}/common/qcc74x_sdk/platform_port.cpp", + "${examples_plat_dir}/common/plat/LEDWidget.cpp", + "${examples_plat_dir}/common/plat/OTAConfig.cpp", + "${examples_plat_dir}/common/plat/main.cpp", + "${examples_plat_dir}/common/plat/platform.cpp", + ] + + deps = [ + ":qcc74x-lighting", + ":sdk", + "${chip_root}/examples/common/QRCode", + "${chip_root}/examples/providers:device_info_provider", + "${chip_root}/src/lib", + "${chip_root}/src/setup_payload", + ] + + include_dirs = [ + "${chip_root}/src/platform/qcc74x/qcc743", + "${example_dir}/common", + "${example_dir}/qcc743", + "${examples_plat_dir}/common/route_hook", + "${examples_plat_dir}/common/plat", + "${examples_plat_dir}/common/qcc74x_sdk", + ] + + if (chip_enable_pw_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", + ] + + sources += [ + "${chip_root}/examples/common/pigweed/RpcService.cpp", + "${chip_root}/examples/common/pigweed/qcc74x/PigweedLoggerMutex.cpp", + "${examples_plat_dir}/common/rpc/PigweedLogger.cpp", + "${examples_plat_dir}/common/rpc/Rpc.cpp", + ] + + deps += [ + "$dir_pw_hdlc:rpc_channel_output", + "$dir_pw_kvs:crc16", + "$dir_pw_log", + "$dir_pw_stream:sys_io_stream", + + #"$dir_pw_trace", + #"$dir_pw_trace_tokenized", + #"$dir_pw_trace_tokenized:trace_rpc_service", + "${chip_root}/config/qcc74x/common/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", + "${examples_plat_dir}/common/rpc/pw_sys_io:pw_sys_io", + ] + + public_deps = [ + "$dir_pw_checksum", + "$dir_pw_kvs", + ] + + deps += pw_build_LINK_DEPS + + include_dirs += [ + "${chip_root}/examples/common", + "${chip_root}/examples/common/pigweed/qcc74x", + ] + } else if (chip_build_libshell) { + defines += [ "CONFIG_ENABLE_CHIP_SHELL=1" ] + + deps += [ "${chip_root}/examples/shell/shell_common:shell_common" ] + + include_dirs += [ + "${chip_root}/src/lib/shell", + "${chip_root}/examples/shell/shell_common/include", + ] + } + + if (enable_heap_monitoring) { + sources += [ "${examples_plat_dir}/common/plat/MemMonitoring.cpp" ] + defines += [ "HEAP_MONITORING=1" ] + } + + if (qcc74x_sdk_component_easyflash_enabled) { + defines += [ "BOUFFALO_SDK_COMPONENTS_EASYFLASH_ENABLED=1" ] + } + else { + defines += [ "BOUFFALO_SDK_COMPONENTS_EASYFLASH_ENABLED=0" ] + } + + cflags_c = [ "-Wno-sign-compare" ] + ldscript = "${examples_plat_dir}/qcc743/ldscripts/qcc743_flash.ld" + + ldflags = [ "-T" + rebase_path(ldscript, root_build_dir) ] + + inputs = [ ldscript ] + + if (chip_print_memory_usage) { + ldflags += [ + "-Wl,--print-memory-usage", + "-fstack-usage", + ] + } + + output_dir = root_out_dir +} + +group("qcc743") { + deps = [ ":lighting_app" ] +} + +group("default") { + deps = [ ":qcc743" ] +} diff --git a/examples/lighting-app/qcc74x/qcc743/CHIPProjectConfig.h b/examples/lighting-app/qcc74x/qcc743/CHIPProjectConfig.h new file mode 100644 index 00000000000000..3f4ac97ac0e7fa --- /dev/null +++ b/examples/lighting-app/qcc74x/qcc743/CHIPProjectConfig.h @@ -0,0 +1,129 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * 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 + * Example project configuration file for CHIP. + * + * This is a place to put application or project-specific overrides + * to the default configuration values for general CHIP features. + * + */ + +#pragma once + +/** + * CHIP_DEVICE_CONFIG_ENABLE_TEST_DEVICE_IDENTITY + * + * Enables the use of a hard-coded default Chip device id and credentials if no device id + * is found in Chip NV storage. + * + * This option is for testing only and should be disabled in production releases. + */ +#define CHIP_DEVICE_CONFIG_ENABLE_TEST_DEVICE_IDENTITY 34 + +// Use a default pairing code if one hasn't been provisioned in flash. +#ifndef CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE +#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE 20202021 +#endif + +#ifndef CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR +#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR 0xF00 +#endif +// For convenience, Chip Security Test Mode can be enabled and the +// requirement for authentication in various protocols can be disabled. +// +// WARNING: These options make it possible to circumvent basic Chip security functionality, +// including message encryption. Because of this they MUST NEVER BE ENABLED IN PRODUCTION BUILDS. +// +#define CHIP_CONFIG_SECURITY_TEST_MODE 0 + +/** + * CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID + * + */ +#define CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID 0xFFF1 + +/** + * CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID + * + */ +#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0x8005 + +/** + * CHIP_DEVICE_CONFIG_DEVICE_HARDWARE_VERSION + * + * The hardware version number assigned to device or product by the device vendor. This + * number is scoped to the device product id, and typically corresponds to a revision of the + * physical device, a change to its packaging, and/or a change to its marketing presentation. + * This value is generally *not* incremented for device software versions. + */ +#define CHIP_DEVICE_CONFIG_DEVICE_HARDWARE_VERSION 1 + +/** + * CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING + * + * A string identifying the software version running on the device. + * CHIP service currently expects the software version to be in the format + * {MAJOR_VERSION}.0d{MINOR_VERSION} + */ +#ifndef CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING +#define CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING "0.1ALPHA" +#endif + +/** + * CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION + * + * A uint32_t identifying the software version running on the device. + */ +/* The SoftwareVersion attribute of the Basic cluster. */ +#ifndef CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION +#define CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION 0x0001 +#endif + +/** + * CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_REVISION + * + * The product revision number assigned to device or product by the device vendor. This + * number is scoped to the device product id, and typically corresponds to a revision of the + * physical device, a change to its packaging, and/or a change to its marketing presentation. + * This value is generally *not* incremented for device software revisions. + */ +#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_REVISION 1 + +/** + * CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER + * + * Enables the use of a hard-coded default serial number if none + * is found in Chip NV storage. + */ +#define CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER "TEST_SN" + +/** + * CHIP_DEVICE_CONFIG_EVENT_LOGGING_DEBUG_BUFFER_SIZE + * + * A size, in bytes, of the individual debug event logging buffer. + */ +#define CHIP_DEVICE_CONFIG_EVENT_LOGGING_DEBUG_BUFFER_SIZE (512) + +#define CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY 1 + +#define CHIP_BLE_DEVICE_NAME "MatterLight" + +// #define CHIP_CONFIG_VERBOSE_VERIFY_OR_DIE 1 \ No newline at end of file diff --git a/examples/lighting-app/qcc74x/qcc743/args.gni b/examples/lighting-app/qcc74x/qcc743/args.gni new file mode 100644 index 00000000000000..4326c4ee46735b --- /dev/null +++ b/examples/lighting-app/qcc74x/qcc743/args.gni @@ -0,0 +1,35 @@ +# 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") +import("${chip_root}/config/standalone/args.gni") +import("${chip_root}/src/platform/qcc74x/qcc743/args.gni") + +qcc74x_sdk_target = get_label_info(":sdk", "label_no_toolchain") + +pw_log_BACKEND = "${chip_root}/src/lib/support/pw_log_chip" +pw_assert_BACKEND = "$dir_pw_assert_log" +pw_rpc_CONFIG = "$dir_pw_rpc:disable_global_mutex" + +#chip_project_config_include_dirs = [ +# "${chip_root}/examples/lighting-app/qcc74x/qcc743", +#] + +chip_detail_logging = false + +pw_build_LINK_DEPS = [ + "$dir_pw_assert:impl", + "$dir_pw_log:impl", +] diff --git a/examples/lighting-app/qcc74x/qcc743/build_overrides b/examples/lighting-app/qcc74x/qcc743/build_overrides new file mode 120000 index 00000000000000..995884e6163eb5 --- /dev/null +++ b/examples/lighting-app/qcc74x/qcc743/build_overrides @@ -0,0 +1 @@ +../../../build_overrides \ No newline at end of file diff --git a/examples/lighting-app/qcc74x/qcc743/mboard.h b/examples/lighting-app/qcc74x/qcc743/mboard.h new file mode 100644 index 00000000000000..e04f42d8e9f1a0 --- /dev/null +++ b/examples/lighting-app/qcc74x/qcc743/mboard.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2018, The OpenThread Authors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * This file includes dev borad compile-time configuration constants for BL602. + * + */ + +#pragma once + +#define CHIP_UART_PORT 0 +#define CHIP_UART_RX_BUFFSIZE 256 + +#define LED_PIN_PWM_CH 2 +#define LED_PIN 14 + +#define MAX_PWM_CHANNEL 1 + +#define CHIP_UART_PIN_RX 7 +#define CHIP_UART_PIN_TX 16 diff --git a/examples/lighting-app/qcc74x/qcc743/third_party/connectedhomeip b/examples/lighting-app/qcc74x/qcc743/third_party/connectedhomeip new file mode 120000 index 00000000000000..59307833b4fee9 --- /dev/null +++ b/examples/lighting-app/qcc74x/qcc743/third_party/connectedhomeip @@ -0,0 +1 @@ +../../../../.. \ No newline at end of file diff --git a/examples/platform/qcc74x/common/bouffalo_sdk/demo_pwm.c b/examples/platform/qcc74x/common/bouffalo_sdk/demo_pwm.c new file mode 100644 index 00000000000000..63f4d5bc967432 --- /dev/null +++ b/examples/platform/qcc74x/common/bouffalo_sdk/demo_pwm.c @@ -0,0 +1,148 @@ +/** + * Copyright (c) 2016-2021 Bouffalolab Co., Ltd. + * + * Contact information: + * web site: https://www.qcc74x.com/ + */ +#include +#include +#include +#include + +#include "mboard.h" +#include "demo_pwm.h" + +static const uint32_t rgb_pwm[][2] = { + { + LED_PIN, LED_PIN_PWM_CH + }, +}; + +struct bflb_device_s *bflb_device_pwm = NULL; + +void demo_pwm_init(void) +{ + struct bflb_pwm_v2_config_s cfg = { + .clk_source = BFLB_SYSTEM_PBCLK, + .clk_div = 40, + .period = 1000, + }; + struct bflb_device_s * gpio = bflb_device_get_by_name("gpio"); + + bflb_device_pwm = bflb_device_get_by_name("pwm_v2_0"); + + for (int i = 0; i < sizeof(rgb_pwm)/sizeof(rgb_pwm[0]); i ++) { + bflb_gpio_init(gpio, rgb_pwm[i][0], GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLDOWN | GPIO_SMT_EN | GPIO_DRV_1); + } + + bflb_pwm_v2_init(bflb_device_pwm, &cfg); +} + +void demo_pwm_start(void) +{ + for (int i = 0; i < sizeof(rgb_pwm)/sizeof(rgb_pwm[0]); i ++) { + bflb_pwm_v2_channel_positive_start(bflb_device_pwm, rgb_pwm[i][1]); + } + + bflb_pwm_v2_start(bflb_device_pwm); +} + +void demo_pwm_stop(void) +{ + bflb_pwm_v2_stop(bflb_device_pwm); +} + +void set_level(uint8_t currLevel) +{ + int period; + + if (currLevel <= 5 && currLevel >= 1) + { + currLevel = 5; // avoid demo off + } + period = (int)currLevel * 1000 / 254; + + for (int i = 0; i < sizeof(rgb_pwm)/sizeof(rgb_pwm[0]); i ++) { + bflb_pwm_v2_channel_set_threshold(bflb_device_pwm, rgb_pwm[i][1], 0, period); + } +} + +void set_color_red(uint8_t currLevel) +{ + set_color(currLevel, 0, 254); +} + +void set_color_green(uint8_t currLevel) +{ + set_color(currLevel, 84, 254); +} + +void set_color_yellow(uint8_t currLevel) +{ + set_color(currLevel, 42, 254); +} + +void set_color(uint8_t currLevel, uint8_t currHue, uint8_t currSat) +{ +#if MAX_PWM_CHANNEL == 3 + uint16_t hue = (uint16_t) currHue * 360 / 254; + uint8_t sat = (uint16_t) currSat * 100 / 254; + + if (currLevel <= 5 && currLevel >= 1) + { + currLevel = 5; // avoid demo off + } + + if (sat > 100) + { + sat = 100; + } + + uint16_t i = hue / 60; + uint16_t rgb_max = currLevel; + uint16_t rgb_min = rgb_max * (100 - sat) / 100; + uint16_t diff = hue % 60; + uint16_t rgb_adj = (rgb_max - rgb_min) * diff / 60; + uint32_t red, green, blue; + + switch (i) + { + case 0: + red = rgb_max; + green = rgb_min + rgb_adj; + blue = rgb_min; + break; + case 1: + red = rgb_max - rgb_adj; + green = rgb_max; + blue = rgb_min; + break; + case 2: + red = rgb_min; + green = rgb_max; + blue = rgb_min + rgb_adj; + break; + case 3: + red = rgb_min; + green = rgb_max - rgb_adj; + blue = rgb_max; + break; + case 4: + red = rgb_min + rgb_adj; + green = rgb_min; + blue = rgb_max; + break; + default: + red = rgb_max; + green = rgb_min; + blue = rgb_max - rgb_adj; + break; + } + + bflb_pwm_v2_channel_set_threshold(bflb_device_pwm, rgb_pwm[0][1], 0, blue * PWM_DUTY_CYCLE / 254); + bflb_pwm_v2_channel_set_threshold(bflb_device_pwm, rgb_pwm[1][1], 0, red * PWM_DUTY_CYCLE / 254); + bflb_pwm_v2_channel_set_threshold(bflb_device_pwm, rgb_pwm[2][1], 0, green * PWM_DUTY_CYCLE / 254); +#else + set_level(currLevel); +#endif +} diff --git a/examples/platform/qcc74x/common/bouffalo_sdk/platform_port.cpp b/examples/platform/qcc74x/common/bouffalo_sdk/platform_port.cpp new file mode 100644 index 00000000000000..d05952c87aa0a3 --- /dev/null +++ b/examples/platform/qcc74x/common/bouffalo_sdk/platform_port.cpp @@ -0,0 +1,62 @@ +/* + * + * Copyright (c) 2020 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 +#include + +extern "C" { +#include +#include +} +#include + +extern "C" void __libc_init_array(void); +extern "C" void shell_init_with_task(struct bflb_device_s * shell); + +void platform_port_init(void) +{ + /*if need use xtal 32k please enable next API */ + board_init(); +#if CONFIG_ENABLE_CHIP_SHELL + struct bflb_device_s * uart0 = bflb_device_get_by_name("uart0"); + shell_init_with_task(uart0); +#endif + + __libc_init_array(); + + bflb_mtd_init(); +} + +extern "C" void vAssertCalled(void) +{ + void * ra = (void *) __builtin_return_address(0); + + taskDISABLE_INTERRUPTS(); + if (xPortIsInsideInterrupt()) + { + printf("vAssertCalled, ra = %p in ISR\r\n", (void *) ra); + } + else + { + printf("vAssertCalled, ra = %p in task %s\r\n", (void *) ra, pcTaskGetName(NULL)); + } + + while (true); +} + +extern "C" void bflb_assert(void) __attribute__((weak, alias("vAssertCalled"))); \ No newline at end of file diff --git a/examples/platform/qcc74x/common/bouffalo_sdk/uart.c b/examples/platform/qcc74x/common/bouffalo_sdk/uart.c new file mode 100644 index 00000000000000..49de97daaafbba --- /dev/null +++ b/examples/platform/qcc74x/common/bouffalo_sdk/uart.c @@ -0,0 +1,228 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may nCHIP 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 + +#ifdef CFG_USB_CDC_ENABLE +#include +#include +#include +#include +#include +#include +#include +#else +#include +#include +extern hosal_uart_dev_t uart_stdio; +#endif + +#if CONFIG_ENABLE_CHIP_SHELL || PW_RPC_ENABLED + +#define CHIP_UART_RX_TIMER_ID 1 +#define MAX_BUFFER_SIZE 256 + +typedef struct _chipUart +{ + SemaphoreHandle_t sema; + StaticSemaphore_t mutx; + uint32_t head; + uint32_t tail; + uint8_t rxbuf[MAX_BUFFER_SIZE]; +} chipUart_t; + +static chipUart_t chipUart_var; + +#ifndef CFG_USB_CDC_ENABLE +static int uartTxCallback(void * p_arg) +{ + hosal_uart_ioctl(&uart_stdio, HOSAL_UART_TX_TRIGGER_OFF, NULL); + + return 0; +} + +static int uartRxCallback(void * p_arg) +{ + uint32_t len = 0; + BaseType_t xHigherPriorityTaskWoken = 1; + + if (chipUart_var.head >= chipUart_var.tail) + { + if (chipUart_var.head < MAX_BUFFER_SIZE) + { + len = hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf + chipUart_var.head, MAX_BUFFER_SIZE - chipUart_var.head); + chipUart_var.head = (chipUart_var.head + len) % MAX_BUFFER_SIZE; + } + + if (0 == chipUart_var.head) + { + len = hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf, chipUart_var.tail - 1); + chipUart_var.head += len; + } + } + else + { + chipUart_var.head += + hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf + chipUart_var.head, chipUart_var.tail - chipUart_var.head - 1); + } + + if (chipUart_var.head != chipUart_var.tail) + { + xSemaphoreGiveFromISR(chipUart_var.sema, &xHigherPriorityTaskWoken); + } + + return 0; +} +#else +void aosUartRxCallback(int fd, void * param) +{ + uint32_t len = 0, readlen = 0; + BaseType_t xHigherPriorityTaskWoken = 1; + + if (chipUart_var.head >= chipUart_var.tail) + { + if (chipUart_var.head < MAX_BUFFER_SIZE) + { + readlen = len = aos_read(fd, chipUart_var.rxbuf + chipUart_var.head, MAX_BUFFER_SIZE - chipUart_var.head); + chipUart_var.head = (chipUart_var.head + len) % MAX_BUFFER_SIZE; + } + + if (0 == chipUart_var.head) + { + len = aos_read(fd, chipUart_var.rxbuf, chipUart_var.tail - 1); + chipUart_var.head += len; + readlen += len; + } + } + else + { + readlen = aos_read(fd, chipUart_var.rxbuf + chipUart_var.head, chipUart_var.tail - chipUart_var.head - 1); + chipUart_var.head += readlen; + } + + if (chipUart_var.head != chipUart_var.tail) + { + xSemaphoreGiveFromISR(chipUart_var.sema, &xHigherPriorityTaskWoken); + } +} +#endif + +//bl_iot_sdk +#else +static int uartTxCallback(void * p_arg) +{ + + return 0; +} + +static int uartRxCallback(void * p_arg) +{ + uint32_t len = 0; + BaseType_t xHigherPriorityTaskWoken = 1; + + if (chipUart_var.head >= chipUart_var.tail) + { + if (chipUart_var.head < MAX_BUFFER_SIZE) + { + //len = hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf + chipUart_var.head, MAX_BUFFER_SIZE - chipUart_var.head); + chipUart_var.head = (chipUart_var.head + len) % MAX_BUFFER_SIZE; + } + + if (0 == chipUart_var.head) + { + //len = hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf, chipUart_var.tail - 1); + chipUart_var.head += len; + } + } + else + { + chipUart_var.head += + //hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf + chipUart_var.head, chipUart_var.tail - chipUart_var.head - 1); + } + + if (chipUart_var.head != chipUart_var.tail) + { + xSemaphoreGiveFromISR(chipUart_var.sema, &xHigherPriorityTaskWoken); + } + + return 0; +} + +void uartInit(void) +{ + memset(&chipUart_var, 0, offsetof(chipUart_t, rxbuf)); + + chipUart_var.sema = xSemaphoreCreateBinaryStatic(&chipUart_var.mutx); + +#ifndef CFG_USB_CDC_ENABLE + hosal_uart_finalize(&uart_stdio); + hosal_uart_init(&uart_stdio); + hosal_uart_callback_set(&uart_stdio, HOSAL_UART_RX_CALLBACK, uartRxCallback, NULL); + hosal_uart_callback_set(&uart_stdio, HOSAL_UART_TX_CALLBACK, uartTxCallback, NULL); + hosal_uart_ioctl(&uart_stdio, HOSAL_UART_MODE_SET, (void *) HOSAL_UART_MODE_INT); +#endif +} + +int16_t uartRead(char * Buf, uint16_t NbBytesToRead) +{ + int16_t len = 0; + + xSemaphoreTake(chipUart_var.sema, portMAX_DELAY); + + taskENTER_CRITICAL(); + + for (len = 0; len < NbBytesToRead && chipUart_var.head != chipUart_var.tail; len++) + { + Buf[len] = chipUart_var.rxbuf[chipUart_var.tail]; + chipUart_var.tail = (chipUart_var.tail + 1) % MAX_BUFFER_SIZE; + } + + taskEXIT_CRITICAL(); + + if (chipUart_var.head != chipUart_var.tail) + { + xSemaphoreGive(chipUart_var.sema); + } + + return len; +} +#endif + +#ifndef CFG_USB_CDC_ENABLE +int16_t uartWrite(const char * Buf, uint16_t BufLength) +{ + return hosal_uart_send(&uart_stdio, Buf, BufLength); +} +#else +int16_t uartWrite(const char * Buf, uint16_t BufLength) +{ + uint16_t sent = 0; + do + { + extern int vfs_fd; + if (vfs_fd >= 0) + { + sent += (uint8_t) aos_write(vfs_fd, Buf + sent, BufLength - sent); + } + } while (sent < BufLength); + return sent; +} +#endif diff --git a/examples/platform/qcc74x/common/bouffalo_sdk/uart.h b/examples/platform/qcc74x/common/bouffalo_sdk/uart.h new file mode 100644 index 00000000000000..ff2a398a395dd7 --- /dev/null +++ b/examples/platform/qcc74x/common/bouffalo_sdk/uart.h @@ -0,0 +1,37 @@ +/* + * + * Copyright (c) 2021 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 + +#ifdef __cplusplus +extern "C" { +#endif + +void uartInit(void); +int16_t uartWrite(const char * Buf, uint16_t BufLength); +int16_t uartRead(char * Buf, uint16_t NbBytesToRead); + +#ifdef CFG_USB_CDC_ENABLE +void aosUartRxCallback(int fd, void * param); +#endif + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/examples/platform/qcc74x/common/iot_sdk/aos_task.c b/examples/platform/qcc74x/common/iot_sdk/aos_task.c new file mode 100644 index 00000000000000..51175c792f3479 --- /dev/null +++ b/examples/platform/qcc74x/common/iot_sdk/aos_task.c @@ -0,0 +1,40 @@ + +/** + * Copyright (c) 2016-2021 Bouffalolab Co., Ltd. + * + * Contact information: + * web site: https://www.qcc74x.com/ + */ + +#ifdef SYS_AOS_LOOP_ENABLE + +#include +#include + +#include + +#include +#include +#include + +#include + +static void aos_loop_proc(void * pvParameters) +{ + aos_loop_init(); + + aos_loop_run(); + + vTaskDelete(NULL); +} + +void aos_loop_start(void) +{ + static TaskHandle_t aos_loop_proc_task; + + vfs_init(); + vfs_device_init(); + + xTaskCreate(aos_loop_proc, (char *) "event_loop", 4096, NULL, APP_TASK_PRIORITY, &aos_loop_proc_task); +} +#endif diff --git a/examples/platform/qcc74x/common/iot_sdk/demo_pwm.c b/examples/platform/qcc74x/common/iot_sdk/demo_pwm.c new file mode 100644 index 00000000000000..347b2b65db8b3a --- /dev/null +++ b/examples/platform/qcc74x/common/iot_sdk/demo_pwm.c @@ -0,0 +1,193 @@ +/** + * Copyright (c) 2016-2021 Bouffalolab Co., Ltd. + * + * Contact information: + * web site: https://www.qcc74x.com/ + */ +#include + +#include + +#include "demo_pwm.h" +#include "mboard.h" + +#define PWM_FREQ 1000 +#define PWM_DUTY_CYCLE 10000 + +hosal_pwm_dev_t rgb_pwm[] = { + +#if MAX_PWM_CHANNEL == 3 + { + .port = LED_B_PIN_PORT, + /* pwm config */ + .config.pin = LED_B_PIN, + .config.duty_cycle = 0, // duty_cycle range is 0~10000 correspond to 0~100% + .config.freq = PWM_FREQ, // freq range is between 0~40MHZ + }, + { + .port = LED_R_PIN_PORT, + /* pwm config */ + .config.pin = LED_R_PIN, + .config.duty_cycle = 0, // duty_cycle range is 0~10000 correspond to 0~100% + .config.freq = PWM_FREQ, // freq range is between 0~40MHZ + }, + { + .port = LED_G_PIN_PORT, + /* pwm config */ + .config.pin = LED_G_PIN, + .config.duty_cycle = 0, // duty_cycle range is 0~10000 correspond to 0~100% + .config.freq = PWM_FREQ, // freq range is between 0~40MHZ + } +#else + { + .port = LED_PIN_PORT, + /* pwm config */ + .config.pin = LED_PIN, + .config.duty_cycle = 0, // duty_cycle range is 0~10000 correspond to 0~100% + .config.freq = PWM_FREQ, // freq range is between 0~40MHZ + }, +#endif +}; + +void demo_pwm_init(void) +{ + /* init pwm with given settings */ + for (uint32_t i = 0; i < MAX_PWM_CHANNEL; i++) + { + hosal_pwm_init(rgb_pwm + i); + } +} + +void demo_pwm_start(void) +{ + /* start pwm */ + for (uint32_t i = 0; i < MAX_PWM_CHANNEL; i++) + { + hosal_pwm_start(rgb_pwm + i); + } +} + +void demo_pwm_change_param(hosal_pwm_config_t * para) +{ + /* change pwm param */ + for (uint32_t i = 0; i < MAX_PWM_CHANNEL; i++) + { + if (para[i].duty_cycle > PWM_DUTY_CYCLE) + { + para[i].duty_cycle = PWM_DUTY_CYCLE; + } + hosal_pwm_para_chg(rgb_pwm + i, para[i]); + } +} + +void demo_pwm_stop(void) +{ + for (uint32_t i = 0; i < MAX_PWM_CHANNEL; i++) + { + hosal_pwm_stop(rgb_pwm + i); + hosal_pwm_finalize(rgb_pwm + i); + } +} + +void set_level(uint8_t currLevel) +{ + hosal_pwm_config_t para; + + if (currLevel <= 5 && currLevel >= 1) + { + currLevel = 5; // avoid demo off + } + + para.duty_cycle = currLevel * PWM_DUTY_CYCLE / 254; + para.freq = PWM_FREQ; + + demo_pwm_change_param(¶); +} + +void set_color_red(uint8_t currLevel) +{ + set_color(currLevel, 0, 254); +} + +void set_color_green(uint8_t currLevel) +{ + set_color(currLevel, 84, 254); +} + +void set_color_yellow(uint8_t currLevel) +{ + set_color(currLevel, 42, 254); +} + +void set_color(uint8_t currLevel, uint8_t currHue, uint8_t currSat) +{ +#if MAX_PWM_CHANNEL == 3 + uint16_t hue = (uint16_t) currHue * 360 / 254; + uint8_t sat = (uint16_t) currSat * 100 / 254; + + if (currLevel <= 5 && currLevel >= 1) + { + currLevel = 5; // avoid demo off + } + + if (sat > 100) + { + sat = 100; + } + + uint16_t i = hue / 60; + uint16_t rgb_max = currLevel; + uint16_t rgb_min = rgb_max * (100 - sat) / 100; + uint16_t diff = hue % 60; + uint16_t rgb_adj = (rgb_max - rgb_min) * diff / 60; + uint32_t red, green, blue; + + switch (i) + { + case 0: + red = rgb_max; + green = rgb_min + rgb_adj; + blue = rgb_min; + break; + case 1: + red = rgb_max - rgb_adj; + green = rgb_max; + blue = rgb_min; + break; + case 2: + red = rgb_min; + green = rgb_max; + blue = rgb_min + rgb_adj; + break; + case 3: + red = rgb_min; + green = rgb_max - rgb_adj; + blue = rgb_max; + break; + case 4: + red = rgb_min + rgb_adj; + green = rgb_min; + blue = rgb_max; + break; + default: + red = rgb_max; + green = rgb_min; + blue = rgb_max - rgb_adj; + break; + } + + // change level to pwm duty_cycle + // 0-254 to 0-10000 + hosal_pwm_config_t para[3]; + para[0].duty_cycle = blue * PWM_DUTY_CYCLE / 254; + para[0].freq = PWM_FREQ; + para[1].duty_cycle = red * PWM_DUTY_CYCLE / 254; + para[1].freq = PWM_FREQ; + para[2].duty_cycle = green * PWM_DUTY_CYCLE / 254; + para[2].freq = PWM_FREQ; + + demo_pwm_change_param(para); +#else + set_level(currLevel); +#endif +} diff --git a/examples/platform/qcc74x/common/iot_sdk/platform_port.cpp b/examples/platform/qcc74x/common/iot_sdk/platform_port.cpp new file mode 100644 index 00000000000000..dcce61e5880b5c --- /dev/null +++ b/examples/platform/qcc74x/common/iot_sdk/platform_port.cpp @@ -0,0 +1,425 @@ +/* + * + * Copyright (c) 2020 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 +#include + +#include +#include +#include + +#include + +#include + +#include + +#if CHIP_DEVICE_LAYER_TARGET_BL702 +#include +#include +#elif CHIP_DEVICE_LAYER_TARGET_BL702L +#include +#include +#endif + +#ifdef CFG_USE_PSRAM +#include +#endif +#include + +#include + +extern "C" { +#include +#include +#include +#include +#include +#include +#if CHIP_DEVICE_LAYER_TARGET_BL602 +#include +#elif CHIP_DEVICE_LAYER_TARGET_BL702L +#include +#endif + +#if CHIP_DEVICE_LAYER_TARGET_BL702L +#include +#include +#include +#endif +} + +#include + +#include "mboard.h" +#include + +HOSAL_UART_DEV_DECL(uart_stdio, CHIP_UART_PORT, CHIP_UART_PIN_TX, CHIP_UART_PIN_RX, CHIP_UART_BAUDRATE); + +#ifdef SYS_AOS_LOOP_ENABLE +extern "C" void aos_loop_start(void); +#endif + +// ================================================================================ +// FreeRTOS Callbacks +// ================================================================================ +extern "C" unsigned int sleep(unsigned int seconds) +{ + const TickType_t xDelay = 1000 * seconds / portTICK_PERIOD_MS; + vTaskDelay(xDelay); + return 0; +} + +#if !CHIP_DEVICE_LAYER_TARGET_BL702L +extern "C" void vApplicationStackOverflowHook(TaskHandle_t xTask, char * pcTaskName) +{ + printf("Stack Overflow checked. Stack name %s", pcTaskName); + while (true) + { + /*empty here*/ + } +} + +extern "C" void vApplicationMallocFailedHook(void) +{ + printf("Memory Allocate Failed. Current left size is %d bytes", xPortGetFreeHeapSize()); + while (true) + { + /*empty here*/ + } +} + +extern "C" void vApplicationIdleHook(void) +{ + // bl_wdt_feed(); + __asm volatile(" wfi "); +} + +extern "C" void vApplicationGetIdleTaskMemory(StaticTask_t ** ppxIdleTaskTCBBuffer, StackType_t ** ppxIdleTaskStackBuffer, + uint32_t * pulIdleTaskStackSize) +{ + /* If the buffers to be provided to the Idle task are declared inside this + function then they must be declared static - otherwise they will be allocated on + the stack and so not exists after this function exits. */ + + /* Pass out a pointer to the StaticTask_t structure in which the Idle task's + state will be stored. */ + *ppxIdleTaskTCBBuffer = (StaticTask_t *) pvPortMalloc(sizeof(StaticTask_t)); + + /* Pass out the array that will be used as the Idle task's stack. */ + *ppxIdleTaskStackBuffer = (StackType_t *) pvPortMalloc(sizeof(StackType_t) * configMINIMAL_STACK_SIZE); + + /* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer. + Note that, as the array is necessarily of type StackType_t, + configMINIMAL_STACK_SIZE is specified in words, not bytes. */ + *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE; +} + +/* configSUPPORT_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the +application must provide an implementation of vApplicationGetTimerTaskMemory() +to provide the memory that is used by the Timer service task. */ +extern "C" void vApplicationGetTimerTaskMemory(StaticTask_t ** ppxTimerTaskTCBBuffer, StackType_t ** ppxTimerTaskStackBuffer, + uint32_t * pulTimerTaskStackSize) +{ + /* If the buffers to be provided to the Timer task are declared inside this + function then they must be declared static - otherwise they will be allocated on + the stack and so not exists after this function exits. */ + + /* Pass out a pointer to the StaticTask_t structure in which the Timer + task's state will be stored. */ + *ppxTimerTaskTCBBuffer = (StaticTask_t *) pvPortMalloc(sizeof(StaticTask_t)); + + /* Pass out the array that will be used as the Timer task's stack. */ + *ppxTimerTaskStackBuffer = (StackType_t *) pvPortMalloc(sizeof(StackType_t) * configTIMER_TASK_STACK_DEPTH); + + /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer. + Note that, as the array is necessarily of type StackType_t, + configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */ + *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH; +} + +#if (configUSE_TICK_HOOK != 0) +extern "C" void vApplicationTickHook(void) +{ +#if defined(CFG_USB_CDC_ENABLE) + extern void usb_cdc_monitor(void); + usb_cdc_monitor(); +#endif +} +#endif + +extern "C" void vApplicationSleep(TickType_t xExpectedIdleTime) {} + +extern "C" void vAssertCalled(void) +{ + void * ra = (void *) __builtin_return_address(0); + +#if CONF_ENABLE_FRAME_PTR == 0 + taskDISABLE_INTERRUPTS(); +#endif + + if (xPortIsInsideInterrupt()) + { + printf("vAssertCalled, ra = %p in ISR\r\n", (void *) ra); + } + else + { + printf("vAssertCalled, ra = %p in task %s\r\n", (void *) ra, pcTaskGetName(NULL)); + } + +#if CONF_ENABLE_FRAME_PTR + portABORT(); +#endif + + while (true) + ; +} +#endif + +#if CHIP_DEVICE_LAYER_TARGET_BL702L +extern "C" void __attribute__((weak)) user_vAssertCalled(void) +{ + void * ra = (void *) __builtin_return_address(0); + + taskDISABLE_INTERRUPTS(); + + if (xPortIsInsideInterrupt()) + { + printf("vAssertCalled, ra = %p in ISR\r\n", (void *) ra); + } + else + { + printf("vAssertCalled, ra = %p in task %s\r\n", (void *) ra, pcTaskGetName(NULL)); + } + + while (true) + ; +} + +extern "C" void __attribute__((weak)) user_vApplicationStackOverflowHook(TaskHandle_t xTask, char * pcTaskName) +{ + puts("Stack Overflow checked\r\n"); + if (pcTaskName) + { + printf("Stack name %s\r\n", pcTaskName); + } + while (1) + { + /*empty here*/ + } +} + +extern "C" void __attribute__((weak)) user_vApplicationMallocFailedHook(void) +{ + printf("Memory Allocate Failed. Current left size is %d bytes\r\n", xPortGetFreeHeapSize()); +#if defined(CFG_USE_PSRAM) + printf("Current psram left size is %d bytes\r\n", xPortGetFreeHeapSizePsram()); +#endif + while (1) + { + /*empty here*/ + } +} + +extern "C" void bflb_assert(void) __attribute__((weak, alias("user_vAssertCalled"))); +#else +extern "C" void user_vAssertCalled(void) __attribute__((weak, alias("vAssertCalled"))); +extern "C" void bflb_assert(void) __attribute__((weak, alias("vAssertCalled"))); +#endif + +// ================================================================================ +// Main Code +// ================================================================================ +extern "C" uint8_t _heap_start; +extern "C" size_t _heap_size; // @suppress("Type cannot be resolved") + +#if CHIP_DEVICE_LAYER_TARGET_BL602 +extern "C" uint8_t _heap_wifi_start; +extern "C" uint8_t _heap_wifi_size; // @suppress("Type cannot be resolved") +static const HeapRegion_t xHeapRegions[] = { + { &_heap_start, (unsigned int) &_heap_size }, // set on runtime + { &_heap_wifi_start, (unsigned int) &_heap_wifi_size }, + { NULL, 0 } /* Terminates the array. */ +}; +#elif CHIP_DEVICE_LAYER_TARGET_BL702 +extern "C" uint8_t _heap2_start; +extern "C" uint8_t _heap2_size; // @suppress("Type cannot be resolved") +static const HeapRegion_t xHeapRegions[] = { + { &_heap_start, (size_t) &_heap_size }, // set on runtime + { &_heap2_start, (size_t) &_heap2_size }, // set on runtime + { NULL, 0 } /* Terminates the array. */ +}; +#elif CHIP_DEVICE_LAYER_TARGET_BL702L +static const HeapRegion_t xHeapRegions[] = { + { &_heap_start, (size_t) &_heap_size }, // set on runtime + { NULL, 0 } /* Terminates the array. */ +}; +#endif + +#ifdef CFG_USE_PSRAM +extern "C" uint8_t __psram_bss_init_start; +extern "C" uint8_t __psram_bss_init_end; + +static uint32_t __attribute__((section(".rsvd_data"))) psram_reset_count; + +extern "C" uint8_t _heap3_start; +extern "C" size_t _heap3_size; // @suppress("Type cannot be resolved") +static const HeapRegion_t xPsramHeapRegions[] = { + { &_heap3_start, (size_t) &_heap3_size }, { NULL, 0 } /* Terminates the array. */ +}; + +extern "C" size_t get_heap3_size(void) +{ + return (size_t) &_heap3_size; +} + +void do_psram_test() +{ + static const char teststr[] = "qcc74x psram test string"; + + do + { + uint8_t * pheap = &_heap3_start; + size_t size = (size_t) &_heap3_size; + + size = size > sizeof(teststr) ? sizeof(teststr) : size; + memset(pheap, 0, size); + if (pheap[0] != 0) + { + break; + } + + memcpy(pheap, teststr, size); + if (0 != memcmp(pheap, teststr, size)) + { + break; + } + + memset(&__psram_bss_init_start, 0, &__psram_bss_init_end - &__psram_bss_init_start); + + psram_reset_count = 0xffffff00; + return; + } while (0); + + if ((psram_reset_count & 0xffffff00) != 0xffffff00) + { + psram_reset_count = 0xffffff00; + } + + if ((psram_reset_count & 0x000000ff) > 3) + { + printf("PSRAM is still failed to initialize after %ld system reset", psram_reset_count & 0x000000ff); + vAssertCalled(); + } + + psram_reset_count = ((psram_reset_count & 0x000000ff) + 1) | 0xffffff00; + bl_sys_reset_system(); +} +#endif + +extern "C" void setup_heap() +{ + bl_sys_init(); + +#if CHIP_DEVICE_LAYER_TARGET_BL702 + bl_sys_em_config(); +#elif CHIP_DEVICE_LAYER_TARGET_BL702L + bl_sys_em_config(); + + // Initialize rom data + extern uint8_t _rom_data_run; + extern uint8_t _rom_data_load; + extern uint8_t _rom_data_size; + memcpy((void *) &_rom_data_run, (void *) &_rom_data_load, (size_t) &_rom_data_size); +#endif + +#if CHIP_DEVICE_LAYER_TARGET_BL702 + extern uint8_t __ocram_bss_start[], __ocram_bss_end[]; + if (NULL != __ocram_bss_start && NULL != __ocram_bss_end && __ocram_bss_end > __ocram_bss_start) + { + memset(__ocram_bss_start, 0, __ocram_bss_end - __ocram_bss_start); + } +#endif + + vPortDefineHeapRegions(xHeapRegions); + +#ifdef CFG_USE_PSRAM + bl_psram_init(); + do_psram_test(); + vPortDefineHeapRegionsPsram(xPsramHeapRegions); +#endif +} + +extern "C" size_t get_heap_size(void) +{ + return (size_t) &_heap_size; +} + +extern "C" void app_init(void) +{ + bl_sys_early_init(); + +#if CHIP_DEVICE_LAYER_TARGET_BL702L + bl_flash_init(); + + rom_freertos_init(256, 400); + rom_hal_init(); +#endif + + hosal_uart_init(&uart_stdio); + + blog_init(); + bl_irq_init(); +#if CHIP_DEVICE_LAYER_TARGET_BL702L + bl_rtc_init(); +#endif + bl_sec_init(); +#if CHIP_DEVICE_LAYER_TARGET_BL702 + bl_timer_init(); +#endif + + hal_boot2_init(); + + /* board config is set after system is init*/ + hal_board_cfg(0); + +#if CHIP_DEVICE_LAYER_TARGET_BL702L || CHIP_DEVICE_CONFIG_ENABLE_WIFI || CHIP_DEVICE_CONFIG_ENABLE_ETHERNET + hosal_dma_init(); +#endif +#if CHIP_DEVICE_LAYER_TARGET_BL602 + wifi_td_diagnosis_init(); +#endif +} + +extern "C" void platform_port_init(void) +{ + app_init(); + +#if CONFIG_ENABLE_CHIP_SHELL || PW_RPC_ENABLED + uartInit(); +#endif + +#ifdef SYS_AOS_LOOP_ENABLE + aos_loop_start(); +#else +#if defined(CFG_USB_CDC_ENABLE) + extern void usb_cdc_start(int fd_console); + usb_cdc_start(-1); +#endif +#endif +} diff --git a/examples/platform/qcc74x/common/iot_sdk/uart.cpp b/examples/platform/qcc74x/common/iot_sdk/uart.cpp new file mode 100644 index 00000000000000..212bcaa51b9b03 --- /dev/null +++ b/examples/platform/qcc74x/common/iot_sdk/uart.cpp @@ -0,0 +1,226 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may nCHIP 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 + +#ifdef CFG_USB_CDC_ENABLE +#include +#include +#include +#include +#include +#include +#include +#else +#include +#include +extern hosal_uart_dev_t uart_stdio; +#endif + +#if CONFIG_ENABLE_CHIP_SHELL || PW_RPC_ENABLED + +#define CHIP_UART_RX_TIMER_ID 1 +#define MAX_BUFFER_SIZE 256 + +typedef struct _chipUart +{ + SemaphoreHandle_t sema; + StaticSemaphore_t mutx; + uint32_t head; + uint32_t tail; + uint8_t rxbuf[MAX_BUFFER_SIZE]; +} chipUart_t; + +static chipUart_t chipUart_var; + +#ifndef CFG_USB_CDC_ENABLE +static int uartTxCallback(void * p_arg) +{ + hosal_uart_ioctl(&uart_stdio, HOSAL_UART_TX_TRIGGER_OFF, NULL); + + return 0; +} + +static int uartRxCallback(void * p_arg) +{ + uint32_t len = 0; + BaseType_t xHigherPriorityTaskWoken = 1; + + if (chipUart_var.head >= chipUart_var.tail) + { + if (chipUart_var.head < MAX_BUFFER_SIZE) + { + len = hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf + chipUart_var.head, MAX_BUFFER_SIZE - chipUart_var.head); + chipUart_var.head = (chipUart_var.head + len) % MAX_BUFFER_SIZE; + } + + if (0 == chipUart_var.head) + { + len = hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf, chipUart_var.tail - 1); + chipUart_var.head += len; + } + } + else + { + chipUart_var.head += + hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf + chipUart_var.head, chipUart_var.tail - chipUart_var.head - 1); + } + + if (chipUart_var.head != chipUart_var.tail) + { + xSemaphoreGiveFromISR(chipUart_var.sema, &xHigherPriorityTaskWoken); + } + + return 0; +} +#else +void aosUartRxCallback(int fd, void * param) +{ + uint32_t len = 0, readlen = 0; + BaseType_t xHigherPriorityTaskWoken = 1; + + if (chipUart_var.head >= chipUart_var.tail) + { + if (chipUart_var.head < MAX_BUFFER_SIZE) + { + readlen = len = aos_read(fd, chipUart_var.rxbuf + chipUart_var.head, MAX_BUFFER_SIZE - chipUart_var.head); + chipUart_var.head = (chipUart_var.head + len) % MAX_BUFFER_SIZE; + } + + if (0 == chipUart_var.head) + { + len = aos_read(fd, chipUart_var.rxbuf, chipUart_var.tail - 1); + chipUart_var.head += len; + readlen += len; + } + } + else + { + readlen = aos_read(fd, chipUart_var.rxbuf + chipUart_var.head, chipUart_var.tail - chipUart_var.head - 1); + chipUart_var.head += readlen; + } + + if (chipUart_var.head != chipUart_var.tail) + { + xSemaphoreGiveFromISR(chipUart_var.sema, &xHigherPriorityTaskWoken); + } +} + +static int uartTxCallback(void * p_arg) +{ + + return 0; +} + +static int uartRxCallback(void * p_arg) +{ + uint32_t len = 0; + BaseType_t xHigherPriorityTaskWoken = 1; + + if (chipUart_var.head >= chipUart_var.tail) + { + if (chipUart_var.head < MAX_BUFFER_SIZE) + { + // len = hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf + chipUart_var.head, MAX_BUFFER_SIZE - chipUart_var.head); + chipUart_var.head = (chipUart_var.head + len) % MAX_BUFFER_SIZE; + } + + if (0 == chipUart_var.head) + { + // len = hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf, chipUart_var.tail - 1); + chipUart_var.head += len; + } + } + else + { + chipUart_var.head += + // hosal_uart_receive(&uart_stdio, chipUart_var.rxbuf + chipUart_var.head, chipUart_var.tail - chipUart_var.head - 1); + } + + if (chipUart_var.head != chipUart_var.tail) + { + xSemaphoreGiveFromISR(chipUart_var.sema, &xHigherPriorityTaskWoken); + } + + return 0; +} +#endif + +void uartInit(void) +{ + memset(&chipUart_var, 0, offsetof(chipUart_t, rxbuf)); + + chipUart_var.sema = xSemaphoreCreateBinaryStatic(&chipUart_var.mutx); + +#ifndef CFG_USB_CDC_ENABLE + hosal_uart_finalize(&uart_stdio); + hosal_uart_init(&uart_stdio); + hosal_uart_callback_set(&uart_stdio, HOSAL_UART_RX_CALLBACK, uartRxCallback, NULL); + hosal_uart_callback_set(&uart_stdio, HOSAL_UART_TX_CALLBACK, uartTxCallback, NULL); + hosal_uart_ioctl(&uart_stdio, HOSAL_UART_MODE_SET, (void *) HOSAL_UART_MODE_INT); +#endif +} + +int16_t uartRead(char * Buf, uint16_t NbBytesToRead) +{ + int16_t len = 0; + + xSemaphoreTake(chipUart_var.sema, portMAX_DELAY); + + taskENTER_CRITICAL(); + + for (len = 0; len < NbBytesToRead && chipUart_var.head != chipUart_var.tail; len++) + { + Buf[len] = chipUart_var.rxbuf[chipUart_var.tail]; + chipUart_var.tail = (chipUart_var.tail + 1) % MAX_BUFFER_SIZE; + } + + taskEXIT_CRITICAL(); + + if (chipUart_var.head != chipUart_var.tail) + { + xSemaphoreGive(chipUart_var.sema); + } + + return len; +} +#endif + +#ifndef CFG_USB_CDC_ENABLE +int16_t uartWrite(const char * Buf, uint16_t BufLength) +{ + return hosal_uart_send(&uart_stdio, Buf, BufLength); +} +#else +int16_t uartWrite(const char * Buf, uint16_t BufLength) +{ + uint16_t sent = 0; + do + { + extern int vfs_fd; + if (vfs_fd >= 0) + { + sent += (uint8_t) aos_write(vfs_fd, Buf + sent, BufLength - sent); + } + } while (sent < BufLength); + return sent; +} +#endif diff --git a/examples/platform/qcc74x/common/plat/LEDWidget.cpp b/examples/platform/qcc74x/common/plat/LEDWidget.cpp new file mode 100644 index 00000000000000..bf6159befb97f1 --- /dev/null +++ b/examples/platform/qcc74x/common/plat/LEDWidget.cpp @@ -0,0 +1,126 @@ +/* + * + * Copyright (c) 2020 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 + +#include +#include + +#include "LEDWidget.h" + +bool LEDWidget::GetOnoff(void) +{ + return mOnoff ? true : false; +} + +void DimmableLEDWidget::Init() +{ + mOnoff = light_v = 0; + +#ifdef MAX_PWM_CHANNEL + demo_pwm_init(); + demo_pwm_start(); +#endif +} + +void DimmableLEDWidget::Toggle(void) +{ + SetOnoff(1 - mOnoff); +} + +void DimmableLEDWidget::SetOnoff(bool state) +{ + mOnoff = state; +#ifdef MAX_PWM_CHANNEL + if (mOnoff) + { + if (light_v) + { + set_level(light_v); + } + else + { + set_level(254); + } + } + else + { + set_level(0); + } +#endif +} + +void DimmableLEDWidget::SetLevel(uint8_t level) +{ +#ifdef MAX_PWM_CHANNEL + set_level(level); +#endif + light_v = level; + mOnoff = light_v > 0; +} + +void ColorLEDWidget::Init() +{ + mOnoff = light_v = light_s = light_h = 0; +#ifdef MAX_PWM_CHANNEL + demo_pwm_init(); + demo_pwm_start(); +#endif +} + +void ColorLEDWidget::Toggle(void) +{ + SetOnoff(1 - mOnoff); +} + +void ColorLEDWidget::SetOnoff(bool state) +{ +#ifdef MAX_PWM_CHANNEL + mOnoff = state; + if (mOnoff) + { + if (0 == light_v) + { + set_color(254, light_h, light_s); + } + else + { + set_color(light_v, light_h, light_s); + } + } + else + { + set_color(0, light_h, light_s); + } +#endif +} + +void ColorLEDWidget::SetLevel(uint8_t level) +{ + SetColor(level, light_h, light_s); +} + +void ColorLEDWidget::SetColor(uint8_t level, uint8_t hue, uint8_t sat) +{ +#ifdef MAX_PWM_CHANNEL + set_color(level, hue, sat); +#endif + light_v = level; + light_h = hue; + light_s = sat; + mOnoff = light_v > 0; +} diff --git a/examples/platform/qcc74x/common/plat/LEDWidget.h b/examples/platform/qcc74x/common/plat/LEDWidget.h new file mode 100644 index 00000000000000..af1877d1089f3a --- /dev/null +++ b/examples/platform/qcc74x/common/plat/LEDWidget.h @@ -0,0 +1,60 @@ +/* + * + * Copyright (c) 2020 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 + +class LEDWidget +{ +public: + virtual void Init(void) = 0; + virtual void SetOnoff(bool state) = 0; + bool GetOnoff(void); + virtual void Toggle(void) = 0; + virtual ~LEDWidget(void){}; + + uint8_t mOnoff; + uint8_t mPin; +}; + +class DimmableLEDWidget : public LEDWidget +{ +public: + void Init(void) override; + void Toggle(void) override; + void SetOnoff(bool state) override; + void SetLevel(uint8_t level); + ~DimmableLEDWidget(void) {} + + uint8_t light_v; +}; + +class ColorLEDWidget : public DimmableLEDWidget +{ +public: + void Init(void) override; + void Toggle(void) override; + void SetOnoff(bool state) override; + void SetLevel(uint8_t level); + void SetColor(uint8_t level, uint8_t hue, uint8_t sat); + ~ColorLEDWidget(void) {} + + uint8_t light_h; + uint8_t light_s; +}; diff --git a/examples/platform/qcc74x/common/plat/MemMonitoring.cpp b/examples/platform/qcc74x/common/plat/MemMonitoring.cpp new file mode 100644 index 00000000000000..6e58131f8c1ea8 --- /dev/null +++ b/examples/platform/qcc74x/common/plat/MemMonitoring.cpp @@ -0,0 +1,68 @@ +/* + * + * Copyright (c) 2021 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 +#include +#include +#include + +static StackType_t monitoringStack[MONITORING_STACK_SIZE_byte / sizeof(StackType_t)]; +static StaticTask_t monitoringTaskStruct; + +void MemMonitoring::startHeapMonitoring() +{ + xTaskCreateStatic(HeapMonitoring, "Monitoring", MONITORING_STACK_SIZE_byte / sizeof(StackType_t), NULL, 1, monitoringStack, + &monitoringTaskStruct); +} + +void MemMonitoring::HeapMonitoring(void * pvParameter) +{ + TaskStatus_t * pTaskStatus = NULL; + char taskState[] = { 'X', 'R', 'B', 'S', 'D' }; // eRunning, eReady, eBlocked, eSuspended, eDeleted + uint32_t pulTotalRunTime; + + while (true) + { + ChipLogProgress(NotSpecified, "============================="); + pTaskStatus = (TaskStatus_t *) malloc(uxTaskGetNumberOfTasks() * sizeof(TaskStatus_t)); + if (pTaskStatus) + { + ChipLogProgress(NotSpecified, "Task Name\tstate\tpriority\thighWaterMark"); + uxTaskGetSystemState(pTaskStatus, uxTaskGetNumberOfTasks(), &pulTotalRunTime); + for (uint32_t i = 0; i < uxTaskGetNumberOfTasks(); i++) + { + ChipLogProgress(NotSpecified, "%s%s\t%c\t%ld/%ld\t\t%d", (pTaskStatus + i)->pcTaskName, + strlen((pTaskStatus + i)->pcTaskName) < 7 ? "\t" : "", + (pTaskStatus + i)->eCurrentState > eDeleted ? 'N' : taskState[(pTaskStatus + i)->eCurrentState], + (pTaskStatus + i)->uxCurrentPriority, (pTaskStatus + i)->uxBasePriority, + (pTaskStatus + i)->usStackHighWaterMark); + } + free(pTaskStatus); + } + ChipLogProgress(NotSpecified, "\r\n"); + ChipLogProgress(NotSpecified, "SRAM Heap, min left: %d, current left %d", xPortGetMinimumEverFreeHeapSize(), + xPortGetFreeHeapSize()); +#ifdef CFG_USE_PSRAM + ChipLogProgress(NotSpecified, "PSRAM Heap, min left: %d, current left %d", xPortGetMinimumEverFreeHeapSizePsram(), + xPortGetFreeHeapSizePsram()); +#endif + ChipLogProgress(NotSpecified, "============================= / total run time %ld", pulTotalRunTime); + + vTaskDelay(pdMS_TO_TICKS(10000)); + } +} diff --git a/examples/platform/qcc74x/common/plat/MemMonitoring.h b/examples/platform/qcc74x/common/plat/MemMonitoring.h new file mode 100644 index 00000000000000..26f472be91688a --- /dev/null +++ b/examples/platform/qcc74x/common/plat/MemMonitoring.h @@ -0,0 +1,35 @@ +/* + * + * Copyright (c) 2021 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 + +#ifdef HEAP_MONITORING +#include "FreeRTOS.h" + +#define MONITORING_STACK_SIZE_byte 1280 + +class MemMonitoring +{ +public: + static void startHeapMonitoring(); + +private: + static void HeapMonitoring(void * pvParameter); +}; + +#endif diff --git a/examples/platform/qcc74x/common/plat/OTAConfig.cpp b/examples/platform/qcc74x/common/plat/OTAConfig.cpp new file mode 100644 index 00000000000000..a1ebd327ccfa68 --- /dev/null +++ b/examples/platform/qcc74x/common/plat/OTAConfig.cpp @@ -0,0 +1,56 @@ +/* + * + * Copyright (c) 2021 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 "OTAConfig.h" +#include + +#include +// Global OTA objects +chip::DefaultOTARequestor gRequestorCore; +chip::DefaultOTARequestorStorage gRequestorStorage; +chip::DeviceLayer::DefaultOTARequestorDriver gRequestorUser; +chip::BDXDownloader gDownloader; +chip::OTAImageProcessorImpl gImageProcessor; + +void OTAConfig::Init() +{ + // Initialize and interconnect the Requestor and Image Processor objects -- START + SetRequestorInstance(&gRequestorCore); + + gRequestorStorage.Init(chip::Server::GetInstance().GetPersistentStorage()); + gRequestorCore.Init(chip::Server::GetInstance(), gRequestorStorage, gRequestorUser, gDownloader); + + // Periodic query timeout must be set prior to requestor being initialized + gRequestorUser.SetPeriodicQueryTimeout(OTA_PERIODIC_TIMEOUT); + gRequestorUser.Init(&gRequestorCore, &gImageProcessor); + + gImageProcessor.SetOTADownloader(&gDownloader); + + // Connect the Downloader and Image Processor objects + gDownloader.SetImageProcessorDelegate(&gImageProcessor); + // Initialize and interconnect the Requestor and Image Processor objects -- END +} + +void OTAConfig::InitOTARequestorHandler(chip::System::Layer * systemLayer, void * appState) +{ + if (!chip::GetRequestorInstance()) + { + ChipLogProgress(NotSpecified, "Init OTA Requestor"); + OTAConfig::Init(); + } +} diff --git a/examples/platform/qcc74x/common/plat/OTAConfig.h b/examples/platform/qcc74x/common/plat/OTAConfig.h new file mode 100644 index 00000000000000..24d8fb5c11109f --- /dev/null +++ b/examples/platform/qcc74x/common/plat/OTAConfig.h @@ -0,0 +1,34 @@ +/* + * + * Copyright (c) 2021 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 +#include +#include +#include + +class OTAConfig +{ +public: + OTAConfig(){}; + + static void Init(); + static constexpr uint32_t kInitOTARequestorDelaySec = 3; + static void InitOTARequestorHandler(chip::System::Layer * systemLayer, void * appState); +}; diff --git a/examples/platform/qcc74x/common/plat/demo_pwm.h b/examples/platform/qcc74x/common/plat/demo_pwm.h new file mode 100644 index 00000000000000..d434ee9addec2b --- /dev/null +++ b/examples/platform/qcc74x/common/plat/demo_pwm.h @@ -0,0 +1,21 @@ +#ifndef __DEMO_PWM__ +#define __DEMO_PWM__ + +#ifdef __cplusplus +extern "C" { +#endif + +void demo_pwm_init(void); +void demo_pwm_start(void); +void set_color_red(uint8_t currLevel); +void set_color_green(uint8_t currLevel); +void set_color_yellow(uint8_t currLevel); +void set_color(uint8_t currLevel, uint8_t currHue, uint8_t currSat); + +void set_level(uint8_t currLevel); + +#ifdef __cplusplus +} +#endif + +#endif // __DEMO_PWM__ diff --git a/examples/platform/qcc74x/common/plat/main.cpp b/examples/platform/qcc74x/common/plat/main.cpp new file mode 100644 index 00000000000000..313f9fe746f76f --- /dev/null +++ b/examples/platform/qcc74x/common/plat/main.cpp @@ -0,0 +1,70 @@ +/* + * + * Copyright (c) 2020 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 + +#include + +#include + +using namespace ::chip; +using namespace ::chip::Inet; +using namespace ::chip::DeviceLayer; + +volatile int apperror_cnt; +// ================================================================================ +// App Error +//================================================================================= +void appError(int err) +{ + ChipLogProgress(NotSpecified, "!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); + portDISABLE_INTERRUPTS(); + while (true) + ; +} + +void appError(CHIP_ERROR error) +{ + appError(static_cast(error.AsInteger())); +} + +extern "C" int START_ENTRY(void) +{ + platform_port_init(); + + Internal::BLConfig::Init(); + + ChipLogProgress(NotSpecified, "=================================================="); + ChipLogProgress(NotSpecified, "qcc74x chip-lighting-example, built at " __DATE__ " " __TIME__); + ChipLogProgress(NotSpecified, "=================================================="); + + ChipLogProgress(NotSpecified, "Init CHIP Memory"); + chip::Platform::MemoryInit(NULL, 0); + + ChipLogProgress(NotSpecified, "Starting App Task"); + StartAppTask(); + + ChipLogProgress(NotSpecified, "Starting OS Scheduler..."); + vTaskStartScheduler(); + + // Should never get here. + ChipLogError(NotSpecified, "Starting OS Scheduler failed"); + appError(0); + + return 0; +} diff --git a/examples/platform/qcc74x/common/plat/plat.h b/examples/platform/qcc74x/common/plat/plat.h new file mode 100644 index 00000000000000..ba85f03e88105f --- /dev/null +++ b/examples/platform/qcc74x/common/plat/plat.h @@ -0,0 +1,37 @@ +/* + * + * Copyright (c) 2020 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 + +#define APP_TASK_NAME "APP" +#define APP_TASK_PRIORITY 15 + +#define EXT_DISCOVERY_TIMEOUT_SECS 20 + +#ifdef __cplusplus + +#include +void appError(CHIP_ERROR error); + +extern "C" void platform_port_init(void); +#else + +void appError(int err); +void platform_port_init(void); + +#endif diff --git a/examples/platform/qcc74x/common/plat/platform.cpp b/examples/platform/qcc74x/common/plat/platform.cpp new file mode 100644 index 00000000000000..d969a6adca9b8f --- /dev/null +++ b/examples/platform/qcc74x/common/plat/platform.cpp @@ -0,0 +1,286 @@ +/* + * + * Copyright (c) 2020 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 +#include +#include +#include +#include +#include +#include +#include +#include + +#if HEAP_MONITORING +#include +#endif + +#if CONFIG_ENABLE_CHIP_SHELL +#include +#include +#endif + +#if PW_RPC_ENABLED +#include +#include +#endif +#if CONFIG_ENABLE_CHIP_SHELL || PW_RPC_ENABLED +#include +#endif + +#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST +#include +#endif + +#if CHIP_DEVICE_CONFIG_ENABLE_WIFI +#include +#include +#endif + +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD +#include +#include +#include +#include +#endif + +#if CHIP_DEVICE_CONFIG_ENABLE_ETHERNET || CHIP_DEVICE_CONFIG_ENABLE_WIFI +#include +#include +#if CHIP_DEVICE_CONFIG_ENABLE_WIFI && CHIP_DEVICE_LAYER_TARGET_BL602 +#include +#endif +#if CHIP_DEVICE_CONFIG_ENABLE_WIFI && CHIP_DEVICE_LAYER_TARGET_BL702 +#include +#endif +#if CHIP_DEVICE_CONFIG_ENABLE_ETHERNET +#include +#endif +#endif + +#include +#include + +using namespace ::chip; +using namespace ::chip::app; +using namespace ::chip::Credentials; +using namespace ::chip::DeviceLayer; + +#if CHIP_DEVICE_CONFIG_ENABLE_WIFI +namespace { +chip::app::Clusters::NetworkCommissioning::Instance + sWiFiNetworkCommissioningInstance(0 /* Endpoint Id */, &(NetworkCommissioning::BLWiFiDriver::GetInstance())); +} +#endif + +#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST +namespace { +FactoryDataProvider sFactoryDataProvider; +} +#endif + +static chip::DeviceLayer::DeviceInfoProviderImpl gExampleDeviceInfoProvider; + +void ChipEventHandler(const ChipDeviceEvent * event, intptr_t arg) +{ + switch (event->Type) + { + case DeviceEventType::kCHIPoBLEAdvertisingChange: + ChipLogProgress(NotSpecified, "BLE adv changed, connection number: %d", ConnectivityMgr().NumBLEConnections()); + break; +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD + case DeviceEventType::kThreadStateChange: + + if (ConnectivityMgr().IsThreadAttached()) + { + chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Seconds32(OTAConfig::kInitOTARequestorDelaySec), + OTAConfig::InitOTARequestorHandler, nullptr); + } + break; +#endif + +#if CHIP_DEVICE_CONFIG_ENABLE_WIFI || CHIP_DEVICE_CONFIG_ENABLE_ETHERNET + case DeviceEventType::kInterfaceIpAddressChanged: + if ((event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV4_Assigned) || + (event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV6_Assigned)) + { + // MDNS server restart on any ip assignment: if link local ipv6 is configured, that + // will not trigger a 'internet connectivity change' as there is no internet + // connectivity. MDNS still wants to refresh its listening interfaces to include the + // newly selected address. + + chip::app::DnssdServer::Instance().StartServer(); + + bl_route_hook_init(); + + chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Seconds32(OTAConfig::kInitOTARequestorDelaySec), + OTAConfig::InitOTARequestorHandler, nullptr); + } + break; +#endif + case DeviceEventType::kInternetConnectivityChange: + if (event->InternetConnectivityChange.IPv4 == kConnectivity_Established) + { + ChipLogProgress(NotSpecified, "IPv4 connectivity ready..."); + } + else if (event->InternetConnectivityChange.IPv4 == kConnectivity_Lost) + { + ChipLogProgress(NotSpecified, "Lost IPv4 connectivity..."); + } + if (event->InternetConnectivityChange.IPv6 == kConnectivity_Established) + { + ChipLogProgress(NotSpecified, "IPv6 connectivity ready..."); + } + else if (event->InternetConnectivityChange.IPv6 == kConnectivity_Lost) + { + ChipLogProgress(NotSpecified, "Lost IPv6 connectivity..."); + } + break; + case DeviceEventType::kCHIPoBLEConnectionEstablished: + ChipLogProgress(NotSpecified, "BLE connection established"); + break; + case DeviceEventType::kCHIPoBLEConnectionClosed: + ChipLogProgress(NotSpecified, "BLE disconnected"); + break; + case DeviceEventType::kCommissioningComplete: + ChipLogProgress(NotSpecified, "Commissioning complete"); + GetAppTask().PostEvent(AppTask::APP_EVENT_LIGHTING_MASK); + break; + default: + break; + } +} + +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD +void LockOpenThreadTask(void) +{ + chip::DeviceLayer::ThreadStackMgr().LockThreadStack(); +} + +void UnlockOpenThreadTask(void) +{ + chip::DeviceLayer::ThreadStackMgr().UnlockThreadStack(); +} +#endif + +CHIP_ERROR PlatformManagerImpl::PlatformInit(void) +{ + chip::RendezvousInformationFlags rendezvousMode(chip::RendezvousInformationFlag::kOnNetwork); +#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST + CHIP_ERROR retFactoryData = sFactoryDataProvider.Init(); +#endif + +#if PW_RPC_ENABLED + PigweedLogger::pw_init(); +#elif CONFIG_ENABLE_CHIP_SHELL + AppTask::StartAppShellTask(); +#endif + +#if HEAP_MONITORING + MemMonitoring::startHeapMonitoring(); +#endif + + ChipLogProgress(NotSpecified, "Initializing CHIP stack"); + ReturnLogErrorOnFailure(PlatformMgr().InitChipStack()); + + chip::DeviceLayer::ConnectivityMgr().SetBLEDeviceName(CHIP_BLE_DEVICE_NAME); + +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD + +#if CONFIG_ENABLE_CHIP_SHELL + cmd_otcli_init(); +#endif + + ChipLogProgress(NotSpecified, "Initializing OpenThread stack"); + ReturnLogErrorOnFailure(ThreadStackMgr().InitThreadStack()); + +#if CHIP_DEVICE_CONFIG_THREAD_FTD + ReturnLogErrorOnFailure(ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_Router)); +#else + ReturnLogErrorOnFailure(ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_MinimalEndDevice)); +#endif + +#endif + +#if CHIP_DEVICE_CONFIG_ENABLE_WIFI + ReturnLogErrorOnFailure(sWiFiNetworkCommissioningInstance.Init()); +#endif + + // Initialize device attestation config +#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST + if (CHIP_NO_ERROR == retFactoryData) + { + SetDeviceInstanceInfoProvider(&sFactoryDataProvider); + SetDeviceAttestationCredentialsProvider(&sFactoryDataProvider); + SetCommissionableDataProvider(&sFactoryDataProvider); + } + else + { + ChipLogError(NotSpecified, "sFactoryDataProvider.Init() failed"); + } +#else + SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider()); +#endif + + chip::DeviceLayer::PlatformMgr().LockChipStack(); + +#if CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY + chip::app::DnssdServer::Instance().SetExtendedDiscoveryTimeoutSecs(EXT_DISCOVERY_TIMEOUT_SECS); +#endif + + chip::DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider); + + static CommonCaseDeviceServerInitParams initParams; + (void) initParams.InitializeStaticResourcesBeforeServerInit(); + +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD + chip::Inet::EndPointStateOpenThread::OpenThreadEndpointInitParam nativeParams; + nativeParams.lockCb = LockOpenThreadTask; + nativeParams.unlockCb = UnlockOpenThreadTask; + nativeParams.openThreadInstancePtr = chip::DeviceLayer::ThreadStackMgrImpl().OTInstance(); + initParams.endpointNativeParams = static_cast(&nativeParams); +#endif + + ReturnLogErrorOnFailure(chip::Server::GetInstance().Init(initParams)); + + gExampleDeviceInfoProvider.SetStorageDelegate(&chip::Server::GetInstance().GetPersistentStorage()); + + chip::DeviceLayer::PlatformMgr().UnlockChipStack(); + +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD + ChipLogProgress(NotSpecified, "Starting OpenThread task"); + // Start OpenThread task + ReturnLogErrorOnFailure(ThreadStackMgrImpl().StartThreadTask()); +#endif + + ConfigurationMgr().LogDeviceConfig(); + +#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE + rendezvousMode.Set(chip::RendezvousInformationFlag::kBLE); +#endif + PrintOnboardingCodes(rendezvousMode); + + PlatformMgr().AddEventHandler(ChipEventHandler, 0); + +#if PW_RPC_ENABLED + chip::rpc::Init(); +#endif + + vTaskResume(GetAppTask().sAppTaskHandle); + + return CHIP_NO_ERROR; +} diff --git a/examples/platform/qcc74x/common/plat/uart.h b/examples/platform/qcc74x/common/plat/uart.h new file mode 100644 index 00000000000000..77cd7de39bdab8 --- /dev/null +++ b/examples/platform/qcc74x/common/plat/uart.h @@ -0,0 +1,29 @@ +/* + * + * Copyright (c) 2021 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 + +void uartInit(void); +int16_t uartWrite(const char * Buf, uint16_t BufLength); +int16_t uartRead(char * Buf, uint16_t NbBytesToRead); + +#ifdef CFG_USB_CDC_ENABLE +void aosUartRxCallback(int fd, void * param); +#endif diff --git a/examples/platform/qcc74x/common/route_hook/bl_lwip_hooks.h b/examples/platform/qcc74x/common/route_hook/bl_lwip_hooks.h new file mode 100644 index 00000000000000..e69383c73fb8ef --- /dev/null +++ b/examples/platform/qcc74x/common/route_hook/bl_lwip_hooks.h @@ -0,0 +1,13 @@ +#ifndef _LWIP_DEFAULT_HOOKS_H_ +#define _LWIP_DEFAULT_HOOKS_H_ +#include "lwip/arch.h" +#include "lwip/err.h" +#include "lwip/ip_addr.h" + +extern struct netif * lwip_hook_ip6_route(const ip6_addr_t * src, const ip6_addr_t * dest); +#define LWIP_HOOK_IP6_ROUTE lwip_hook_ip6_route + +extern const ip6_addr_t * lwip_hook_nd6_get_gw(struct netif * netif, const ip6_addr_t * dest); +#define LWIP_HOOK_ND6_GET_GW lwip_hook_nd6_get_gw + +#endif /* _LWIP_DEFAULT_HOOKS_H_ */ diff --git a/examples/platform/qcc74x/common/route_hook/bl_route_hook.c b/examples/platform/qcc74x/common/route_hook/bl_route_hook.c new file mode 100644 index 00000000000000..9b7766af5eeebe --- /dev/null +++ b/examples/platform/qcc74x/common/route_hook/bl_route_hook.c @@ -0,0 +1,214 @@ +#include +#include + +#include +#include "lwip/icmp6.h" +#include "lwip/mld6.h" +#include "lwip/netif.h" +#include "lwip/prot/icmp6.h" +#include "lwip/prot/ip6.h" +#include "lwip/prot/nd6.h" +#include "lwip/raw.h" + +#include "bl_route_hook.h" +#include "bl_route_table.h" + +typedef struct bl_route_hook_t +{ + struct netif * netif; + struct raw_pcb * pcb; + struct bl_route_hook_t * next; +} bl_route_hook_t; + +PACK_STRUCT_BEGIN +struct rio_header_t +{ + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FLD_8(u8_t prefix_length); + PACK_STRUCT_FLD_8(u8_t preference); + PACK_STRUCT_FIELD(u32_t route_lifetime); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +typedef struct rio_header_t rio_header_t; + +static bl_route_hook_t * s_hooks; + +extern struct netif * deviceInterface_getNetif(void); + +static bool is_self_address(struct netif * netif, const ip6_addr_t * addr) +{ + for (size_t i = 0; i < LWIP_ARRAYSIZE(netif->ip6_addr); i++) + { + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && + memcmp(addr->addr, netif_ip6_addr(netif, i)->addr, sizeof(addr->addr)) == 0) + { + return true; + } + } + return false; +} + +static void ra_recv_handler(struct netif * netif, const uint8_t * icmp_payload, uint16_t payload_len, const ip6_addr_t * src_addr) +{ + if (payload_len < sizeof(struct ra_header)) + { + return; + } + icmp_payload += sizeof(struct ra_header); + payload_len -= sizeof(struct ra_header); + + while (payload_len >= 2) + { + uint8_t opt_type = icmp_payload[0]; + uint8_t opt_len = icmp_payload[1] << 3; + + if (opt_type == ND6_OPTION_TYPE_ROUTE_INFO && opt_len >= sizeof(rio_header_t) && !is_self_address(netif, src_addr) && + payload_len >= opt_len) + { + rio_header_t rio_header; + memcpy(&rio_header, icmp_payload, sizeof(rio_header)); + + // skip if prefix is longer than IPv6 address. + if (rio_header.prefix_length > 128) + { + break; + } + uint8_t prefix_len_bytes = (rio_header.prefix_length + 7) / 8; + int8_t preference = -2 * ((rio_header.preference >> 4) & 1) + (((rio_header.preference) >> 3) & 1); + const uint8_t * rio_data = &icmp_payload[sizeof(rio_header_t)]; + uint8_t rio_data_len = opt_len - sizeof(rio_header_t); + + printf("Received RIO\r\n"); + if (rio_data_len >= prefix_len_bytes) + { + ip6_addr_t prefix; + bl_route_entry_t route; + + memset(&prefix, 0, sizeof(prefix)); + memcpy(&prefix.addr, rio_data, prefix_len_bytes); + route.netif = netif; + route.gateway = *src_addr; + route.prefix_length = rio_header.prefix_length; + route.prefix = prefix; + route.preference = preference; + route.lifetime_seconds = lwip_ntohl(rio_header.route_lifetime); + printf("prefix %s lifetime %lu\r\n", ip6addr_ntoa(&prefix), route.lifetime_seconds); + if (bl_route_table_add_route_entry(&route) == NULL) + { + printf("Failed to add route table entry\r\n"); + } + else + { + printf("Added entry to route table\r\n"); + } + } + } + icmp_payload += opt_len; + payload_len -= opt_len; + } +} + +static uint8_t icmp6_raw_recv_handler(void * arg, struct raw_pcb * pcb, struct pbuf * p, const ip_addr_t * addr) +{ + uint8_t * icmp_payload = NULL; + uint16_t icmp_payload_len; + struct ip6_hdr * ip6_header = (struct ip6_hdr *) p->payload; + struct icmp6_hdr * icmp6_header; + ip6_addr_t src; + ip6_addr_t dest; + bl_route_hook_t * hook = (bl_route_hook_t *) arg; + + memcpy(src.addr, ip6_header->src.addr, sizeof(src.addr)); + memcpy(dest.addr, ip6_header->dest.addr, sizeof(dest.addr)); +#if LWIP_IPV6_SCOPES + src.zone = 0; +#endif + + if (p->tot_len != p->len) + { + printf("Ignore segmented ICMP packet\r\n"); + return 0; + } + if (p->tot_len <= sizeof(struct ip6_hdr) + sizeof(struct icmp6_hdr)) + { + printf("Ignore invalid ICMP packet\r\n"); + return 0; + } + if (!ip6_addr_islinklocal(&dest) && !ip6_addr_isallnodes_linklocal(&dest) && !ip6_addr_isallrouters_linklocal(&dest)) + { + return 0; + } + + icmp_payload_len = p->tot_len - sizeof(struct ip6_hdr); + icmp_payload = p->payload + sizeof(struct ip6_hdr); + + icmp6_header = (struct icmp6_hdr *) icmp_payload; + if (icmp6_header->type == ICMP6_TYPE_RA) + { + ra_recv_handler(hook->netif, icmp_payload, icmp_payload_len, &src); + } + return 0; +} + +int8_t bl_route_hook_init(void) +{ + ip_addr_t router_group = IPADDR6_INIT_HOST(0xFF020000, 0, 0, 0x02); + bl_route_hook_t * hook = NULL; + uint8_t ret = 0; + struct netif * lwip_netif = deviceInterface_getNetif(); + + LOCK_TCPIP_CORE(); + + if (lwip_netif == NULL) + { + printf("Invalid network interface\r\n"); + ret = -1; + goto exit; + } + + for (bl_route_hook_t * iter = s_hooks; iter != NULL; iter++) + { + if (iter->netif == lwip_netif) + { + ret = 0; + break; + } + } + + hook = (bl_route_hook_t *) malloc(sizeof(bl_route_hook_t)); + if (hook == NULL) + { + printf("Cannot allocate hook\r\n"); + ret = -1; + goto exit; + } + + if (mld6_joingroup_netif(lwip_netif, ip_2_ip6(&router_group)) != ERR_OK) + { + printf("Failed to join multicast group\r\n"); + ret = -1; + goto exit; + } + + hook->netif = lwip_netif; + hook->pcb = raw_new_ip_type(IPADDR_TYPE_V6, IP6_NEXTH_ICMP6); + hook->pcb->flags |= RAW_FLAGS_MULTICAST_LOOP; + hook->pcb->chksum_reqd = 1; + // The ICMPv6 header checksum offset + hook->pcb->chksum_offset = 2; + raw_bind_netif(hook->pcb, lwip_netif); + raw_recv(hook->pcb, icmp6_raw_recv_handler, hook); + hook->next = s_hooks; + s_hooks = hook; + +exit: + if (ret != 0 && hook != NULL) + { + free(hook); + } + UNLOCK_TCPIP_CORE(); + + return ret; +} diff --git a/examples/platform/qcc74x/common/route_hook/bl_route_hook.h b/examples/platform/qcc74x/common/route_hook/bl_route_hook.h new file mode 100644 index 00000000000000..80c8bfec06a56a --- /dev/null +++ b/examples/platform/qcc74x/common/route_hook/bl_route_hook.h @@ -0,0 +1,10 @@ +#include +#ifdef __cplusplus +extern "C" { +#endif + +int8_t bl_route_hook_init(void); + +#ifdef __cplusplus +} +#endif diff --git a/examples/platform/qcc74x/common/route_hook/bl_route_table.c b/examples/platform/qcc74x/common/route_hook/bl_route_table.c new file mode 100644 index 00000000000000..3e5ae103b36e22 --- /dev/null +++ b/examples/platform/qcc74x/common/route_hook/bl_route_table.c @@ -0,0 +1,174 @@ +#include +#include + +#include "bl_route_table.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" +#include "lwip/timeouts.h" + +#define MAX_RIO_ROUTE 20 +#define MAX_RIO_TIMEOUT UINT32_MAX / (1000 * 4) // lwIP defined reasonable timeout value + +static bl_route_entry_t s_route_entries[MAX_RIO_ROUTE]; + +static bl_route_entry_t * find_route_entry(const bl_route_entry_t * route_entry) +{ + for (size_t i = 0; i < LWIP_ARRAYSIZE(s_route_entries); i++) + { + if (s_route_entries[i].netif == NULL) + { + break; + } + if (s_route_entries[i].netif == route_entry->netif && s_route_entries[i].prefix_length == route_entry->prefix_length && + memcmp(s_route_entries[i].gateway.addr, route_entry->gateway.addr, sizeof(route_entry->gateway.addr)) == 0 && + memcmp(s_route_entries[i].prefix.addr, route_entry->prefix.addr, route_entry->prefix_length / 8) == 0) + { + return &s_route_entries[i]; + } + } + return NULL; +} + +static bl_route_entry_t * find_empty_route_entry(void) +{ + for (size_t i = 0; i < LWIP_ARRAYSIZE(s_route_entries); i++) + { + if (s_route_entries[i].netif == NULL) + { + return &s_route_entries[i]; + } + } + return NULL; +} + +static void route_timeout_handler(void * arg) +{ + bl_route_entry_t * route = (bl_route_entry_t *) arg; + + bl_route_table_remove_route_entry(route); +} + +bl_route_entry_t * bl_route_table_add_route_entry(const bl_route_entry_t * route_entry) +{ + if (route_entry == NULL || (route_entry->lifetime_seconds > MAX_RIO_TIMEOUT && route_entry->lifetime_seconds != UINT32_MAX)) + { + return NULL; + } + + bl_route_entry_t * entry = find_route_entry(route_entry); + + if (entry == NULL) + { + entry = find_empty_route_entry(); + if (entry == NULL) + { + return NULL; + } + entry->netif = route_entry->netif; + entry->gateway = route_entry->gateway; + ip6_addr_assign_zone(&entry->gateway, IP6_UNICAST, entry->netif); + entry->prefix = route_entry->prefix; + entry->prefix_length = route_entry->prefix_length; + } + else + { + sys_untimeout(route_timeout_handler, entry); + } + entry->preference = route_entry->preference; + entry->lifetime_seconds = route_entry->lifetime_seconds; + if (entry->lifetime_seconds != UINT32_MAX) + { + sys_timeout(entry->lifetime_seconds * 1000, route_timeout_handler, entry); + } + return entry; +} + +int8_t bl_route_table_remove_route_entry(bl_route_entry_t * route_entry) +{ + if (route_entry < &s_route_entries[0] || route_entry > &s_route_entries[LWIP_ARRAYSIZE(s_route_entries)]) + { + return -1; + } + route_entry->netif = NULL; + for (bl_route_entry_t * moved = route_entry; moved < &s_route_entries[LWIP_ARRAYSIZE(s_route_entries) - 1]; moved++) + { + *moved = *(moved + 1); + if (moved->netif == NULL) + { + break; + } + } + return 0; +} + +static inline bool is_better_route(const bl_route_entry_t * lhs, const bl_route_entry_t * rhs) +{ + if (rhs == NULL) + { + return true; + } + if (lhs == NULL) + { + return false; + } + return (lhs->prefix_length > rhs->prefix_length) || + (lhs->prefix_length == rhs->prefix_length && lhs->preference > rhs->preference); +} + +static inline bool route_match(const bl_route_entry_t * route, const ip6_addr_t * dest) +{ + return memcmp(dest, route->prefix.addr, route->prefix_length / 8) == 0; +} + +struct netif * lwip_hook_ip6_route(const ip6_addr_t * src, const ip6_addr_t * dest) +{ + bl_route_entry_t * route = NULL; + + for (size_t i = 0; i < LWIP_ARRAYSIZE(s_route_entries); i++) + { + if (s_route_entries[i].netif == NULL) + { + break; + } + if (route_match(&s_route_entries[i], dest) && is_better_route(&s_route_entries[i], route)) + { + route = &s_route_entries[i]; + } + } + + if (route) + { + return route->netif; + } + else + { + return NULL; + } +} + +const ip6_addr_t * lwip_hook_nd6_get_gw(struct netif * netif, const ip6_addr_t * dest) +{ + bl_route_entry_t * route = NULL; + + for (size_t i = 0; i < LWIP_ARRAYSIZE(s_route_entries); i++) + { + if (s_route_entries[i].netif == NULL) + { + break; + } + if (s_route_entries[i].netif == netif && route_match(&s_route_entries[i], dest) && + is_better_route(&s_route_entries[i], route)) + { + route = &s_route_entries[i]; + } + } + + if (route) + { + return &route->gateway; + } + else + { + return NULL; + } +} diff --git a/examples/platform/qcc74x/common/route_hook/bl_route_table.h b/examples/platform/qcc74x/common/route_hook/bl_route_table.h new file mode 100644 index 00000000000000..eaf0f4f8c5ec63 --- /dev/null +++ b/examples/platform/qcc74x/common/route_hook/bl_route_table.h @@ -0,0 +1,76 @@ +#include + +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Route table entry + * + */ +typedef struct +{ + ip6_addr_t prefix; + uint8_t prefix_length; + ip6_addr_t gateway; + int8_t preference; + uint32_t lifetime_seconds; + struct netif * netif; +} bl_route_entry_t; + +/** + * @brief Adds an entry to the route table + * + * @param[in] route_entry The route entry to be added + * + * @return + * - The pointer to the added route entry on success + * - NULL on failure + * + */ +bl_route_entry_t * bl_route_table_add_route_entry(const bl_route_entry_t * route_entry); + +/** + * @brief Removes an entry from the route table + * + * @param[in] route_entry The route entry to be removed + * + * @return + * - 0 + * - -1 The provided route_entry is not in the route table. + * + */ +int8_t bl_route_table_remove_route_entry(bl_route_entry_t * route_entry); + +/** + * @brief The lwIP ip6 route hook, called by the lwIP function ip6_route when sending packets. + * + * @param[in] src The source address + * @param[in] dest The destination address + * + * @return + * - The target interface when route found + * - NULL when route not found + * + */ +struct netif * lwip_hook_ip6_route(const ip6_addr_t * src, const ip6_addr_t * dest); + +/** + * @brief The lwIP gateway hook, called by the lwIP when deciding next hop. + * + * @param[in] netif The output network interface + * @param[in] dest The destination address + * + * @return + * - The gateway address when route found + * - NULL when route not found + * + */ +const ip6_addr_t * lwip_hook_nd6_get_gw(struct netif * netif, const ip6_addr_t * dest); + +#ifdef __cplusplus +} +#endif diff --git a/examples/platform/qcc74x/common/rpc/PigweedLogger.cpp b/examples/platform/qcc74x/common/rpc/PigweedLogger.cpp new file mode 100644 index 00000000000000..e3446a1a85234d --- /dev/null +++ b/examples/platform/qcc74x/common/rpc/PigweedLogger.cpp @@ -0,0 +1,107 @@ +/* + * + * Copyright (c) 2021 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 "semphr.h" +#include +#include +#include + +#include "pw_span/span.h" +#include +#include +#include + +namespace PigweedLogger { +namespace { + +constexpr uint8_t kLogHdlcAddress = 1; // Send log messages to HDLC address 1 (other than RPC communication) +constexpr size_t kWriteBufferSize = 128; // 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 = NULL; + +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 pw_init(void) +{ + sLoggerLock = xSemaphoreCreateMutex(); + assert(sLoggerLock != NULL); +} + +int putString(const char * buffer, size_t size) +{ + assert(sWriteBufferPos < kWriteBufferSize); + + if (sLoggerLock) + { + xSemaphoreTake(sLoggerLock, portMAX_DELAY); + } + + 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(); + } + + if (sLoggerLock) + { + xSemaphoreGive(sLoggerLock); + } + return size; +} + +SemaphoreHandle_t * GetSemaphore() +{ + return &sLoggerLock; +} + +} // namespace PigweedLogger diff --git a/examples/platform/qcc74x/common/rpc/PigweedLogger.h b/examples/platform/qcc74x/common/rpc/PigweedLogger.h new file mode 100644 index 00000000000000..54067a47ae1acf --- /dev/null +++ b/examples/platform/qcc74x/common/rpc/PigweedLogger.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 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 + +#include "semphr.h" +#include + +namespace PigweedLogger { + +void pw_init(void); +int putString(const char * buffer, size_t size); +SemaphoreHandle_t * GetSemaphore(); + +} // namespace PigweedLogger diff --git a/examples/platform/qcc74x/common/rpc/Rpc.cpp b/examples/platform/qcc74x/common/rpc/Rpc.cpp new file mode 100644 index 00000000000000..ba71648b68c42b --- /dev/null +++ b/examples/platform/qcc74x/common/rpc/Rpc.cpp @@ -0,0 +1,243 @@ +/* + * + * Copyright (c) 2021 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 "PigweedLoggerMutex.h" +#include "pigweed/RpcService.h" +#include "pw_sys_io/init.h" +#include "task.h" +extern "C" { +#include "bl_sys.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_DESCRIPTOR_SERVICE) && PW_RPC_DESCRIPTOR_SERVICE +#include "pigweed/rpc_services/Descriptor.h" +#endif // defined(PW_RPC_DESCRIPTOR_SERVICE) && PW_RPC_DESCRIPTOR_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 + +#if defined(PW_RPC_OTCLI_SERVICE) && PW_RPC_OTCLI_SERVICE +#include "pigweed/rpc_services/OtCli.h" +#endif // defined(PW_RPC_OTCLI_SERVICE) && PW_RPC_OTCLI_SERVICE + +#if defined(PW_RPC_THREAD_SERVICE) && PW_RPC_THREAD_SERVICE +#include "pigweed/rpc_services/Thread.h" +#endif // defined(PW_RPC_THREAD_SERVICE) && PW_RPC_THREAD_SERVICE + +#if defined(PW_RPC_TRACING_SERVICE) && PW_RPC_TRACING_SERVICE +#define PW_TRACE_BUFFER_SIZE_BYTES 1024 +#include "pw_trace/trace.h" +#include "pw_trace_tokenized/trace_rpc_service_nanopb.h" + +// Define trace time for pw_trace +PW_TRACE_TIME_TYPE pw_trace_GetTraceTime() +{ + return (PW_TRACE_TIME_TYPE) chip::System::SystemClock().GetMonotonicMicroseconds64().count(); +} +// Microsecond time source +size_t pw_trace_GetTraceTimeTicksPerSecond() +{ + return 1000000; +} + +#endif // defined(PW_RPC_TRACING_SERVICE) && PW_RPC_TRACING_SERVICE + +namespace chip { +namespace rpc { + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE +class BouffaloButton final : public Button +{ +public: + pw::Status Event(const chip_rpc_ButtonEvent & request, pw_protobuf_Empty & response) override + { + GetAppTask().ButtonEventHandler(request.idx, request.pushed); + return pw::OkStatus(); + } +}; +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +class BouffaloDevice final : public Device +{ +public: + pw::Status Reboot(const chip_rpc_RebootRequest & request, pw_protobuf_Empty & response) override + { + if (mRebootTimer) + { + return pw::Status::Unavailable(); + } + + TickType_t delayMs = kRebootTimerPeriodMs; + if (request.delay_ms != 0) + { + delayMs = request.delay_ms; + } + else + { + ChipLogProgress(NotSpecified, "Did not receive a reboot delay. Defaulting to %d ms", + static_cast(kRebootTimerPeriodMs)); + } + mRebootTimer = xTimerCreateStatic("Reboot", pdMS_TO_TICKS(delayMs), false, nullptr, RebootHandler, &mRebootTimerBuffer); + xTimerStart(mRebootTimer, 0); + return pw::OkStatus(); + } + + pw::Status FactoryReset(const pw_protobuf_Empty & request, pw_protobuf_Empty & response) override + { + if (mRebootTimer) + { + return pw::Status::Unavailable(); + } + + // Notice: reboot delay not configurable here + mRebootTimer = xTimerCreateStatic("FactoryReset", pdMS_TO_TICKS(kRebootTimerPeriodMs), false, nullptr, FactoryResetHandler, + &mRebootTimerBuffer); + xTimerStart(mRebootTimer, 0); + return pw::OkStatus(); + } + +private: + static constexpr uint32_t kRebootTimerPeriodMs = 1000; + TimerHandle_t mRebootTimer = 0; + StaticTimer_t mRebootTimerBuffer; + + static void RebootHandler(TimerHandle_t) { bl_sys_reset_por(); } + + static void FactoryResetHandler(TimerHandle_t) { DeviceLayer::ConfigurationMgr().InitiateFactoryReset(); } +}; +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +namespace { + +#define RPC_TASK_STACK_SIZE 1536 +#define RPC_TASK_PRIORITY 1 +static TaskHandle_t sRpcTaskHandle; +StaticTask_t sRpcTaskBuffer; +StackType_t sRpcTaskStack[RPC_TASK_STACK_SIZE]; + +#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 +BouffaloButton button_service; +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DESCRIPTOR_SERVICE) && PW_RPC_DESCRIPTOR_SERVICE +Descriptor descriptor_service; +#endif // defined(PW_RPC_DESCRIPTOR_SERVICE) && PW_RPC_DESCRIPTOR_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +BouffaloDevice 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 + +#if defined(PW_RPC_OTCLI_SERVICE) && PW_RPC_OTCLI_SERVICE +OtCli ot_cli_service; +#endif // defined(PW_RPC_OTCLI_SERVICE) && PW_RPC_OTCLI_SERVICE + +#if defined(PW_RPC_THREAD_SERVICE) && PW_RPC_THREAD_SERVICE +Thread thread; +#endif // defined(PW_RPC_THREAD_SERVICE) && PW_RPC_THREAD_SERVICE + +#if defined(PW_RPC_TRACING_SERVICE) && PW_RPC_TRACING_SERVICE +pw::trace::TraceService trace_service(pw::trace::GetTokenizedTracer()); +#endif // defined(PW_RPC_TRACING_SERVICE) && PW_RPC_TRACING_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_DESCRIPTOR_SERVICE) && PW_RPC_DESCRIPTOR_SERVICE + server.RegisterService(descriptor_service); +#endif // defined(PW_RPC_DESCRIPTOR_SERVICE) && PW_RPC_DESCRIPTOR_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 + +#if defined(PW_RPC_OTCLI_SERVICE) && PW_RPC_OTCLI_SERVICE + server.RegisterService(ot_cli_service); +#endif // defined(PW_RPC_OTCLI_SERVICE) && PW_RPC_OTCLI_SERVICE + +#if defined(PW_RPC_THREAD_SERVICE) && PW_RPC_THREAD_SERVICE + server.RegisterService(thread); +#endif // defined(PW_RPC_THREAD_SERVICE) && PW_RPC_THREAD_SERVICE + +#if defined(PW_RPC_TRACING_SERVICE) && PW_RPC_TRACING_SERVICE + server.RegisterService(trace_service); + PW_TRACE_SET_ENABLED(true); +#endif // defined(PW_RPC_TRACING_SERVICE) && PW_RPC_TRACING_SERVICE +} + +} // namespace + +void RunRpcService(void *) +{ + Start(RegisterServices, &logger_mutex); +} + +void Init() +{ + // Start App task. + sRpcTaskHandle = xTaskCreateStatic(RunRpcService, "RPC_TASK", ArraySize(sRpcTaskStack), nullptr, RPC_TASK_PRIORITY, + sRpcTaskStack, &sRpcTaskBuffer); +} + +} // namespace rpc +} // namespace chip diff --git a/examples/platform/qcc74x/common/rpc/Rpc.h b/examples/platform/qcc74x/common/rpc/Rpc.h new file mode 100644 index 00000000000000..dcb25862a9cd1e --- /dev/null +++ b/examples/platform/qcc74x/common/rpc/Rpc.h @@ -0,0 +1,30 @@ +/* + * + * Copyright (c) 2021 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/qcc74x/common/rpc/pw_sys_io/BUILD.gn b/examples/platform/qcc74x/common/rpc/pw_sys_io/BUILD.gn new file mode 100644 index 00000000000000..693b165c5c67f7 --- /dev/null +++ b/examples/platform/qcc74x/common/rpc/pw_sys_io/BUILD.gn @@ -0,0 +1,40 @@ +# 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") + +import("$dir_pw_build/target_types.gni") + +examples_plat_comon_dir = "${chip_root}/examples/platform/qcc74x/common" + +config("default_config") { + include_dirs = [ "public" ] +} + +pw_source_set("pw_sys_io") { + sources = [ "sys_io.cc" ] + + deps = [ + "$dir_pw_sys_io:default_putget_bytes", + "$dir_pw_sys_io:facade", + ] + + cflags = [ "-Wconversion" ] + + public_configs = [ ":default_config" ] + + include_dirs = [ "${examples_plat_comon_dir}/plat" ] + include_dirs += [ "${examples_plat_comon_dir}/rpc" ] +} diff --git a/examples/platform/qcc74x/common/rpc/pw_sys_io/public/pw_sys_io/init.h b/examples/platform/qcc74x/common/rpc/pw_sys_io/public/pw_sys_io/init.h new file mode 100644 index 00000000000000..f11f5e928f3e14 --- /dev/null +++ b/examples/platform/qcc74x/common/rpc/pw_sys_io/public/pw_sys_io/init.h @@ -0,0 +1,27 @@ +/* + * + * 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. + */ + +#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/qcc74x/common/rpc/pw_sys_io/sys_io.cc b/examples/platform/qcc74x/common/rpc/pw_sys_io/sys_io.cc new file mode 100644 index 00000000000000..5da8547c93155c --- /dev/null +++ b/examples/platform/qcc74x/common/rpc/pw_sys_io/sys_io.cc @@ -0,0 +1,60 @@ +/* + * + * 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. + */ + +#include +#include +#include +#include + +#include "pw_sys_io/sys_io.h" +#include "uart.h" + +namespace pw::sys_io { + +Status ReadByte(std::byte * dest) +{ + if (!dest) + return Status::InvalidArgument(); + + int16_t ret = uartRead(reinterpret_cast(dest), 1); + return ret <= 0 ? Status::FailedPrecondition() : OkStatus(); +} + +Status WriteByte(std::byte b) +{ + int16_t ret = uartWrite(reinterpret_cast(&b), 1); + + 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/platform/qcc74x/doc/chart/BL602-IoT-Matter_V1.png b/examples/platform/qcc74x/doc/chart/BL602-IoT-Matter_V1.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb4dc049f6ef5c9b58f6b27e24962a655c9f943 GIT binary patch literal 2355140 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

URZ%d?LPHaU%v}`vD=5*oG4I%3w>7-W7 zpXF1!7^!SeAjgq7QmOZlcceXe8mUBFkD|N3FX>R5)=Cka$3nLUOwB!vC$nlQ026yOeP5TtWhFj3fl8 z+>BYq7hQiAQu)o+OUxjWDcOV2zfUenRdY5kl{=7ATi~#jHD>HI$XH}-upBu)1-=$8 z+A&05cCK7#{0<$o>ivrIU8abFn3Sc~!74zQ826;=G$4*5f`q#V22r`U<9I&E{-ZGFJ>eU73F2L~G0KABfLlI;Vc$pskioz>Eh;3wMz(d8 z{^>Jlg8RPmm}6x)KvDbdVXKHLmRgLN-_+bA*Gc$;na@iAuuH}!9MMP`n$$Bi zvC`=7`s0M<=oIB=85lf~Ahyhk7d2PnATYNf(1^K!y>=(IG~8e&yR_~?Ci)|IHf8rs z!q+q|MOiwx=Rasy<#~Vv$>{4mO6ek-xcwR-S<(}d*L>|<2CmIJ4N{sp!8|qNp1^dg z{f7zse{0bU7!$;#)@?f&4Xb=^a4$E+xrSNai>C zNsy}}Y{dqATcEB%t1NeAX(Y)r(O1bhm!Z9k+hDa?;OS9>ezu*XW!Ft}XQm#YM~QM6 z+D4-^;vqo8BVDolD>#(Vkhj}6)YL!~BW}>>qq!T}aICGdVGUGJW~jydWF;l8e4_9) zB?<-Q2l9E)YBZUsV>9gAho)e!%3o3fB3~CdrAhh?F~hmbE@2eeHE;B|E52KEU1tpE z*9|#08i3Xx>4n!Mco~19dE!@7)XzQz2l3`w;#@2i*NvbONl9%X0^!qpd1yn3s^8>0(pPgW#x-N~C7-eP({HLc zyViLZnqbVkZk463b>%!wRWmMV@z=W8$B@ky%&SJ}frBsLD&lluDVM%wg#;nGk(zSi z>*Ob!NwWOY;7>J|8ImkYnlxB@U8p^>@o;(c#7m=eFw?j%>0pW;FDqA58sX~p2FS^U zF=rx6=uv0v?D9^0?R48U<=dHk6J+t0e&WWS7uoR01GH0E8sD{Ti#qxab zeUIWOfHcLqc~Zta>?_Z@YvKxgW!P10dgVO=1Ftt!h4A}@?3`e>ObwTnO7ex*xEp{# z&6<_KZ;kiN6AqNVtuNg}K-AynVaHv-rL^CCHC^Ea+lD-v3D#x|#t!uYy-lRhotF~I zI*r?5&YjN|D~}coX04kmlg<@#lo~JY7=1zV$5;LG6GqPZK!efMxK1ExR4=E*-hOIFxHKoztKOT0!+TGZq6r3{6*=}#qP z)Je6&aDoUXsQv=t`;_4bo2CVcFBw)90Dl_}up1DRD<9N@BIDKn9KpZfRT`~$%7S9V zi=(FHwLh&424|_%5^5v7mW)M;jP``qqce>QGh~>f3U#tt#Gp!R-4&P6{nOTfRm{&wwJ7j;d8Y`zau?*k>SXeCl5~UXGpK_mBd4Gl}?V8MF zToX^ia=)K$JaK3RWkrk^Gw-?FP%QVZTXMRtQV1q}mio|St-Ad2L!Zi6yDxS3Bg$Ca zT_Iso(1tK>F#*Hi^$<1Bq%EW6Ll zkg*w`%-t@KSPwOEJpt~)+*6YZdN`Dz()C{^h7)LQIvv9t(V0P)O=-H#@hY)=jtM(M=-5V zEBIz~@C7|1T?t!4#jhX9{i-88fB&=nKnnlTCV`zlW64Uo9Hnbh7GU5HKvHK&OBew% z8i}l8i@Z-ib5T&Q9@+V#bO^3gYAX!bVYt8zfR2~y+RYb0QtgRHj8)Sxzu)K>W5V*y zh;N1y<>60`cRGZ?L{=G>H|eWDLDS3UJ=IpI&)GE%0%zM}&k|r6t*%G&msZ=lBHBlT zuUcJ9@rH?;LgPw{LY!gANKBr(#)UT?YFYV$iQGH&=7>R-RA+4^%rzjToElo3EasMa z2mj%V%pBLFGZ{wJ#2fhY*0g$o)=^KhM^-aG;BPL^P8}#!+eyh@AHimb#(8D_YMDyYCC0udyv3i@} zU7@A#WA!_pt^=RpGJ;39`l}iC*6LJhncbxqm8>3QF8wk8H>^`|=?eY+Li=|Doq5XzRyAZcoT|wW`QSTg0OVJ9odLU!E=61m;>RXB z8<`}&|6}(HUt+}7E0wNiaPIF%4hkX0&|u`ksGgtlNtRX?ESHXUB@pp(`i!fQGRkLmq@}g4* zic59%-+SK7SuZCniUJ7BiCn#*r%xBa+GXm-t!)%fgV z@o>FS$Fo14qk-Cou0=^0hba{t#>3=J^BZ&ULqLf^ijq{l_w;Ouu7%4H*0ljYJ{arW z>PwuJ6eP);>UR!v7JTXjU5&SC0cICg zsNf(fU^qZuK}ms?6gn#hI|+8~%H-ly)808arMfq(s5hg43%ePvXQ)iXXeOxucf#K4 zW?@rOD79dc#NjHvZ z-luMHDu+b8Otz}?{(e4uQic!w7Q|LqdF1quF4cYMuzvwPwjgI#PBd2&env$&6(K7I zY36>fJwigQDBDSWZ#W=1Iq88~yrS{y4T)5|6CLRSvmP}c!qvER$h`f+J*V$lZsBuW zkr9lpghE2qcs|=@I%l?4ZgrHJP~7+iZM(Ztg;|@{wC6gLUORTuf94JGsUZYk3y!ki z+^XpL&&QkeXJu#;$MS7T1kTO7N>v?y&hS;kV^7;vRUnG1uBT$#!wPTW+HNo9t@UEW zR>Wr7C*<3DAXuv6w)N`3z1w;jVfyh<#Y)|8U!W!r)<>Eiy|2vi5gQ38$Vq5=;XH49 zTa$u#vj;2iavJ%wL5FBDpb_oxz+vK3bIItJS_1|NWr}hntl58N)@Pvf8^B~u5%-Nn z>B|>y@Zn@`-J6+KV+m7UXw;PD!3WKR9B zY5_To=Kg@$vtR(ml9>A+ezoP_IUj0W{C+7}Z+Z5X1cb+uge#4;jl;2j$59{W}40P4O)=b~q zs{R5llK+N_w2-RCy?m)^V4&MqrW6w;Rx2rCT`=T!fSfrhXZd>8c29cHbZPG7U zX{MX}CELqH1R~|HyTy*RGMrwmz|L&9CU5!QI-qy%EAt^W!;AtxC^y2(vBlJt1e`bdr%2yHanXd!$jqgUWe|cdvbx_>1tLP4)I!6=y|&f8 zQ5N`_+p(bYX|EQuH0*NPeRUDXhWZs_>o5Hmtvx3jLPt$ng09cj%ntCyNq`Z`AbR4^ zDak>ZqQ>op>qD&ucjsH1Q_)D7cc^L1Kjq1Ve@RCs@J7%7)B<>h8X-m_v3aKIfh0{; zbty2ILFou)>aO;m4es0R!~oqX&mY5o_{*Y}@`v;cI%S1jQcRk%{l#-A#PtYY@S%RX z=>!vv5c9GdDVtcE)MQF>Sp6`+3{7@RsVa*$?!RW^*aDltlVLASIsBj6v5rK_)=E%T z=t^J*-Sf&12zxQI1Dq{W`Iu!&-J69r$mvD`V?tF>q6%@g;6Wi2?9~&n<%p9Xe=$`5 z1`jZza6{EY&^~?wT&+ZULIfsUXCn3cVdRDMx_LlzkaT+I7oS_>PJZsD zoAnsD#!MayvTAnv(%&{Vge%FCSbR8i?gUK#B#oTUIXuvt?H-cW21-!dnT=>nOqvWFWo9m>ldS~W37(k(*e#6DX z9#PJ+v*p+3eZellS$}aGen{22q4f_s{rmO5yeyq(Boh!5l2kO9xUUBmxw;cN%*{p7 z=kC==4pEw3hLy`oF`lZtx74*sX*Pi$s`2C09E5vI6E9UryG84YsAndt8;1FfSKepU zsJT;i;H6#vma`PmQ&g`*Be?dX6H6odTpHt`HPKjerh<|ky5Q<+1`?M zt$aaYn?g|kzNS=#@$jT0Zao$O|4Mpc9QH1l{R=}^L-C+`YMk+U8Bb_Bt|Ik~=Bx!1 zaXqER1+@Ook$ZIYbbe(HnsdFyqlFQn0 zV5{X!Pll}qj&}2NSe}cwj;8r->iNPi)64idXV5{0NT-&{1q#PlbYe=TUArAPvz<+ z{_FTK{E78r!BBzYhAaHS?nV6N%i{$(^V)Y62bad%>(KQ>aF)(IH_(HYEA^K`(}UfZ zK3hGaun&*)8_}o?1qH?1@%moXfsQ?NDEEkH67rteVa{EF4_5jLl=u7fl_s+eg}GQb zX((4FH)GVT$NYSz&mT`$Zkg2Mq3d2ARe9^@gEE=5C$;6rm5_kina#_?_j5V6Rvt@F zSv4BR5O2#``2%#KD*o=#xfTci)mIq#Lz{XfG9lwYUQI|niJ_D)_&xK?6Ut$ds;scv z-inuEI~?|oC#R+!et_)AB<#N^6f={VgTO#I!>9L~ZZ`oli--D6Y3TZLAumtim7UegM8#ErRUoZEd2Y?$t*g~bM#H2*2oW*%hp|@rG@3=oqlMG%DOfld( zu(7eXa}utJ3}KPSlT-Tt$W%XvESgMG$nmsxEA3p@m);iS;C_k}mig4lDXWRd7mS!F zXGi#&h*IZ}$2*}|TW&J}%WT6jJ#6TP0mHw?AbDUEhO%dkK%38LF404aCzKK38PN>^Di?pA1U!tOGD@ zjg>xAHwqn4Q)HhUG?ABq^ug?RHBb>RDi~G^`Z#Gn^KG#DGOXV^f|pl!GM;>jc%C>| zU>cig`qbvFHov_Y-96b_^)U&U$!hkzt!*6Q6T^U7UA#!D6Mn1}$|n6AJFydbAw`5^Y(pZ0Gi#yW|tD68+GgCRrD{QSP= z2Cuisq@a5G9=yZMa@Uu=7!ds|uIVn*TEQrKByn@`mcECTscA>3#zXD;58^@NUpPT{ zsKBxQ{4>yb$|UbUl&=>8Ne6%T{x#yhEMd2D+O?QboSnuVL5xlYML z>QedCla`#9#vm01!bm~f^cv0>sYip4(ia-xy6lBgJUVYgdPIexH|@Wl$rmsyX?mHp z(Xoy72e&@fBKO*`TVkWm&t0*xP4tqcv8QgT&@`}+=J#}7p6Gre|5l1OK|6ik4vzDl zc&PcdhIW}uKU7lxtGMW+hyV(8e|>$!6PVIFsf|asn<~2FPw&R<);@m=kv&YOXa00q zxuWJanaG0_LU>rIOgi5f`9dVZ>Ial?Mb!Ym)PLPjco*rlx_F#uL=*lSDqdp|v4OZ=RUj z;*~r*sX~iRl+tQ1f*9%Rzi#}{)}nnoPNS7Fy$|=RUzn_G?HvA9%g29Ep15P~xjuO= zs97t@g&RM*(TYEi4;jeeGOT?88O*=!<&lHohGppVB_+xKod?J5IQ&z!a!}osNBi{! z_^wZ!Fqn?y;ynZ~12@M4SaeeK22aPbgT4H%uD^>X+g??sK9EP7&GD|;gd)-z{J5;4H8yi-K-;j5F1@<1iDGdn1 ze(|Gy*TZM|BK=o#7%uZ3FJ+`&{S&b<9*zNpS;3`bozQZ_ALcbCNLQ7SgPO1R(B>5< zVq&8t8=O40YQY&Ox#cO-2MmECx6TH{Jlp)->|p{0vFeffz9U`6{Hp|A$;N4NVPu&$ z;B&8IVn9SiS%Ex~$lkV@4qKo0;m$%>E7J<(RD?ijjErVntV-;*4}yoheJroJ3IB00 zQ1?-`l?rm|wqlGIi8d_mR=0F^siG(isJT`zOX2lR&sSqGnw~cDrW7MX#@zyI%kn!<1j!&lYwTyNF2=(KN3v5j*%ZNNcM`^mkZ}Pz zJPcYqiF`@Z;wy*l>q#OECz|}gGv^y#S-3+*q-#?V*dIYxll@RGIBUoW*X#Qg+=$yb zSETW)2x-gdFnz86@X_LlU$lmgGncmomFXv%t)i3BfoW`IiXsu?$^L>pJz3AOr)}iUk8h>mr8Zv(KB!_HS5XPe zPzyZEL}%7mv%CxT>1vj48ULZ0U#D+n*&_14mu!FIbMp%k`K!k9ADZufcD}lHY`=77 zZ#nsb8$W~V{`@2-isKJqBFg9WOi%1E!O`x!{wq6*rRX!yy{06S)%#R3^aKQoP?%PY z@4v>@f9r6eQy^ZK>X9Nf<)C?1HB=ZfkiqxQ8cDS zh>WYd)%$Le&q`_6a7SLjB%p2N^|g1})(3OBW@xNYiCy^pRp}0CWB7*k`)YFb#()*) z@$YOGP=fKPak3Y`Q-2_HG6P$poDyP@+m2yd9;7g9e)1|J zDr?qeW-RM4rmUW5_RBXx5E>d9&BB$t%N)6tbdz*ZCx+40Eo?6BEp^E>`aR~Z+h!2v z>{6DmW~ff9UMGFE;2!GvH$s4o?#I>g)N(rMuy-b^k zRN3h1Px5^lJzs%(qIoN;vG#qNgmF>qUGnp5sKu$z7xGY%O zLHLn@I)sQ|?ohGxqPd;4m9JkU_{`WlQisNZT zvKGD3baaTU`l^Uj3Y!?WY=SD6I!Yld$GGZc#n(@Zh80VNdpvnMp!88&Ri$Q<8`P{E zQOu`#H6wEwA{xB%VuY;W{0^NQLd+gc*9w!fy%vk-QVc7|`h8@?0$)T%@AUKRWNM;2cK zp}2#okvKJ4?f5_qhzHb*11<{|CN7^o^8f$mB>kK6wVRg%UntTAb}6!kiDGBd>u-;@ z?Q1;4706oGgFcg-F&ICUnd7bPIKXzi7?XBStyZkz$aPW6_n!*no z^A~0GgHE#hg>NrQS+|LX-@0oCGFJtwU#IBLr{)TFT&P(c*)hPM8IlK?LvDL9MKUjr zb!X?K?r4Hk1&!a%(+9qDGMXkR9t|N;udRITLyjI2^DU8HCf;F!mPNQfW4w}XMU(2# z+w#$LpMK>c)Z=s-CW(jKCULsFCSlcTQpvcH>sN3FP375A6VN9kXg!!&-98fs6=GuY zc_O|&Ro!`tI{oh%U1vr*V%LK>feE^W;+fI)TjaXEqZ6*3|JFiK1 z?&&{YtpBzquu%BJs)uK@;o=CsTdY+UB9F}42PQOX8048iM7J`7J{w#3qBlJisjGFo z-kpyNS53=QKB-aYJ^31crTv;|DD|bMgDD><2%SqW1u)RvZVFiT3;yzfYQfL^3*-sD zD_*3I;NOAt4&aJK7v7Y?#VF3q&(G$a=O%>$RnbNG2WYV&wSxRx9UxOlMsvZ0SFWqX zOzjs$dE0AF)(NDec~vokXzD^+vpnG(xmpYW)&^@?g7i^(A#Vfv=v3;d1}&eyhlP4F zpRF{I{7PZ?B@?w@7;58^rW3K`g6O-zZ%Ln+yZTUG5nuKjymK`s1S@%jNpt6wlw)UW zTlw`u>N>7x>JZsDr9Z_PG}6us zJo3>=)KWJJy~a`8-awf0E>Qlbmy-Rr(x`xrwNdZZuiLQa%eB{yZd(=zFV|{r3J9#( zn3+jun$+-QURvkr=4VB8is3Jaf+v|3WwUXn>AzX4<9}&q%5i-tay8EB9~lf!&i~8} zSEZg3|BkC=!+m`j4eR@Q*-~6$xrwH{+mmmR6*88<|3QnbMss-Jq7KUk1y5V3Hyqz( z5xE*;Q7*p4*J;pN`t=RiJ2$2~2d|4x!xn(Ak8l|mdcMHrSa69=yBblCKm~Qz-j?*$ zBB1=veKGyNSO*86B;OuWri|RG*B;DJi;K!HSiiFMYN_5gyEdLd3}RLoTXseN7JE?b zqT$M^lea{581nJ&s?y86hL}g&$*5fa!Dqp?X(?Q(^Rb;=-j%+o!JfL_mVybt+^6_c zijXqf;&ILzc!LQ0ouKO!Xirh}jm;bKgF53_pwqvej|;=XT<-!Eud(-E%Ns@@ghd(FyI*WYP$m)&P*VO(#Zvia!fCxM@zjCRs#=&)#jQl~{& zceLBTReSn&BsrBFq5F%jd5^IH@yk25>x&tHXx)Ja(D5;rbIf5+`xS z7KxwV#9cBp41<$@RF(YcfG1uOx|@i3plEf~3X(in8zQjU5Y_K$6tE?Fd?^!1UEz#N z@AzK$k?GZYZm>y=ZUPkW2f_I0)AeU^~Ix6_3@dl2$0qq>L;qnCT5h^oJ! zzpnU(3i8LBwaa~c&E6!Ru46u5qaKu^%=r(2pX8NBpN{+0cnq=B6$kF9jh>J7gTG-U z?%)4a1GpHzTEBi@+#m3vc38#E4_t^5!_pOB!BlG03pht+M= z=8K9vVw|t&kX-t4q#tsAtwbfc**x5DZDmzr)k|MsROfSZ$U98kckb4Td(pkeZ=0hK z+tJUBxLFn?Nd5(;ZicM$)AzQxJ<_OsnXAJ}?n#1A=NF_X>&nENryHLaR`w{i)(frv zMXcZ+DBYH2^okibmy&;cTjYEum11w64BAHHs9YRejH~@QnYk--D5mrbMYp(^uzmEQ z^RZN@k_A2FQkT1wbtMjj4X*hdnKI}TY-k0E+`a>8fp+H&Q6hh5MGdSj$Tnp6)x^74 znW=0PBaJ_P)pFf7;m%d=H<3bnO+sy>nOc$hiO!f-&oISlZ1i(;5Hfb?&s?@zR8+sk z20U8i!Y?G3(xbopnE_`vTLF~!#*h%D&#I85W}6KYN*rxoA^{$W@>p7Pew z%Q@(aEN*Z)Pf)seu_j-BMQ8H9h-A(XzWa829;Dm-nLv&pb`N>Tya&c#((hl|8>y+^ ze-camNk~`v-lFr%Cckc{5ERXb&ky;b>e!?FJ(XqRE}Y4#b#%AU$#L4-VRtvnEfP9< zK6fgPn;)L&N&kl#*1|x!bB9`Twf*%R8Moe2-o9HPdv|!>1c+0Yr?^^ zClXy~(!@w>;zW^p_(|sL*}(&uk0Y>g*x@v0>-zCxfXr2pUX}g*)5RlPoOXwa-)_bM zQlwGf{@EJNH~@V**$>HIhneiq8xlSPVN|K7A=Wd5vl%Kf^zrX}lhAur4t%hahUwPw z)RQ&Ksiz*(!sr?I>8)>blT?x?D<0^x1E%LA{jZM+(`WGGEvA!!NVMH($%Q1|hTHwM z+e(teZtfwOE9f~OEwh=ge#3R;0Pve;0b0^2RSPftFEaUuOzRw^`-fpD-4vkc_GY`w z^@3GDZ%aB;3Y?qYqv#wAPRuGEE&j@kq|3Ne82dvzBP&&h+E{sYXfE}uav=DUT+oD*0-gsDC5a}B^Od_Mb(B&GF>$Y7}peU77n~KtPJX6}p z#}!ygrlkgZF+!asR7u~O(4u;4d^h!{vM~WesH|9C9R16w=agaF+Erbt$#;G9??qi; zq4+Fq#Es2tXnZ!VIKh0nmrGU*GxoPZ#9f@-OkgYsI2uIn!NY*+#5Rulm}F0Nl@RjW zM?`qFsHx(I9%T+-54os`w}g0HFA6;~2oBvN@({*iwOvEu)2+;x`#T`iYVB^f3$CkuVJ1a=bxE8^Rx(6$1h!ax??r zmR#q)PM?f;{KW?Nt0?haSP62hh{KrEs}r8KYdwZhM0^ty;^epWCbxqJ$v=j)Cbf&P zxoG>Q*)MY*Jy*~wmk;;9bp6*IyS`W?X>3fwz#D%Jv@A@B^|B{jhzhOzEh0wZFF(R zkElADr~YZf>R++kM|^EyqaC5KYs=!njrb&IPS~Ra6@C#Bbo8B`!#&lN7e`5zWUeRT z>vp9zHWUV4$xp{#_!nsYj`Fn2Nxb%%2jbA>2+5`)6t~N$PV#gJOy(>eUl8xt2;;l_ z_373lO20v!qCNihmSslmP)nv(A!Q@KhSS2sPNpwJee)S@aZ^a<$Xu2HnRI|G`&i+P zr*;fK`nkRgR;}@Q>aK|Iom7a5tsCi}MeTY+1Qbsp(+_MOf=t96wmnbOc(BNN9lV0g z&|S(f&CREgw?2*9*!fc3o{v5oKBAxhgy?AEc=kVha~bPy6r%_p^9gX<ReuLR# zc0i59AZtcf3CKsO{oNtQJ~3>jIhFwkatSE*UF81ELkO+Iw{x4EIvtOZOTQ0IdVJ@k zmrKmS*VlKmu8GF)tV?~a$9+;GImsk@)V7nBF6rcL!|}Eyp*)$mHr60F@^$&OO`xp7T$p2nMS{!oSNThvolEDgV)hf2j zk9tte6nQy&a3s1S6MR36`2$Gl?FCa+no?*P>a}2q^z@O+bQ8o@mG-Q{C+kv<4iN>1 zv6Q^n(}b^jqh!!nGK$x4dMt!zr7f9URgpr&|5ROQ$H1FchFU!ep2zFaVmI$Ae9h|s zqnEed%-RB(Sj*00E0#xzlI|=TYX14q*S2YGPa@PTeWAGV=);#+BE1;I6^b#mLrYNU zp+Un2>%HVv7o`TY<+rHhH;~#lMq(l=hf!V?6(}Y6uz56oXeryc+)Hwg0V^ilCI1e} z{{OT97E$n#NYMuFTMPz!oy7dcI5q;Zonw8^x2SlazrdG6sR@!>(ikA=_w=rl2jb{t zF}c-4@)_E7k;r3AYs*K7KTW(FMoxIKqayJ4SlFVidcD%X@t{+Zx8_ajKmFtE^g%W8 z-dPav;WKL2HFy)|0B2^^j^f&*f9{qU4BZzxZyvW!pGjd(E30PjxldnXeqqscxFj-9 z!gTb~as43}>xmbTkqH|c8&kmj`Iyp(1so=Eg$KJxboP9{$xh;uEA)vZ4lquh2E2}D zetxQ6M;Vm*o%t4+H2HRUH=Nixw60f8Uk9xa`at{=62Z!k8K>&`+P@{)KO}87@twc7 z1;iXS{&c01*}WkRL>J7uPoKK2O*b(;c_HFMG?)%L+xKn~sXnFk-J(5bg2r5qt2?CZ z+icnWeTYM+InV#AqkN;r-#_wY#HglE4zzj)BqRt}wVUhZlRmx|nV-zIqJQgBz1eGq z_a9!wYSm}=xIz-Lm&>UWo@Lx@pLe7-mVcRBTpZOP|2u*YlJnL766puk$X$82yhVC= z@sYQ(u`O~0t$wc@NmD}B2fDu1^NY`;+SYfKv?TeXWqOGYyLp%7i#jiOc8{LrNo`ox zcr0$_k2(W8N8$UQZFA!zd06M^*$J@JIEp#4;n7sG};eJMRWd)jQj&3GL%v`<|Qj^fF5yL zkc!x@56do6B+{WkDW6wrTjZ6AQ&`XCT3*FBd#Br_Cik$=9)GVBgSqd%m{qsJn)t_k zuj+8KlcbR@dcjqDjCSj#K1SrQ=a*v*4ffZER#B!l~W*%%3`Qm!#FcpS+#q#e5M5+H#?EZmkbVLwMfsYwKbli z<5{M5#95n(Y4134chI(CRC>@dV$RuKQwflU2WsZZNiJJ+18rhtj$3!@ zx*-NtfHA74(vG-PABW5$7nf1LnC@5ap@WWoKgP42{?n^Z!pAE@svL*dfB*i?GuGiW zut#V9ZfvQy7l$e^3dTyE9eUu2(xo+2>p&W)tyq!TT%Ojj?Lap8*T_fZ6f2SSW79Ql z!GvSU1eGf`$|hRD5?=L%M^M6uxdD&a+r(kATMM1Lhpcil%mamy4GUfn(QZ+gqiPZN zr7}$(=vx)74w7Fl+nE=@TZLgOA@J~;A@K8vc+A&OI!y`f~%d_)ds4hqSTdz+6R8sA~Ph;oJoe>Xxa)X*wj zttg2craOCjEGcfGaMJp!#@3__n~q5;BbQ&zM=PujQTPXgCDjbVX6dV&8HHOZHtz4S3LG(bZM}SM=`~>JDi_$0Vy7JK+);6;`12@ z9y|no6egws0?##)YwF9LkIAz3~m7#-HwM*h~#fg9#gKt80&Keas)^k@?i3H zKQM5Bb8md5@EV*}N>^yvVLCeiYn?o{ANR-C%muml07Y){{?N6iI}GA3m#2^0MF21Q zpAKVEmsz;`m-T4>=Uo1u|5EroDa7`Gd3g`c^tvR@K!oU5deSi+{RV6p^f6j0k2Kg?G@=&wl**I75dfwoGEW+?{3M~X47hs zJ;w&?Rk$7^AC~f%14Cqcvr=g$bM;K>B|hu^OO8C7S;z6z0<6P$Y9UrmMoW>CH2sNQ zP^xAV8*h+5iuysQFhBo$_ZzNSOKOp%$mSpT2QoPKcxGzc>wc%l3M~2=KXjG*BSISR z#GjtB9MB~QA1=mWoWQ#m)BeS&c*%YA9UhIZdKC~MC8($K7mYgI2G$d#Ra0KvsYip# z-(0ymguU&@!k9dc?kJn+Iew!4$vaW+xk+500bI6y9SxOT@^#}V0)x9eMW#F+oGv2H z?t(UtY3o5bDQ?iCH6R-x7`1guXrPMfA_bK=&ObZn`hlVWw2f~kL_*GduR-O^D_2C; zLcNLKP|`cVR1Zjt*jv>#-&-B|9AD{qX;Bhu$U<#DR%WTc-Y0S9<8$haQ0|}{Nqjq9 zd5!6?r-}52<_*6+RR`Psotl1M8pIK?i5!#+M7DdZ_n$DlXCC!E_{8)JNT#)!bnce| zwcs@n?`A)H3~1}lb|8p`r{>oFK1u)HD}E$5wWEy$xT28HpD%e>|50bxFxGIQ24SU+ zFh9rBZnIN|cRpbKFiah+W-)Xzq@ovIG1LrgQNbO>ifVUCT;ozV(aN#XhcTypfN+(z z2@PZyX;Hp(ZQ9m{=p*HeN7MC9Xs(tUX5yzJle14|9U;odB@eONdtC5b8i|~dOf3Uj(~uWooETXjoA~fZFrh74bQj>OOG7uFgQ}xv_HXLWMd~ zji_phBdJ$PvT}X}#Ha#%UxryTB+1v*;fBfd^h>U3&x4f9vnQ z$J1rfsRsfiE6$`-ikzcYgGSGO*-5|Y^PDCQpi_`D`P`_Qb~6yi)T`WFn+;&%{f2x= z4stFpZ`*q9gb~JjQh`jZtjPF0$9mpP(KeP8xDhv+nEVcBsdDCZ8;(Y_{F)lpk8nf% z90(u5^9bT(r*5w0XAgFxDBSRv&;TZ{bJpd4#mVw>>5uBZ$Mc}~9MUU_2MOp#8oyI( zzgTIJb{=m`Z0mjCnIj>;o;eSRGifYva}AoZ3G-BOJl<*|O86{)Vj=~-HOlM{I~_5Z z#h>mwTmb2wZc>>8>DveERrQw;jr-$E_$Y^(L#z4~wC^<$Lq92BT%m)JPN9FedF$Y+ z@ZUG({8gvma_!C90iJ^UBsavkE_?0l>{zbq+^I!DW=JxsGpysSO!KbwfF-KEP! z0QmTKhOr+&@ts;2$G#?3+O^^5Xrd~GfIE34AM?ITQp&&8xQ{HJg*f;=0-5e53VTdUOn(F3yG~z#@nb|4 zo5<{8o(HQ5lExyE-Enb^(Z15_6+>jgc3LOAsGQV%ARg|PjMHMw`M*P{i6bQ`34r*F z6~s=HlRMJHgnpiU9l6fZ5C5$%)w#-acI##<^ix-+?nUDlW=cV!k#>My=Z%mY+BJ<2 zf1y|_InVo0Q?d&iVB^WU(1jKnaZQS4$XZNwX&?{T*(~a?D0|;!k+z&4 z1LB;Ei`}+WR6ly7q5Q12Qv6Vr!+J&h3!$99{rVE~FzU0A!qBy)cZtyt;C$>-kBQrw zNQmZ+<~qpqnu_%W*mj((N+<3+A%XDTJ?(i413OW1_0M2VY>};inx9TpM8E9?)nbF{ zY=$Od+R)gZg`L>V9GT)v3aSk<$jW_RKIp>n&0Z}xJqqeMnH z6PpnJK1jsl8x4;8IvtpueD4d&|3{OX>aa`kl#!I43Kw1ALPua0EX z&G8^BEmH0;D9Z3d|ME@kTyqb#L9jvb^v`$01dbxw&8+HDlJN z`)gwX!6NqZBCD~DdTE~vw>&~rfi<;!>&ax+_NqtbpV(YNt5*o0?%7anHf z*?Mmi$o{$j!W`r`1(o-UaqQ-hR`%%d3sZsYU%H+bFwvcY^4PcKggyz!`Tg~k1ASd% zeIMWDKP+n)B=>y>oq3ec3C^TLr0KBNrG7p;32^XaN%lnPAH)C=Fg{1lh}O#c5+!h~ zn$H~5>4mdd8+GpSv#Ad0N{jPyMEhm1u3!Lq79g?@#vwM~EjUjF}cQqo% zX_R&IaYfi_8ka8@Q`zoSQXi|_CUip$Ojy-|njfTR|2Ar9Co${lY{*s&TCZrZZTsTg zb;$OlYZwj7B;J-)r0%xWuRyjV=|t9h#K?0NigjKmVdAo)b+VuE#?EB72~LG&c7OJC ze24k0Z`b*8@EJN2s~sk*oPm@?C0a{496f@c?K?yIGbNo{akNow+pdeX6&Te$aU8yl z*y}Bd7Qs(@xtW7w`biB4fq?UA}IyEIKr3 z{O_pQIpDlG`{`i&zRAxvT07D6;l~5-xC5aw9m>vXtEGn|oCg4tP8z{P?>pbb>BZiCWzBm0f z41PTC(FNo>c1Z4*0wBn|U!3^%_&n{g6y;6WFlxU{!O{^lP|ExMZxud&)j=*hsP|-A z9fZ%gOv0nGR9aGU<8*T{e!-k>J}R1heb3!Ao)e4+W{!GY7b~lLBawZsVz4|rYYF1U z>ZlPbNY+j-iq~Y-H3C446kM(7PHCQ+G9Xi+d=KgRL6c^|6C43X%raCibZK(B zeE#ucs1Yh>#`W|r-Dvt*1@`3?r`Gg{;#{?R=BD+(DPPf>CM=Iqce#X$dltm5RxHOv zvARxkev_JWjbUJ4-W9CLDL`0_`$S`%rHn*Au8SWiQjyE+Yy46Xiw}bO1Cmyv#ZI}7qhHAsd}6*lF$Kr;}~u-JRj^@`=jzL#!rI( z!}7^>YLs{r>^<-R_T;$#4^BGW3vitI`E=A{B|F1bBtfMF`1F8TsE5y_te2@CXLR5v zvzz8}oYC)jo!4(WiX7cL;)I!P{RG3DH4?yPYj=vhw8dp4B$6hCGaC;NJ&(JX&K$*k z+eUOV?y2gkRlIxr4<%!-(&6=6!oHRQP>}ruhIO~~@z3rJJ1L;|=e^P4w0HXV30K<9 z=2rvj5$}LhDl>eF`%+_E_zuvl9ZuUFW&j50EG%A2nSHOHQ3Z(Agh_Ad4@m)=s>=I(SZv5C^ARIg(%J&ftjB;?e4F&n!0+4&ir?zlR8)Z)d?QgCTP17nuSt}22^j;{dH)t z)wVPj%%~Q%12r#dLc;{@3Xr>ZBD&yhQWSjrlplbOP$|K9|wQcccK~# z<|NI0c>fQU?HB*!o8jGTWhldyU6~X;-Qo=1S~US>*nI@wCmz@cb?T&6AIwb4&!Jbr zi2QwZDjCWR#8WTuzLY;Zn&Q)UU3MccJn%Jm$yU1p*Xoyr755Ng!*j4XG_QIbRs5_% z2Q*V(Sho7t>{?zkMZTFVGD7oVlLW0CIco48t5I8}IvV7P-$lpZ7TTm0O6fCh(!8 zL^Qg~Gk{wR{{c?ijAJ_G2hDf`*0uLUEK6Th=E6qN}lVb^sbsPf1VFo#*Z#Eqtq0ND9P zP=P-?RcMoxJxk~`SC@fz;eY~l{of1Cf_45x{ZMtw8NJrCrb$pv{)3uNNNLpsa> z&dC4O!;@maXR}v2ZB--aauzaTOJa*)ovel&8V7aX`G|GQCy$$`q0wLB^E=OyTedr z_1CL!(n_`6r!WAw#8#-0mE6{lqk#0Pugzv%?8%3P0D32vN#KvILt5#dy|#m>t?q2Y z1xoq4jCe7+Qup?fmtC*gO%9*#9bd&!Mkcb2+#Sm(E$Xrm^eA$f${4r|NE84`BbSs` zEpiZpG7&W-mxc4)6Ft|5b=i|qCrYSn$;mdq1%70cgJPVO`US!SM-)^abYMvrnmHLL4UHBKDYaa=@IHyXd45f989;^3J5|0b$}0zD3KpupM()!ozKxqLlyM_pZaBUDU)aMMM#|@m z?JW_XRwgY3Wv2=Jpl3$pAsr=3`{6>_H=uVEsF)P)fCNl<4d3R=_!s_)ijCI|c7?uF z)MOYh8y50(C><`+p@&WrYWP4#1yk4ji;^GT*v`qw3U9lhyLRyy2j;VZUDkc|(=$x>7`$G1Xy#+T&p~D%YzO z=e67L939$n6!xswIujhz)zC4&_5DjC4^u2rt2oeJVqNS91rTc(EZa1{MF+@{3!i(4 z9Hbk)DCeBX6Fðy89C3L+v?U$zo&|pw9-Dh5BlBTpMzlX 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

5{IqR({d;j~>1tDd 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

-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 z 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

#uTe%rh;#BN|3uGbN%z zj9mXSG0}T-zW0)xoGzA%gJU8*Dhj;d{@d=TR1A1JA8F5@`%$9Cnw9{c3O48zM+R62 zz|%BX59~$LpvF7eyF9c;A}Fn03oBxrnA^cZx-Sb3KB!r~#GYh`EbbVXvfu)6neO}n z!TAj}1ROB+hVt|?3>C@N12Av>2BE@zhW>`d@8k=<8X)pkuj}Fj+RxP(VU;upHIVs| zW8QD--64q)RbPK^q#O=zq@_6#nm>(0JfMqN?ys_vZ488QgzOMdsAkGN5*b0=nS+HN z-#+Z*QEYNmdM@@3(yLYI5gfFucuVe=LB0zeoea6}RtiTb6;Il?bu>xyA)Jwc@T&YF zauSkt`K3ELa6LmnfT`ETMAlXdg>K`<(v~N=D=BXm848wDn{<(uu9ld9X;y6m^m9SH zwr|GQ(~EsxZw-|FDJQ6R@YPvT#~`-PnI0MIlEbE;omDzYWW;Itk)C|9`bu+>P)btU z3g6l1!69A8^^x1_2WJsoN1Y(#+w1Zq!7NkZ^U$G8+Xl_MTdtY@(Vo)10;uokvx(v1 zk<+=-&OxpjpQsD8m6xJ8feST{kj8zHt|?gMX1T2wnM4465VYgs;BiArWXZF~sq{DJ zr-u#aN`8Zuc9cV8{nM=xF#JCR?!XSXU6<_XAzGuFKpE%pm-5kPGk8Wpi?)}OZ#$O$ z>D`o)!Sme*sed0*AO=H$dO6g-|={;85ueB~Cjzxu4?@L#P+NcRa`U$hfxIry(#Rf?^9tuI`$osC%0A%i=!yn&? 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�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%0Do)2UZb^m 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 z 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 C6-k#ZFC$+Ni$tH87m7Jp>7V}1H^z-`<@A!+ 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%0DxW_T2fM>2gMQR-8 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