diff --git a/.clang-format b/.clang-format
index e4165cefbb4f1d..87eaf54798cdaf 100644
--- a/.clang-format
+++ b/.clang-format
@@ -230,4 +230,11 @@ StatementMacros:
- QT_REQUIRE_VERSION
TabWidth: 8
UseTab: Never
+---
+Language: JavaScript
+BasedOnStyle: WebKit
+AlignConsecutiveAssignments: true
+AllowShortFunctionsOnASingleLine: None
+IndentWidth: 2
+ColumnLimit: 132
...
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 5b41c4d77ea6ba..489a5596bdda70 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -54,3 +54,5 @@ RUN echo "PATH=/home/$USERNAME/bin:${PATH}" >> /home/$USERNAME/.bashrc
# $USERNAME needs to own the esp-idf and tools for the examples to build
RUN chown -R $USERNAME:$USERNAME /opt/espressif/esp-idf
RUN chown -R $USERNAME:$USERNAME /opt/espressif/tools
+# $USERNAME needs to own west configuration to build nRF Connect examples
+RUN chown -R $USERNAME:$USERNAME /opt/NordicSemiconductor/nrfconnect/.west
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 44036a91d8abbe..1a5a7e8dcb7fb0 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -13,7 +13,7 @@
"dockerfile": "Dockerfile",
"args": {
// "BUILD_VERSION": "$(cat integrations/docker/images/chip-build/version)" // trying to get this to work
- "BUILD_VERSION": "0.4.11"
+ "BUILD_VERSION": "0.4.18"
}
},
"remoteUser": "vscode",
diff --git a/.github/stale.yml b/.github/stale.yml
new file mode 100644
index 00000000000000..4dabd5c4aff9cf
--- /dev/null
+++ b/.github/stale.yml
@@ -0,0 +1,42 @@
+# Stale config for https://github.com/marketplace/stale
+# Issues with these labels will never be considered stale
+exemptLabels:
+ - security
+ - blocked
+
+# Label to use when marking a pull request as stale
+staleLabel: stale
+
+pulls:
+ # Number of days of inactivity before a pull request becomes stale
+ daysUntilStale: 7
+
+ # Number of days of inactivity before a stale pull request is closed
+ daysUntilClose: 7
+
+ # Comment to post when marking a pull request as stale. Set to `false` to disable
+ markComment: >
+ This pull request has been automatically marked as stale because it has not had
+ recent activity. It will be closed if no further activity occurs.
+
+ # Comment to post when closing a stale pull request. Set to `false` to disable
+ closeComment: >
+ This stale pull request has been automatically closed.
+ Thank you for your contributions.
+
+issues:
+ # Number of days of inactivity before a issue becomes stale
+ daysUntilStale: 365
+
+ # Number of days of inactivity before a stale issue is closed
+ daysUntilClose: 7
+
+ # Comment to post when marking a issue as stale. Set to `false` to disable
+ markComment: >
+ This issue has been automatically marked as stale because it has not had
+ recent activity. It will be closed if no further activity occurs.
+
+ # Comment to post when closing a stale issue. Set to `false` to disable
+ closeComment: >
+ This stale issue has been automatically closed.
+ Thank you for your contributions.
diff --git a/.github/workflows/android.yaml b/.github/workflows/android.yaml
index beb1bfc0c14ca4..9b4c27c8e3d887 100644
--- a/.github/workflows/android.yaml
+++ b/.github/workflows/android.yaml
@@ -34,7 +34,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: connectedhomeip/chip-build-android:0.4.13
+ image: connectedhomeip/chip-build-android:0.4.16
volumes:
- "/tmp/log_output:/tmp/test_logs"
diff --git a/.github/workflows/bloat_check.yaml b/.github/workflows/bloat_check.yaml
index 5d989b22e6f560..a52a77fa04c5f5 100644
--- a/.github/workflows/bloat_check.yaml
+++ b/.github/workflows/bloat_check.yaml
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: connectedhomeip/chip-build:0.4.12
+ image: connectedhomeip/chip-build:0.4.16
steps:
- name: Checkout
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index fc56356b868a14..1870296624133d 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -34,7 +34,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: connectedhomeip/chip-build:0.4.12
+ image: connectedhomeip/chip-build:0.4.16
volumes:
- "/tmp/log_output:/tmp/test_logs"
options:
@@ -76,8 +76,6 @@ jobs:
# - name: Upload Code Coverage
# if: ${{ contains('main', env.BUILD_TYPE) }}
# run: bash <(curl -s https://codecov.io/bash)
- - name: Show tree
- run: find .
- name: Remove third_party binaries for CodeQL Analysis
run: find out -type d -name "third_party" -exec rm -rf {} +
- name: Remove dbus binaries for CodeQL Analysis
diff --git a/.github/workflows/examples-efr32.yaml b/.github/workflows/examples-efr32.yaml
index 276d6939f26420..398b6b4d6b1b82 100644
--- a/.github/workflows/examples-efr32.yaml
+++ b/.github/workflows/examples-efr32.yaml
@@ -29,7 +29,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: connectedhomeip/chip-build-efr32:0.4.11
+ image: connectedhomeip/chip-build-efr32:0.4.16
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
- "/tmp/output_binaries:/tmp/output_binaries"
@@ -69,8 +69,6 @@ jobs:
path: |
out/lock_app_debug/BRD4161A/chip-efr32-lock-example.out
out/lighting_app_debug/BRD4161A/chip-efr32-lighting-example.out
- - name: Show tree
- run: find .
- name: Remove third_party binaries for CodeQL Analysis
run: find out -type d -name "third_party" -exec rm -rf {} +
- name: Remove SiliconLabs binaries for CodeQL Analysis
diff --git a/.github/workflows/examples-esp32.yaml b/.github/workflows/examples-esp32.yaml
index a1b92d77cd9ee9..5acba3a8db52f1 100644
--- a/.github/workflows/examples-esp32.yaml
+++ b/.github/workflows/examples-esp32.yaml
@@ -29,7 +29,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: connectedhomeip/chip-build-esp32:0.4.12
+ image: connectedhomeip/chip-build-esp32:0.4.16
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
- "/tmp/output_binaries:/tmp/output_binaries"
@@ -51,8 +51,8 @@ jobs:
- name: Copy aside build products
run: |
mkdir -p example_binaries/$BUILD_TYPE-build
- cp examples/wifi-echo/server/esp32/build/chip-wifi-echo.elf \
- example_binaries/$BUILD_TYPE-build/chip-wifi-echo.elf
+ cp examples/all-clusters-app/esp32/build/chip-all-clusters-app.elf \
+ example_binaries/$BUILD_TYPE-build/chip-all-clusters-app.elf
- name: Binary artifact suffix
id: outsuffix
uses: haya14busa/action-cond@v1.0.0
@@ -70,8 +70,6 @@ jobs:
${{ env.BUILD_TYPE }}-example-build-${{
steps.outsuffix.outputs.value }}
path: /tmp/output_binaries/${{ env.BUILD_TYPE }}-build
- - name: Show tree
- run: find .
# - name: Remove third_party binaries for CodeQL Analysis
# run: find . -type d -name "third_party" -exec rm -rf {} +
# - name: Remove m5stack-tft binaries for CodeQL Analysis
diff --git a/.github/workflows/examples-linux-standalone.yaml b/.github/workflows/examples-linux-standalone.yaml
index ba885245dc1776..5fe57bbf8882d3 100644
--- a/.github/workflows/examples-linux-standalone.yaml
+++ b/.github/workflows/examples-linux-standalone.yaml
@@ -31,7 +31,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: connectedhomeip/chip-build:0.4.12
+ image: connectedhomeip/chip-build:0.4.16
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
- "/tmp/output_binaries:/tmp/output_binaries"
@@ -58,6 +58,10 @@ jobs:
run:
scripts/examples/gn_build_example.sh examples/shell/standalone
out/shell_debug
+ - name: Build example Standalone All Clusters Server
+ run:
+ scripts/examples/gn_build_example.sh examples/all-clusters-app/linux
+ out/all_clusters_debug chip_bypass_rendezvous=true
- name: Binary artifact suffix
id: outsuffix
uses: haya14busa/action-cond@v1.0.0
@@ -74,8 +78,6 @@ jobs:
path: |
out/chip_tool_debug/chip-tool
out/shell_debug/chip-shell
- - name: Show tree
- run: find .
- name: Remove third_party binaries for CodeQL Analysis
run: find out -type d -name "third_party" -exec rm -rf {} +
- name: Remove dbus binaries for CodeQL Analysis
diff --git a/.github/workflows/examples-nrfconnect.yaml b/.github/workflows/examples-nrfconnect.yaml
index afc34e33ba2d8c..e18ee6bd9cb54e 100644
--- a/.github/workflows/examples-nrfconnect.yaml
+++ b/.github/workflows/examples-nrfconnect.yaml
@@ -27,7 +27,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: connectedhomeip/chip-build-nrf-platform:0.4.12
+ image: connectedhomeip/chip-build-nrf-platform:0.4.16
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
- "/tmp/output_binaries:/tmp/output_binaries"
@@ -78,8 +78,6 @@ jobs:
steps.outsuffix.outputs.value }}
path: /tmp/output_binaries/${{ env.BUILD_TYPE }}-build
# https://github.com/project-chip/connectedhomeip/issues/3100
- # - name: Show tree
- # run: find .
# - name: Remove third_party binaries for CodeQL Analysis
# run: find examples -type d -name "third_party" -exec rm -rf {} +
# - name: Remove nrfxlib binaries for CodeQL Analysis
diff --git a/.github/workflows/examples-qpg6100.yaml b/.github/workflows/examples-qpg6100.yaml
index dc9532a29f180a..7f0fc0e3de0c26 100644
--- a/.github/workflows/examples-qpg6100.yaml
+++ b/.github/workflows/examples-qpg6100.yaml
@@ -27,7 +27,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: connectedhomeip/chip-build:0.4.12
+ image: connectedhomeip/chip-build:0.4.16
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
- "/tmp/output_binaries:/tmp/output_binaries"
@@ -46,6 +46,9 @@ jobs:
- name: Build example QPG6100 Lock App
run: scripts/examples/gn_build_example.sh
examples/lock-app/qpg6100 out/lock_app_debug
+ - name: Build QPG6100 shell App
+ run: scripts/examples/gn_build_example.sh
+ examples/shell/qpg6100 out/shell_app
- name: Binary artifact suffix
id: outsuffix
uses: haya14busa/action-cond@v1.0.0
@@ -61,6 +64,9 @@ jobs:
steps.outsuffix.outputs.value }}
path: |
out/lock_app_debug/chip-qpg6100-lock-example.out
+ out/shell_app/shell-qpg6100.out
+ - name: Remove third_party binaries for CodeQL Analysis
+ run: find out -type d -name "third_party" -exec rm -rf {} +
- name: Perform CodeQL Analysis
if: ${{ github.event_name == 'push' }}
uses: github/codeql-action/analyze@v1
diff --git a/.github/workflows/qemu.yaml b/.github/workflows/qemu.yaml
index d299107880ffa3..b320f618544df2 100644
--- a/.github/workflows/qemu.yaml
+++ b/.github/workflows/qemu.yaml
@@ -28,7 +28,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: connectedhomeip/chip-build-esp32-qemu:0.4.12
+ image: connectedhomeip/chip-build-esp32-qemu:0.4.16
volumes:
- "/tmp/log_output:/tmp/test_logs"
diff --git a/.github/workflows/unit_integration_test.yaml b/.github/workflows/unit_integration_test.yaml
index dd532dcb50d522..020fe8fba5e6c4 100644
--- a/.github/workflows/unit_integration_test.yaml
+++ b/.github/workflows/unit_integration_test.yaml
@@ -34,7 +34,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: connectedhomeip/chip-build:0.4.12
+ image: connectedhomeip/chip-build:0.4.16
volumes:
- "/tmp/log_output:/tmp/test_logs"
- "/tmp/happy_test_logs:/tmp/happy_test_logs"
diff --git a/.gitignore b/.gitignore
index 94a796bb618f18..6a47d36f00cdfb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,10 @@
# Build System
out/
+/src/test_driver/nrfconnect/build/
+
+# Environment directory
+.environment/
# Temporary Directories
.tmp/
diff --git a/.gitmodules b/.gitmodules
index b60fe9884dd680..2859972f4a287b 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -50,8 +50,6 @@
path = third_party/cirque/repo
url = https://github.com/openweave/cirque.git
branch = master
- ignore = dirty
- commit = 905112cbeeda504223209798ec23e3754ce43fca
[submodule "happy"]
path = third_party/happy/repo
url = https://github.com/openweave/happy.git
diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
index e99e7d2e9dc4cd..fbd94e8520286d 100644
--- a/.vscode/c_cpp_properties.json
+++ b/.vscode/c_cpp_properties.json
@@ -5,7 +5,7 @@
"compileCommands": "${workspaceFolder}/out/debug/compile_commands.gcc.json",
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
- "cppStandard": "c++11",
+ "cppStandard": "gnu++14",
"intelliSenseMode": "gcc-x64",
"browse": {
"path": ["${workspaceFolder}/out/debug/"],
@@ -17,7 +17,7 @@
"compileCommands": "${workspaceFolder}/out/debug/compile_commands.clang.json",
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
- "cppStandard": "c++11",
+ "cppStandard": "gnu++14",
"intelliSenseMode": "clang-x64",
"browse": {
"path": ["${workspaceFolder}/out/debug/"],
@@ -29,7 +29,7 @@
"compileCommands": "${workspaceFolder}/out/debug/compile_commands.mbedtls.json",
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
- "cppStandard": "c++11",
+ "cppStandard": "gnu++14",
"intelliSenseMode": "gcc-x64",
"browse": {
"path": ["${workspaceFolder}/out/debug/"],
@@ -40,7 +40,7 @@
"name": "Android x64 debug (GN)",
"cStandard": "c11",
"cppStandard": "c++11",
- "intelliSenseMode": "gcc-x64",
+ "intelliSenseMode": "clang-x64",
"compileCommands": "${workspaceFolder}/out/debug/compile_commands.android_x64.json",
"compilerPath": "/opt/android/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang",
"browse": {
@@ -52,7 +52,7 @@
"name": "Android arm64 debug (GN)",
"cStandard": "c11",
"cppStandard": "c++11",
- "intelliSenseMode": "gcc-x64",
+ "intelliSenseMode": "clang-arm64",
"compileCommands": "${workspaceFolder}/out/debug/compile_commands.android_arm64.json",
"compilerPath": "/opt/android/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang",
"browse": {
@@ -64,13 +64,24 @@
"name": "EFR32 examples debug (GN)",
"cStandard": "c11",
"cppStandard": "c++11",
- "intelliSenseMode": "gcc-x64",
+ "intelliSenseMode": "gcc-arm",
"compileCommands": "${workspaceFolder}/out/debug/compile_commands.efr32.json",
"compilerPath": "/opt/ARM-software/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-gcc",
"browse": {
"path": ["${workspaceFolder}/out/debug/"],
"limitSymbolsToIncludedHeaders": true
}
+ },
+ {
+ "name": "nRF Connect examples debug (GN)",
+ "cStandard": "c11",
+ "cppStandard": "gnu++14",
+ "intelliSenseMode": "gcc-arm",
+ "compilerPath": "/opt/ARM-software/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-gcc",
+ "browse": {
+ "path": ["${workspaceFolder}/out/debug/"],
+ "limitSymbolsToIncludedHeaders": true
+ }
}
],
"version": 4
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 2510df9edd3170..c4290296d8315f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -110,7 +110,8 @@
"queue": "cpp",
"ratio": "cpp",
"set": "cpp",
- "stack": "cpp"
+ "stack": "cpp",
+ "regex": "cpp"
},
"files.eol": "\n",
"editor.formatOnSave": true,
@@ -153,5 +154,7 @@
}
],
"clang-format.fallbackStyle": "WebKit",
- "files.trimFinalNewlines": true
+ "files.trimFinalNewlines": true,
+ "C_Cpp.default.cppStandard": "gnu++14",
+ "C_Cpp.default.cStandard": "gnu11"
}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index d9bce7888594dd..a94dd65c1abd2f 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -128,9 +128,22 @@
}
},
{
- "label": "Build ESP32 Echo Example",
+ "label": "Build Minimal MDNS Example",
"type": "shell",
- "command": "scripts/examples/build-wifi-echo.py",
+ "command": "scripts/examples/gn_build_example.sh examples/minimal-mdns out/minimal_mdns 'chip_build_tools=false is_debug=false optimize_for_size=true'",
+ "group": "build",
+ "problemMatcher": {
+ "base": "$gcc",
+ "fileLocation": [
+ "relative",
+ "${workspaceFolder}/out/minimal_mdns/"
+ ]
+ }
+ },
+ {
+ "label": "Build ESP32 all-clusters-app Example",
+ "type": "shell",
+ "command": "scripts/examples/build-all-clusters-app.py",
"group": "build",
"problemMatcher": ["$gcc"]
},
@@ -140,6 +153,58 @@
"command": "TARGET_CPU=arm64 scripts/examples/android_app.sh",
"group": "build",
"problemMatcher": ["$gcc"]
+ },
+ {
+ "label": "Build nRF Connect Lock Example",
+ "type": "shell",
+ "command": "source scripts/activate.sh && scripts/examples/nrfconnect_example.sh lock-app",
+ "group": "build",
+ "problemMatcher": {
+ "base": "$gcc",
+ "fileLocation": [
+ "relative",
+ "${workspaceFolder}/examples/lock-app/nrfconnect/build"
+ ]
+ }
+ },
+ {
+ "label": "Build nRF Connect Lighting Example",
+ "type": "shell",
+ "command": "source scripts/activate.sh && scripts/examples/nrfconnect_example.sh lighting-app",
+ "group": "build",
+ "problemMatcher": {
+ "base": "$gcc",
+ "fileLocation": [
+ "relative",
+ "${workspaceFolder}/examples/lighting-app/nrfconnect/build"
+ ]
+ }
+ },
+ {
+ "label": "Build nRF Connect Shell Example",
+ "type": "shell",
+ "command": "source scripts/activate.sh && scripts/examples/nrfconnect_example.sh shell",
+ "group": "build",
+ "problemMatcher": {
+ "base": "$gcc",
+ "fileLocation": [
+ "relative",
+ "${workspaceFolder}/examples/shell/nrfconnect/build"
+ ]
+ }
+ },
+ {
+ "label": "Build nRF Connect Pigweed Example",
+ "type": "shell",
+ "command": "source scripts/activate.sh && scripts/examples/nrfconnect_example.sh pigweed-app",
+ "group": "build",
+ "problemMatcher": {
+ "base": "$gcc",
+ "fileLocation": [
+ "relative",
+ "${workspaceFolder}/examples/pigweed-app/nrfconnect/build"
+ ]
+ }
}
]
}
diff --git a/BUILD.gn b/BUILD.gn
index 3a2e3733a4fb92..22ff9f3939cce9 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -18,6 +18,7 @@ import("//build_overrides/nlassert.gni")
import("//build_overrides/nlio.gni")
import("//build_overrides/nlunit_test.gni")
import("//build_overrides/pigweed.gni")
+import("$dir_pw_build/python.gni")
# This build file should not be used in superproject builds.
assert(chip_root == "//")
@@ -28,15 +29,20 @@ import("${chip_root}/build/chip/tools.gni")
if (current_toolchain != "${dir_pw_toolchain}/dummy:dummy") {
declare_args() {
chip_enable_python_modules =
- (current_os == "mac" || current_os == "linux") && host_cpu == "x64"
+ (current_os == "mac" || current_os == "linux") &&
+ (host_cpu == "x64" || host_cpu == "arm64")
}
- # This is a real toolchain. Build CHIP.
- group("default") {
- deps = [ ":all" ]
+ # Python packages for supporting specific targets.
+ pw_python_group("python_packages") {
+ python_deps = [
+ "integrations/mobly:chip_mobly",
+ "third_party/happy",
+ ]
}
- group("all") {
+ # This is a real toolchain. Build CHIP.
+ group("default") {
deps = [
"${chip_root}/src/app",
"${chip_root}/src/ble",
@@ -67,6 +73,8 @@ if (current_toolchain != "${dir_pw_toolchain}/dummy:dummy") {
if (chip_build_tools) {
deps += [
"${chip_root}/examples/shell/standalone:chip-shell",
+ "${chip_root}/src/messaging/tests/echo:chip-echo-requester",
+ "${chip_root}/src/messaging/tests/echo:chip-echo-responder",
"${chip_root}/src/qrcodetool",
"${chip_root}/src/setup_payload",
]
@@ -133,9 +141,13 @@ if (current_toolchain != "${dir_pw_toolchain}/dummy:dummy") {
# Build the shell example.
enable_standalone_shell_build = enable_default_builds
+ # Build the Linux all clusters app example.
+ enable_linux_all_clusters_app_build =
+ enable_default_builds && (host_os == "linux" || host_os == "mac")
+
# Build the Linux lighting app example.
enable_linux_lighting_app_build =
- enable_default_builds && host_os == "linux"
+ enable_default_builds && (host_os == "linux" || host_os == "mac")
# Build the efr32 lock app example.
enable_efr32_lock_app_build = enable_efr32_builds
@@ -201,6 +213,14 @@ if (current_toolchain != "${dir_pw_toolchain}/dummy:dummy") {
}
}
+ if (enable_linux_all_clusters_app_build) {
+ group("linux_all_clusters_app") {
+ deps = [
+ "${chip_root}/examples/all-clusters-app/linux(${standalone_toolchain})",
+ ]
+ }
+ }
+
if (enable_linux_lighting_app_build) {
group("linux_lighting_app") {
deps = [
@@ -236,20 +256,20 @@ if (current_toolchain != "${dir_pw_toolchain}/dummy:dummy") {
group("default") {
deps = []
if (enable_host_clang_build) {
- deps += [ ":all_host_clang" ]
+ deps += [ ":host_clang" ]
}
if (enable_host_gcc_build) {
- deps += [ ":all_host_gcc" ]
+ deps += [ ":host_gcc" ]
}
if (enable_host_gcc_mbedtls_build) {
- deps += [ ":all_host_gcc_mbedtls" ]
+ deps += [ ":host_gcc_mbedtls" ]
}
if (enable_android_builds) {
deps += [
- ":all_android_arm",
- ":all_android_arm64",
- ":all_android_x64",
- ":all_android_x86",
+ ":android_arm",
+ ":android_arm64",
+ ":android_x64",
+ ":android_x86",
]
}
if (enable_standalone_chip_tool_build) {
@@ -258,6 +278,9 @@ if (current_toolchain != "${dir_pw_toolchain}/dummy:dummy") {
if (enable_standalone_shell_build) {
deps += [ ":standalone_shell" ]
}
+ if (enable_linux_all_clusters_app_build) {
+ deps += [ ":linux_all_clusters_app" ]
+ }
if (enable_linux_lighting_app_build) {
deps += [ ":linux_lighting_app" ]
}
diff --git a/build/chip/chip_build.gni b/build/chip/chip_build.gni
index 6be5a0feeac121..1521f585a8d0ae 100644
--- a/build/chip/chip_build.gni
+++ b/build/chip/chip_build.gni
@@ -20,8 +20,8 @@ template("chip_build") {
_build_name = target_name
_toolchain = invoker.toolchain
- group("all_${_build_name}") {
- deps = [ ":all(${_toolchain})" ]
+ group("${_build_name}") {
+ deps = [ ":default(${_toolchain})" ]
}
group("check_${_build_name}") {
diff --git a/build/chip/chip_test.gni b/build/chip/chip_test.gni
index cac1d6f4e66946..a9970fa13b6249 100644
--- a/build/chip/chip_test.gni
+++ b/build/chip/chip_test.gni
@@ -14,6 +14,7 @@
import("//build_overrides/chip.gni")
import("//build_overrides/pigweed.gni")
+import("$dir_pw_build/python_action.gni")
import("${chip_root}/build/chip/tests.gni")
import("${chip_root}/src/platform/device.gni")
@@ -35,7 +36,7 @@ if (chip_link_tests) {
output_dir = _test_output_dir
}
- pw_python_script(_test_name + "_run") {
+ pw_python_action(_test_name + "_run") {
deps = [ ":${_test_name}" ]
inputs = [ pw_unit_test_AUTOMATIC_RUNNER ]
script = "$dir_pw_unit_test/py/pw_unit_test/test_runner.py"
diff --git a/build/chip/chip_test_suite.gni b/build/chip/chip_test_suite.gni
index 43a5f8ae417b92..3881de9b36c5f4 100644
--- a/build/chip/chip_test_suite.gni
+++ b/build/chip/chip_test_suite.gni
@@ -20,16 +20,67 @@ import("${dir_pw_unit_test}/test.gni")
assert(chip_build_tests)
+# Define CHIP unit tests
+#
+# Simple usage
+# chip_test_suite("tests") {
+# output_name = "libFooTests"
+#
+# sources = [
+# "Common.h", # add common sources here
+# "Common.cpp",
+# ]
+#
+# test_sources = [
+# "TestFoo.cpp", # Files are parsed for `CHIP_REGISTER_TEST_SUITE(...)`
+# "TestBar.cpp", # and a driver is created automatically
+# ]
+#
+# public_deps = [
+# "${chip_root}/src/lib/foo", # add dependencies here
+# "${nlunit_test_root}:nlunit-test",
+# ]
+# }
+#
+#
+# Deprecated usage (writing own driver files):
+#
+# chip_test_suite("tests") {
+# output_name = "libFooTests"
+#
+# sources = [
+# "TestDeclarations.h",
+# "TestFoo.cpp",
+# "TestBar.cpp",
+# ]
+#
+# public_deps = [
+# "${chip_root}/src/lib/foo", # add dependencies here
+# "${nlunit_test_root}:nlunit-test",
+# ]
+#
+# tests = [
+# "TestFoo", # Assumes TestFooDriver.cpp exists
+# "TestBar", # Assumes TestBarDriver.cpp exists
+# ]
+# }
+
+#
template("chip_test_suite") {
_suite_name = target_name
+ # Ensures that the common library has sources containing both common
+ # and individual unit tests.
+ if (!defined(invoker.sources)) {
+ invoker.sources = []
+ }
+
+ if (defined(invoker.test_sources)) {
+ invoker.sources += invoker.test_sources
+ }
+
static_library("${_suite_name}_common") {
- forward_variables_from(invoker,
- "*",
- [
- "tests",
- "c_tests",
- ])
+ forward_variables_from(invoker, "*", [ "tests" ])
output_dir = "${root_out_dir}/lib"
}
@@ -37,22 +88,39 @@ template("chip_test_suite") {
if (chip_link_tests) {
tests = []
- if (defined(invoker.tests)) {
- foreach(_test, invoker.tests) {
- chip_test(_test) {
- sources = [ "${_test}Driver.cpp" ]
+ if (defined(invoker.test_sources)) {
+ foreach(_test, invoker.test_sources) {
+ _test_name = string_replace(_test, ".cpp", "")
- public_deps = [ ":${_suite_name}_common" ]
+ _driver_name = "${root_gen_dir}/${_test_name}.driver.cpp"
+
+ action("${_test_name}_generate_driver") {
+ script = "${chip_root}/scripts/gen_test_driver.py"
+
+ inputs = [ _test ]
+ outputs = [ _driver_name ]
+ args = [
+ "--input_file=" + rebase_path(_test, root_build_dir),
+ "--output_file=" + rebase_path(_driver_name, root_build_dir),
+ ]
}
- tests += [ _test ]
+ chip_test(_test_name) {
+ sources = [ _driver_name ]
+ public_deps = [
+ ":${_suite_name}_common",
+ ":${_test_name}_generate_driver",
+ ]
+ }
+
+ tests += [ _test_name ]
}
}
- if (defined(invoker.c_tests)) {
- foreach(_test, invoker.c_tests) {
+ if (defined(invoker.tests)) {
+ foreach(_test, invoker.tests) {
chip_test(_test) {
- sources = [ "${_test}Driver.c" ]
+ sources = [ "${_test}Driver.cpp" ]
public_deps = [ ":${_suite_name}_common" ]
}
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index f55fd280263b8c..66c26a49bbe987 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -138,12 +138,7 @@ config("disabled_warnings") {
"-Wno-deprecated-declarations",
"-Wno-unknown-warning-option",
"-Wno-missing-field-initializers",
- "-Wno-unused-but-set-variable",
- "-Wno-unused-variable",
- ]
- cflags_cc = [
- "-Wno-non-virtual-dtor",
- "-Wno-deprecated-copy",
+ "-Wno-unused-parameter",
]
if (!is_debug) {
# assert() causes unused variable warnings in release.
@@ -153,13 +148,18 @@ config("disabled_warnings") {
cflags += [
"-Wno-psabi",
"-Wno-cast-function-type",
- "-Wno-maybe-uninitialized",
]
}
}
config("strict_warnings") {
- cflags = [ "-Wall" ]
+ cflags = [
+ "-Wall",
+ "-Wextra",
+ "-Wshadow",
+ ]
+
+ cflags_cc = [ "-Wnon-virtual-dtor" ]
ldflags = []
@@ -186,21 +186,26 @@ config("warnings_default") {
if (current_os != "mac" && current_os != "ios") {
ldflags = [ "-Wl,--fatal-warnings" ]
}
+
+ if (current_os != "mac" && current_os != "ios" && current_os != "linux" &&
+ current_os != "win") {
+ cflags = [ "-Wstack-usage=8192" ]
+ }
}
config("symbols_default") {
cflags = [ "-g${symbol_level}" ]
}
-config("gnu11") {
+config("gnu14") {
cflags_c = [ "-std=gnu11" ]
cflags_objc = [ "-std=gnu11" ]
- cflags_cc = [ "-std=gnu++11" ]
- cflags_objcc = [ "-std=gnu++11" ]
+ cflags_cc = [ "-std=gnu++14" ]
+ cflags_objcc = [ "-std=gnu++14" ]
}
config("std_default") {
- configs = [ ":gnu11" ]
+ configs = [ ":gnu14" ]
}
config("cosmetic_default") {
diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni
index 9b28a47edc8183..a524bfeb3915a4 100644
--- a/build/config/compiler/compiler.gni
+++ b/build/config/compiler/compiler.gni
@@ -20,7 +20,7 @@ declare_args() {
optimize_for_size = true
# Optimize debug builds with -Og.
- optimize_debug = current_os == "freertos"
+ optimize_debug = current_os == "freertos" || current_os == "zephyr"
# Symbol level for debugging.
symbol_level = 2
diff --git a/config/esp32/components/chip/component.mk b/config/esp32/components/chip/component.mk
index e0e67660e934f4..50ecc6fedf4cb9 100644
--- a/config/esp32/components/chip/component.mk
+++ b/config/esp32/components/chip/component.mk
@@ -122,7 +122,7 @@ install-chip : $(OUTPUT_DIR)
echo esp32_cxx = \"$(CXX)\" >> $(OUTPUT_DIR)/args.gn
echo esp32_cpu = \"esp32\" >> $(OUTPUT_DIR)/args.gn
echo "Written file $(OUTPUT_DIR)/args.gn"
- cd $(CHIP_ROOT) && PW_ENVSETUP_QUIET=1 . scripts/activate.sh && cd $(COMPONENT_PATH) && gn gen $(OUTPUT_DIR)
+ cd $(CHIP_ROOT) && PW_ENVSETUP_QUIET=1 . scripts/activate.sh && cd $(COMPONENT_PATH) && gn gen --check --fail-on-unused-args $(OUTPUT_DIR)
cd $(COMPONENT_PATH); ninja $(subst 1,-v,$(filter 1,$(V))) -C $(OUTPUT_DIR) esp32
diff --git a/config/nrfconnect/chip-lib.cmake b/config/nrfconnect/chip-lib.cmake
index 4508f8f75401f1..8d04beec199e33 100644
--- a/config/nrfconnect/chip-lib.cmake
+++ b/config/nrfconnect/chip-lib.cmake
@@ -33,8 +33,22 @@ include(ExternalProject)
# Directory for CHIP build artifacts
set(CHIP_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/chip")
+# Define Zephyr C/C++ compiler flags which should not be forwarded to CHIP
+# build system (e.g. because CHIP configures them on its own).
+set(CHIP_CFLAG_EXCLUDES
+ "-fno-asynchronous-unwind-tables"
+ "-fno-common"
+ "-fno-defer-pop"
+ "-fno-reorder-functions"
+ "-ffunction-sections"
+ "-fdata-sections"
+ "-g*"
+ "-O*"
+ "-W*"
+)
+
macro(chip_gn_arg_bool_if CONDITION ARGSTRING GN_VARNAME)
- if (${${CONDITION}})
+ if (${CONDITION})
string(APPEND ${ARGSTRING} "${GN_VARNAME} = true\n")
else ()
string(APPEND ${ARGSTRING} "${GN_VARNAME} = false\n")
@@ -45,6 +59,15 @@ macro(chip_gn_arg_string ARGSTRING GN_STRING)
string(APPEND ${ARGSTRING} "${GN_STRING}\n")
endmacro()
+macro(chip_gn_arg_cflags ARGSTRING ARG CFLAGS)
+ set(CFLAG_EXCLUDES "[")
+ foreach(cflag ${CHIP_CFLAG_EXCLUDES})
+ string(APPEND CFLAG_EXCLUDES "\"${cflag}\", ")
+ endforeach()
+ string(APPEND CFLAG_EXCLUDES "]")
+ string(APPEND ${ARGSTRING} "${ARG} = filter_exclude(string_split(\"${CFLAGS}\"), ${CFLAG_EXCLUDES})\n")
+endmacro()
+
# Function to retrieve Zephyr compilation flags for the given language (C or CXX)
function(zephyr_get_compile_flags VAR LANG)
# We want to treat all zephyr-provided headers as system headers, so
@@ -101,8 +124,8 @@ function(chip_configure TARGET_NAME)
convert_list_of_flags_to_string_of_flags(CHIP_CXXFLAGS CHIP_CXXFLAGS)
set(GN_ARGS "")
- chip_gn_arg_string(GN_ARGS "target_cflags_c = string_split(\"${CHIP_CFLAGS}\")")
- chip_gn_arg_string(GN_ARGS "target_cflags_cc = string_split(\"${CHIP_CXXFLAGS}\")")
+ chip_gn_arg_cflags(GN_ARGS "target_cflags_c" ${CHIP_CFLAGS})
+ chip_gn_arg_cflags(GN_ARGS "target_cflags_cc" ${CHIP_CXXFLAGS})
chip_gn_arg_string(GN_ARGS "zephyr_ar = \"${CMAKE_AR}\"")
chip_gn_arg_string(GN_ARGS "zephyr_cc = \"${CMAKE_C_COMPILER}\"")
chip_gn_arg_string(GN_ARGS "zephyr_cxx = \"${CMAKE_CXX_COMPILER}\"")
@@ -121,26 +144,25 @@ function(chip_configure TARGET_NAME)
chip_gn_arg_bool_if(CONFIG_NET_L2_OPENTHREAD GN_ARGS "chip_enable_openthread")
chip_gn_arg_bool_if(CONFIG_NET_IPV4 GN_ARGS "chip_inet_config_enable_ipv4")
chip_gn_arg_bool_if(CHIP_BUILD_TESTS GN_ARGS "chip_build_tests")
- chip_gn_arg_bool_if(CONFIG_CHIP_LIB_SHELL GN_ARGS "chip_build_libshell")
- chip_gn_arg_bool_if(CONFIG_CHIP_PW_RPC GN_ARGS "chip_build_pw_rpc_lib")
+ chip_gn_arg_bool_if(CONFIG_DEBUG GN_ARGS "is_debug")
chip_gn_arg_bool_if(CHIP_BUILD_TESTS GN_ARGS "chip_inet_config_enable_raw_endpoint")
chip_gn_arg_bool_if(CHIP_BUILD_TESTS GN_ARGS "chip_inet_config_enable_tcp_endpoint")
chip_gn_arg_bool_if(CHIP_BUILD_TESTS GN_ARGS "chip_inet_config_enable_dns_resolver")
+ chip_gn_arg_bool_if(CONFIG_CHIP_LIB_SHELL GN_ARGS "chip_build_libshell")
+ chip_gn_arg_bool_if(CONFIG_CHIP_PW_RPC GN_ARGS "chip_build_pw_rpc_lib")
+
+ file(GENERATE OUTPUT ${CHIP_OUTPUT_DIR}/args.gn CONTENT "${GN_ARGS}")
- file(
- GENERATE OUTPUT ${CHIP_OUTPUT_DIR}/args.gn
- CONTENT "${GN_ARGS}"
- )
# Define target
ExternalProject_Add(
${TARGET_NAME}
- PREFIX ${CHIP_OUTPUT_DIR}
- SOURCE_DIR ${CHIP_ROOT}
- BINARY_DIR ${CHIP_OUTPUT_DIR}
- CONFIGURE_COMMAND gn --root=${CHIP_ROOT}/config/nrfconnect gen ${CHIP_OUTPUT_DIR}
- BUILD_COMMAND ""
- INSTALL_COMMAND ""
- BUILD_ALWAYS TRUE
+ PREFIX ${CHIP_OUTPUT_DIR}
+ SOURCE_DIR ${CHIP_ROOT}
+ BINARY_DIR ${CHIP_OUTPUT_DIR}
+ CONFIGURE_COMMAND gn --root=${CHIP_ROOT}/config/nrfconnect gen --check --fail-on-unused-args ${CHIP_OUTPUT_DIR}
+ BUILD_COMMAND ""
+ INSTALL_COMMAND ""
+ BUILD_ALWAYS TRUE
USES_TERMINAL_CONFIGURE TRUE
)
endfunction()
diff --git a/config/nrfconnect/nrfconnect-app.cmake b/config/nrfconnect/nrfconnect-app.cmake
index 4638fb9a7ec255..9f3f1d00cda7d5 100644
--- a/config/nrfconnect/nrfconnect-app.cmake
+++ b/config/nrfconnect/nrfconnect-app.cmake
@@ -53,8 +53,8 @@ endif()
# ==================================================
find_package(Zephyr HINTS $ENV{ZEPHYR_BASE})
-# This is temporary solution and should be removed after merging including fix in Zephyr
-zephyr_include_directories("${ZEPHYR_BASE}/../nrfxlib/crypto/nrf_cc310_platform/include")
+# TODO: temporary fix forcing time_t size to be equal long size - remove it after merging fix from Zephyr project.
+zephyr_compile_definitions(_USE_LONG_TIME_T)
# ==================================================
# General settings
@@ -88,6 +88,37 @@ find_file(CHIP_PROJECT_CONFIG
NO_DEFAULT_PATH
)
+# ==================================================
+# Configure Zephyr
+# ==================================================
+
+function(set_openthread_config OT_DIR CONFIG_FILE)
+ get_property(DEFINES DIRECTORY ${OT_DIR} PROPERTY COMPILE_DEFINITIONS)
+ get_property(SUBDIRS DIRECTORY ${OT_DIR} PROPERTY SUBDIRECTORIES)
+
+ list(TRANSFORM DEFINES REPLACE
+ OPENTHREAD_PROJECT_CORE_CONFIG_FILE=.*
+ OPENTHREAD_PROJECT_CORE_CONFIG_FILE="${CONFIG_FILE}")
+
+ set_property(DIRECTORY ${OT_DIR} PROPERTY COMPILE_DEFINITIONS ${DEFINES})
+
+ foreach(SUBDIR ${SUBDIRS})
+ set_openthread_config(${SUBDIR} ${CONFIG_FILE})
+ endforeach()
+endfunction()
+
+# Add dependency on nRF crypto library.
+# This is temporary solution and should be removed after fixing it in nRF Connect SDK.
+zephyr_include_directories(${ZEPHYR_BASE}/../nrfxlib/crypto/nrf_cc310_platform/include)
+
+# Override Zephyr-supplied OpenThread configuration
+if (CHIP_OPENTHREAD_CONFIG)
+ get_filename_component(CONFIG_DIR ${CHIP_OPENTHREAD_CONFIG} DIRECTORY)
+ get_filename_component(CONFIG_FILE ${CHIP_OPENTHREAD_CONFIG} NAME)
+ target_include_directories(ot-config INTERFACE ${CONFIG_DIR})
+ set_openthread_config(${ZEPHYR_BASE}/../modules/lib/openthread ${CONFIG_FILE})
+endif()
+
# ==================================================
# Setup CHIP build
# ==================================================
diff --git a/config/nrfconnect/overlay-usb_support.conf b/config/nrfconnect/overlay-usb_support.conf
new file mode 100644
index 00000000000000..0983dd29efc76e
--- /dev/null
+++ b/config/nrfconnect/overlay-usb_support.conf
@@ -0,0 +1,25 @@
+#
+# 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.
+#
+
+CONFIG_GPIO=y
+
+CONFIG_USB=y
+CONFIG_USB_DEVICE_STACK=y
+CONFIG_USB_UART_CONSOLE=y
+
+CONFIG_UART_INTERRUPT_DRIVEN=y
+CONFIG_UART_LINE_CTRL=y
+CONFIG_UART_CONSOLE_ON_DEV_NAME="CDC_ACM_0"
diff --git a/config/nrfconnect/release.conf b/config/nrfconnect/release.conf
new file mode 100644
index 00000000000000..b0d3b325d3c56b
--- /dev/null
+++ b/config/nrfconnect/release.conf
@@ -0,0 +1,37 @@
+#
+# 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.
+#
+
+# This file contains settings which are not suitable for development phase of
+# a project (in which debugging facilities should be enabled by default), but
+# are perfectly valid for release builds which aim to generate binaries with
+# minimal memory footprint.
+
+# Disable assertions
+CONFIG_ASSERT=n
+
+# Disable shell/console
+CONFIG_SHELL=n
+CONFIG_OPENTHREAD_SHELL=n
+CONFIG_CONSOLE=n
+CONFIG_UART_CONSOLE=n
+CONFIG_SERIAL=n
+
+# Disable logs
+CONFIG_LOG=n
+CONFIG_LOG_MINIMAL=n
+
+# Disable other debugging features
+CONFIG_THREAD_NAME=n
diff --git a/config/nrfconnect/overlay-sample-defaults.conf b/config/nrfconnect/sample-defaults.conf
similarity index 96%
rename from config/nrfconnect/overlay-sample-defaults.conf
rename to config/nrfconnect/sample-defaults.conf
index 2321e15faacd23..9e90bae62fbaee 100644
--- a/config/nrfconnect/overlay-sample-defaults.conf
+++ b/config/nrfconnect/sample-defaults.conf
@@ -54,6 +54,8 @@ CONFIG_BT_DEVICE_APPEARANCE=0
CONFIG_BT_DEVICE_NAME_DYNAMIC=y
CONFIG_BT_DEVICE_NAME_MAX=15
CONFIG_BT_MAX_CONN=1
+CONFIG_BT_PHY_UPDATE=n
+CONFIG_BT_CTLR_PHY_2M=n
# Enable NFC support
CONFIG_CHIP_NFC_COMMISSIONING=y
@@ -62,7 +64,8 @@ CONFIG_CHIP_NFC_COMMISSIONING=y
CONFIG_NET_L2_OPENTHREAD=y
# OpenThread configs
-CONFIG_OPENTHREAD_DHCP6_SERVER=y
+CONFIG_OPENTHREAD_MTD=y
+CONFIG_OPENTHREAD_FTD=n
CONFIG_OPENTHREAD_SLAAC=y
CONFIG_OPENTHREAD_DHCP6_CLIENT=y
CONFIG_OPENTHREAD_SNTP_CLIENT=y
diff --git a/config/standalone/CHIPProjectConfig.h b/config/standalone/CHIPProjectConfig.h
index f2f2f988cf0058..148cb2cf59f54d 100644
--- a/config/standalone/CHIPProjectConfig.h
+++ b/config/standalone/CHIPProjectConfig.h
@@ -67,4 +67,6 @@
#define CHIP_CONFIG_DATA_MANAGEMENT_CLIENT_EXPERIMENTAL 1
+#define CHIP_DEVICE_CONFIG_ENABLE_TEST_DEVICE_IDENTITY 1
+
#endif /* CHIPPROJECTCONFIG_H */
diff --git a/docs/BUILDING.md b/docs/BUILDING.md
index d4f1390614b49c..2ab5baa3bd631d 100644
--- a/docs/BUILDING.md
+++ b/docs/BUILDING.md
@@ -212,7 +212,7 @@ expensive to build everything for every edit. To save time, you can name the
configuration to build:
```
-ninja -C out/unified all_host_gcc
+ninja -C out/unified host_gcc
ninja -C out/unified check_host_gcc
```
diff --git a/docs/Doxyfile b/docs/Doxyfile
index 8efaa975d448cd..461d499209b31c 100644
--- a/docs/Doxyfile
+++ b/docs/Doxyfile
@@ -828,7 +828,6 @@ INPUT = README.md \
CONTRIBUTING.md \
docs/README.md \
docs/BUILDING.md \
- docs/BUILDING-GN.md \
docs/VSCODE_DEVELOPMENT.md \
docs/PROJECT_FLOW.md \
docs/STYLE_GUIDE.md \
@@ -837,10 +836,10 @@ INPUT = README.md \
src/crypto \
src/include \
src/inet \
+ src/lib/mdns \
src/lib/core \
src/lib/support \
src/lib/shell \
- src/lib/message/support/crypto \
src/platform \
src/setup_payload \
src/system \
diff --git a/docs/guides/nrfconnect_android_commissioning.md b/docs/guides/nrfconnect_android_commissioning.md
new file mode 100644
index 00000000000000..a19cd0d8864e31
--- /dev/null
+++ b/docs/guides/nrfconnect_android_commissioning.md
@@ -0,0 +1,315 @@
+# Commissioning nRF Connect Accessory using Android CHIPTool
+
+This article describes how to use
+[CHIPTool](../../src/android/CHIPTool/README.md) for Android smartphones to
+commission a Nordic Semiconductor nRF52840 DK running
+[nRF Connect Lock Example Application](../../examples/lock-app/nrfconnect/README.md)
+onto a CHIP-enabled Thread network. The instructions are also valid for
+[nRF Connect Lighting Example Application](../../examples/lighting-app/nrfconnect/README.md).
+
+The commissioning process is composed of the following main stages:
+
+- CHIPTool discovers a CHIP accessory device over Bluetooth LE.
+- CHIPTool establishes a secure channel to the device over Bluetooth LE, and
+ sends CHIP operational credentials and Thread provisioning data.
+- The accessory device joins a CHIP-enabled Thread network.
+
+Bluetooth LE is only used during the commissioning phase. Afterwards, only the
+IP connectivity between the smartphone and the accessory device is needed to
+send operational messages. Since a typical smartphone does not have a Thread
+radio built-in, extra effort is needed to prepare a fully-fledged testing
+environment. This page describes how to build a Thread Border Router using a PC
+with a spare Wi-Fi card and an
+[OpenThread Radio Co-Processor](https://openthread.io/platforms/co-processor)
+device.
+
+The following diagram shows the connectivity between network components required
+to allow communication between devices running the CHIPTool and Lock
+applications:
+
+```
+ +--------------------+
+ | Smartphone |
+ +---------| Android CHIPTool |---------+
+ | +--------------------+ |
+ | | Wi-Fi
+ | |
+ | +---------------+ Ethernet +----------+
+ | | PC |------------| Internet |
+ | +---------------+ +----------+
+ | |
+ | Bluetooth LE | USB
+ | |
+ | +---------------+
+ | | nRF52840 DK |
+ | | OpenThread RCP|
+ | +---------------+
+ | |
+ | +--------------------+ | Thread
+ | | nRF52840 DK | |
+ +---------| Lock Application |---------+
+ +--------------------+
+```
+
+## Requirements
+
+You need the following hardware and software to build a Thread Border Router:
+
+- Two nRF52840 DK (PCA10056)
+
+ - One nRF52840 DK is needed to run
+ [OpenThread Radio Co-Processor](https://openthread.io/platforms/co-processor)
+ firmware and can be replaced with another compatible device like
+ nRF52840 Dongle.
+
+- Smartphone compatible with Android 8.0 or later
+- PC with the following characteristics:
+
+ - Software: Ubuntu 20.04 and Docker installed
+ - Hardware: A spare Wi-Fi card
+
+While this page references Ubuntu 20.04, all the procedures can be completed
+using other popular operating systems.
+
+## Building and flashing OpenThread RCP firmware
+
+OpenThread RCP firmware is required to allow the PC to communicate with Thread
+devices. Run the commands mentioned in the following steps to build and flash
+the RCP firmware onto an nRF52840 DK:
+
+1. Download and install the
+ [nRF Command Line Tools](https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Command-Line-Tools).
+2. Clone the OpenThread repository into the current directory:
+
+ $ git clone https://github.com/openthread/openthread.git
+
+3. Enter the _openthread_ directory:
+
+ $ cd openthread
+
+4. Install OpenThread dependencies:
+
+ $ ./script/bootstrap
+
+5. Set up the build environment:
+
+ $ ./bootstrap
+
+6. Build OpenThread for the nRF52840 DK:
+
+ $ make -f examples/Makefile-nrf52840
+
+ This creates an RCP image in the `bin/ot-rcp` directory.
+
+7. Convert the RCP image to HEX format:
+
+ $ arm-none-eabi-objcopy -O ihex output/nrf52840/bin/ot-rcp output/nrf52840/bin/ot-rcp.hex
+
+8. Flash the RCP firmware:
+
+ $ nrfjprog --chiperase --program output/nrf52840/bin/ot-rcp.hex --reset
+
+9. Disable the Mass Storage feature on the device, so that it
+ [does not interfere](https://github.com/openthread/openthread/blob/master/examples/platforms/nrf528xx/nrf52840/README.md#mass-storage-device-known-issue)
+ with core RCP functionalities.
+
+ $ JLinkExe
+ J-Link>MSDDisable
+ Probe configured successfully.
+ J-Link>exit
+
+ The setting remains valid even if you flash another firmware onto the
+ device.
+
+10. Power-cycle the device to apply the changes.
+
+## Configuring PC as Thread Border Router
+
+To make your PC work as a Thread Border Router, you need to complete the
+following tasks:
+
+- Form a Thread network using the OpenThread RCP device and configure IPv6
+ packet routing to the network.
+- Configure a Wi-Fi hotspot using a spare Wi-Fi card on your PC.
+
+### Forming Thread network
+
+To form a Thread network, complete the following steps:
+
+1. Create an IPv6 network for the OpenThread Border Router (OTBR) container in
+ Docker:
+
+ $ docker network create --ipv6 --subnet 2001:db8:1::/64 -o com.docker.network.bridge.name=otbr0 otbr
+
+2. Start the OTBR container using the command below with _rcp-dk_ in the last
+ line replaced with the device node name of the nRF52840 DK that is running
+ the RCP firmware (for example, _/dev/ttyACM0_):
+
+ $ docker run -it --rm --privileged --network otbr -p 8080:80 \
+ --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" \
+ --volume rcp-dk:/dev/ttyACM0 openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0
+
+3. Open the `http://localhost:8080/` address in a web browser.
+4. Click **Form** on the left menu. The network forming creator window appears.
+5. Make sure that the On-Mesh Prefix is set to `fd11:22::`. This value is used
+ later to configure the IPv6 packet routing.
+6. Click the **Form** button at the bottom of the window to form a new Thread
+ network using the default settings.
+7. Run the following command to learn which IPv6 address was assigned to the
+ OTBR container in Docker.
+
+ $ docker network inspect otbr | grep IPv6Address
+
+ After checking the output, the address will most likely be `2001:db8:1::2`.
+
+8. To ensure that packets targeting Thread network nodes are routed through the
+ OTBR container in Docker, run the following command, with _2001:db8:1::2_
+ replaced with the actual address obtained in the previous step:
+
+ $ sudo ip -6 route add fd11:22::/64 dev otbr0 via 2001:db8:1::2
+
+### Configuring Wi-Fi hotspot
+
+To configure a Wi-Fi hotspot using a spare Wi-Fi card on your PC, complete the
+following steps:
+
+1. Open the Ubuntu settings widget by running the following command:
+
+ $ gnome-control-center
+
+2. Go to the Wi-Fi settings.
+3. Click the three-dot icon at the title bar and select the **Turn On Wi-Fi
+ Hotspot...** option.
+4. Enter your network name and password and click **Turn On**.
+5. Run the following command to assign a well-known IPv6 address to the hotspot
+ interface:
+
+ $ nmcli connection modify Hotspot ipv6.addresses 2001:db8:2::1/64
+
+6. Run the following command to install Routing Advertisement Daemon (radvd),
+ which enables the IPv6 auto-configuration of devices that connect to the
+ hotspot:
+
+ $ sudo apt install radvd
+
+7. Learn the hotspot interface name by running the following command:
+
+ $ nmcli connection show Hotspot | grep interface-name
+
+8. Add the following lines into `/etc/radvd.conf`, with _wlo1_ replaced with
+ the hotspot interface name obtained in the previous step:
+
+ interface wlo1
+ {
+ MinRtrAdvInterval 3;
+ MaxRtrAdvInterval 4;
+ AdvSendAdvert on;
+ AdvManagedFlag on;
+ prefix 2001:db8:2::/64
+ {
+ AdvValidLifetime 14300;
+ AdvPreferredLifetime 14200;
+ };
+ };
+
+9. Start the radvd service by running the following command:
+
+ $ systemctl start radvd
+
+To automatically start the radvd service on every reboot, run the following
+command:
+
+ $ systemctl enable radvd
+
+> If you use Ubuntu 18.04, a DHCP server is not configured automatically when
+> creating a Wi-Fi hotspot. As a result, devices that connect to the hotspot
+> will not be assigned an IPv4 address and may not work properly. To address the
+> problem, install and configure a DHCP server on the hotspot interface. For
+> example, you can use
+> [isc-dhcp-server](https://help.ubuntu.com/community/isc-dhcp-server).
+
+## Building and flashing nRF Connect Lock Example Application
+
+See
+[nRF Connect Lock Example Application README](../../examples/lock-app/nrfconnect/README.md)
+to learn how to build and flash the example onto an nRF52840 DK.
+
+## Building and installing Android CHIPTool
+
+To build the CHIPTool application for your smartphone, read
+[Android CHIPTool README](../../src/android/CHIPTool/README.md).
+
+After building, install the application by completing the following steps:
+
+1. Install the Android Debug Bridge (adb) package by running the following
+ command:
+
+ $ sudo apt install android-tools-adb
+
+2. Enable **USB debugging** on the smartphone. See the
+ [Configure on-device developer options](https://developer.android.com/studio/debug/dev-options)
+ guide on the Android Studio hub for detailed information.
+3. If the **Install via USB** option is supported for your Android version,
+ turn it on.
+4. Plug the smartphone into an USB port on your PC.
+5. Run the following command to install the application, with _chip-dir_
+ replaced with the path to the CHIP source directory:
+
+ $ adb install -r chip-dir/src/android/CHIPTool/app/build/outputs/apk/debug/app-debug.apk
+
+6. Navigate to settings on your smartphone and grant **Camera** and
+ **Location** permissions to CHIPTool.
+
+CHIPTool is now ready to be used for commissioning.
+
+## Preparing accessory device
+
+To prepare the accessory device for commissioning, complete the following steps:
+
+1. Use a terminal emulator to connect to the UART console of the accessory
+ device. For details, see the
+ [Using CLI in nRF Connect SDK examples](nrfconnect_examples_cli.md) guide.
+ This will grant you access to the application logs.
+2. Hold **Button 1** on the accessory device for more than 6 s to trigger the
+ factory reset of the device.
+3. Find a message similar to the following one in the application logs:
+
+ I: 666[SVR] Copy/paste the below URL in a browser to see the QR Code:
+ https://dhrishi.github.io/connectedhomeip/qrcode.html?data=CH%3AI34DV%2A-00%200C9SS0
+
+4. Open the URL in a web browser to have the commissioning QR code generated.
+5. Push **Button 4** on the device to start Bluetooth LE advertising.
+
+## Commissioning accessory device
+
+To commission the accessory device onto the Thread network created in the
+[Forming Thread network](#Forming-a-Thread-network) section, complete the
+following steps:
+
+1. Enable **Bluetooth** and **Location** services on your smartphone.
+2. Connect the smartphone to the Wi-Fi Hotspot created in the
+ [Configuring Wi-Fi hotspot](#Configuring-a-Wi-Fi-hotspot) section.
+3. Open the CHIPTool application on your smartphone.
+4. Tap the **SCAN QR CODE** button and scan the commissioning QR code.
+5. Tap the **Rendezvous over BLE** button to initiate the commissioning
+ procedure. You will see a few pop-up messages appear as the commissioning
+ progresses. Eventually, the network settings screen appears.
+6. In the new screen, open the **THREAD** tab.
+7. Tap the **Save Network** button to send a Thread provisioning message to the
+ accessory device.
+
+You will see the "Network provisioning completed" message when the accessory
+device successfully joins the Thread network.
+
+## Sending CHIP commands
+
+Once the device is commissioned, check the connection with the following
+commands:
+
+1. Go back to the main application screen.
+2. Tap the **LIGHT ON/OFF CLUSTER** button.
+3. Verify that the text box on the next screen contains the IPv6 address of the
+ accessory device.
+4. Tap either the **ON** or the **OFF** button to lock or unlock the door,
+ respectively. The **LED 2** on the device turns on or off based on the
+ changes of the lock state.
diff --git a/docs/guides/nrfconnect_examples_cli.md b/docs/guides/nrfconnect_examples_cli.md
new file mode 100644
index 00000000000000..79fce4c20eae73
--- /dev/null
+++ b/docs/guides/nrfconnect_examples_cli.md
@@ -0,0 +1,87 @@
+# Using CLI in nRF Connect SDK examples
+
+The following examples for the development kits from Nordic Semiconductor
+include a command-line interface that allows access to application logs and
+[Zephyr shell](https://docs.zephyrproject.org/1.13.0/subsystems/shell.html):
+
+- [CHIP nRF Connect Lock Example Application](../../examples/lock-app/nrfconnect/README.md)
+- [CHIP nRF Connect Lighting Example Application](../../examples/lighting-app/nrfconnect/README.md)
+
+The
+[CHIP nRF Connect Pigweed Example Application](../../examples/pigweed-app/nrfconnect/README.md)
+does not support CLI.
+
+## Accessing the CLI console
+
+To access the CLI console, use a serial terminal emulator of your choice, like
+Minicom or GNU Screen. Use the baud rate set to `115200`.
+
+For example, to start using the CLI console with Minicom, run the following
+command with _/dev/ttyACM0_ replaced with the device node name of your
+development kit:
+
+ $ minicom -D /dev/ttyACM0 -b 115200
+
+When you reboot the board, you will see the boot logs in the console, similar to
+the following messages:
+
+```shell
+uart:~$
+I: nRF5 802154 radio initialized
+I: 8 Sectors of 4096 bytes
+I: alloc wra: 0, ff0
+I: data wra: 0, 0
+*** Booting Zephyr OS build v2.4.0-ncs1 ***
+I: Init CHIP stack
+...
+```
+
+This means that the console is working correctly and you can start using shell
+commands. For example, issuing the `kernel threads` command will print
+information about all running threads:
+
+```shell
+uart:~$ kernel threads
+Scheduler: 277 since last call
+Threads:
+ 0x20006518 CHIP
+ options: 0x0, priority: -1 timeout: 536896912
+ state: pending
+ stack size 8192, unused 7256, usage 936 / 8192 (11 %)
+
+ 0x20004ab0 SDC RX
+ options: 0x0, priority: -10 timeout: 536890152
+ state: pending
+ stack size 1024, unused 848, usage 176 / 1024 (17 %)
+...
+```
+
+## Listing all commands
+
+To list all available commands, use the Tab key, which is normally used for the
+command completion feature.
+
+Pressing the Tab key in an empty command line prints the list of available
+commands:
+
+```shell
+uart:~$
+ clear date device flash
+ help history kernel nrf_clock_control
+ ot resize shell
+```
+
+Pressing the Tab key with a command entered in the command line cycles through
+available options for the given command.
+
+## Using OpenThread commands
+
+[OpenThread commands](https://github.com/openthread/openthread/blob/master/src/cli/README.md)
+are also accessible from the shell. However, they must preceded by `ot`. For
+example:
+
+```shell
+uart:~$ ot masterkey
+00112233445566778899aabbccddeeff
+Done
+```
diff --git a/docs/guides/nrfconnect_examples_configuration.md b/docs/guides/nrfconnect_examples_configuration.md
new file mode 100644
index 00000000000000..30f8ad2b67995e
--- /dev/null
+++ b/docs/guides/nrfconnect_examples_configuration.md
@@ -0,0 +1,150 @@
+# Configuring nRF Connect SDK examples
+
+The nRF Connect SDK example applications all come with a default configuration
+for building. Check the information on this page if you want to modify the
+application configuration or add new functionalities to build your own
+application based on the provided example. This page also contains information
+about the configuration structure, which can be useful to better understand the
+building process.
+
+This guide can be used with the following examples:
+
+- [CHIP nRF Connect Lock Example Application](../../examples/lock-app/nrfconnect/README.md)
+- [CHIP nRF Connect Lighting Example Application](../../examples/lighting-app/nrfconnect/README.md)
+- [CHIP nRF Connect Pigweed Example Application](../../examples/pigweed-app/nrfconnect/README.md)
+
+
+
+## Configuring application
+
+Changing the default application configuration can be done either temporarily or
+permanently. Changing configuration temporarily is useful for testing the impact
+of changes on the application behavior. Making permanent changes is better if
+you want to develop your own application, as it helps avoid repeating the
+configuration process.
+
+
+
+### Temporary changes to configuration
+
+You can change the configuration temporarily by editing the `.config` file in
+the `build/zephyr/` directory, which stores all configuration options for the
+application generated as a result of the build process. As long as you do not
+remove the current build directory or delete this file, your changes will be
+kept. However, if you do a clean build, your changes are gone, so it is not
+possible to save changes permanently this way.
+
+Complete the following steps:
+
+1. Build the application by typing the following command in the example
+ directory, with _board-name_ replaced with the target board name, for
+ example _nrf52840dk_nrf52840_:
+
+ $ west build -b board-name
+
+2. Run the terminal-based interface called menuconfig by typing the following
+ command:
+
+ $ west build -t menuconfig
+
+ The menuconfig terminal window appears, in which you can navigate using
+ arrow keys and other keys, based on the description at the bottom of the
+ window.
+
+3. Make the desired changes by following the menuconfig terminal instructions.
+4. Press `Q` to save and quit.
+5. Rebuild the application.
+
+At this point, the configuration changes are applied to the output file and it
+can be flashed to the device.
+
+
+
+### Permanent changes to configuration
+
+The permanent solution is based on modifying the Kconfig configuration files,
+which are used as components of the building process. This makes the changes
+persistent across builds.
+
+The best practice to make permanent changes is to edit the main application
+configuration file `prj.conf`, which is located in the example directory. This
+will result in overriding the existing configuration values.
+
+This method is valid for the majority of cases. If you are interested in
+understanding the big picture of the configuration process, read the
+[Configuration structure overview](#configuration-structure-overview) section
+below.
+
+#### Assigning values to Kconfig options
+
+Assigning value to a configuration option is done by typing its full name
+preceded by the `CONFIG_` prefix, and adding the `=` mark and the value.
+
+Configuration options have different types and it is only possible to assign
+them values of proper type. Few examples:
+
+- Assigning logical boolean true value to the option:
+ `CONFIG_SAMPLE_BOOLEAN_OPTION=y`
+- Assigning numeric integer 1234 value to the option:
+ `CONFIG_SAMPLE_INTEGER_OPTION=1234`
+- Assigning text string "some_text" value to the option:
+ `CONFIG_SAMPLE_STRING_OPTION="some_text"`
+
+For more detailed information, read about
+[setting Kconfig values](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/guides/kconfig/setting.html#setting-configuration-values)
+in the nRF Connect SDK documentation.
+
+Because Kconfig configuration files are used in the building process, make sure
+that you rebuild your application after editing them by typing the following
+command in the example directory, with _board-name_ replaced with the target
+board name, for example _nrf52840dk_nrf52840_:
+
+ $ west build -b board-name
+
+
+
+
+
+## Configuration structure overview
+
+Zephyr RTOS and related software components, like drivers and libraries, provide
+a set of Kconfig files which define available configuration options and assign
+them default values for any application.
+
+The application configuration is specified using Kconfig configuration files
+(`*.conf`), where available Kconfig options can be used and their default values
+overrided. Typically, there are many files having impact on the final
+configuration shape.
+
+There is no need to modify all these files separately. See the following list
+for types of files you can find in the project and which of them are important
+from your perspective:
+
+- **Board configuration files.** These are hardware-platform-dependent
+ configuration files, which are automatically included based on the
+ compilation target board name. They contain configuration for board and its
+ peripherals.
+
+- **Project configuration file.** Every example application has its main
+ configuration file called `prj.conf` that is located in the example
+ directory. This file contains application-specific configuration or the most
+ frequently changed options. Almost every configuration can be overridden in
+ this file and probably this file is the most important one.
+
+- **Overlays.** Overlays are optional files usually used to extract
+ configuration for some specific case or feature from the general application
+ configuration. The main difference between them and the application
+ `prj.conf` file is that they are not included automatically, so you can
+ decide whether to build sample with or without them. Overlay files can be
+ added to build by typing the following command in the example directory,
+ with _board-name_ replaced with the target board name (e.g.
+ _nrf52840dk_nrf52840_) and _overlay_file_name_ replaced with the overlay
+ configuration file name (e.g. _overlay-usb_support.conf_):
+
+ $ west build -b board-name -- -DOVERLAY_CONFIG=overlay_file_name
+
+Read the
+[Kconfig](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/guides/kconfig/index.html#kconfig)
+guide in the nRF Connect SDK's Zephyr documentation if you are interested in
+getting more advanced and detailed information about the configuration
+structure.
diff --git a/docs/guides/nrfconnect_platform_overview.md b/docs/guides/nrfconnect_platform_overview.md
new file mode 100644
index 00000000000000..b91cd0e97ef2de
--- /dev/null
+++ b/docs/guides/nrfconnect_platform_overview.md
@@ -0,0 +1,92 @@
+# nRF Connect platform overview
+
+The nRF Connect platform is a
+[CHIP](https://github.com/project-chip/connectedhomeip) platform that uses
+Nordic Semiconductor's nRF Connect SDK.
+
+The following diagram shows a simplified structure of a CHIP application that
+runs on the nRF Connect platform and uses BLE and Thread stacks for
+communication purposes:
+
+![nrfconnect platform overview](../images/chip_nrfconnect_overview_simplified.svg)
+
+> **Note**: For readability, the diagram does not show all projects components,
+> only the most important ones for a typical CHIP application.
+
+
+
+## nRF Connect SDK
+
+Nordic Semiconductor's
+[nRF Connect SDK](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/index.html)
+allows to build a range of applications, including cellular IoT (LTE-M and
+NB-IoT), Bluetooth Low Energy, Thread, Zigbee, and Bluetooth mesh. The SDK
+contains samples, libraries and a full set of drivers for Nordic Semiconductor's
+[nRF9160](https://www.nordicsemi.com/Products/Low-power-cellular-IoT/nRF9160),
+[nRF5340](https://www.nordicsemi.com/Software-and-tools/Development-Kits/nRF5340-PDK),
+and
+[nRF52 Series](https://www.nordicsemi.com/Products/Low-power-short-range-wireless)
+devices.
+
+The nRF Connect SDK is based around [Zephyr RTOS](https://zephyrproject.org/),
+which is a scalable real-time operating system dedicated for the connected,
+resource-constrained devices. Zephyr supports multiple hardware platforms and
+provides hardware drivers, application protocols, protocol stacks, and more.
+Besides Zephyr, the nRF Connect SDK also integrates other projects like crypto
+library mbedTLS, MCU bootloader or the [OpenThread](https://openthread.io/)
+implementation of the Thread stack.
+
+
+
+## Bluetooth LE and Thread stacks
+
+In the nRF Connect platform applications, the Bluetooth LE interface is used to
+perform pairing and Thread network provisioning operations between the CHIP
+device and the CHIP controller. Afterwards, the fully provisioned device is able
+to communicate with other devices inside the Thread network.
+
+For the Bluetooth LE communication purposes, the nRF Connect platform
+application is using the Bluetooth LE stack, in which the Bluetooth LE Host part
+is provided by the Zephyr RTOS and the
+[SoftDevice Controller](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrfxlib/softdevice_controller/README.html)
+is implemented in the nRF Connect SDK's driver.
+
+For the Thread communication purposes, the nRF Connect platform application is
+using the Thread stack, which consists of several layers implemented in
+different projects. The core of the Thread stack is OpenThread, but it also
+requires the IEEE 802.15.4 radio driver provided by the nRF Connect SDK and the
+network layer functionalities provided by the Zephyr.
+
+The nRF Connect SDK's Multiprotocol Service Layer (MPSL) driver allows running
+Bluetooth LE and Thread concurrently on the same radio chip.
+
+
+
+## CHIP integration
+
+CHIP is located on the top application layer of the presented model, looking
+from the networking point of view. The Bluetooth LE and Thread stacks provided
+by the nRF Connect SDK and Zephyr must be integrated with the CHIP stack using a
+special intermediate layer.
+
+In practice, this layer contains platform-specific implementations of abstract
+manager interfaces (such as Bluetooth LE Manager or Thread Stack Manager)
+defined in the CHIP stack. The application is able to use CHIP's platform
+agnostic interfaces and no additional platform-related actions are needed to
+perform communication through the CHIP stack.
+
+
+
+## Build system
+
+The nRF Connect platform makes use of the following build systems to generate
+ninja build scripts:
+
+- GN - Used by the CHIP project in majority of cases.
+- CMake - Used by other components related with the nRF Connect platform,
+ namely nRF Connect SDK and Zephyr.
+
+As a result, CHIP's stack and platform modules are built with GN (see the
+overview diagram) and the output is used to generate the library file. The
+application, nRF Connect SDK, and Zephyr are built with CMake and the CHIP
+library file is imported during the compilation process.
diff --git a/docs/images/chip_nrfconnect_overview_simplified.svg b/docs/images/chip_nrfconnect_overview_simplified.svg
new file mode 100644
index 00000000000000..04feda20e9c3f1
--- /dev/null
+++ b/docs/images/chip_nrfconnect_overview_simplified.svg
@@ -0,0 +1,387 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page-1
+
+
+
+
+ Sheet.55
+
+
+
+ Sheet.56
+ nRF device
+
+
+
+ nRF device
+
+ Sheet.59
+
+
+
+ Sheet.60
+ Application
+
+
+
+ Application
+
+ Sheet.61
+
+
+
+ Sheet.62
+ Bluetooth LE stack
+
+
+
+ Bluetooth LE stack
+
+ Sheet.67
+
+
+
+ Sheet.71
+ Thread stack (OpenThread)
+
+
+
+ Thread stack (OpenThread)
+
+ Sheet.117
+ Zephyr host
+
+
+
+ Zephyr host
+
+
+ Sheet.107
+ Secure boot
+
+ Sheet.108
+
+
+
+
+
+ Multiprotocol Service Layer(MPSL)
+
+
+ Sheet.118
+ SoftDevice Controller
+
+
+
+ SoftDevice Controller
+
+ Sheet.82
+ L2CAP
+
+
+
+ L2CAP
+
+ Sheet.78
+ GATT
+
+
+
+ GATT
+
+ Sheet.80
+ ATT
+
+
+
+ ATT
+
+ Sheet.88
+ GAP
+
+
+
+ GAP
+
+ Sheet.119
+
+
+
+ Sheet.120
+ HCI (RAM)
+
+
+
+ HCI (RAM)
+
+
+ Sheet.187
+ Secure boot
+
+ Sheet.188
+
+
+
+
+
+ Zephyr integration
+
+
+ Sheet.100
+
+
+
+ Sheet.102
+ nRF IEEE 802.15.4 radio driver
+
+
+
+ nRF IEEE 802.15.4 radio driver
+
+ Sheet.189
+
+
+
+ Sheet.190
+ Zephyr network layer
+
+
+
+ Zephyr network layer
+
+ Sheet.191
+
+
+
+ Sheet.192
+ UDP
+
+
+
+ UDP
+
+ Sheet.193
+
+
+
+ Sheet.194
+ TCP
+
+
+
+ TCP
+
+ Sheet.195
+
+
+
+ Sheet.196
+ IPv6
+
+
+
+ IPv6
+
+ Sheet.197
+ Drivers and modules
+
+
+
+ Drivers and modules
+
+ Sheet.206
+ Crypto backends
+
+
+
+ Crypto backends
+
+ Sheet.209
+ NFC
+
+
+
+ NFC
+
+ Sheet.210
+ DFU
+
+
+
+ DFU
+
+ Sheet.211
+ Partition Manager
+
+
+
+ Partition Manager
+
+ Sheet.212
+ Zephyr APIs
+
+
+
+ Zephyr APIs
+
+ Sheet.213
+ Driver API
+
+
+
+ Driver API
+
+ Sheet.214
+ Crypto API
+
+
+
+ Crypto API
+
+ Sheet.217
+ Zephyr RTOS kernel
+
+
+
+ Zephyr RTOS kernel
+
+ Sheet.220
+ MCU bootloader
+
+
+
+ MCU bootloader
+
+ Sheet.221
+ mbedTLS
+
+
+
+ mbedTLS
+
+ Sheet.222
+
+
+
+ Sheet.223
+ CHIP stack
+
+
+
+ CHIP stack
+
+ Sheet.224
+
+
+
+ Sheet.225
+ Zephyr integration layer
+
+
+
+ Zephyr integration layer
+
+ Sheet.227
+
+
+
+ Sheet.229
+ SMP
+
+
+
+ SMP
+
+ Sheet.231
+ CHIP (built with GN)
+
+
+
+ CHIP(built with GN)
+
+ Sheet.232
+ Third-party
+
+
+
+ Third-party
+
+ Sheet.233
+ CHIP
+
+
+
+ CHIP
+
+ Sheet.234
+ Zephyr
+
+
+
+ Zephyr
+
+ Sheet.235
+ nRF Connect SDK
+
+
+
+ nRF Connect SDK
+
+
diff --git a/docs/style/coding/CODING_STYLE_GUIDE.adoc b/docs/style/coding/CODING_STYLE_GUIDE.adoc
index 594501851c3425..453ab3d80b4513 100644
--- a/docs/style/coding/CODING_STYLE_GUIDE.adoc
+++ b/docs/style/coding/CODING_STYLE_GUIDE.adoc
@@ -104,7 +104,7 @@ standards listed in Table 2.1 below.
|Language |Minimum Standard |Aliases
|C|ISO9899:1999|ISO C99, C99
-|C{plusplus}|ISO14882:2011|ISO C{plusplus}11, C{plusplus}11
+|C{plusplus}|ISO14882:2014|ISO C{plusplus}14, C{plusplus}14
|===
[.text-center]
*Table 2.1.*Â C and C{plusplus} language minimum standards adopted by Project CHIP
@@ -137,11 +137,11 @@ have long-since been solved by C99.
=== C{plusplus}
-Project CHIP embedded software development uses the ISO14882:2011 (aka
-ISO C{plusplus}11) language standard as a baseline for source code
+Project CHIP embedded software development uses the ISO14882:2014 (aka
+ISO C{plusplus}14) language standard as a baseline for source code
compatibility. Conformance with other standards, for example, ISO14882:1998
(aka ISO C{plusplus}98), may be additionally required in cases where wider
-portability is necessary, but in all cases, ISO C{plusplus}11 is the baseline
+portability is necessary, but in all cases, ISO C{plusplus}14 is the baseline
requirement.
Wherever possible, particularly in non-product-specific,
@@ -151,50 +151,12 @@ leveraged through toolchain-compatibility preprocessor macros.
==== Motivation and Rationale
-At the time of this writing, the C{plusplus}11 standard has been out for over
-seven years in one form or another and has been twice supplanted, once
-by C{plusplus}14 and again by C{plusplus}17. Project CHIP and the source code it has
-produced are nearly concurrent with C{plusplus}11.
+CHIP strives to use the latest C++ functionality as long as existing compilers
+support such standards.
-This is beyond more than adequate time for this standard to be pervasive
-throughout any toolchain vendor’s C{plusplus} compiler and saves team members
-from worrying about portability issues that have long-since been solved
-by C{plusplus}11.
-
-By contrast, ISO14882:2014 (aka ISO C{plusplus}14, C{plusplus}14) and ISO14882:2017 (aka
-ISO C{plusplus}17, C{plusplus}17), are still insufficiently broad and pervasive in their
-toolchain support to warrant the introduction of dependencies on these
-standards across all software.
-
-Note, that while C{plusplus}11 is the C{plusplus} language bar, per Figure 1, embrace of
-C{plusplus}11 language- and library-specific features should be approached
-thoughtfully and carefully, depending on the deployment context. A
-loosely-constrained embedded Linux or Darwin application may want a
-broad embrace of C{plusplus}11 language and library features whereas a
-tightly-constrained piece of shared infrastructure may want to eschew
-C{plusplus}11 entirely or conditionally depend on language-specific features,
-where appropriate.
-
-That said, suitable portability mnemonics, for example, via the C
-preprocessor should be used where possible and appropriate to maximize
-code portability, particularly for shared embedded product software. An
-example of such a portability mnemonic is shown in Listing 2.1 below.
-
-[source,C]
-----
-#ifdef __cplusplus
-# if __cplusplus >= 201103L
-# define __chipFINAL final
-# else
-# define __chipFINAL
-# endif
-#else
-#define __chipFINAL
-#endif
-----
-[.text-center]
-*Listing 2.1.*Â Using the C preprocessor to provide a portability mnemonic
-for the C{plusplus}11 and later final keyword.
+C{plusplus}14 is considered pervasive enough to be used. As compilers start
+supporting standards such as C{plusplus}17, C{plusplus}20 and beyond,
+CHIP may follow suit.
== Conventions and Best Practices
diff --git a/examples/all-clusters-app/all-clusters-common/BUILD.gn b/examples/all-clusters-app/all-clusters-common/BUILD.gn
new file mode 100644
index 00000000000000..556d8ffbda1fd0
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/BUILD.gn
@@ -0,0 +1,70 @@
+# 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.
+
+import("//build_overrides/chip.gni")
+
+config("includes") {
+ include_dirs = [
+ ".",
+ "include",
+ ]
+}
+
+source_set("all-clusters-common") {
+ sources = [
+ "${chip_root}/examples/common/chip-app-server/DataModelHandler.cpp",
+ "${chip_root}/src/app/clusters/barrier-control-server/barrier-control-server.cpp",
+ "${chip_root}/src/app/clusters/basic/basic.cpp",
+ "${chip_root}/src/app/clusters/color-control-server/color-control-server.cpp",
+ "${chip_root}/src/app/clusters/door-lock-client/door-lock-client.cpp",
+ "${chip_root}/src/app/clusters/door-lock-server/door-lock-server-core.cpp",
+ "${chip_root}/src/app/clusters/door-lock-server/door-lock-server-logging.cpp",
+ "${chip_root}/src/app/clusters/door-lock-server/door-lock-server-schedule.cpp",
+ "${chip_root}/src/app/clusters/door-lock-server/door-lock-server-user.cpp",
+ "${chip_root}/src/app/clusters/groups-client/groups-client.cpp",
+ "${chip_root}/src/app/clusters/groups-server/groups-server.cpp",
+ "${chip_root}/src/app/clusters/ias-zone-server/ias-zone-server.cpp",
+ "${chip_root}/src/app/clusters/identify-client/identify-client.cpp",
+ "${chip_root}/src/app/clusters/identify/identify.cpp",
+ "${chip_root}/src/app/clusters/level-control/level-control.cpp",
+ "${chip_root}/src/app/clusters/on-off-server/on-off.cpp",
+ "${chip_root}/src/app/clusters/scenes-client/scenes-client.cpp",
+ "${chip_root}/src/app/clusters/scenes/scenes.cpp",
+ "${chip_root}/src/app/clusters/temperature-measurement-server/temperature-measurement-server.cpp",
+ "${chip_root}/src/app/reporting/reporting-default-configuration.cpp",
+ "${chip_root}/src/app/reporting/reporting.cpp",
+ "${chip_root}/src/app/util/af-event.cpp",
+ "${chip_root}/src/app/util/af-main-common.cpp",
+ "${chip_root}/src/app/util/attribute-size.cpp",
+ "${chip_root}/src/app/util/attribute-storage.cpp",
+ "${chip_root}/src/app/util/attribute-table.cpp",
+ "${chip_root}/src/app/util/binding-table.cpp",
+ "${chip_root}/src/app/util/chip-message-send.cpp",
+ "${chip_root}/src/app/util/client-api.cpp",
+ "${chip_root}/src/app/util/ember-print.cpp",
+ "${chip_root}/src/app/util/message.cpp",
+ "${chip_root}/src/app/util/process-cluster-message.cpp",
+ "${chip_root}/src/app/util/process-global-message.cpp",
+ "${chip_root}/src/app/util/util.cpp",
+ "gen/call-command-handler.cpp",
+ "gen/callback-stub.cpp",
+ ]
+
+ deps = [
+ "${chip_root}/examples/common/chip-app-server:chip-app-server",
+ "${chip_root}/src/lib",
+ ]
+
+ public_configs = [ ":includes" ]
+}
diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap
new file mode 100644
index 00000000000000..204240cdfae12c
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap
@@ -0,0 +1,2825 @@
+{
+ "writeTime": "Wed Nov 18 2020 10:23:41 GMT+0100 (Central European Standard Time)",
+ "featureLevel": 4,
+ "creator": "zap",
+ "keyValuePairs": [
+ {
+ "key": "commandDiscovery",
+ "value": "1"
+ },
+ {
+ "key": "defaultResponsePolicy",
+ "value": "always"
+ },
+ {
+ "key": "manufacturerCodes",
+ "value": "0x1002"
+ }
+ ],
+ "package": [
+ {
+ "pathRelativity": "relativeToZap",
+ "path": "../../../../third_party/zap/repo/zcl-builtin/silabs/zcl.json",
+ "version": "ZCL Test Data",
+ "type": "zcl-properties"
+ },
+ {
+ "pathRelativity": "relativeToZap",
+ "path": "../../../../src/app/zap-templates/chip-templates.json",
+ "version": "chip-v1",
+ "type": "gen-templates-json"
+ }
+ ],
+ "endpointTypes": [
+ {
+ "name": "Anonymous Endpoint Type",
+ "deviceTypeName": null,
+ "deviceTypeCode": null,
+ "deviceTypeProfileId": null,
+ "clusters": [
+ {
+ "name": "Basic",
+ "code": 0,
+ "mfgCode": null,
+ "define": "BASIC_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ResetToFactoryDefaults",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Basic",
+ "code": 0,
+ "mfgCode": null,
+ "define": "BASIC_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ZCL version",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x08",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "power source",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
+ "commands": []
+ },
+ {
+ "name": "Identify",
+ "code": 3,
+ "mfgCode": null,
+ "define": "IDENTIFY_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "Identify",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "IdentifyQuery",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Identify",
+ "code": 3,
+ "mfgCode": null,
+ "define": "IDENTIFY_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "IdentifyQueryResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "identify time",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Groups",
+ "code": 4,
+ "mfgCode": null,
+ "define": "GROUPS_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddGroup",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ViewGroup",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetGroupMembership",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveGroup",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveAllGroups",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "AddGroupIfIdentifying",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Groups",
+ "code": 4,
+ "mfgCode": null,
+ "define": "GROUPS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddGroupResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ViewGroupResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetGroupMembershipResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveGroupResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "name support",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Scenes",
+ "code": 5,
+ "mfgCode": null,
+ "define": "SCENES_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddScene",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ViewScene",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveScene",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveAllScenes",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StoreScene",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RecallScene",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetSceneMembership",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Scenes",
+ "code": 5,
+ "mfgCode": null,
+ "define": "SCENES_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddSceneResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ViewSceneResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveSceneResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveAllScenesResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StoreSceneResponse",
+ "code": 4,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetSceneMembershipResponse",
+ "code": 6,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "scene count",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "current scene",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "current group",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "scene valid",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "name support",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "On/off",
+ "code": 6,
+ "mfgCode": null,
+ "define": "ON_OFF_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "Off",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "On",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "Toggle",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "On/off",
+ "code": 6,
+ "mfgCode": null,
+ "define": "ON_OFF_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "on/off",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Level Control",
+ "code": 8,
+ "mfgCode": null,
+ "define": "LEVEL_CONTROL_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "MoveToLevel",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "Move",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "Step",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "Stop",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "MoveToLevelWithOnOff",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "MoveWithOnOff",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StepWithOnOff",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StopWithOnOff",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Level Control",
+ "code": 8,
+ "mfgCode": null,
+ "define": "LEVEL_CONTROL_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "current level",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Door Lock",
+ "code": 257,
+ "mfgCode": null,
+ "define": "DOOR_LOCK_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "LockDoor",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "UnlockDoor",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "UnlockWithTimeout",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetLogRecord",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetPin",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetPin",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearPin",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearAllPins",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetWeekdaySchedule",
+ "code": 11,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetWeekdaySchedule",
+ "code": 12,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearWeekdaySchedule",
+ "code": 13,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetYeardaySchedule",
+ "code": 14,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetYeardaySchedule",
+ "code": 15,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearYeardaySchedule",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetHolidaySchedule",
+ "code": 17,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetHolidaySchedule",
+ "code": 18,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearHolidaySchedule",
+ "code": 19,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetUserType",
+ "code": 20,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetUserType",
+ "code": 21,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetRfid",
+ "code": 22,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetRfid",
+ "code": 23,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearRfid",
+ "code": 24,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearAllRfids",
+ "code": 25,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Door Lock",
+ "code": 257,
+ "mfgCode": null,
+ "define": "DOOR_LOCK_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "LockDoorResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "UnlockDoorResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "lock state",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "lock type",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "actuator enabled",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "door state",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "enable logging",
+ "code": 32,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "language",
+ "code": 33,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "led settings",
+ "code": 34,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "auto relock time",
+ "code": 35,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "sound volume",
+ "code": 36,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "operating mode",
+ "code": 37,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "default configuration register",
+ "code": 39,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "enable local programming",
+ "code": 40,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x01",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "enable one touch locking",
+ "code": 41,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "enable inside status led",
+ "code": 42,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "enable privacy mode button",
+ "code": 43,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "wrong code entry limit",
+ "code": 48,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "user code temporary disable time",
+ "code": 49,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "send pin over the air",
+ "code": 50,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "require pin for rf operation",
+ "code": 51,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "zigbee security level",
+ "code": 52,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "alarm mask",
+ "code": 64,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "keypad operation event mask",
+ "code": 65,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RF operation event mask",
+ "code": 66,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "manual operation event mask",
+ "code": 67,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "rfid operation event mask",
+ "code": 68,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "keypad programming event mask",
+ "code": 69,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "rf programming event mask",
+ "code": 70,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "rfid programming event mask",
+ "code": 71,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Barrier Control",
+ "code": 259,
+ "mfgCode": null,
+ "define": "BARRIER_CONTROL_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "BarrierControlGoToPercent",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "BarrierControlStop",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Barrier Control",
+ "code": 259,
+ "mfgCode": null,
+ "define": "BARRIER_CONTROL_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "barrier moving state",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "barrier safety status",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "barrier capabilities",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "barrier position",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Color Control",
+ "code": 768,
+ "mfgCode": null,
+ "define": "COLOR_CONTROL_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "MoveToHue",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "MoveHue",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StepHue",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "MoveToSaturation",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "MoveSaturation",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StepSaturation",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "MoveToHueAndSaturation",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "MoveToColor",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "MoveColor",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StepColor",
+ "code": 9,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "MoveToColorTemperature",
+ "code": 10,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StopMoveStep",
+ "code": 71,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "MoveColorTemperature",
+ "code": 75,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StepColorTemperature",
+ "code": 76,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Color Control",
+ "code": 768,
+ "mfgCode": null,
+ "define": "COLOR_CONTROL_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "current hue",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "current saturation",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "remaining time",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "current x",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x616B",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "current y",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x607D",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "drift compensation",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "compensation text",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color temperature",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00FA",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color mode",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x01",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color control options",
+ "code": 15,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "number of primaries",
+ "code": 16,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 1 x",
+ "code": 17,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 1 y",
+ "code": 18,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 1 intensity",
+ "code": 19,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 2 x",
+ "code": 21,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 2 y",
+ "code": 22,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 2 intensity",
+ "code": 23,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 3 x",
+ "code": 25,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 3 y",
+ "code": 26,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 3 intensity",
+ "code": 27,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 4 x",
+ "code": 32,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 4 y",
+ "code": 33,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 4 intensity",
+ "code": 34,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 5 x",
+ "code": 36,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 5 y",
+ "code": 37,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 5 intensity",
+ "code": 38,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 6 x",
+ "code": 40,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 6 y",
+ "code": 41,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 6 intensity",
+ "code": 42,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "white point x",
+ "code": 48,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "white point y",
+ "code": 49,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color point r x",
+ "code": 50,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color point r y",
+ "code": 51,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color point r intensity",
+ "code": 52,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color point g x",
+ "code": 54,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color point g y",
+ "code": 55,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color point g intensity",
+ "code": 56,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color point b x",
+ "code": 58,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color point b y",
+ "code": 59,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color point b intensity",
+ "code": 60,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "couple color temp to level min-mireds",
+ "code": 16397,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "start up color temperature mireds",
+ "code": 16400,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "enhanced current hue",
+ "code": 16384,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "enhanced color mode",
+ "code": 16385,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x01",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color loop active",
+ "code": 16386,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color loop direction",
+ "code": 16387,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color loop time",
+ "code": 16388,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0019",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color capabilities",
+ "code": 16394,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color temp physical min",
+ "code": 16395,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "color temp physical max",
+ "code": 16396,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0xFEFF",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
+ "commands": []
+ },
+ {
+ "name": "Temperature Measurement",
+ "code": 1026,
+ "mfgCode": null,
+ "define": "TEMP_MEASUREMENT_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Temperature Measurement",
+ "code": 1026,
+ "mfgCode": null,
+ "define": "TEMP_MEASUREMENT_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "measured value",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x8000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "min measured value",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x8000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "max measured value",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x8000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "tolerance",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "included": 0,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "IAS Zone",
+ "code": 1280,
+ "mfgCode": null,
+ "define": "IAS_ZONE_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "ZoneEnrollResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "IAS Zone",
+ "code": 1280,
+ "mfgCode": null,
+ "define": "IAS_ZONE_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ZoneStatusChangeNotification",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ZoneEnrollRequest",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "zone state",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "zone type",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "zone status",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "IAS CIE address",
+ "code": 16,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "Zone ID",
+ "code": 17,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0xff",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "endpoints": [
+ {
+ "endpointTypeName": "Anonymous Endpoint Type",
+ "endpointTypeIndex": 0,
+ "profileId": "0x0103",
+ "endpointId": 1,
+ "networkId": 1
+ }
+ ]
+}
diff --git a/examples/wifi-echo/server/esp32/main/gen/af-gen-event.h b/examples/all-clusters-app/all-clusters-common/gen/af-gen-event.h
similarity index 89%
rename from examples/wifi-echo/server/esp32/main/gen/af-gen-event.h
rename to examples/all-clusters-app/all-clusters-common/gen/af-gen-event.h
index 5674b0953a418d..8c1cc0513cdd79 100644
--- a/examples/wifi-echo/server/esp32/main/gen/af-gen-event.h
+++ b/examples/all-clusters-app/all-clusters-common/gen/af-gen-event.h
@@ -50,20 +50,16 @@
extern EmberEventControl emberAfPluginColorControlServerXyTransitionEventControl; \
extern EmberEventControl emberAfPluginDoorLockServerLockoutEventControl; \
extern EmberEventControl emberAfPluginDoorLockServerRelockEventControl; \
- extern EmberEventControl emberAfPluginIasZoneClientStateMachineEventControl; \
extern EmberEventControl emberAfPluginIasZoneServerManageQueueEventControl; \
extern EmberEventControl emberAfPluginReportingTickEventControl; \
- extern EmberEventControl emberAfPluginTemperatureMeasurementServerReadEventControl; \
extern void emberAfPluginColorControlServerHueSatTransitionEventHandler(void); \
extern void emberAfPluginColorControlServerTempTransitionEventHandler(void); \
extern void emberAfPluginColorControlServerXyTransitionEventHandler(void); \
extern void emberAfPluginDoorLockServerLockoutEventHandler(void); \
extern void emberAfPluginDoorLockServerRelockEventHandler(void); \
- extern void emberAfPluginIasZoneClientStateMachineEventHandler(void); \
extern void emberAfPluginIasZoneServerManageQueueEventHandler(void); \
extern void emberAfPluginReportingTickEventHandler(void); \
- extern void emberAfPluginTemperatureMeasurementServerReadEventHandler(void); \
- static void clusterTickWrapper(EmberEventControl * control, EmberAfTickFunction callback, uint8_t endpoint) \
+ static void clusterTickWrapper(EmberEventControl * control, EmberAfTickFunction callback, chip::EndpointId endpoint) \
{ \
/* emberAfPushEndpointNetworkIndex(endpoint); */ \
emberEventControlSetInactive(control); \
@@ -102,18 +98,15 @@
{ &emberAfPluginColorControlServerXyTransitionEventControl, emberAfPluginColorControlServerXyTransitionEventHandler }, \
{ &emberAfPluginDoorLockServerLockoutEventControl, emberAfPluginDoorLockServerLockoutEventHandler }, \
{ &emberAfPluginDoorLockServerRelockEventControl, emberAfPluginDoorLockServerRelockEventHandler }, \
- { &emberAfPluginIasZoneClientStateMachineEventControl, emberAfPluginIasZoneClientStateMachineEventHandler }, \
{ &emberAfPluginIasZoneServerManageQueueEventControl, emberAfPluginIasZoneServerManageQueueEventHandler }, \
- { &emberAfPluginReportingTickEventControl, emberAfPluginReportingTickEventHandler }, \
- { &emberAfPluginTemperatureMeasurementServerReadEventControl, emberAfPluginTemperatureMeasurementServerReadEventHandler },
+ { &emberAfPluginReportingTickEventControl, emberAfPluginReportingTickEventHandler },
#define EMBER_AF_GENERATED_EVENT_STRINGS \
"Identify Cluster Server EP 1", "Level Control Cluster Server EP 1", "Barrier Control Cluster Server EP 1", \
"IAS Zone Cluster Server EP 1", "Color Control Cluster Server Plugin HueSatTransition", \
"Color Control Cluster Server Plugin TempTransition", "Color Control Cluster Server Plugin XyTransition", \
- "Door Lock Server Cluster Plugin Lockout", "Door Lock Server Cluster Plugin Relock", \
- "IAS Zone Client Plugin StateMachine", "IAS Zone Server Plugin ManageQueue", "Reporting Plugin Tick", \
- "Temperature Measurement Server Cluster Plugin Read",
+ "Door Lock Server Cluster Plugin Lockout", "Door Lock Server Cluster Plugin Relock", "IAS Zone Server Plugin ManageQueue", \
+ "Reporting Plugin Tick",
// The length of the event context table used to track and retrieve cluster events
#define EMBER_AF_EVENT_CONTEXT_LENGTH 4
diff --git a/examples/lighting-app/efr32/src/gen/af-structs.h b/examples/all-clusters-app/all-clusters-common/gen/af-structs.h
similarity index 73%
rename from examples/lighting-app/efr32/src/gen/af-structs.h
rename to examples/all-clusters-app/all-clusters-common/gen/af-structs.h
index 8009281c7692c6..6d04f3faa8e82d 100644
--- a/examples/lighting-app/efr32/src/gen/af-structs.h
+++ b/examples/all-clusters-app/all-clusters-common/gen/af-structs.h
@@ -1,4 +1,5 @@
-/**
+
+/*
*
* Copyright (c) 2020 Project CHIP Authors
*
@@ -15,236 +16,195 @@
* limitations under the License.
*/
-/**
- *
- * Copyright (c) 2020 Silicon Labs
- *
- * 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.
- */
-// This file is generated by Simplicity Studio. Please do not edit manually.
-//
-//
+// Prevent multiple inclusion
+#pragma once
-// Enclosing macro to prevent multiple inclusion
-#ifndef SILABS_EMBER_AF_STRUCTS
-#define SILABS_EMBER_AF_STRUCTS
+#include "basic-types.h"
+#include "enums.h"
+#include
-// Generated structs from the metadata
-// Struct for IasAceZoneStatusResult
-typedef struct _IasAceZoneStatusResult
+// Struct for BlockThreshold
+typedef struct _BlockThreshold
{
- uint8_t zoneId;
- uint16_t zoneStatus;
-} IasAceZoneStatusResult;
+ uint8_t blockThreshold;
+ uint8_t priceControl;
+ uint32_t blockPeriodStartTime;
+ uint32_t blockPeriodDurationMinutes;
+ uint8_t fuelType;
+ uint32_t standingCharge;
+} EmberAfBlockThreshold;
-// Struct for ReadAttributeStatusRecord
-typedef struct _ReadAttributeStatusRecord
+// Struct for BlockThresholdSubPayload
+typedef struct _BlockThresholdSubPayload
{
- uint16_t attributeId;
- uint8_t status;
- uint8_t attributeType;
- uint8_t * attributeLocation;
-} ReadAttributeStatusRecord;
+ uint8_t tierNumberOfBlockThresholds;
+ uint8_t * blockThreshold;
+} EmberAfBlockThresholdSubPayload;
-// Struct for WriteAttributeRecord
-typedef struct _WriteAttributeRecord
+// Struct for ChatParticipant
+typedef struct _ChatParticipant
{
- uint16_t attributeId;
- uint8_t attributeType;
- uint8_t * attributeLocation;
-} WriteAttributeRecord;
+ uint16_t uid;
+ uint8_t * nickname;
+} EmberAfChatParticipant;
-// Struct for WriteAttributeStatusRecord
-typedef struct _WriteAttributeStatusRecord
+// Struct for ChatRoom
+typedef struct _ChatRoom
{
- uint8_t status;
- uint16_t attributeId;
-} WriteAttributeStatusRecord;
+ uint16_t cid;
+ uint8_t * name;
+} EmberAfChatRoom;
// Struct for ConfigureReportingRecord
typedef struct _ConfigureReportingRecord
{
uint8_t direction;
- uint16_t attributeId;
+ chip::AttributeId attributeId;
uint8_t attributeType;
uint16_t minimumReportingInterval;
uint16_t maximumReportingInterval;
uint8_t * reportableChangeLocation;
uint16_t timeoutPeriod;
-} ConfigureReportingRecord;
+} EmberAfConfigureReportingRecord;
// Struct for ConfigureReportingStatusRecord
typedef struct _ConfigureReportingStatusRecord
{
uint8_t status;
uint8_t direction;
- uint16_t attributeId;
-} ConfigureReportingStatusRecord;
-
-// Struct for ReadReportingConfigurationRecord
-typedef struct _ReadReportingConfigurationRecord
-{
- uint8_t status;
- uint8_t direction;
- uint16_t attributeId;
- uint8_t attributeType;
- uint16_t minimumReportingInterval;
- uint16_t maximumReportingInterval;
- uint8_t * reportableChangeLocation;
- uint16_t timeoutPeriod;
-} ReadReportingConfigurationRecord;
+ chip::AttributeId attributeId;
+} EmberAfConfigureReportingStatusRecord;
-// Struct for ReadReportingConfigurationAttributeRecord
-typedef struct _ReadReportingConfigurationAttributeRecord
+// Struct for DebtPayload
+typedef struct _DebtPayload
{
- uint8_t direction;
- uint16_t attributeId;
-} ReadReportingConfigurationAttributeRecord;
+ uint32_t collectionTime;
+ uint32_t amountCollected;
+ uint8_t debtType;
+ uint32_t outstandingDebt;
+} EmberAfDebtPayload;
-// Struct for ReportAttributeRecord
-typedef struct _ReportAttributeRecord
+// Struct for DeviceInformationRecord
+typedef struct _DeviceInformationRecord
{
- uint16_t attributeId;
- uint8_t attributeType;
- uint8_t * attributeLocation;
-} ReportAttributeRecord;
+ uint64_t ieeeAddress;
+ chip::EndpointId endpointId;
+ uint16_t profileId;
+ uint16_t deviceId;
+ uint8_t version;
+ uint8_t groupIdCount;
+ uint8_t sort;
+} EmberAfDeviceInformationRecord;
// Struct for DiscoverAttributesInfoRecord
typedef struct _DiscoverAttributesInfoRecord
{
- uint16_t attributeId;
+ chip::AttributeId attributeId;
uint8_t attributeType;
-} DiscoverAttributesInfoRecord;
+} EmberAfDiscoverAttributesInfoRecord;
-// Struct for ExtendedDiscoverAttributesInfoRecord
-typedef struct _ExtendedDiscoverAttributesInfoRecord
+// Struct for EndpointInformationRecord
+typedef struct _EndpointInformationRecord
{
- uint16_t attributeId;
- uint8_t attributeType;
- uint8_t attributeAccessControl;
-} ExtendedDiscoverAttributesInfoRecord;
+ uint16_t networkAddress;
+ chip::EndpointId endpointId;
+ uint16_t profileId;
+ uint16_t deviceId;
+ uint8_t version;
+} EmberAfEndpointInformationRecord;
-// Struct for ReadStructuredAttributeRecord
-typedef struct _ReadStructuredAttributeRecord
-{
- uint16_t attributeId;
- uint8_t indicator;
- uint16_t indicies;
-} ReadStructuredAttributeRecord;
+// Void typedef for EmberAfEphemeralData which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfEphemeralData;
-// Struct for WriteStructuredAttributeRecord
-typedef struct _WriteStructuredAttributeRecord
+// Struct for EventConfigurationPayload
+typedef struct _EventConfigurationPayload
{
- uint16_t attributeId;
- uint8_t indicator;
- uint16_t indicies;
- uint8_t attributeType;
- uint8_t * attributeLocation;
-} WriteStructuredAttributeRecord;
+ uint16_t eventId;
+ uint8_t eventConfiguration;
+} EmberAfEventConfigurationPayload;
-// Struct for WriteStructuredAttributeStatusRecord
-typedef struct _WriteStructuredAttributeStatusRecord
+// Struct for EventLogPayload
+typedef struct _EventLogPayload
{
- uint8_t status;
- uint16_t attributeId;
- uint8_t indicator;
- uint16_t indicies;
-} WriteStructuredAttributeStatusRecord;
+ uint8_t logId;
+ uint16_t eventId;
+ uint32_t eventTime;
+ uint8_t * eventData;
+} EmberAfEventLogPayload;
-// Struct for SceneExtensionAttributeInfo
-typedef struct _SceneExtensionAttributeInfo
+// Struct for ExtendedDiscoverAttributesInfoRecord
+typedef struct _ExtendedDiscoverAttributesInfoRecord
{
+ chip::AttributeId attributeId;
uint8_t attributeType;
- uint8_t * attributeLocation;
-} SceneExtensionAttributeInfo;
+ uint8_t attributeAccessControl;
+} EmberAfExtendedDiscoverAttributesInfoRecord;
-// Struct for SceneExtensionFieldSet
-typedef struct _SceneExtensionFieldSet
+// Struct for GpPairingConfigurationGroupList
+typedef struct _GpPairingConfigurationGroupList
{
- uint16_t clusterId;
- uint8_t length;
- uint8_t value;
-} SceneExtensionFieldSet;
+ uint16_t SinkGroup;
+ uint16_t Alias;
+} EmberAfGpPairingConfigurationGroupList;
-// Struct for BlockThreshold
-typedef struct _BlockThreshold
+// Struct for GpTranslationTableUpdateTranslation
+typedef struct _GpTranslationTableUpdateTranslation
{
- uint8_t blockThreshold;
- uint8_t priceControl;
- uint32_t blockPeriodStartTime;
- uint32_t blockPeriodDurationMinutes;
- uint8_t fuelType;
- uint32_t standingCharge;
-} BlockThreshold;
+ uint8_t index;
+ uint8_t gpdCommandId;
+ chip::EndpointId endpoint;
+ uint16_t profile;
+ uint16_t cluster;
+ uint8_t zigbeeCommandId;
+ uint8_t * zigbeeCommandPayload;
+ uint8_t * additionalInfoBlock;
+} EmberAfGpTranslationTableUpdateTranslation;
-// Struct for Notification
-typedef struct _Notification
+// Struct for GroupInformationRecord
+typedef struct _GroupInformationRecord
{
- uint16_t contentId;
- uint8_t statusFeedback;
-} Notification;
+ chip::GroupId groupId;
+ uint8_t groupType;
+} EmberAfGroupInformationRecord;
+
+// Struct for IasAceZoneStatusResult
+typedef struct _IasAceZoneStatusResult
+{
+ uint8_t zoneId;
+ uint16_t zoneStatus;
+} EmberAfIasAceZoneStatusResult;
+
+// Void typedef for EmberAfIdentity which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfIdentity;
// Struct for NeighborInfo
typedef struct _NeighborInfo
{
- uint8_t * neighbor;
+ uint64_t neighbor;
int16_t x;
int16_t y;
int16_t z;
int8_t rssi;
uint8_t numberRssiMeasurements;
-} NeighborInfo;
-
-// Struct for ChatParticipant
-typedef struct _ChatParticipant
-{
- uint16_t uid;
- uint8_t * nickname;
-} ChatParticipant;
-
-// Struct for ChatRoom
-typedef struct _ChatRoom
-{
- uint16_t cid;
- uint8_t * name;
-} ChatRoom;
+} EmberAfNeighborInfo;
// Struct for NodeInformation
typedef struct _NodeInformation
{
uint16_t uid;
uint16_t address;
- uint8_t endpoint;
+ chip::EndpointId endpoint;
uint8_t * nickname;
-} NodeInformation;
-
-// Struct for ScheduledPhase
-typedef struct _ScheduledPhase
-{
- uint8_t energyPhaseId;
- uint16_t scheduledTime;
-} ScheduledPhase;
+} EmberAfNodeInformation;
-// Struct for TransferredPhase
-typedef struct _TransferredPhase
+// Struct for Notification
+typedef struct _Notification
{
- uint8_t energyPhaseId;
- uint8_t macroPhaseId;
- uint16_t expectedDuration;
- uint16_t peakPower;
- uint16_t energy;
- uint16_t maxActivationDelay;
-} TransferredPhase;
+ uint16_t contentId;
+ uint8_t statusFeedback;
+} EmberAfNotification;
// Struct for PowerProfileRecord
typedef struct _PowerProfileRecord
@@ -253,192 +213,215 @@ typedef struct _PowerProfileRecord
uint8_t energyPhaseId;
uint8_t powerProfileRemoteControl;
uint8_t powerProfileState;
-} PowerProfileRecord;
+} EmberAfPowerProfileRecord;
// Struct for PriceMatrixSubPayload
typedef struct _PriceMatrixSubPayload
{
uint8_t tierBlockId;
uint32_t price;
-} PriceMatrixSubPayload;
+} EmberAfPriceMatrixSubPayload;
-// Struct for BlockThresholdSubPayload
-typedef struct _BlockThresholdSubPayload
+// Struct for Protocol
+typedef struct _Protocol
{
- uint8_t tierNumberOfBlockThresholds;
- uint8_t * blockThreshold;
-} BlockThresholdSubPayload;
+ uint16_t manufacturerCode;
+ uint8_t protocolId;
+} EmberAfProtocol;
-// Struct for TierLabelsPayload
-typedef struct _TierLabelsPayload
+// Struct for ReadAttributeStatusRecord
+typedef struct _ReadAttributeStatusRecord
{
- uint8_t tierId;
- uint8_t * tierLabel;
-} TierLabelsPayload;
+ chip::AttributeId attributeId;
+ uint8_t status;
+ uint8_t attributeType;
+ uint8_t * attributeLocation;
+} EmberAfReadAttributeStatusRecord;
-// Void typedef for Signature which is empty.
-// this will result in all the references to the data being as uint8_t*
-typedef uint8_t Signature;
+// Struct for ReadReportingConfigurationAttributeRecord
+typedef struct _ReadReportingConfigurationAttributeRecord
+{
+ uint8_t direction;
+ chip::AttributeId attributeId;
+} EmberAfReadReportingConfigurationAttributeRecord;
-// Struct for SnapshotResponsePayload
-typedef struct _SnapshotResponsePayload
+// Struct for ReadReportingConfigurationRecord
+typedef struct _ReadReportingConfigurationRecord
{
- uint8_t snapshotScheduleId;
- uint8_t snapshotScheduleConfirmation;
-} SnapshotResponsePayload;
+ uint8_t status;
+ uint8_t direction;
+ chip::AttributeId attributeId;
+ uint8_t attributeType;
+ uint16_t minimumReportingInterval;
+ uint16_t maximumReportingInterval;
+ uint8_t * reportableChangeLocation;
+ uint16_t timeoutPeriod;
+} EmberAfReadReportingConfigurationRecord;
-// Struct for SnapshotSchedulePayload
-typedef struct _SnapshotSchedulePayload
+// Struct for ReadStructuredAttributeRecord
+typedef struct _ReadStructuredAttributeRecord
{
- uint8_t snapshotScheduleId;
- uint32_t snapshotStartTime;
- uint32_t snapshotSchedule;
- uint8_t snapshotPayloadType;
- uint32_t snapshotCause;
-} SnapshotSchedulePayload;
+ chip::AttributeId attributeId;
+ uint8_t indicator;
+ uint16_t indicies;
+} EmberAfReadStructuredAttributeRecord;
-// Struct for Protocol
-typedef struct _Protocol
+// Struct for ReportAttributeRecord
+typedef struct _ReportAttributeRecord
{
- uint16_t manufacturerCode;
- uint8_t protocolId;
-} Protocol;
+ chip::AttributeId attributeId;
+ uint8_t attributeType;
+ uint8_t * attributeLocation;
+} EmberAfReportAttributeRecord;
-// Struct for TopUpPayload
-typedef struct _TopUpPayload
+// Struct for SceneExtensionAttributeInfo
+typedef struct _SceneExtensionAttributeInfo
{
- uint8_t * topUpCode;
- int32_t topUpAmount;
- uint32_t topUpTime;
-} TopUpPayload;
+ uint8_t attributeType;
+ uint8_t * attributeLocation;
+} EmberAfSceneExtensionAttributeInfo;
-// Struct for DebtPayload
-typedef struct _DebtPayload
+// Struct for SceneExtensionFieldSet
+typedef struct _SceneExtensionFieldSet
{
- uint32_t collectionTime;
- uint32_t amountCollected;
- uint8_t debtType;
- uint32_t outstandingDebt;
-} DebtPayload;
+ chip::ClusterId clusterId;
+ uint8_t length;
+ uint8_t value;
+} EmberAfSceneExtensionFieldSet;
// Struct for ScheduleEntry
typedef struct _ScheduleEntry
{
uint16_t startTime;
uint8_t activePriceTierOrFriendlyCreditEnable;
-} ScheduleEntry;
+} EmberAfScheduleEntry;
-// Struct for ScheduleEntryRateSwitchTimes
-typedef struct _ScheduleEntryRateSwitchTimes
+// Struct for ScheduleEntryAuxilliaryLoadSwitchTimes
+typedef struct _ScheduleEntryAuxilliaryLoadSwitchTimes
{
uint16_t startTime;
- uint8_t priceTier;
-} ScheduleEntryRateSwitchTimes;
+ uint8_t auxiliaryLoadSwitchState;
+} EmberAfScheduleEntryAuxilliaryLoadSwitchTimes;
// Struct for ScheduleEntryFriendlyCreditSwitchTimes
typedef struct _ScheduleEntryFriendlyCreditSwitchTimes
{
uint16_t startTime;
uint8_t friendlyCreditEnable;
-} ScheduleEntryFriendlyCreditSwitchTimes;
+} EmberAfScheduleEntryFriendlyCreditSwitchTimes;
-// Struct for ScheduleEntryAuxilliaryLoadSwitchTimes
-typedef struct _ScheduleEntryAuxilliaryLoadSwitchTimes
+// Struct for ScheduleEntryRateSwitchTimes
+typedef struct _ScheduleEntryRateSwitchTimes
{
uint16_t startTime;
- uint8_t auxiliaryLoadSwitchState;
-} ScheduleEntryAuxilliaryLoadSwitchTimes;
+ uint8_t priceTier;
+} EmberAfScheduleEntryRateSwitchTimes;
+
+// Struct for ScheduledPhase
+typedef struct _ScheduledPhase
+{
+ uint8_t energyPhaseId;
+ uint16_t scheduledTime;
+} EmberAfScheduledPhase;
// Struct for SeasonEntry
typedef struct _SeasonEntry
{
uint32_t seasonStartDate;
uint8_t weekIdRef;
-} SeasonEntry;
+} EmberAfSeasonEntry;
+
+// Void typedef for EmberAfSignature which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfSignature;
+
+// Void typedef for EmberAfSmac which is empty.
+// this will result in all the references to the data being as uint8_t*
+typedef uint8_t EmberAfSmac;
+
+// Struct for SnapshotResponsePayload
+typedef struct _SnapshotResponsePayload
+{
+ uint8_t snapshotScheduleId;
+ uint8_t snapshotScheduleConfirmation;
+} EmberAfSnapshotResponsePayload;
+
+// Struct for SnapshotSchedulePayload
+typedef struct _SnapshotSchedulePayload
+{
+ uint8_t snapshotScheduleId;
+ uint32_t snapshotStartTime;
+ uint32_t snapshotSchedule;
+ uint8_t snapshotPayloadType;
+ uint32_t snapshotCause;
+} EmberAfSnapshotSchedulePayload;
// Struct for SpecialDay
typedef struct _SpecialDay
{
uint32_t specialDayDate;
uint8_t dayIdRef;
-} SpecialDay;
+} EmberAfSpecialDay;
-// Struct for EventConfigurationPayload
-typedef struct _EventConfigurationPayload
+// Struct for TierLabelsPayload
+typedef struct _TierLabelsPayload
{
- uint16_t eventId;
- uint8_t eventConfiguration;
-} EventConfigurationPayload;
+ uint8_t tierId;
+ uint8_t * tierLabel;
+} EmberAfTierLabelsPayload;
-// Struct for EventLogPayload
-typedef struct _EventLogPayload
+// Struct for TopUpPayload
+typedef struct _TopUpPayload
{
- uint8_t logId;
- uint16_t eventId;
- uint32_t eventTime;
- uint8_t * eventData;
-} EventLogPayload;
-
-// Void typedef for Identity which is empty.
-// this will result in all the references to the data being as uint8_t*
-typedef uint8_t Identity;
-
-// Void typedef for EphemeralData which is empty.
-// this will result in all the references to the data being as uint8_t*
-typedef uint8_t EphemeralData;
-
-// Void typedef for Smac which is empty.
-// this will result in all the references to the data being as uint8_t*
-typedef uint8_t Smac;
+ uint8_t * topUpCode;
+ int32_t topUpAmount;
+ uint32_t topUpTime;
+} EmberAfTopUpPayload;
-// Struct for DeviceInformationRecord
-typedef struct _DeviceInformationRecord
+// Struct for TransferredPhase
+typedef struct _TransferredPhase
{
- uint8_t * ieeeAddress;
- uint8_t endpointId;
- uint16_t profileId;
- uint16_t deviceId;
- uint8_t version;
- uint8_t groupIdCount;
- uint8_t sort;
-} DeviceInformationRecord;
+ uint8_t energyPhaseId;
+ uint8_t macroPhaseId;
+ uint16_t expectedDuration;
+ uint16_t peakPower;
+ uint16_t energy;
+ uint16_t maxActivationDelay;
+} EmberAfTransferredPhase;
-// Struct for GroupInformationRecord
-typedef struct _GroupInformationRecord
+// Struct for WriteAttributeRecord
+typedef struct _WriteAttributeRecord
{
- uint16_t groupId;
- uint8_t groupType;
-} GroupInformationRecord;
+ chip::AttributeId attributeId;
+ uint8_t attributeType;
+ uint8_t * attributeLocation;
+} EmberAfWriteAttributeRecord;
-// Struct for EndpointInformationRecord
-typedef struct _EndpointInformationRecord
+// Struct for WriteAttributeStatusRecord
+typedef struct _WriteAttributeStatusRecord
{
- uint16_t networkAddress;
- uint8_t endpointId;
- uint16_t profileId;
- uint16_t deviceId;
- uint8_t version;
-} EndpointInformationRecord;
+ uint8_t status;
+ chip::AttributeId attributeId;
+} EmberAfWriteAttributeStatusRecord;
-// Struct for GpTranslationTableUpdateTranslation
-typedef struct _GpTranslationTableUpdateTranslation
+// Struct for WriteStructuredAttributeRecord
+typedef struct _WriteStructuredAttributeRecord
{
- uint8_t index;
- uint8_t gpdCommandId;
- uint8_t endpoint;
- uint16_t profile;
- uint16_t cluster;
- uint8_t zigbeeCommandId;
- uint8_t * zigbeeCommandPayload;
- uint8_t * additionalInfoBlock;
-} GpTranslationTableUpdateTranslation;
+ chip::AttributeId attributeId;
+ uint8_t indicator;
+ uint16_t indicies;
+ uint8_t attributeType;
+ uint8_t * attributeLocation;
+} EmberAfWriteStructuredAttributeRecord;
-// Struct for GpPairingConfigurationGroupList
-typedef struct _GpPairingConfigurationGroupList
+// Struct for WriteStructuredAttributeStatusRecord
+typedef struct _WriteStructuredAttributeStatusRecord
{
- uint16_t SinkGroup;
- uint16_t Alias;
-} GpPairingConfigurationGroupList;
+ uint8_t status;
+ chip::AttributeId attributeId;
+ uint8_t indicator;
+ uint16_t indicies;
+} EmberAfWriteStructuredAttributeStatusRecord;
// Struct for WwahBeaconSurvey
typedef struct _WwahBeaconSurvey
@@ -446,13 +429,11 @@ typedef struct _WwahBeaconSurvey
uint16_t deviceShort;
uint8_t rssi;
uint8_t classificationMask;
-} WwahBeaconSurvey;
+} EmberAfWwahBeaconSurvey;
// Struct for WwahClusterStatusToUseTC
typedef struct _WwahClusterStatusToUseTC
{
- uint16_t clusterId;
+ chip::ClusterId clusterId;
uint8_t status;
-} WwahClusterStatusToUseTC;
-
-#endif // SILABS_EMBER_AF_STRUCTS
+} EmberAfWwahClusterStatusToUseTC;
diff --git a/examples/lighting-app/efr32/src/gen/att-storage.h b/examples/all-clusters-app/all-clusters-common/gen/att-storage.h
similarity index 74%
rename from examples/lighting-app/efr32/src/gen/att-storage.h
rename to examples/all-clusters-app/all-clusters-common/gen/att-storage.h
index 40a1a0088b4872..7572c8cbc338fb 100644
--- a/examples/lighting-app/efr32/src/gen/att-storage.h
+++ b/examples/all-clusters-app/all-clusters-common/gen/att-storage.h
@@ -1,23 +1,7 @@
-/**
- *
- * 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.
- */
-/**
+/*
*
- * Copyright (c) 2020 Silicon Labs
+ * 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.
@@ -31,15 +15,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// This file is generated by Simplicity Studio. Please do not edit manually.
-//
-//
-// Enclosing macro to prevent multiple inclusion
-#ifndef SILABS_ATTRIBUTE_STORAGE_GEN
-#define SILABS_ATTRIBUTE_STORAGE_GEN
+// Prevent multiple inclusion
+#pragma once
// Attribute masks modify how attributes are used by the framework
+//
// Attribute that has this mask is NOT read-only
#define ATTRIBUTE_MASK_WRITABLE (0x01)
// Attribute that has this mask is saved to a token
@@ -56,6 +37,7 @@
#define ATTRIBUTE_MASK_CLIENT (0x40)
// Cluster masks modify how clusters are used by the framework
+//
// Does this cluster have init function?
#define CLUSTER_MASK_INIT_FUNCTION (0x01)
// Does this cluster have attribute changed function?
@@ -64,7 +46,7 @@
#define CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION (0x04)
// Does this cluster have message sent function?
#define CLUSTER_MASK_MESSAGE_SENT_FUNCTION (0x08)
-// Does this cluster have manufacturer specific attribute changed funciton?
+// Does this cluster have manufacturer specific attribute changed function?
#define CLUSTER_MASK_MANUFACTURER_SPECIFIC_ATTRIBUTE_CHANGED_FUNCTION (0x10)
// Does this cluster have pre-attribute changed function?
#define CLUSTER_MASK_PRE_ATTRIBUTE_CHANGED_FUNCTION (0x20)
@@ -74,6 +56,7 @@
#define CLUSTER_MASK_CLIENT (0x80)
// Command masks modify meanings of commands
+//
// Is sending of this client command supported
#define COMMAND_MASK_OUTGOING_CLIENT (0x01)
// Is sending of this server command supported
@@ -84,4 +67,3 @@
#define COMMAND_MASK_INCOMING_SERVER (0x08)
// Is this command manufacturer specific?
#define COMMAND_MASK_MANUFACTURER_SPECIFIC (0x10)
-#endif // SILABS_ATTRIBUTE_STORAGE_GEN
diff --git a/examples/all-clusters-app/all-clusters-common/gen/attribute-id.h b/examples/all-clusters-app/all-clusters-common/gen/attribute-id.h
new file mode 100644
index 00000000000000..648809ca67cd83
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/attribute-id.h
@@ -0,0 +1,4544 @@
+
+/*
+ *
+ * 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.
+ */
+
+// Prevent multiple inclusion
+#pragma once
+
+// Attribute ids for cluster: Basic
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_VERSION_ATTRIBUTE_ID (0x0000)
+#define ZCL_APPLICATION_VERSION_ATTRIBUTE_ID (0x0001)
+#define ZCL_STACK_VERSION_ATTRIBUTE_ID (0x0002)
+#define ZCL_HW_VERSION_ATTRIBUTE_ID (0x0003)
+#define ZCL_MANUFACTURER_NAME_ATTRIBUTE_ID (0x0004)
+#define ZCL_MODEL_IDENTIFIER_ATTRIBUTE_ID (0x0005)
+#define ZCL_DATE_CODE_ATTRIBUTE_ID (0x0006)
+#define ZCL_POWER_SOURCE_ATTRIBUTE_ID (0x0007)
+#define ZCL_GENERIC_DEVICE_CLASS_ATTRIBUTE_ID (0x0008)
+#define ZCL_GENERIC_DEVICE_TYPE_ATTRIBUTE_ID (0x0009)
+#define ZCL_PRODUCT_CODE_ATTRIBUTE_ID (0x000A)
+#define ZCL_PRODUCT_URL_ATTRIBUTE_ID (0x000B)
+#define ZCL_LOCATION_DESCRIPTION_ATTRIBUTE_ID (0x0010)
+#define ZCL_PHYSICAL_ENVIRONMENT_ATTRIBUTE_ID (0x0011)
+#define ZCL_DEVICE_ENABLED_ATTRIBUTE_ID (0x0012)
+#define ZCL_ALARM_MASK_ATTRIBUTE_ID (0x0013)
+#define ZCL_DISABLE_LOCAL_CONFIG_ATTRIBUTE_ID (0x0014)
+#define ZCL_SW_BUILD_ID_ATTRIBUTE_ID (0x4000)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Power Configuration
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_MAINS_VOLTAGE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MAINS_FREQUENCY_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAINS_ALARM_MASK_ATTRIBUTE_ID (0x0010)
+#define ZCL_MAINS_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0011)
+#define ZCL_MAINS_VOLTAGE_MAX_THRESHOLD_ATTRIBUTE_ID (0x0012)
+#define ZCL_MAINS_VOLTAGE_DWELL_TRIP_POINT_ATTRIBUTE_ID (0x0013)
+#define ZCL_BATTERY_VOLTAGE_ATTRIBUTE_ID (0x0020)
+#define ZCL_BATTERY_PERCENTAGE_REMAINING_ATTRIBUTE_ID (0x0021)
+#define ZCL_BATTERY_MANUFACTURER_ATTRIBUTE_ID (0x0030)
+#define ZCL_BATTERY_SIZE_ATTRIBUTE_ID (0x0031)
+#define ZCL_BATTERY_AHR_RATING_ATTRIBUTE_ID (0x0032)
+#define ZCL_BATTERY_QUANTITY_ATTRIBUTE_ID (0x0033)
+#define ZCL_BATTERY_RATED_VOLTAGE_ATTRIBUTE_ID (0x0034)
+#define ZCL_BATTERY_ALARM_MASK_ATTRIBUTE_ID (0x0035)
+#define ZCL_BATTERY_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0036)
+#define ZCL_BATTERY_VOLTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x0037)
+#define ZCL_BATTERY_VOLTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x0038)
+#define ZCL_BATTERY_VOLTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x0039)
+#define ZCL_BATTERY_PERCENTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x003A)
+#define ZCL_BATTERY_PERCENTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x003B)
+#define ZCL_BATTERY_PERCENTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x003C)
+#define ZCL_BATTERY_PERCENTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x003D)
+#define ZCL_BATTERY_ALARM_STATE_ATTRIBUTE_ID (0x003E)
+#define ZCL_BATTERY_2_VOLTAGE_ATTRIBUTE_ID (0x0040)
+#define ZCL_BATTERY_2_PERCENTAGE_REMAINING_ATTRIBUTE_ID (0x0041)
+#define ZCL_BATTERY_2_MANUFACTURER_ATTRIBUTE_ID (0x0050)
+#define ZCL_BATTERY_2_SIZE_ATTRIBUTE_ID (0x0051)
+#define ZCL_BATTERY_2_AHR_RATING_ATTRIBUTE_ID (0x0052)
+#define ZCL_BATTERY_2_QUANTITY_ATTRIBUTE_ID (0x0053)
+#define ZCL_BATTERY_2_RATED_VOLTAGE_ATTRIBUTE_ID (0x0054)
+#define ZCL_BATTERY_2_ALARM_MASK_ATTRIBUTE_ID (0x0055)
+#define ZCL_BATTERY_2_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0056)
+#define ZCL_BATTERY_2_VOLTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x0057)
+#define ZCL_BATTERY_2_VOLTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x0058)
+#define ZCL_BATTERY_2_VOLTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x0059)
+#define ZCL_BATTERY_2_PERCENTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x005A)
+#define ZCL_BATTERY_2_PERCENTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x005B)
+#define ZCL_BATTERY_2_PERCENTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x005C)
+#define ZCL_BATTERY_2_PERCENTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x005D)
+#define ZCL_BATTERY_2_ALARM_STATE_ATTRIBUTE_ID (0x005E)
+#define ZCL_BATTERY_3_VOLTAGE_ATTRIBUTE_ID (0x0060)
+#define ZCL_BATTERY_3_PERCENTAGE_REMAINING_ATTRIBUTE_ID (0x0061)
+#define ZCL_BATTERY_3_MANUFACTURER_ATTRIBUTE_ID (0x0070)
+#define ZCL_BATTERY_3_SIZE_ATTRIBUTE_ID (0x0071)
+#define ZCL_BATTERY_3_AHR_RATING_ATTRIBUTE_ID (0x0072)
+#define ZCL_BATTERY_3_QUANTITY_ATTRIBUTE_ID (0x0073)
+#define ZCL_BATTERY_3_RATED_VOLTAGE_ATTRIBUTE_ID (0x0074)
+#define ZCL_BATTERY_3_ALARM_MASK_ATTRIBUTE_ID (0x0075)
+#define ZCL_BATTERY_3_VOLTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x0076)
+#define ZCL_BATTERY_3_VOLTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x0077)
+#define ZCL_BATTERY_3_VOLTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x0078)
+#define ZCL_BATTERY_3_VOLTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x0079)
+#define ZCL_BATTERY_3_PERCENTAGE_MIN_THRESHOLD_ATTRIBUTE_ID (0x007A)
+#define ZCL_BATTERY_3_PERCENTAGE_THRESHOLD_1_ATTRIBUTE_ID (0x007B)
+#define ZCL_BATTERY_3_PERCENTAGE_THRESHOLD_2_ATTRIBUTE_ID (0x007C)
+#define ZCL_BATTERY_3_PERCENTAGE_THRESHOLD_3_ATTRIBUTE_ID (0x007D)
+#define ZCL_BATTERY_3_ALARM_STATE_ATTRIBUTE_ID (0x007E)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Device Temperature Configuration
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CURRENT_TEMPERATURE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MIN_TEMP_EXPERIENCED_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAX_TEMP_EXPERIENCED_ATTRIBUTE_ID (0x0002)
+#define ZCL_OVER_TEMP_TOTAL_DWELL_ATTRIBUTE_ID (0x0003)
+#define ZCL_DEVICE_TEMP_ALARM_MASK_ATTRIBUTE_ID (0x0010)
+#define ZCL_LOW_TEMP_THRESHOLD_ATTRIBUTE_ID (0x0011)
+#define ZCL_HIGH_TEMP_THRESHOLD_ATTRIBUTE_ID (0x0012)
+#define ZCL_LOW_TEMP_DWELL_TRIP_POINT_ATTRIBUTE_ID (0x0013)
+#define ZCL_HIGH_TEMP_DWELL_TRIP_POINT_ATTRIBUTE_ID (0x0014)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Identify
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_IDENTIFY_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_COMMISSION_STATE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Groups
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_GROUP_NAME_SUPPORT_ATTRIBUTE_ID (0x0000)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Scenes
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_SCENE_COUNT_ATTRIBUTE_ID (0x0000)
+#define ZCL_CURRENT_SCENE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_GROUP_ATTRIBUTE_ID (0x0002)
+#define ZCL_SCENE_VALID_ATTRIBUTE_ID (0x0003)
+#define ZCL_SCENE_NAME_SUPPORT_ATTRIBUTE_ID (0x0004)
+#define ZCL_LAST_CONFIGURED_BY_ATTRIBUTE_ID (0x0005)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: On/off
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_ON_OFF_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_2_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_3_ATTRIBUTE_ID (0x0001)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TRANSITION_TIME_4_ATTRIBUTE_ID (0x0001)
+#define ZCL_GLOBAL_SCENE_CONTROL_ATTRIBUTE_ID (0x4000)
+#define ZCL_ON_TIME_ATTRIBUTE_ID (0x4001)
+#define ZCL_OFF_WAIT_TIME_ATTRIBUTE_ID (0x4002)
+#define ZCL_START_UP_ON_OFF_ATTRIBUTE_ID (0x4003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: On/off Switch Configuration
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_SWITCH_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SWITCH_ACTIONS_ATTRIBUTE_ID (0x0010)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Level Control
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CURRENT_LEVEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_LEVEL_CONTROL_REMAINING_TIME_ATTRIBUTE_ID (0x0001)
+#define ZCL_OPTIONS_ATTRIBUTE_ID (0x000F)
+#define ZCL_ON_OFF_TRANSITION_TIME_ATTRIBUTE_ID (0x0010)
+#define ZCL_ON_LEVEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_ON_TRANSITION_TIME_ATTRIBUTE_ID (0x0012)
+#define ZCL_OFF_TRANSITION_TIME_ATTRIBUTE_ID (0x0013)
+#define ZCL_DEFAULT_MOVE_RATE_ATTRIBUTE_ID (0x0014)
+#define ZCL_START_UP_CURRENT_LEVEL_ATTRIBUTE_ID (0x4000)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Alarms
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_ALARM_COUNT_ATTRIBUTE_ID (0x0000)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Time
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_TIME_STATUS_ATTRIBUTE_ID (0x0001)
+#define ZCL_TIME_ZONE_ATTRIBUTE_ID (0x0002)
+#define ZCL_DST_START_ATTRIBUTE_ID (0x0003)
+#define ZCL_DST_END_ATTRIBUTE_ID (0x0004)
+#define ZCL_DST_SHIFT_ATTRIBUTE_ID (0x0005)
+#define ZCL_STANDARD_TIME_ATTRIBUTE_ID (0x0006)
+#define ZCL_LOCAL_TIME_ATTRIBUTE_ID (0x0007)
+#define ZCL_LAST_SET_TIME_ATTRIBUTE_ID (0x0008)
+#define ZCL_VALID_UNTIL_TIME_ATTRIBUTE_ID (0x0009)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: RSSI Location
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_LOCATION_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LOCATION_METHOD_ATTRIBUTE_ID (0x0001)
+#define ZCL_LOCATION_AGE_ATTRIBUTE_ID (0x0002)
+#define ZCL_QUALITY_MEASURE_ATTRIBUTE_ID (0x0003)
+#define ZCL_NUMBER_OF_DEVICES_ATTRIBUTE_ID (0x0004)
+#define ZCL_COORDINATE1_ATTRIBUTE_ID (0x0010)
+#define ZCL_COORDINATE2_ATTRIBUTE_ID (0x0011)
+#define ZCL_COORDINATE3_ATTRIBUTE_ID (0x0012)
+#define ZCL_POWER_ATTRIBUTE_ID (0x0013)
+#define ZCL_PATH_LOSS_EXPONENT_ATTRIBUTE_ID (0x0014)
+#define ZCL_REPORTING_PERIOD_ATTRIBUTE_ID (0x0015)
+#define ZCL_CALCULATION_PERIOD_ATTRIBUTE_ID (0x0016)
+#define ZCL_NUMBER_RSSI_MEASUREMENTS_ATTRIBUTE_ID (0x0017)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Binary Input (Basic)
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_ACTIVE_TEXT_ATTRIBUTE_ID (0x0004)
+#define ZCL_DESCRIPTION_ATTRIBUTE_ID (0x001C)
+#define ZCL_INACTIVE_TEXT_ATTRIBUTE_ID (0x002E)
+#define ZCL_OUT_OF_SERVICE_ATTRIBUTE_ID (0x0051)
+#define ZCL_POLARITY_ATTRIBUTE_ID (0x0054)
+#define ZCL_PRESENT_VALUE_ATTRIBUTE_ID (0x0055)
+#define ZCL_RELIABILITY_ATTRIBUTE_ID (0x0067)
+#define ZCL_STATUS_FLAGS_ATTRIBUTE_ID (0x006F)
+#define ZCL_APPLICATION_TYPE_ATTRIBUTE_ID (0x0100)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Commissioning
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_SHORT_ADDRESS_ATTRIBUTE_ID (0x0000)
+#define ZCL_EXTENDED_PAN_ID_ATTRIBUTE_ID (0x0001)
+#define ZCL_PAN_ID_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHANNEL_MASK_ATTRIBUTE_ID (0x0003)
+#define ZCL_PROTOCOL_VERSION_ATTRIBUTE_ID (0x0004)
+#define ZCL_STACK_PROFILE_ATTRIBUTE_ID (0x0005)
+#define ZCL_STARTUP_CONTROL_ATTRIBUTE_ID (0x0006)
+#define ZCL_TRUST_CENTER_ADDRESS_ATTRIBUTE_ID (0x0010)
+#define ZCL_TRUST_CENTER_MASTER_KEY_ATTRIBUTE_ID (0x0011)
+#define ZCL_NETWORK_KEY_ATTRIBUTE_ID (0x0012)
+#define ZCL_USE_INSECURE_JOIN_ATTRIBUTE_ID (0x0013)
+#define ZCL_PRECONFIGURED_LINK_KEY_ATTRIBUTE_ID (0x0014)
+#define ZCL_NETWORK_KEY_SEQUENCE_NUMBER_ATTRIBUTE_ID (0x0015)
+#define ZCL_NETWORK_KEY_TYPE_ATTRIBUTE_ID (0x0016)
+#define ZCL_NETWORK_MANAGER_ADDRESS_ATTRIBUTE_ID (0x0017)
+#define ZCL_SCAN_ATTEMPTS_ATTRIBUTE_ID (0x0020)
+#define ZCL_TIME_BETWEEN_SCANS_ATTRIBUTE_ID (0x0021)
+#define ZCL_REJOIN_INTERVAL_ATTRIBUTE_ID (0x0022)
+#define ZCL_MAX_REJOIN_INTERVAL_ATTRIBUTE_ID (0x0023)
+#define ZCL_INDIRECT_POLL_RATE_ATTRIBUTE_ID (0x0030)
+#define ZCL_PARENT_RETRY_THRESHOLD_ATTRIBUTE_ID (0x0031)
+#define ZCL_CONCENTRATOR_FLAG_ATTRIBUTE_ID (0x0040)
+#define ZCL_CONCENTRATOR_RADIUS_ATTRIBUTE_ID (0x0041)
+#define ZCL_CONCENTRATOR_DISCOVERY_TIME_ATTRIBUTE_ID (0x0042)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Partition
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_PARTITION_MAXIMUM_INCOMING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0000)
+#define ZCL_PARTITION_MAXIMUM_OUTGOING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PARTIONED_FRAME_SIZE_ATTRIBUTE_ID (0x0002)
+#define ZCL_LARGE_FRAME_SIZE_ATTRIBUTE_ID (0x0003)
+#define ZCL_NUMBER_OF_ACK_FRAME_ATTRIBUTE_ID (0x0004)
+#define ZCL_NACK_TIMEOUT_ATTRIBUTE_ID (0x0005)
+#define ZCL_INTERFRAME_DELAY_ATTRIBUTE_ID (0x0006)
+#define ZCL_NUMBER_OF_SEND_RETRIES_ATTRIBUTE_ID (0x0007)
+#define ZCL_SENDER_TIMEOUT_ATTRIBUTE_ID (0x0008)
+#define ZCL_RECEIVER_TIMEOUT_ATTRIBUTE_ID (0x0009)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Over the Air Bootloading
+
+// Client attributes
+#define ZCL_UPGRADE_SERVER_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_FILE_OFFSET_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_FILE_VERSION_ATTRIBUTE_ID (0x0002)
+#define ZCL_CURRENT_ZIGBEE_STACK_VERSION_ATTRIBUTE_ID (0x0003)
+#define ZCL_DOWNLOADED_FILE_VERSION_ATTRIBUTE_ID (0x0004)
+#define ZCL_DOWNLOADED_ZIGBEE_STACK_VERSION_ATTRIBUTE_ID (0x0005)
+#define ZCL_IMAGE_UPGRADE_STATUS_ATTRIBUTE_ID (0x0006)
+#define ZCL_MANUFACTURER_ID_ATTRIBUTE_ID (0x0007)
+#define ZCL_IMAGE_TYPE_ID_ATTRIBUTE_ID (0x0008)
+#define ZCL_MINIMUM_BLOCK_REQUEST_PERIOD_ATTRIBUTE_ID (0x0009)
+#define ZCL_IMAGE_STAMP_ATTRIBUTE_ID (0x000A)
+#define ZCL_UPGRADE_ACTIVATION_POLICY_ATTRIBUTE_ID (0x000B)
+#define ZCL_UPGRADE_TIMEOUT_POLICY_ATTRIBUTE_ID (0x000C)
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Power Profile
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_TOTAL_PROFILE_NUM_ATTRIBUTE_ID (0x0000)
+#define ZCL_MULTIPLE_SCHEDULING_ATTRIBUTE_ID (0x0001)
+#define ZCL_ENERGY_FORMATTING_ATTRIBUTE_ID (0x0002)
+#define ZCL_ENERGY_REMOTE_ATTRIBUTE_ID (0x0003)
+#define ZCL_SCHEDULE_MODE_ATTRIBUTE_ID (0x0004)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Appliance Control
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_START_TIME_ATTRIBUTE_ID (0x0000)
+#define ZCL_FINISH_TIME_ATTRIBUTE_ID (0x0001)
+#define ZCL_REMAINING_TIME_ATTRIBUTE_ID (0x0002)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Poll Control
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CHECK_IN_INTERVAL_ATTRIBUTE_ID (0x0000)
+#define ZCL_LONG_POLL_INTERVAL_ATTRIBUTE_ID (0x0001)
+#define ZCL_SHORT_POLL_INTERVAL_ATTRIBUTE_ID (0x0002)
+#define ZCL_FAST_POLL_TIMEOUT_ATTRIBUTE_ID (0x0003)
+#define ZCL_CHECK_IN_INTERVAL_MIN_ATTRIBUTE_ID (0x0004)
+#define ZCL_LONG_POLL_INTERVAL_MIN_ATTRIBUTE_ID (0x0005)
+#define ZCL_FAST_POLL_TIMEOUT_MAX_ATTRIBUTE_ID (0x0006)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Green Power
+
+// Client attributes
+#define ZCL_GP_CLIENT_GPP_MAX_PROXY_TABLE_ENTRIES_ATTRIBUTE_ID (0x0010)
+#define ZCL_GP_CLIENT_PROXY_TABLE_ATTRIBUTE_ID (0x0011)
+#define ZCL_GP_CLIENT_GPP_NOTIFICATION_RETRY_NUMBER_ATTRIBUTE_ID (0x0012)
+#define ZCL_GP_CLIENT_GPP_NOTIFICATION_RETRY_TIMER_ATTRIBUTE_ID (0x0013)
+#define ZCL_GP_CLIENT_GPP_MAX_SEARCH_COUNTER_ATTRIBUTE_ID (0x0014)
+#define ZCL_GP_CLIENT_GPP_BLOCKED_GPD_ID_ATTRIBUTE_ID (0x0015)
+#define ZCL_GP_CLIENT_GPP_FUNCTIONALITY_ATTRIBUTE_ID (0x0016)
+#define ZCL_GP_CLIENT_GPP_ACTIVE_FUNCTIONALITY_ATTRIBUTE_ID (0x0017)
+#define ZCL_GP_CLIENT_GP_SHARED_SECURITY_KEY_TYPE_ATTRIBUTE_ID (0x0020)
+#define ZCL_GP_CLIENT_GP_SHARED_SECURITY_KEY_ATTRIBUTE_ID (0x0021)
+#define ZCL_GP_CLIENT_GP_LINK_KEY_ATTRIBUTE_ID (0x0022)
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_GP_SERVER_GPS_MAX_SINK_TABLE_ENTRIES_ATTRIBUTE_ID (0x0000)
+#define ZCL_GP_SERVER_SINK_TABLE_ATTRIBUTE_ID (0x0001)
+#define ZCL_GP_SERVER_GPS_COMMUNICATION_MODE_ATTRIBUTE_ID (0x0002)
+#define ZCL_GP_SERVER_GPS_COMMISSIONING_EXIT_MODE_ATTRIBUTE_ID (0x0003)
+#define ZCL_GP_SERVER_GPS_COMMISSIONING_WINDOW_ATTRIBUTE_ID (0x0004)
+#define ZCL_GP_SERVER_GPS_SECURITY_LEVEL_ATTRIBUTE_ID (0x0005)
+#define ZCL_GP_SERVER_GPS_FUNCTIONALITY_ATTRIBUTE_ID (0x0006)
+#define ZCL_GP_SERVER_GPS_ACTIVE_FUNCTIONALITY_ATTRIBUTE_ID (0x0007)
+#define ZCL_GP_SERVER_GP_SHARED_SECURITY_KEY_TYPE_ATTRIBUTE_ID (0x0020)
+#define ZCL_GP_SERVER_GP_SHARED_SECURITY_KEY_ATTRIBUTE_ID (0x0021)
+#define ZCL_GP_SERVER_GP_LINK_KEY_ATTRIBUTE_ID (0x0022)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Keep-Alive
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_KEEPALIVE_BASE_ATTRIBUTE_ID (0x0000)
+#define ZCL_KEEPALIVE_JITTER_ATTRIBUTE_ID (0x0001)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Shade Configuration
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_SHADE_CONFIG_PHYSICAL_CLOSED_LIMIT_ATTRIBUTE_ID (0x0000)
+#define ZCL_SHADE_CONFIG_MOTOR_STEP_SIZE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SHADE_CONFIG_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_SHADE_CONFIG_CLOSED_LIMIT_ATTRIBUTE_ID (0x0010)
+#define ZCL_SHADE_CONFIG_MODE_ATTRIBUTE_ID (0x0011)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Door Lock
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_LOCK_STATE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LOCK_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ACTUATOR_ENABLED_ATTRIBUTE_ID (0x0002)
+#define ZCL_DOOR_STATE_ATTRIBUTE_ID (0x0003)
+#define ZCL_DOOR_OPEN_EVENTS_ATTRIBUTE_ID (0x0004)
+#define ZCL_DOOR_CLOSED_EVENTS_ATTRIBUTE_ID (0x0005)
+#define ZCL_OPEN_PERIOD_ATTRIBUTE_ID (0x0006)
+#define ZCL_NUM_LOCK_RECORDS_SUPPORTED_ATTRIBUTE_ID (0x0010)
+#define ZCL_NUM_TOTAL_USERS_SUPPORTED_ATTRIBUTE_ID (0x0011)
+#define ZCL_NUM_PIN_USERS_SUPPORTED_ATTRIBUTE_ID (0x0012)
+#define ZCL_NUM_RFID_USERS_SUPPORTED_ATTRIBUTE_ID (0x0013)
+#define ZCL_NUM_WEEKDAY_SCHEDULES_SUPPORTED_PER_USER_ATTRIBUTE_ID (0x0014)
+#define ZCL_NUM_YEARDAY_SCHEDULES_SUPPORTED_PER_USER_ATTRIBUTE_ID (0x0015)
+#define ZCL_NUM_HOLIDAY_SCHEDULES_SUPPORTED_PER_USER_ATTRIBUTE_ID (0x0016)
+#define ZCL_MAX_PIN_LENGTH_ATTRIBUTE_ID (0x0017)
+#define ZCL_MIN_PIN_LENGTH_ATTRIBUTE_ID (0x0018)
+#define ZCL_MAX_RFID_CODE_LENGTH_ATTRIBUTE_ID (0x0019)
+#define ZCL_MIN_RFID_CODE_LENGTH_ATTRIBUTE_ID (0x001A)
+#define ZCL_ENABLE_LOGGING_ATTRIBUTE_ID (0x0020)
+#define ZCL_LANGUAGE_ATTRIBUTE_ID (0x0021)
+#define ZCL_LED_SETTINGS_ATTRIBUTE_ID (0x0022)
+#define ZCL_AUTO_RELOCK_TIME_ATTRIBUTE_ID (0x0023)
+#define ZCL_SOUND_VOLUME_ATTRIBUTE_ID (0x0024)
+#define ZCL_OPERATING_MODE_ATTRIBUTE_ID (0x0025)
+#define ZCL_SUPPORTED_OPERATING_MODES_ATTRIBUTE_ID (0x0026)
+#define ZCL_DEFAULT_CONFIGURATION_REGISTER_ATTRIBUTE_ID (0x0027)
+#define ZCL_ENABLE_LOCAL_PROGRAMMING_ATTRIBUTE_ID (0x0028)
+#define ZCL_ENABLE_ONE_TOUCH_LOCKING_ATTRIBUTE_ID (0x0029)
+#define ZCL_ENABLE_INSIDE_STATUS_LED_ATTRIBUTE_ID (0x002A)
+#define ZCL_ENABLE_PRIVACY_MODE_BUTTON_ATTRIBUTE_ID (0x002B)
+#define ZCL_WRONG_CODE_ENTRY_LIMIT_ATTRIBUTE_ID (0x0030)
+#define ZCL_USER_CODE_TEMPORARY_DISABLE_TIME_ATTRIBUTE_ID (0x0031)
+#define ZCL_SEND_PIN_OVER_THE_AIR_ATTRIBUTE_ID (0x0032)
+#define ZCL_REQUIRE_PIN_FOR_RF_OPERATION_ATTRIBUTE_ID (0x0033)
+#define ZCL_ZIGBEE_SECURITY_LEVEL_ATTRIBUTE_ID (0x0034)
+#define ZCL_DOOR_LOCK_ALARM_MASK_ATTRIBUTE_ID (0x0040)
+#define ZCL_KEYPAD_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0041)
+#define ZCL_RF_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0042)
+#define ZCL_MANUAL_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0043)
+#define ZCL_RFID_OPERATION_EVENT_MASK_ATTRIBUTE_ID (0x0044)
+#define ZCL_KEYPAD_PROGRAMMING_EVENT_MASK_ATTRIBUTE_ID (0x0045)
+#define ZCL_RF_PROGRAMMING_EVENT_MASK_ATTRIBUTE_ID (0x0046)
+#define ZCL_RFID_PROGRAMMING_EVENT_MASK_ATTRIBUTE_ID (0x0047)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Window Covering
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_COVERING_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LIMIT_LIFT_ATTRIBUTE_ID (0x0001)
+#define ZCL_LIMIT_TILT_ATTRIBUTE_ID (0x0002)
+#define ZCL_CURRENT_LIFT_ATTRIBUTE_ID (0x0003)
+#define ZCL_CURRENT_TILT_ATTRIBUTE_ID (0x0004)
+#define ZCL_NUMBER_LIFT_ATTRIBUTE_ID (0x0005)
+#define ZCL_NUMBER_TILT_ATTRIBUTE_ID (0x0006)
+#define ZCL_CONFIG_STATUS_ATTRIBUTE_ID (0x0007)
+#define ZCL_CURRENT_LIFT_PERCENTAGE_ATTRIBUTE_ID (0x0008)
+#define ZCL_CURRENT_TILT_PERCENTAGE_ATTRIBUTE_ID (0x0009)
+#define ZCL_OPEN_LIMIT_LIFT_ATTRIBUTE_ID (0x0010)
+#define ZCL_CLOSED_LIMIT_LIFT_ATTRIBUTE_ID (0x0011)
+#define ZCL_OPEN_LIMIT_TILT_ATTRIBUTE_ID (0x0012)
+#define ZCL_CLOSED_LIMIT_TILT_ATTRIBUTE_ID (0x0013)
+#define ZCL_VELOCITY_LIFT_ATTRIBUTE_ID (0x0014)
+#define ZCL_ACCELERATION_LIFT_ATTRIBUTE_ID (0x0015)
+#define ZCL_DECELERATION_LIFT_ATTRIBUTE_ID (0x0016)
+#define ZCL_MODE_ATTRIBUTE_ID (0x0017)
+#define ZCL_SETPOINTS_LIFT_ATTRIBUTE_ID (0x0018)
+#define ZCL_SETPOINTS_TILT_ATTRIBUTE_ID (0x0019)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Barrier Control
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_BARRIER_MOVING_STATE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BARRIER_SAFETY_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_BARRIER_CAPABILITIES_ATTRIBUTE_ID (0x0003)
+#define ZCL_BARRIER_OPEN_EVENTS_ATTRIBUTE_ID (0x0004)
+#define ZCL_BARRIER_CLOSE_EVENTS_ATTRIBUTE_ID (0x0005)
+#define ZCL_BARRIER_COMMAND_OPEN_EVENTS_ATTRIBUTE_ID (0x0006)
+#define ZCL_BARRIER_COMMAND_CLOSE_EVENTS_ATTRIBUTE_ID (0x0007)
+#define ZCL_BARRIER_OPEN_PERIOD_ATTRIBUTE_ID (0x0008)
+#define ZCL_BARRIER_CLOSE_PERIOD_ATTRIBUTE_ID (0x0009)
+#define ZCL_BARRIER_POSITION_ATTRIBUTE_ID (0x000A)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Pump Configuration and Control
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_MAX_PRESSURE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MAX_SPEED_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAX_FLOW_ATTRIBUTE_ID (0x0002)
+#define ZCL_MIN_CONST_PRESSURE_ATTRIBUTE_ID (0x0003)
+#define ZCL_MAX_CONST_PRESSURE_ATTRIBUTE_ID (0x0004)
+#define ZCL_MIN_COMP_PRESSURE_ATTRIBUTE_ID (0x0005)
+#define ZCL_MAX_COMP_PRESSURE_ATTRIBUTE_ID (0x0006)
+#define ZCL_MIN_CONST_SPEED_ATTRIBUTE_ID (0x0007)
+#define ZCL_MAX_CONST_SPEED_ATTRIBUTE_ID (0x0008)
+#define ZCL_MIN_CONST_FLOW_ATTRIBUTE_ID (0x0009)
+#define ZCL_MAX_CONST_FLOW_ATTRIBUTE_ID (0x000A)
+#define ZCL_MIN_CONST_TEMP_ATTRIBUTE_ID (0x000B)
+#define ZCL_MAX_CONST_TEMP_ATTRIBUTE_ID (0x000C)
+#define ZCL_PUMP_STATUS_ATTRIBUTE_ID (0x0010)
+#define ZCL_EFFECTIVE_OPERATION_MODE_ATTRIBUTE_ID (0x0011)
+#define ZCL_EFFECTIVE_CONTROL_MODE_ATTRIBUTE_ID (0x0012)
+#define ZCL_CAPACITY_ATTRIBUTE_ID (0x0013)
+#define ZCL_SPEED_ATTRIBUTE_ID (0x0014)
+#define ZCL_LIFETIME_RUNNING_HOURS_ATTRIBUTE_ID (0x0015)
+#define ZCL_PUMP_POWER_ATTRIBUTE_ID (0x0016)
+#define ZCL_LIFETIME_ENERGY_CONSUMED_ATTRIBUTE_ID (0x0017)
+#define ZCL_OPERATION_MODE_ATTRIBUTE_ID (0x0020)
+#define ZCL_CONTROL_MODE_ATTRIBUTE_ID (0x0021)
+#define ZCL_PUMP_ALARM_MASK_ATTRIBUTE_ID (0x0022)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Thermostat
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID (0x0000)
+#define ZCL_OUTDOOR_TEMPERATURE_ATTRIBUTE_ID (0x0001)
+#define ZCL_THERMOSTAT_OCCUPANCY_ATTRIBUTE_ID (0x0002)
+#define ZCL_ABS_MIN_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0003)
+#define ZCL_ABS_MAX_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0004)
+#define ZCL_ABS_MIN_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0005)
+#define ZCL_ABS_MAX_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0006)
+#define ZCL_PI_COOLING_DEMAND_ATTRIBUTE_ID (0x0007)
+#define ZCL_PI_HEATING_DEMAND_ATTRIBUTE_ID (0x0008)
+#define ZCL_HVAC_SYSTEM_TYPE_CONFIGURATION_ATTRIBUTE_ID (0x0009)
+#define ZCL_LOCAL_TEMPERATURE_CALIBRATION_ATTRIBUTE_ID (0x0010)
+#define ZCL_OCCUPIED_COOLING_SETPOINT_ATTRIBUTE_ID (0x0011)
+#define ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID (0x0012)
+#define ZCL_UNOCCUPIED_COOLING_SETPOINT_ATTRIBUTE_ID (0x0013)
+#define ZCL_UNOCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID (0x0014)
+#define ZCL_MIN_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0015)
+#define ZCL_MAX_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0016)
+#define ZCL_MIN_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0017)
+#define ZCL_MAX_COOL_SETPOINT_LIMIT_ATTRIBUTE_ID (0x0018)
+#define ZCL_MIN_SETPOINT_DEAD_BAND_ATTRIBUTE_ID (0x0019)
+#define ZCL_REMOTE_SENSING_ATTRIBUTE_ID (0x001A)
+#define ZCL_CONTROL_SEQUENCE_OF_OPERATION_ATTRIBUTE_ID (0x001B)
+#define ZCL_SYSTEM_MODE_ATTRIBUTE_ID (0x001C)
+#define ZCL_THERMOSTAT_ALARM_MASK_ATTRIBUTE_ID (0x001D)
+#define ZCL_THERMOSTAT_RUNNING_MODE_ATTRIBUTE_ID (0x001E)
+#define ZCL_START_OF_WEEK_ATTRIBUTE_ID (0x0020)
+#define ZCL_NUMBER_OF_WEEKLY_TRANSITIONS_ATTRIBUTE_ID (0x0021)
+#define ZCL_NUMBER_OF_DAILY_TRANSITIONS_ATTRIBUTE_ID (0x0022)
+#define ZCL_TEMPERATURE_SETPOINT_HOLD_ATTRIBUTE_ID (0x0023)
+#define ZCL_TEMPERATURE_SETPOINT_HOLD_DURATION_ATTRIBUTE_ID (0x0024)
+#define ZCL_THERMOSTAT_PROGRAMMING_OPERATION_MODE_ATTRIBUTE_ID (0x0025)
+#define ZCL_THERMOSTAT_RUNNING_STATE_ATTRIBUTE_ID (0x0029)
+#define ZCL_SETPOINT_CHANGE_SOURCE_ATTRIBUTE_ID (0x0030)
+#define ZCL_SETPOINT_CHANGE_AMOUNT_ATTRIBUTE_ID (0x0031)
+#define ZCL_SETPOINT_CHANGE_SOURCE_TIMESTAMP_ATTRIBUTE_ID (0x0032)
+#define ZCL_AC_TYPE_ATTRIBUTE_ID (0x0040)
+#define ZCL_AC_CAPACITY_ATTRIBUTE_ID (0x0041)
+#define ZCL_AC_REFRIGERANT_TYPE_ATTRIBUTE_ID (0x0042)
+#define ZCL_AC_COMPRESSOR_ATTRIBUTE_ID (0x0043)
+#define ZCL_AC_ERROR_CODE_ATTRIBUTE_ID (0x0044)
+#define ZCL_AC_LOUVER_POSITION_ATTRIBUTE_ID (0x0045)
+#define ZCL_AC_COIL_TEMPERATURE_ATTRIBUTE_ID (0x0046)
+#define ZCL_AC_CAPACITY_FORMAT_ATTRIBUTE_ID (0x0047)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Fan Control
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FAN_CONTROL_FAN_MODE_SEQUENCE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Dehumidification Control
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_RELATIVE_HUMIDITY_ATTRIBUTE_ID (0x0000)
+#define ZCL_DEHUMIDIFICATION_COOLING_ATTRIBUTE_ID (0x0001)
+#define ZCL_RH_DEHUMIDIFICATION_SETPOINT_ATTRIBUTE_ID (0x0010)
+#define ZCL_RELATIVE_HUMIDITY_MODE_ATTRIBUTE_ID (0x0011)
+#define ZCL_DEHUMIDIFICATION_LOCKOUT_ATTRIBUTE_ID (0x0012)
+#define ZCL_DEHUMIDIFICATION_HYSTERESIS_ATTRIBUTE_ID (0x0013)
+#define ZCL_DEHUMIDIFICATION_MAX_COOL_ATTRIBUTE_ID (0x0014)
+#define ZCL_RELATIVE_HUMIDITY_DISPLAY_ATTRIBUTE_ID (0x0015)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Thermostat User Interface Configuration
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_TEMPERATURE_DISPLAY_MODE_ATTRIBUTE_ID (0x0000)
+#define ZCL_KEYPAD_LOCKOUT_ATTRIBUTE_ID (0x0001)
+#define ZCL_SCHEDULE_PROGRAMMING_VISIBILITY_ATTRIBUTE_ID (0x0002)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Color Control
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_COLOR_CONTROL_CURRENT_HUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_COLOR_CONTROL_CURRENT_SATURATION_ATTRIBUTE_ID (0x0001)
+#define ZCL_COLOR_CONTROL_REMAINING_TIME_ATTRIBUTE_ID (0x0002)
+#define ZCL_COLOR_CONTROL_CURRENT_X_ATTRIBUTE_ID (0x0003)
+#define ZCL_COLOR_CONTROL_CURRENT_Y_ATTRIBUTE_ID (0x0004)
+#define ZCL_COLOR_CONTROL_DRIFT_COMPENSATION_ATTRIBUTE_ID (0x0005)
+#define ZCL_COLOR_CONTROL_COMPENSATION_TEXT_ATTRIBUTE_ID (0x0006)
+#define ZCL_COLOR_CONTROL_COLOR_TEMPERATURE_ATTRIBUTE_ID (0x0007)
+#define ZCL_COLOR_CONTROL_COLOR_MODE_ATTRIBUTE_ID (0x0008)
+#define ZCL_COLOR_CONTROL_OPTIONS_ATTRIBUTE_ID (0x000F)
+#define ZCL_COLOR_CONTROL_NUMBER_OF_PRIMARIES_ATTRIBUTE_ID (0x0010)
+#define ZCL_COLOR_CONTROL_PRIMARY_1_X_ATTRIBUTE_ID (0x0011)
+#define ZCL_COLOR_CONTROL_PRIMARY_1_Y_ATTRIBUTE_ID (0x0012)
+#define ZCL_COLOR_CONTROL_PRIMARY_1_INTENSITY_ATTRIBUTE_ID (0x0013)
+#define ZCL_COLOR_CONTROL_PRIMARY_2_X_ATTRIBUTE_ID (0x0015)
+#define ZCL_COLOR_CONTROL_PRIMARY_2_Y_ATTRIBUTE_ID (0x0016)
+#define ZCL_COLOR_CONTROL_PRIMARY_2_INTENSITY_ATTRIBUTE_ID (0x0017)
+#define ZCL_COLOR_CONTROL_PRIMARY_3_X_ATTRIBUTE_ID (0x0019)
+#define ZCL_COLOR_CONTROL_PRIMARY_3_Y_ATTRIBUTE_ID (0x001A)
+#define ZCL_COLOR_CONTROL_PRIMARY_3_INTENSITY_ATTRIBUTE_ID (0x001B)
+#define ZCL_COLOR_CONTROL_PRIMARY_4_X_ATTRIBUTE_ID (0x0020)
+#define ZCL_COLOR_CONTROL_PRIMARY_4_Y_ATTRIBUTE_ID (0x0021)
+#define ZCL_COLOR_CONTROL_PRIMARY_4_INTENSITY_ATTRIBUTE_ID (0x0022)
+#define ZCL_COLOR_CONTROL_PRIMARY_5_X_ATTRIBUTE_ID (0x0024)
+#define ZCL_COLOR_CONTROL_PRIMARY_5_Y_ATTRIBUTE_ID (0x0025)
+#define ZCL_COLOR_CONTROL_PRIMARY_5_INTENSITY_ATTRIBUTE_ID (0x0026)
+#define ZCL_COLOR_CONTROL_PRIMARY_6_X_ATTRIBUTE_ID (0x0028)
+#define ZCL_COLOR_CONTROL_PRIMARY_6_Y_ATTRIBUTE_ID (0x0029)
+#define ZCL_COLOR_CONTROL_PRIMARY_6_INTENSITY_ATTRIBUTE_ID (0x002A)
+#define ZCL_COLOR_CONTROL_WHITE_POINT_X_ATTRIBUTE_ID (0x0030)
+#define ZCL_COLOR_CONTROL_WHITE_POINT_Y_ATTRIBUTE_ID (0x0031)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_R_X_ATTRIBUTE_ID (0x0032)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_R_Y_ATTRIBUTE_ID (0x0033)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_R_INTENSITY_ATTRIBUTE_ID (0x0034)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_G_X_ATTRIBUTE_ID (0x0036)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_G_Y_ATTRIBUTE_ID (0x0037)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_G_INTENSITY_ATTRIBUTE_ID (0x0038)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_B_X_ATTRIBUTE_ID (0x003A)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_B_Y_ATTRIBUTE_ID (0x003B)
+#define ZCL_COLOR_CONTROL_COLOR_POINT_B_INTENSITY_ATTRIBUTE_ID (0x003C)
+#define ZCL_COLOR_CONTROL_ENHANCED_CURRENT_HUE_ATTRIBUTE_ID (0x4000)
+#define ZCL_COLOR_CONTROL_ENHANCED_COLOR_MODE_ATTRIBUTE_ID (0x4001)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_ACTIVE_ATTRIBUTE_ID (0x4002)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_DIRECTION_ATTRIBUTE_ID (0x4003)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_TIME_ATTRIBUTE_ID (0x4004)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_START_ENHANCED_HUE_ATTRIBUTE_ID (0x4005)
+#define ZCL_COLOR_CONTROL_COLOR_LOOP_STORED_ENHANCED_HUE_ATTRIBUTE_ID (0x4006)
+#define ZCL_COLOR_CONTROL_COLOR_CAPABILITIES_ATTRIBUTE_ID (0x400A)
+#define ZCL_COLOR_CONTROL_COLOR_TEMP_PHYSICAL_MIN_ATTRIBUTE_ID (0x400B)
+#define ZCL_COLOR_CONTROL_COLOR_TEMP_PHYSICAL_MAX_ATTRIBUTE_ID (0x400C)
+#define ZCL_COLOR_CONTROL_TEMPERATURE_LEVEL_MIN_MIREDS_ATTRIBUTE_ID (0x400D)
+#define ZCL_START_UP_COLOR_TEMPERATURE_MIREDS_ATTRIBUTE_ID (0x4010)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Ballast Configuration
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_PHYSICAL_MIN_LEVEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_PHYSICAL_MAX_LEVEL_ATTRIBUTE_ID (0x0001)
+#define ZCL_BALLAST_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_MIN_LEVEL_ATTRIBUTE_ID (0x0010)
+#define ZCL_MAX_LEVEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_POWER_ON_LEVEL_ATTRIBUTE_ID (0x0012)
+#define ZCL_POWER_ON_FADE_TIME_ATTRIBUTE_ID (0x0013)
+#define ZCL_INTRINSIC_BALLAST_FACTOR_ATTRIBUTE_ID (0x0014)
+#define ZCL_BALLAST_FACTOR_ADJUSTMENT_ATTRIBUTE_ID (0x0015)
+#define ZCL_LAMP_QUALITY_ATTRIBUTE_ID (0x0020)
+#define ZCL_LAMP_TYPE_ATTRIBUTE_ID (0x0030)
+#define ZCL_LAMP_MANUFACTURER_ATTRIBUTE_ID (0x0031)
+#define ZCL_LAMP_RATED_HOURS_ATTRIBUTE_ID (0x0032)
+#define ZCL_LAMP_BURN_HOURS_ATTRIBUTE_ID (0x0033)
+#define ZCL_LAMP_ALARM_MODE_ATTRIBUTE_ID (0x0034)
+#define ZCL_LAMP_BURN_HOURS_TRIP_POINT_ATTRIBUTE_ID (0x0035)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Illuminance Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_ILLUM_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ILLUM_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ILLUM_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ILLUM_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_ATTRIBUTE_ID (0x0004)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Illuminance Level Sensing
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_LEVEL_STATUS_ATTRIBUTE_ID (0x0000)
+#define ZCL_SENSING_LIGHT_SENSOR_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ILLUMINANCE_TARGET_LEVEL_ATTRIBUTE_ID (0x0010)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Temperature Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_TEMP_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TEMP_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TEMP_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TEMP_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Pressure Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_PRESSURE_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_PRESSURE_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PRESSURE_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_PRESSURE_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_PRESSURE_SCALED_VALUE_ATTRIBUTE_ID (0x0010)
+#define ZCL_PRESSURE_MIN_SCALED_VALUE_ATTRIBUTE_ID (0x0011)
+#define ZCL_PRESSURE_MAX_SCALED_VALUE_ATTRIBUTE_ID (0x0012)
+#define ZCL_PRESSURE_SCALED_TOLERANCE_ATTRIBUTE_ID (0x0013)
+#define ZCL_PRESSURE_SCALE_ATTRIBUTE_ID (0x0014)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Flow Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_FLOW_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FLOW_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_FLOW_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_FLOW_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Relative Humidity Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_RELATIVE_HUMIDITY_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_RELATIVE_HUMIDITY_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_RELATIVE_HUMIDITY_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_RELATIVE_HUMIDITY_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Occupancy Sensing
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_OCCUPANCY_ATTRIBUTE_ID (0x0000)
+#define ZCL_OCCUPANCY_SENSOR_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_OCCUPANCY_SENSOR_TYPE_BITMAP_ATTRIBUTE_ID (0x0002)
+#define ZCL_PIR_OCCUPIED_TO_UNOCCUPIED_DELAY_ATTRIBUTE_ID (0x0010)
+#define ZCL_PIR_UNOCCUPIED_TO_OCCUPIED_DELAY_ATTRIBUTE_ID (0x0011)
+#define ZCL_PIR_UNOCCUPIED_TO_OCCUPIED_THRESHOLD_ATTRIBUTE_ID (0x0012)
+#define ZCL_ULTRASONIC_OCCUPIED_TO_UNOCCUPIED_DELAY_ATTRIBUTE_ID (0x0020)
+#define ZCL_ULTRASONIC_UNOCCUPIED_TO_OCCUPIED_DELAY_ATTRIBUTE_ID (0x0021)
+#define ZCL_ULTRASONIC_UNOCCUPIED_TO_OCCUPIED_THRESHOLD_ATTRIBUTE_ID (0x0022)
+#define ZCL_PHYSICAL_CONTACT_OCCUPIED_TO_UNOCCUPIED_DELAY_ATTRIBUTE_ID (0x0030)
+#define ZCL_PHYSICAL_CONTACT_UNOCCUPIED_TO_OCCUPIED_DELAY_ATTRIBUTE_ID (0x0031)
+#define ZCL_PHYSICAL_CONTACT_UNOCCUPIED_TO_OCCUPIED_THRESHOLD_ATTRIBUTE_ID (0x0032)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Carbon Monoxide Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Carbon Dioxide Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Ethylene Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Ethylene Oxide Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Hydrogen Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Hydrogen Sulphide Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Nitric Oxide Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Nitrogen Dioxide Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Oxygen Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Ozone Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Sulfur Dioxide Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Dissolved Oxygen Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Bromate Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Chloramines Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Chlorine Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Fecal coliform and E. Coli Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Fluoride Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Haloacetic Acids Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Total Trihalomethanes Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Total Coliform Bacteria Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Turbidity Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Copper Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Lead Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Manganese Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Sulfate Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Bromodichloromethane Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Bromoform Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Chlorodibromomethane Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Chloroform Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Sodium Concentration Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_MEASURED_VALUE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_MIN_MEASURED_VALUE_ATTRIBUTE_ID (0x0001)
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_MAX_MEASURED_VALUE_ATTRIBUTE_ID (0x0002)
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_TOLERANCE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: IAS Zone
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_ZONE_STATE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ZONE_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_ZONE_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_IAS_CIE_ADDRESS_ATTRIBUTE_ID (0x0010)
+#define ZCL_ZONE_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_NUMBER_OF_ZONE_SENSITIVITY_LEVELS_SUPPORTED_ATTRIBUTE_ID (0x0012)
+#define ZCL_CURRENT_ZONE_SENSITIVITY_LEVEL_ATTRIBUTE_ID (0x0013)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: IAS ACE
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: IAS WD
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_MAX_DURATION_ATTRIBUTE_ID (0x0000)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Generic Tunnel
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_MAXIMUM_INCOMING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAXIMUM_OUTGOING_TRANSFER_SIZE_ATTRIBUTE_ID (0x0002)
+#define ZCL_PROTOCOL_ADDRESS_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: BACnet Protocol Tunnel
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: 11073 Protocol Tunnel
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_DEVICE_ID_LIST_ATTRIBUTE_ID (0x0000)
+#define ZCL_MANAGER_TARGET_ATTRIBUTE_ID (0x0001)
+#define ZCL_MANAGER_ENDPOINT_ATTRIBUTE_ID (0x0002)
+#define ZCL_CONNECTED_ATTRIBUTE_ID (0x0003)
+#define ZCL_PREEMPTIBLE_ATTRIBUTE_ID (0x0004)
+#define ZCL_IDLE_TIMEOUT_ATTRIBUTE_ID (0x0005)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: ISO 7816 Protocol Tunnel
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_ISO7816_PROTOCOL_TUNNEL_STATUS_ATTRIBUTE_ID (0x0000)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Price
+
+// Client attributes
+#define ZCL_PRICE_INCREASE_RANDOMIZE_MINUTES_ATTRIBUTE_ID (0x0000)
+#define ZCL_PRICE_DECREASE_RANDOMIZE_MINUTES_ATTRIBUTE_ID (0x0001)
+#define ZCL_COMMODITY_TYPE_CLIENT_ATTRIBUTE_ID (0x0002)
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_TIER1_PRICE_LABEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_TIER2_PRICE_LABEL_ATTRIBUTE_ID (0x0001)
+#define ZCL_TIER3_PRICE_LABEL_ATTRIBUTE_ID (0x0002)
+#define ZCL_TIER4_PRICE_LABEL_ATTRIBUTE_ID (0x0003)
+#define ZCL_TIER5_PRICE_LABEL_ATTRIBUTE_ID (0x0004)
+#define ZCL_TIER6_PRICE_LABEL_ATTRIBUTE_ID (0x0005)
+#define ZCL_TIER7_PRICE_LABEL_ATTRIBUTE_ID (0x0006)
+#define ZCL_TIER8_PRICE_LABEL_ATTRIBUTE_ID (0x0007)
+#define ZCL_TIER9_PRICE_LABEL_ATTRIBUTE_ID (0x0008)
+#define ZCL_TIER10_PRICE_LABEL_ATTRIBUTE_ID (0x0009)
+#define ZCL_TIER11_PRICE_LABEL_ATTRIBUTE_ID (0x000A)
+#define ZCL_TIER12_PRICE_LABEL_ATTRIBUTE_ID (0x000B)
+#define ZCL_TIER13_PRICE_LABEL_ATTRIBUTE_ID (0x000C)
+#define ZCL_TIER14_PRICE_LABEL_ATTRIBUTE_ID (0x000D)
+#define ZCL_TIER15_PRICE_LABEL_ATTRIBUTE_ID (0x000E)
+#define ZCL_TIER16_PRICE_LABEL_ATTRIBUTE_ID (0x000F)
+#define ZCL_TIER17_PRICE_LABEL_ATTRIBUTE_ID (0x0010)
+#define ZCL_TIER18_PRICE_LABEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_TIER19_PRICE_LABEL_ATTRIBUTE_ID (0x0012)
+#define ZCL_TIER20_PRICE_LABEL_ATTRIBUTE_ID (0x0013)
+#define ZCL_TIER21_PRICE_LABEL_ATTRIBUTE_ID (0x0014)
+#define ZCL_TIER22_PRICE_LABEL_ATTRIBUTE_ID (0x0015)
+#define ZCL_TIER23_PRICE_LABEL_ATTRIBUTE_ID (0x0016)
+#define ZCL_TIER24_PRICE_LABEL_ATTRIBUTE_ID (0x0017)
+#define ZCL_TIER25_PRICE_LABEL_ATTRIBUTE_ID (0x0018)
+#define ZCL_TIER26_PRICE_LABEL_ATTRIBUTE_ID (0x0019)
+#define ZCL_TIER27_PRICE_LABEL_ATTRIBUTE_ID (0x001A)
+#define ZCL_TIER28_PRICE_LABEL_ATTRIBUTE_ID (0x001B)
+#define ZCL_TIER29_PRICE_LABEL_ATTRIBUTE_ID (0x001C)
+#define ZCL_TIER30_PRICE_LABEL_ATTRIBUTE_ID (0x001D)
+#define ZCL_TIER31_PRICE_LABEL_ATTRIBUTE_ID (0x001E)
+#define ZCL_TIER32_PRICE_LABEL_ATTRIBUTE_ID (0x001F)
+#define ZCL_TIER33_PRICE_LABEL_ATTRIBUTE_ID (0x0020)
+#define ZCL_TIER34_PRICE_LABEL_ATTRIBUTE_ID (0x0021)
+#define ZCL_TIER35_PRICE_LABEL_ATTRIBUTE_ID (0x0022)
+#define ZCL_TIER36_PRICE_LABEL_ATTRIBUTE_ID (0x0023)
+#define ZCL_TIER37_PRICE_LABEL_ATTRIBUTE_ID (0x0024)
+#define ZCL_TIER38_PRICE_LABEL_ATTRIBUTE_ID (0x0025)
+#define ZCL_TIER39_PRICE_LABEL_ATTRIBUTE_ID (0x0026)
+#define ZCL_TIER40_PRICE_LABEL_ATTRIBUTE_ID (0x0027)
+#define ZCL_TIER41_PRICE_LABEL_ATTRIBUTE_ID (0x0028)
+#define ZCL_TIER42_PRICE_LABEL_ATTRIBUTE_ID (0x0029)
+#define ZCL_TIER43_PRICE_LABEL_ATTRIBUTE_ID (0x002A)
+#define ZCL_TIER44_PRICE_LABEL_ATTRIBUTE_ID (0x002B)
+#define ZCL_TIER45_PRICE_LABEL_ATTRIBUTE_ID (0x002C)
+#define ZCL_TIER46_PRICE_LABEL_ATTRIBUTE_ID (0x002D)
+#define ZCL_TIER47_PRICE_LABEL_ATTRIBUTE_ID (0x002E)
+#define ZCL_TIER48_PRICE_LABEL_ATTRIBUTE_ID (0x002F)
+#define ZCL_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0100)
+#define ZCL_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0101)
+#define ZCL_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0102)
+#define ZCL_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0103)
+#define ZCL_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0104)
+#define ZCL_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0105)
+#define ZCL_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0106)
+#define ZCL_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0107)
+#define ZCL_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0108)
+#define ZCL_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0109)
+#define ZCL_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x010A)
+#define ZCL_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x010B)
+#define ZCL_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x010C)
+#define ZCL_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x010D)
+#define ZCL_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x010E)
+#define ZCL_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x010F)
+#define ZCL_TIER1_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0110)
+#define ZCL_TIER1_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0111)
+#define ZCL_TIER1_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0112)
+#define ZCL_TIER1_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0113)
+#define ZCL_TIER1_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0114)
+#define ZCL_TIER1_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0115)
+#define ZCL_TIER1_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0116)
+#define ZCL_TIER1_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0117)
+#define ZCL_TIER1_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0118)
+#define ZCL_TIER1_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0119)
+#define ZCL_TIER1_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x011A)
+#define ZCL_TIER1_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x011B)
+#define ZCL_TIER1_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x011C)
+#define ZCL_TIER1_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x011D)
+#define ZCL_TIER1_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x011E)
+#define ZCL_TIER1_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x011F)
+#define ZCL_TIER2_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0120)
+#define ZCL_TIER2_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0121)
+#define ZCL_TIER2_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0122)
+#define ZCL_TIER2_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0123)
+#define ZCL_TIER2_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0124)
+#define ZCL_TIER2_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0125)
+#define ZCL_TIER2_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0126)
+#define ZCL_TIER2_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0127)
+#define ZCL_TIER2_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0128)
+#define ZCL_TIER2_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0129)
+#define ZCL_TIER2_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x012A)
+#define ZCL_TIER2_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x012B)
+#define ZCL_TIER2_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x012C)
+#define ZCL_TIER2_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x012D)
+#define ZCL_TIER2_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x012E)
+#define ZCL_TIER2_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x012F)
+#define ZCL_TIER3_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0130)
+#define ZCL_TIER3_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0131)
+#define ZCL_TIER3_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0132)
+#define ZCL_TIER3_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0133)
+#define ZCL_TIER3_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0134)
+#define ZCL_TIER3_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0135)
+#define ZCL_TIER3_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0136)
+#define ZCL_TIER3_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0137)
+#define ZCL_TIER3_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0138)
+#define ZCL_TIER3_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0139)
+#define ZCL_TIER3_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x013A)
+#define ZCL_TIER3_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x013B)
+#define ZCL_TIER3_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x013C)
+#define ZCL_TIER3_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x013D)
+#define ZCL_TIER3_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x013E)
+#define ZCL_TIER3_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x013F)
+#define ZCL_TIER4_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0140)
+#define ZCL_TIER4_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0141)
+#define ZCL_TIER4_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0142)
+#define ZCL_TIER4_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0143)
+#define ZCL_TIER4_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0144)
+#define ZCL_TIER4_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0145)
+#define ZCL_TIER4_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0146)
+#define ZCL_TIER4_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0147)
+#define ZCL_TIER4_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0148)
+#define ZCL_TIER4_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0149)
+#define ZCL_TIER4_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x014A)
+#define ZCL_TIER4_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x014B)
+#define ZCL_TIER4_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x014C)
+#define ZCL_TIER4_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x014D)
+#define ZCL_TIER4_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x014E)
+#define ZCL_TIER4_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x014F)
+#define ZCL_TIER5_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0150)
+#define ZCL_TIER5_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0151)
+#define ZCL_TIER5_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0152)
+#define ZCL_TIER5_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0153)
+#define ZCL_TIER5_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0154)
+#define ZCL_TIER5_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0155)
+#define ZCL_TIER5_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0156)
+#define ZCL_TIER5_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0157)
+#define ZCL_TIER5_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0158)
+#define ZCL_TIER5_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0159)
+#define ZCL_TIER5_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x015A)
+#define ZCL_TIER5_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x015B)
+#define ZCL_TIER5_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x015C)
+#define ZCL_TIER5_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x015D)
+#define ZCL_TIER5_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x015E)
+#define ZCL_TIER5_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x015F)
+#define ZCL_TIER6_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0160)
+#define ZCL_TIER6_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0161)
+#define ZCL_TIER6_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0162)
+#define ZCL_TIER6_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0163)
+#define ZCL_TIER6_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0164)
+#define ZCL_TIER6_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0165)
+#define ZCL_TIER6_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0166)
+#define ZCL_TIER6_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0167)
+#define ZCL_TIER6_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0168)
+#define ZCL_TIER6_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0169)
+#define ZCL_TIER6_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x016A)
+#define ZCL_TIER6_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x016B)
+#define ZCL_TIER6_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x016C)
+#define ZCL_TIER6_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x016D)
+#define ZCL_TIER6_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x016E)
+#define ZCL_TIER6_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x016F)
+#define ZCL_TIER7_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0170)
+#define ZCL_TIER7_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0171)
+#define ZCL_TIER7_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0172)
+#define ZCL_TIER7_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0173)
+#define ZCL_TIER7_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0174)
+#define ZCL_TIER7_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0175)
+#define ZCL_TIER7_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0176)
+#define ZCL_TIER7_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0177)
+#define ZCL_TIER7_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0178)
+#define ZCL_TIER7_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0179)
+#define ZCL_TIER7_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x017A)
+#define ZCL_TIER7_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x017B)
+#define ZCL_TIER7_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x017C)
+#define ZCL_TIER7_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x017D)
+#define ZCL_TIER7_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x017E)
+#define ZCL_TIER7_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x017F)
+#define ZCL_TIER8_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0180)
+#define ZCL_TIER8_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0181)
+#define ZCL_TIER8_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0182)
+#define ZCL_TIER8_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0183)
+#define ZCL_TIER8_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0184)
+#define ZCL_TIER8_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0185)
+#define ZCL_TIER8_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0186)
+#define ZCL_TIER8_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0187)
+#define ZCL_TIER8_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0188)
+#define ZCL_TIER8_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0189)
+#define ZCL_TIER8_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x018A)
+#define ZCL_TIER8_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x018B)
+#define ZCL_TIER8_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x018C)
+#define ZCL_TIER8_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x018D)
+#define ZCL_TIER8_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x018E)
+#define ZCL_TIER8_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x018F)
+#define ZCL_TIER9_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x0190)
+#define ZCL_TIER9_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x0191)
+#define ZCL_TIER9_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x0192)
+#define ZCL_TIER9_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x0193)
+#define ZCL_TIER9_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x0194)
+#define ZCL_TIER9_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x0195)
+#define ZCL_TIER9_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x0196)
+#define ZCL_TIER9_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x0197)
+#define ZCL_TIER9_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x0198)
+#define ZCL_TIER9_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x0199)
+#define ZCL_TIER9_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x019A)
+#define ZCL_TIER9_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x019B)
+#define ZCL_TIER9_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x019C)
+#define ZCL_TIER9_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x019D)
+#define ZCL_TIER9_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x019E)
+#define ZCL_TIER9_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x019F)
+#define ZCL_TIER10_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01A0)
+#define ZCL_TIER10_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01A1)
+#define ZCL_TIER10_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01A2)
+#define ZCL_TIER10_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01A3)
+#define ZCL_TIER10_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01A4)
+#define ZCL_TIER10_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01A5)
+#define ZCL_TIER10_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01A6)
+#define ZCL_TIER10_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01A7)
+#define ZCL_TIER10_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01A8)
+#define ZCL_TIER10_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01A9)
+#define ZCL_TIER10_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01AA)
+#define ZCL_TIER10_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01AB)
+#define ZCL_TIER10_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01AC)
+#define ZCL_TIER10_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01AD)
+#define ZCL_TIER10_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01AE)
+#define ZCL_TIER10_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01AF)
+#define ZCL_TIER11_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01B0)
+#define ZCL_TIER11_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01B1)
+#define ZCL_TIER11_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01B2)
+#define ZCL_TIER11_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01B3)
+#define ZCL_TIER11_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01B4)
+#define ZCL_TIER11_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01B5)
+#define ZCL_TIER11_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01B6)
+#define ZCL_TIER11_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01B7)
+#define ZCL_TIER11_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01B8)
+#define ZCL_TIER11_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01B9)
+#define ZCL_TIER11_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01BA)
+#define ZCL_TIER11_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01BB)
+#define ZCL_TIER11_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01BC)
+#define ZCL_TIER11_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01BD)
+#define ZCL_TIER11_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01BE)
+#define ZCL_TIER11_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01BF)
+#define ZCL_TIER12_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01C0)
+#define ZCL_TIER12_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01C1)
+#define ZCL_TIER12_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01C2)
+#define ZCL_TIER12_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01C3)
+#define ZCL_TIER12_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01C4)
+#define ZCL_TIER12_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01C5)
+#define ZCL_TIER12_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01C6)
+#define ZCL_TIER12_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01C7)
+#define ZCL_TIER12_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01C8)
+#define ZCL_TIER12_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01C9)
+#define ZCL_TIER12_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01CA)
+#define ZCL_TIER12_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01CB)
+#define ZCL_TIER12_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01CC)
+#define ZCL_TIER12_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01CD)
+#define ZCL_TIER12_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01CE)
+#define ZCL_TIER12_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01CF)
+#define ZCL_TIER13_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01D0)
+#define ZCL_TIER13_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01D1)
+#define ZCL_TIER13_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01D2)
+#define ZCL_TIER13_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01D3)
+#define ZCL_TIER13_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01D4)
+#define ZCL_TIER13_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01D5)
+#define ZCL_TIER13_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01D6)
+#define ZCL_TIER13_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01D7)
+#define ZCL_TIER13_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01D8)
+#define ZCL_TIER13_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01D9)
+#define ZCL_TIER13_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01DA)
+#define ZCL_TIER13_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01DB)
+#define ZCL_TIER13_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01DC)
+#define ZCL_TIER13_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01DD)
+#define ZCL_TIER13_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01DE)
+#define ZCL_TIER13_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01DF)
+#define ZCL_TIER14_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01E0)
+#define ZCL_TIER14_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01E1)
+#define ZCL_TIER14_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01E2)
+#define ZCL_TIER14_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01E3)
+#define ZCL_TIER14_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01E4)
+#define ZCL_TIER14_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01E5)
+#define ZCL_TIER14_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01E6)
+#define ZCL_TIER14_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01E7)
+#define ZCL_TIER14_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01E8)
+#define ZCL_TIER14_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01E9)
+#define ZCL_TIER14_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01EA)
+#define ZCL_TIER14_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01EB)
+#define ZCL_TIER14_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01EC)
+#define ZCL_TIER14_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01ED)
+#define ZCL_TIER14_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01EE)
+#define ZCL_TIER14_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01EF)
+#define ZCL_TIER15_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x01F0)
+#define ZCL_TIER15_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x01F1)
+#define ZCL_TIER15_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x01F2)
+#define ZCL_TIER15_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x01F3)
+#define ZCL_TIER15_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x01F4)
+#define ZCL_TIER15_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x01F5)
+#define ZCL_TIER15_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x01F6)
+#define ZCL_TIER15_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x01F7)
+#define ZCL_TIER15_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x01F8)
+#define ZCL_TIER15_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x01F9)
+#define ZCL_TIER15_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x01FA)
+#define ZCL_TIER15_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x01FB)
+#define ZCL_TIER15_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x01FC)
+#define ZCL_TIER15_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x01FD)
+#define ZCL_TIER15_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x01FE)
+#define ZCL_TIER15_BLOCK_THRESHOLD_COUNT_ATTRIBUTE_ID (0x01FF)
+#define ZCL_START_OF_BLOCK_PERIOD_ATTRIBUTE_ID (0x0200)
+#define ZCL_BLOCK_PERIOD_DURATION_MINUTES_ATTRIBUTE_ID (0x0201)
+#define ZCL_THRESHOLD_MULTIPLIER_ATTRIBUTE_ID (0x0202)
+#define ZCL_THRESHOLD_DIVISOR_ATTRIBUTE_ID (0x0203)
+#define ZCL_BLOCK_PERIOD_DURATION_TYPE_ATTRIBUTE_ID (0x0204)
+#define ZCL_COMMODITY_TYPE_SERVER_ATTRIBUTE_ID (0x0300)
+#define ZCL_STANDING_CHARGE_ATTRIBUTE_ID (0x0301)
+#define ZCL_CONVERSION_FACTOR_ATTRIBUTE_ID (0x0302)
+#define ZCL_CONVERSION_FACTOR_TRAILING_DIGIT_ATTRIBUTE_ID (0x0303)
+#define ZCL_CALORIFIC_VALUE_ATTRIBUTE_ID (0x0304)
+#define ZCL_CALORIFIC_VALUE_UNIT_ATTRIBUTE_ID (0x0305)
+#define ZCL_CALORIFIC_VALUE_TRAILING_DIGIT_ATTRIBUTE_ID (0x0306)
+#define ZCL_NO_TIER_BLOCK1_PRICE_ATTRIBUTE_ID (0x0400)
+#define ZCL_NO_TIER_BLOCK2_PRICE_ATTRIBUTE_ID (0x0401)
+#define ZCL_NO_TIER_BLOCK3_PRICE_ATTRIBUTE_ID (0x0402)
+#define ZCL_NO_TIER_BLOCK4_PRICE_ATTRIBUTE_ID (0x0403)
+#define ZCL_NO_TIER_BLOCK5_PRICE_ATTRIBUTE_ID (0x0404)
+#define ZCL_NO_TIER_BLOCK6_PRICE_ATTRIBUTE_ID (0x0405)
+#define ZCL_NO_TIER_BLOCK7_PRICE_ATTRIBUTE_ID (0x0406)
+#define ZCL_NO_TIER_BLOCK8_PRICE_ATTRIBUTE_ID (0x0407)
+#define ZCL_NO_TIER_BLOCK9_PRICE_ATTRIBUTE_ID (0x0408)
+#define ZCL_NO_TIER_BLOCK10_PRICE_ATTRIBUTE_ID (0x0409)
+#define ZCL_NO_TIER_BLOCK11_PRICE_ATTRIBUTE_ID (0x040A)
+#define ZCL_NO_TIER_BLOCK12_PRICE_ATTRIBUTE_ID (0x040B)
+#define ZCL_NO_TIER_BLOCK13_PRICE_ATTRIBUTE_ID (0x040C)
+#define ZCL_NO_TIER_BLOCK14_PRICE_ATTRIBUTE_ID (0x040D)
+#define ZCL_NO_TIER_BLOCK15_PRICE_ATTRIBUTE_ID (0x040E)
+#define ZCL_NO_TIER_BLOCK16_PRICE_ATTRIBUTE_ID (0x040F)
+#define ZCL_TIER1_BLOCK1_PRICE_ATTRIBUTE_ID (0x0410)
+#define ZCL_TIER1_BLOCK2_PRICE_ATTRIBUTE_ID (0x0411)
+#define ZCL_TIER1_BLOCK3_PRICE_ATTRIBUTE_ID (0x0412)
+#define ZCL_TIER1_BLOCK4_PRICE_ATTRIBUTE_ID (0x0413)
+#define ZCL_TIER1_BLOCK5_PRICE_ATTRIBUTE_ID (0x0414)
+#define ZCL_TIER1_BLOCK6_PRICE_ATTRIBUTE_ID (0x0415)
+#define ZCL_TIER1_BLOCK7_PRICE_ATTRIBUTE_ID (0x0416)
+#define ZCL_TIER1_BLOCK8_PRICE_ATTRIBUTE_ID (0x0417)
+#define ZCL_TIER1_BLOCK9_PRICE_ATTRIBUTE_ID (0x0418)
+#define ZCL_TIER1_BLOCK10_PRICE_ATTRIBUTE_ID (0x0419)
+#define ZCL_TIER1_BLOCK11_PRICE_ATTRIBUTE_ID (0x041A)
+#define ZCL_TIER1_BLOCK12_PRICE_ATTRIBUTE_ID (0x041B)
+#define ZCL_TIER1_BLOCK13_PRICE_ATTRIBUTE_ID (0x041C)
+#define ZCL_TIER1_BLOCK14_PRICE_ATTRIBUTE_ID (0x041D)
+#define ZCL_TIER1_BLOCK15_PRICE_ATTRIBUTE_ID (0x041E)
+#define ZCL_TIER1_BLOCK16_PRICE_ATTRIBUTE_ID (0x041F)
+#define ZCL_TIER2_BLOCK1_PRICE_ATTRIBUTE_ID (0x0420)
+#define ZCL_TIER2_BLOCK2_PRICE_ATTRIBUTE_ID (0x0421)
+#define ZCL_TIER2_BLOCK3_PRICE_ATTRIBUTE_ID (0x0422)
+#define ZCL_TIER2_BLOCK4_PRICE_ATTRIBUTE_ID (0x0423)
+#define ZCL_TIER2_BLOCK5_PRICE_ATTRIBUTE_ID (0x0424)
+#define ZCL_TIER2_BLOCK6_PRICE_ATTRIBUTE_ID (0x0425)
+#define ZCL_TIER2_BLOCK7_PRICE_ATTRIBUTE_ID (0x0426)
+#define ZCL_TIER2_BLOCK8_PRICE_ATTRIBUTE_ID (0x0427)
+#define ZCL_TIER2_BLOCK9_PRICE_ATTRIBUTE_ID (0x0428)
+#define ZCL_TIER2_BLOCK10_PRICE_ATTRIBUTE_ID (0x0429)
+#define ZCL_TIER2_BLOCK11_PRICE_ATTRIBUTE_ID (0x042A)
+#define ZCL_TIER2_BLOCK12_PRICE_ATTRIBUTE_ID (0x042B)
+#define ZCL_TIER2_BLOCK13_PRICE_ATTRIBUTE_ID (0x042C)
+#define ZCL_TIER2_BLOCK14_PRICE_ATTRIBUTE_ID (0x042D)
+#define ZCL_TIER2_BLOCK15_PRICE_ATTRIBUTE_ID (0x042E)
+#define ZCL_TIER2_BLOCK16_PRICE_ATTRIBUTE_ID (0x042F)
+#define ZCL_TIER3_BLOCK1_PRICE_ATTRIBUTE_ID (0x0430)
+#define ZCL_TIER3_BLOCK2_PRICE_ATTRIBUTE_ID (0x0431)
+#define ZCL_TIER3_BLOCK3_PRICE_ATTRIBUTE_ID (0x0432)
+#define ZCL_TIER3_BLOCK4_PRICE_ATTRIBUTE_ID (0x0433)
+#define ZCL_TIER3_BLOCK5_PRICE_ATTRIBUTE_ID (0x0434)
+#define ZCL_TIER3_BLOCK6_PRICE_ATTRIBUTE_ID (0x0435)
+#define ZCL_TIER3_BLOCK7_PRICE_ATTRIBUTE_ID (0x0436)
+#define ZCL_TIER3_BLOCK8_PRICE_ATTRIBUTE_ID (0x0437)
+#define ZCL_TIER3_BLOCK9_PRICE_ATTRIBUTE_ID (0x0438)
+#define ZCL_TIER3_BLOCK10_PRICE_ATTRIBUTE_ID (0x0439)
+#define ZCL_TIER3_BLOCK11_PRICE_ATTRIBUTE_ID (0x043A)
+#define ZCL_TIER3_BLOCK12_PRICE_ATTRIBUTE_ID (0x043B)
+#define ZCL_TIER3_BLOCK13_PRICE_ATTRIBUTE_ID (0x043C)
+#define ZCL_TIER3_BLOCK14_PRICE_ATTRIBUTE_ID (0x043D)
+#define ZCL_TIER3_BLOCK15_PRICE_ATTRIBUTE_ID (0x043E)
+#define ZCL_TIER3_BLOCK16_PRICE_ATTRIBUTE_ID (0x043F)
+#define ZCL_TIER4_BLOCK1_PRICE_ATTRIBUTE_ID (0x0440)
+#define ZCL_TIER4_BLOCK2_PRICE_ATTRIBUTE_ID (0x0441)
+#define ZCL_TIER4_BLOCK3_PRICE_ATTRIBUTE_ID (0x0442)
+#define ZCL_TIER4_BLOCK4_PRICE_ATTRIBUTE_ID (0x0443)
+#define ZCL_TIER4_BLOCK5_PRICE_ATTRIBUTE_ID (0x0444)
+#define ZCL_TIER4_BLOCK6_PRICE_ATTRIBUTE_ID (0x0445)
+#define ZCL_TIER4_BLOCK7_PRICE_ATTRIBUTE_ID (0x0446)
+#define ZCL_TIER4_BLOCK8_PRICE_ATTRIBUTE_ID (0x0447)
+#define ZCL_TIER4_BLOCK9_PRICE_ATTRIBUTE_ID (0x0448)
+#define ZCL_TIER4_BLOCK10_PRICE_ATTRIBUTE_ID (0x0449)
+#define ZCL_TIER4_BLOCK11_PRICE_ATTRIBUTE_ID (0x044A)
+#define ZCL_TIER4_BLOCK12_PRICE_ATTRIBUTE_ID (0x044B)
+#define ZCL_TIER4_BLOCK13_PRICE_ATTRIBUTE_ID (0x044C)
+#define ZCL_TIER4_BLOCK14_PRICE_ATTRIBUTE_ID (0x044D)
+#define ZCL_TIER4_BLOCK15_PRICE_ATTRIBUTE_ID (0x044E)
+#define ZCL_TIER4_BLOCK16_PRICE_ATTRIBUTE_ID (0x044F)
+#define ZCL_TIER5_BLOCK1_PRICE_ATTRIBUTE_ID (0x0450)
+#define ZCL_TIER5_BLOCK2_PRICE_ATTRIBUTE_ID (0x0451)
+#define ZCL_TIER5_BLOCK3_PRICE_ATTRIBUTE_ID (0x0452)
+#define ZCL_TIER5_BLOCK4_PRICE_ATTRIBUTE_ID (0x0453)
+#define ZCL_TIER5_BLOCK5_PRICE_ATTRIBUTE_ID (0x0454)
+#define ZCL_TIER5_BLOCK6_PRICE_ATTRIBUTE_ID (0x0455)
+#define ZCL_TIER5_BLOCK7_PRICE_ATTRIBUTE_ID (0x0456)
+#define ZCL_TIER5_BLOCK8_PRICE_ATTRIBUTE_ID (0x0457)
+#define ZCL_TIER5_BLOCK9_PRICE_ATTRIBUTE_ID (0x0458)
+#define ZCL_TIER5_BLOCK10_PRICE_ATTRIBUTE_ID (0x0459)
+#define ZCL_TIER5_BLOCK11_PRICE_ATTRIBUTE_ID (0x045A)
+#define ZCL_TIER5_BLOCK12_PRICE_ATTRIBUTE_ID (0x045B)
+#define ZCL_TIER5_BLOCK13_PRICE_ATTRIBUTE_ID (0x045C)
+#define ZCL_TIER5_BLOCK14_PRICE_ATTRIBUTE_ID (0x045D)
+#define ZCL_TIER5_BLOCK15_PRICE_ATTRIBUTE_ID (0x045E)
+#define ZCL_TIER5_BLOCK16_PRICE_ATTRIBUTE_ID (0x045F)
+#define ZCL_TIER6_BLOCK1_PRICE_ATTRIBUTE_ID (0x0460)
+#define ZCL_TIER6_BLOCK2_PRICE_ATTRIBUTE_ID (0x0461)
+#define ZCL_TIER6_BLOCK3_PRICE_ATTRIBUTE_ID (0x0462)
+#define ZCL_TIER6_BLOCK4_PRICE_ATTRIBUTE_ID (0x0463)
+#define ZCL_TIER6_BLOCK5_PRICE_ATTRIBUTE_ID (0x0464)
+#define ZCL_TIER6_BLOCK6_PRICE_ATTRIBUTE_ID (0x0465)
+#define ZCL_TIER6_BLOCK7_PRICE_ATTRIBUTE_ID (0x0466)
+#define ZCL_TIER6_BLOCK8_PRICE_ATTRIBUTE_ID (0x0467)
+#define ZCL_TIER6_BLOCK9_PRICE_ATTRIBUTE_ID (0x0468)
+#define ZCL_TIER6_BLOCK10_PRICE_ATTRIBUTE_ID (0x0469)
+#define ZCL_TIER6_BLOCK11_PRICE_ATTRIBUTE_ID (0x046A)
+#define ZCL_TIER6_BLOCK12_PRICE_ATTRIBUTE_ID (0x046B)
+#define ZCL_TIER6_BLOCK13_PRICE_ATTRIBUTE_ID (0x046C)
+#define ZCL_TIER6_BLOCK14_PRICE_ATTRIBUTE_ID (0x046D)
+#define ZCL_TIER6_BLOCK15_PRICE_ATTRIBUTE_ID (0x046E)
+#define ZCL_TIER6_BLOCK16_PRICE_ATTRIBUTE_ID (0x046F)
+#define ZCL_TIER7_BLOCK1_PRICE_ATTRIBUTE_ID (0x0470)
+#define ZCL_TIER7_BLOCK2_PRICE_ATTRIBUTE_ID (0x0471)
+#define ZCL_TIER7_BLOCK3_PRICE_ATTRIBUTE_ID (0x0472)
+#define ZCL_TIER7_BLOCK4_PRICE_ATTRIBUTE_ID (0x0473)
+#define ZCL_TIER7_BLOCK5_PRICE_ATTRIBUTE_ID (0x0474)
+#define ZCL_TIER7_BLOCK6_PRICE_ATTRIBUTE_ID (0x0475)
+#define ZCL_TIER7_BLOCK7_PRICE_ATTRIBUTE_ID (0x0476)
+#define ZCL_TIER7_BLOCK8_PRICE_ATTRIBUTE_ID (0x0477)
+#define ZCL_TIER7_BLOCK9_PRICE_ATTRIBUTE_ID (0x0478)
+#define ZCL_TIER7_BLOCK10_PRICE_ATTRIBUTE_ID (0x0479)
+#define ZCL_TIER7_BLOCK11_PRICE_ATTRIBUTE_ID (0x047A)
+#define ZCL_TIER7_BLOCK12_PRICE_ATTRIBUTE_ID (0x047B)
+#define ZCL_TIER7_BLOCK13_PRICE_ATTRIBUTE_ID (0x047C)
+#define ZCL_TIER7_BLOCK14_PRICE_ATTRIBUTE_ID (0x047D)
+#define ZCL_TIER7_BLOCK15_PRICE_ATTRIBUTE_ID (0x047E)
+#define ZCL_TIER7_BLOCK16_PRICE_ATTRIBUTE_ID (0x047F)
+#define ZCL_TIER8_BLOCK1_PRICE_ATTRIBUTE_ID (0x0480)
+#define ZCL_TIER8_BLOCK2_PRICE_ATTRIBUTE_ID (0x0481)
+#define ZCL_TIER8_BLOCK3_PRICE_ATTRIBUTE_ID (0x0482)
+#define ZCL_TIER8_BLOCK4_PRICE_ATTRIBUTE_ID (0x0483)
+#define ZCL_TIER8_BLOCK5_PRICE_ATTRIBUTE_ID (0x0484)
+#define ZCL_TIER8_BLOCK6_PRICE_ATTRIBUTE_ID (0x0485)
+#define ZCL_TIER8_BLOCK7_PRICE_ATTRIBUTE_ID (0x0486)
+#define ZCL_TIER8_BLOCK8_PRICE_ATTRIBUTE_ID (0x0487)
+#define ZCL_TIER8_BLOCK9_PRICE_ATTRIBUTE_ID (0x0488)
+#define ZCL_TIER8_BLOCK10_PRICE_ATTRIBUTE_ID (0x0489)
+#define ZCL_TIER8_BLOCK11_PRICE_ATTRIBUTE_ID (0x048A)
+#define ZCL_TIER8_BLOCK12_PRICE_ATTRIBUTE_ID (0x048B)
+#define ZCL_TIER8_BLOCK13_PRICE_ATTRIBUTE_ID (0x048C)
+#define ZCL_TIER8_BLOCK14_PRICE_ATTRIBUTE_ID (0x048D)
+#define ZCL_TIER8_BLOCK15_PRICE_ATTRIBUTE_ID (0x048E)
+#define ZCL_TIER8_BLOCK16_PRICE_ATTRIBUTE_ID (0x048F)
+#define ZCL_TIER9_BLOCK1_PRICE_ATTRIBUTE_ID (0x0490)
+#define ZCL_TIER9_BLOCK2_PRICE_ATTRIBUTE_ID (0x0491)
+#define ZCL_TIER9_BLOCK3_PRICE_ATTRIBUTE_ID (0x0492)
+#define ZCL_TIER9_BLOCK4_PRICE_ATTRIBUTE_ID (0x0493)
+#define ZCL_TIER9_BLOCK5_PRICE_ATTRIBUTE_ID (0x0494)
+#define ZCL_TIER9_BLOCK6_PRICE_ATTRIBUTE_ID (0x0495)
+#define ZCL_TIER9_BLOCK7_PRICE_ATTRIBUTE_ID (0x0496)
+#define ZCL_TIER9_BLOCK8_PRICE_ATTRIBUTE_ID (0x0497)
+#define ZCL_TIER9_BLOCK9_PRICE_ATTRIBUTE_ID (0x0498)
+#define ZCL_TIER9_BLOCK10_PRICE_ATTRIBUTE_ID (0x0499)
+#define ZCL_TIER9_BLOCK11_PRICE_ATTRIBUTE_ID (0x049A)
+#define ZCL_TIER9_BLOCK12_PRICE_ATTRIBUTE_ID (0x049B)
+#define ZCL_TIER9_BLOCK13_PRICE_ATTRIBUTE_ID (0x049C)
+#define ZCL_TIER9_BLOCK14_PRICE_ATTRIBUTE_ID (0x049D)
+#define ZCL_TIER9_BLOCK15_PRICE_ATTRIBUTE_ID (0x049E)
+#define ZCL_TIER9_BLOCK16_PRICE_ATTRIBUTE_ID (0x049F)
+#define ZCL_TIER10_BLOCK1_PRICE_ATTRIBUTE_ID (0x04A0)
+#define ZCL_TIER10_BLOCK2_PRICE_ATTRIBUTE_ID (0x04A1)
+#define ZCL_TIER10_BLOCK3_PRICE_ATTRIBUTE_ID (0x04A2)
+#define ZCL_TIER10_BLOCK4_PRICE_ATTRIBUTE_ID (0x04A3)
+#define ZCL_TIER10_BLOCK5_PRICE_ATTRIBUTE_ID (0x04A4)
+#define ZCL_TIER10_BLOCK6_PRICE_ATTRIBUTE_ID (0x04A5)
+#define ZCL_TIER10_BLOCK7_PRICE_ATTRIBUTE_ID (0x04A6)
+#define ZCL_TIER10_BLOCK8_PRICE_ATTRIBUTE_ID (0x04A7)
+#define ZCL_TIER10_BLOCK9_PRICE_ATTRIBUTE_ID (0x04A8)
+#define ZCL_TIER10_BLOCK10_PRICE_ATTRIBUTE_ID (0x04A9)
+#define ZCL_TIER10_BLOCK11_PRICE_ATTRIBUTE_ID (0x04AA)
+#define ZCL_TIER10_BLOCK12_PRICE_ATTRIBUTE_ID (0x04AB)
+#define ZCL_TIER10_BLOCK13_PRICE_ATTRIBUTE_ID (0x04AC)
+#define ZCL_TIER10_BLOCK14_PRICE_ATTRIBUTE_ID (0x04AD)
+#define ZCL_TIER10_BLOCK15_PRICE_ATTRIBUTE_ID (0x04AE)
+#define ZCL_TIER10_BLOCK16_PRICE_ATTRIBUTE_ID (0x04AF)
+#define ZCL_TIER11_BLOCK1_PRICE_ATTRIBUTE_ID (0x04B0)
+#define ZCL_TIER11_BLOCK2_PRICE_ATTRIBUTE_ID (0x04B1)
+#define ZCL_TIER11_BLOCK3_PRICE_ATTRIBUTE_ID (0x04B2)
+#define ZCL_TIER11_BLOCK4_PRICE_ATTRIBUTE_ID (0x04B3)
+#define ZCL_TIER11_BLOCK5_PRICE_ATTRIBUTE_ID (0x04B4)
+#define ZCL_TIER11_BLOCK6_PRICE_ATTRIBUTE_ID (0x04B5)
+#define ZCL_TIER11_BLOCK7_PRICE_ATTRIBUTE_ID (0x04B6)
+#define ZCL_TIER11_BLOCK8_PRICE_ATTRIBUTE_ID (0x04B7)
+#define ZCL_TIER11_BLOCK9_PRICE_ATTRIBUTE_ID (0x04B8)
+#define ZCL_TIER11_BLOCK10_PRICE_ATTRIBUTE_ID (0x04B9)
+#define ZCL_TIER11_BLOCK11_PRICE_ATTRIBUTE_ID (0x04BA)
+#define ZCL_TIER11_BLOCK12_PRICE_ATTRIBUTE_ID (0x04BB)
+#define ZCL_TIER11_BLOCK13_PRICE_ATTRIBUTE_ID (0x04BC)
+#define ZCL_TIER11_BLOCK14_PRICE_ATTRIBUTE_ID (0x04BD)
+#define ZCL_TIER11_BLOCK15_PRICE_ATTRIBUTE_ID (0x04BE)
+#define ZCL_TIER11_BLOCK16_PRICE_ATTRIBUTE_ID (0x04BF)
+#define ZCL_TIER12_BLOCK1_PRICE_ATTRIBUTE_ID (0x04C0)
+#define ZCL_TIER12_BLOCK2_PRICE_ATTRIBUTE_ID (0x04C1)
+#define ZCL_TIER12_BLOCK3_PRICE_ATTRIBUTE_ID (0x04C2)
+#define ZCL_TIER12_BLOCK4_PRICE_ATTRIBUTE_ID (0x04C3)
+#define ZCL_TIER12_BLOCK5_PRICE_ATTRIBUTE_ID (0x04C4)
+#define ZCL_TIER12_BLOCK6_PRICE_ATTRIBUTE_ID (0x04C5)
+#define ZCL_TIER12_BLOCK7_PRICE_ATTRIBUTE_ID (0x04C6)
+#define ZCL_TIER12_BLOCK8_PRICE_ATTRIBUTE_ID (0x04C7)
+#define ZCL_TIER12_BLOCK9_PRICE_ATTRIBUTE_ID (0x04C8)
+#define ZCL_TIER12_BLOCK10_PRICE_ATTRIBUTE_ID (0x04C9)
+#define ZCL_TIER12_BLOCK11_PRICE_ATTRIBUTE_ID (0x04CA)
+#define ZCL_TIER12_BLOCK12_PRICE_ATTRIBUTE_ID (0x04CB)
+#define ZCL_TIER12_BLOCK13_PRICE_ATTRIBUTE_ID (0x04CC)
+#define ZCL_TIER12_BLOCK14_PRICE_ATTRIBUTE_ID (0x04CD)
+#define ZCL_TIER12_BLOCK15_PRICE_ATTRIBUTE_ID (0x04CE)
+#define ZCL_TIER12_BLOCK16_PRICE_ATTRIBUTE_ID (0x04CF)
+#define ZCL_TIER13_BLOCK1_PRICE_ATTRIBUTE_ID (0x04D0)
+#define ZCL_TIER13_BLOCK2_PRICE_ATTRIBUTE_ID (0x04D1)
+#define ZCL_TIER13_BLOCK3_PRICE_ATTRIBUTE_ID (0x04D2)
+#define ZCL_TIER13_BLOCK4_PRICE_ATTRIBUTE_ID (0x04D3)
+#define ZCL_TIER13_BLOCK5_PRICE_ATTRIBUTE_ID (0x04D4)
+#define ZCL_TIER13_BLOCK6_PRICE_ATTRIBUTE_ID (0x04D5)
+#define ZCL_TIER13_BLOCK7_PRICE_ATTRIBUTE_ID (0x04D6)
+#define ZCL_TIER13_BLOCK8_PRICE_ATTRIBUTE_ID (0x04D7)
+#define ZCL_TIER13_BLOCK9_PRICE_ATTRIBUTE_ID (0x04D8)
+#define ZCL_TIER13_BLOCK10_PRICE_ATTRIBUTE_ID (0x04D9)
+#define ZCL_TIER13_BLOCK11_PRICE_ATTRIBUTE_ID (0x04DA)
+#define ZCL_TIER13_BLOCK12_PRICE_ATTRIBUTE_ID (0x04DB)
+#define ZCL_TIER13_BLOCK13_PRICE_ATTRIBUTE_ID (0x04DC)
+#define ZCL_TIER13_BLOCK14_PRICE_ATTRIBUTE_ID (0x04DD)
+#define ZCL_TIER13_BLOCK15_PRICE_ATTRIBUTE_ID (0x04DE)
+#define ZCL_TIER13_BLOCK16_PRICE_ATTRIBUTE_ID (0x04DF)
+#define ZCL_TIER14_BLOCK1_PRICE_ATTRIBUTE_ID (0x04E0)
+#define ZCL_TIER14_BLOCK2_PRICE_ATTRIBUTE_ID (0x04E1)
+#define ZCL_TIER14_BLOCK3_PRICE_ATTRIBUTE_ID (0x04E2)
+#define ZCL_TIER14_BLOCK4_PRICE_ATTRIBUTE_ID (0x04E3)
+#define ZCL_TIER14_BLOCK5_PRICE_ATTRIBUTE_ID (0x04E4)
+#define ZCL_TIER14_BLOCK6_PRICE_ATTRIBUTE_ID (0x04E5)
+#define ZCL_TIER14_BLOCK7_PRICE_ATTRIBUTE_ID (0x04E6)
+#define ZCL_TIER14_BLOCK8_PRICE_ATTRIBUTE_ID (0x04E7)
+#define ZCL_TIER14_BLOCK9_PRICE_ATTRIBUTE_ID (0x04E8)
+#define ZCL_TIER14_BLOCK10_PRICE_ATTRIBUTE_ID (0x04E9)
+#define ZCL_TIER14_BLOCK11_PRICE_ATTRIBUTE_ID (0x04EA)
+#define ZCL_TIER14_BLOCK12_PRICE_ATTRIBUTE_ID (0x04EB)
+#define ZCL_TIER14_BLOCK13_PRICE_ATTRIBUTE_ID (0x04EC)
+#define ZCL_TIER14_BLOCK14_PRICE_ATTRIBUTE_ID (0x04ED)
+#define ZCL_TIER14_BLOCK15_PRICE_ATTRIBUTE_ID (0x04EE)
+#define ZCL_TIER14_BLOCK16_PRICE_ATTRIBUTE_ID (0x04EF)
+#define ZCL_TIER15_BLOCK1_PRICE_ATTRIBUTE_ID (0x04F0)
+#define ZCL_TIER15_BLOCK2_PRICE_ATTRIBUTE_ID (0x04F1)
+#define ZCL_TIER15_BLOCK3_PRICE_ATTRIBUTE_ID (0x04F2)
+#define ZCL_TIER15_BLOCK4_PRICE_ATTRIBUTE_ID (0x04F3)
+#define ZCL_TIER15_BLOCK5_PRICE_ATTRIBUTE_ID (0x04F4)
+#define ZCL_TIER15_BLOCK6_PRICE_ATTRIBUTE_ID (0x04F5)
+#define ZCL_TIER15_BLOCK7_PRICE_ATTRIBUTE_ID (0x04F6)
+#define ZCL_TIER15_BLOCK8_PRICE_ATTRIBUTE_ID (0x04F7)
+#define ZCL_TIER15_BLOCK9_PRICE_ATTRIBUTE_ID (0x04F8)
+#define ZCL_TIER15_BLOCK10_PRICE_ATTRIBUTE_ID (0x04F9)
+#define ZCL_TIER15_BLOCK11_PRICE_ATTRIBUTE_ID (0x04FA)
+#define ZCL_TIER15_BLOCK12_PRICE_ATTRIBUTE_ID (0x04FB)
+#define ZCL_TIER15_BLOCK13_PRICE_ATTRIBUTE_ID (0x04FC)
+#define ZCL_TIER15_BLOCK14_PRICE_ATTRIBUTE_ID (0x04FD)
+#define ZCL_TIER15_BLOCK15_PRICE_ATTRIBUTE_ID (0x04FE)
+#define ZCL_TIER15_BLOCK16_PRICE_ATTRIBUTE_ID (0x04FF)
+#define ZCL_PRICE_TIER16_ATTRIBUTE_ID (0x050F)
+#define ZCL_PRICE_TIER17_ATTRIBUTE_ID (0x0510)
+#define ZCL_PRICE_TIER18_ATTRIBUTE_ID (0x0511)
+#define ZCL_PRICE_TIER19_ATTRIBUTE_ID (0x0512)
+#define ZCL_PRICE_TIER20_ATTRIBUTE_ID (0x0513)
+#define ZCL_PRICE_TIER21_ATTRIBUTE_ID (0x0514)
+#define ZCL_PRICE_TIER22_ATTRIBUTE_ID (0x0515)
+#define ZCL_PRICE_TIER23_ATTRIBUTE_ID (0x0516)
+#define ZCL_PRICE_TIER24_ATTRIBUTE_ID (0x0517)
+#define ZCL_PRICE_TIER25_ATTRIBUTE_ID (0x0518)
+#define ZCL_PRICE_TIER26_ATTRIBUTE_ID (0x0519)
+#define ZCL_PRICE_TIER27_ATTRIBUTE_ID (0x051A)
+#define ZCL_PRICE_TIER28_ATTRIBUTE_ID (0x051B)
+#define ZCL_PRICE_TIER29_ATTRIBUTE_ID (0x051C)
+#define ZCL_PRICE_TIER30_ATTRIBUTE_ID (0x051D)
+#define ZCL_PRICE_TIER31_ATTRIBUTE_ID (0x051E)
+#define ZCL_PRICE_TIER32_ATTRIBUTE_ID (0x051F)
+#define ZCL_PRICE_TIER33_ATTRIBUTE_ID (0x0520)
+#define ZCL_PRICE_TIER34_ATTRIBUTE_ID (0x0521)
+#define ZCL_PRICE_TIER35_ATTRIBUTE_ID (0x0522)
+#define ZCL_PRICE_TIER36_ATTRIBUTE_ID (0x0523)
+#define ZCL_PRICE_TIER37_ATTRIBUTE_ID (0x0524)
+#define ZCL_PRICE_TIER38_ATTRIBUTE_ID (0x0525)
+#define ZCL_PRICE_TIER39_ATTRIBUTE_ID (0x0526)
+#define ZCL_PRICE_TIER40_ATTRIBUTE_ID (0x0527)
+#define ZCL_PRICE_TIER41_ATTRIBUTE_ID (0x0528)
+#define ZCL_PRICE_TIER42_ATTRIBUTE_ID (0x0529)
+#define ZCL_PRICE_TIER43_ATTRIBUTE_ID (0x052A)
+#define ZCL_PRICE_TIER44_ATTRIBUTE_ID (0x052B)
+#define ZCL_PRICE_TIER45_ATTRIBUTE_ID (0x052C)
+#define ZCL_PRICE_TIER46_ATTRIBUTE_ID (0x052D)
+#define ZCL_PRICE_TIER47_ATTRIBUTE_ID (0x052E)
+#define ZCL_PRICE_TIER48_ATTRIBUTE_ID (0x052F)
+#define ZCL_CPP1_PRICE_ATTRIBUTE_ID (0x05FE)
+#define ZCL_CPP2_PRICE_ATTRIBUTE_ID (0x05FF)
+#define ZCL_TARIFF_LABEL_ATTRIBUTE_ID (0x0610)
+#define ZCL_NUMBER_OF_PRICE_TIERS_IN_USE_ATTRIBUTE_ID (0x0611)
+#define ZCL_NUMBER_OF_BLOCK_THRESHOLDS_IN_USE_ATTRIBUTE_ID (0x0612)
+#define ZCL_TIER_BLOCK_MODE_ATTRIBUTE_ID (0x0613)
+#define ZCL_TARIFF_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0615)
+#define ZCL_TARIFF_CURRENCY_ATTRIBUTE_ID (0x0616)
+#define ZCL_TARIFF_PRICE_TRAILING_DIGIT_ATTRIBUTE_ID (0x0617)
+#define ZCL_TARIFF_RESOLUTION_PERIOD_ATTRIBUTE_ID (0x0619)
+#define ZCL_TARIFF_CO2_ATTRIBUTE_ID (0x0620)
+#define ZCL_TARIFF_CO2_UNIT_ATTRIBUTE_ID (0x0621)
+#define ZCL_TARIFF_CO2_TRAILING_DIGIT_ATTRIBUTE_ID (0x0622)
+#define ZCL_CURRENT_BILLING_PERIOD_START_ATTRIBUTE_ID (0x0700)
+#define ZCL_CURRENT_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x0701)
+#define ZCL_LAST_BILLING_PERIOD_START_ATTRIBUTE_ID (0x0702)
+#define ZCL_LAST_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x0703)
+#define ZCL_LAST_BILLING_PERIOD_CONSOLIDATED_BILL_ATTRIBUTE_ID (0x0704)
+#define ZCL_CREDIT_PAYMENT_DUE_DATE_ATTRIBUTE_ID (0x0800)
+#define ZCL_CREDIT_PAYMENT_STATUS_ATTRIBUTE_ID (0x0801)
+#define ZCL_CREDIT_PAYMENT_OVER_DUE_AMOUNT_ATTRIBUTE_ID (0x0802)
+#define ZCL_PAYMENT_DISCOUNT_ATTRIBUTE_ID (0x080A)
+#define ZCL_PAYMENT_DISCOUNT_PERIOD_ATTRIBUTE_ID (0x080B)
+#define ZCL_CREDIT_PAYMENT_1_ATTRIBUTE_ID (0x0810)
+#define ZCL_CREDIT_PAYMENT_DATE_1_ATTRIBUTE_ID (0x0811)
+#define ZCL_CREDIT_PAYMENT_REF_1_ATTRIBUTE_ID (0x0812)
+#define ZCL_CREDIT_PAYMENT_2_ATTRIBUTE_ID (0x0820)
+#define ZCL_CREDIT_PAYMENT_DATE_2_ATTRIBUTE_ID (0x0821)
+#define ZCL_CREDIT_PAYMENT_REF_2_ATTRIBUTE_ID (0x0822)
+#define ZCL_CREDIT_PAYMENT_3_ATTRIBUTE_ID (0x0830)
+#define ZCL_CREDIT_PAYMENT_DATE_3_ATTRIBUTE_ID (0x0831)
+#define ZCL_CREDIT_PAYMENT_REF_3_ATTRIBUTE_ID (0x0832)
+#define ZCL_CREDIT_PAYMENT_4_ATTRIBUTE_ID (0x0840)
+#define ZCL_CREDIT_PAYMENT_DATE_4_ATTRIBUTE_ID (0x0841)
+#define ZCL_CREDIT_PAYMENT_REF_4_ATTRIBUTE_ID (0x0842)
+#define ZCL_CREDIT_PAYMENT_5_ATTRIBUTE_ID (0x0850)
+#define ZCL_CREDIT_PAYMENT_DATE_5_ATTRIBUTE_ID (0x0851)
+#define ZCL_CREDIT_PAYMENT_REF_5_ATTRIBUTE_ID (0x0852)
+#define ZCL_RX_TIER1_PRICE_LABEL_ATTRIBUTE_ID (0x8000)
+#define ZCL_RX_TIER2_PRICE_LABEL_ATTRIBUTE_ID (0x8001)
+#define ZCL_RX_TIER3_PRICE_LABEL_ATTRIBUTE_ID (0x8002)
+#define ZCL_RX_TIER4_PRICE_LABEL_ATTRIBUTE_ID (0x8003)
+#define ZCL_RX_TIER5_PRICE_LABEL_ATTRIBUTE_ID (0x8004)
+#define ZCL_RX_TIER6_PRICE_LABEL_ATTRIBUTE_ID (0x8005)
+#define ZCL_RX_TIER7_PRICE_LABEL_ATTRIBUTE_ID (0x8006)
+#define ZCL_RX_TIER8_PRICE_LABEL_ATTRIBUTE_ID (0x8007)
+#define ZCL_RX_TIER9_PRICE_LABEL_ATTRIBUTE_ID (0x8008)
+#define ZCL_RX_TIER10_PRICE_LABEL_ATTRIBUTE_ID (0x8009)
+#define ZCL_RX_TIER11_PRICE_LABEL_ATTRIBUTE_ID (0x800A)
+#define ZCL_RX_TIER12_PRICE_LABEL_ATTRIBUTE_ID (0x800B)
+#define ZCL_RX_TIER13_PRICE_LABEL_ATTRIBUTE_ID (0x800C)
+#define ZCL_RX_TIER14_PRICE_LABEL_ATTRIBUTE_ID (0x800D)
+#define ZCL_RX_TIER15_PRICE_LABEL_ATTRIBUTE_ID (0x800E)
+#define ZCL_RX_TIER16_PRICE_LABEL_ATTRIBUTE_ID (0x800F)
+#define ZCL_RX_TIER17_PRICE_LABEL_ATTRIBUTE_ID (0x8010)
+#define ZCL_RX_TIER18_PRICE_LABEL_ATTRIBUTE_ID (0x8011)
+#define ZCL_RX_TIER19_PRICE_LABEL_ATTRIBUTE_ID (0x8012)
+#define ZCL_RX_TIER20_PRICE_LABEL_ATTRIBUTE_ID (0x8013)
+#define ZCL_RX_TIER21_PRICE_LABEL_ATTRIBUTE_ID (0x8014)
+#define ZCL_RX_TIER22_PRICE_LABEL_ATTRIBUTE_ID (0x8015)
+#define ZCL_RX_TIER23_PRICE_LABEL_ATTRIBUTE_ID (0x8016)
+#define ZCL_RX_TIER24_PRICE_LABEL_ATTRIBUTE_ID (0x8017)
+#define ZCL_RX_TIER25_PRICE_LABEL_ATTRIBUTE_ID (0x8018)
+#define ZCL_RX_TIER26_PRICE_LABEL_ATTRIBUTE_ID (0x8019)
+#define ZCL_RX_TIER27_PRICE_LABEL_ATTRIBUTE_ID (0x801A)
+#define ZCL_RX_TIER28_PRICE_LABEL_ATTRIBUTE_ID (0x801B)
+#define ZCL_RX_TIER29_PRICE_LABEL_ATTRIBUTE_ID (0x801C)
+#define ZCL_RX_TIER30_PRICE_LABEL_ATTRIBUTE_ID (0x801D)
+#define ZCL_RX_TIER31_PRICE_LABEL_ATTRIBUTE_ID (0x801E)
+#define ZCL_RX_TIER32_PRICE_LABEL_ATTRIBUTE_ID (0x801F)
+#define ZCL_RX_TIER33_PRICE_LABEL_ATTRIBUTE_ID (0x8020)
+#define ZCL_RX_TIER34_PRICE_LABEL_ATTRIBUTE_ID (0x8021)
+#define ZCL_RX_TIER35_PRICE_LABEL_ATTRIBUTE_ID (0x8022)
+#define ZCL_RX_TIER36_PRICE_LABEL_ATTRIBUTE_ID (0x8023)
+#define ZCL_RX_TIER37_PRICE_LABEL_ATTRIBUTE_ID (0x8024)
+#define ZCL_RX_TIER38_PRICE_LABEL_ATTRIBUTE_ID (0x8025)
+#define ZCL_RX_TIER39_PRICE_LABEL_ATTRIBUTE_ID (0x8026)
+#define ZCL_RX_TIER40_PRICE_LABEL_ATTRIBUTE_ID (0x8027)
+#define ZCL_RX_TIER41_PRICE_LABEL_ATTRIBUTE_ID (0x8028)
+#define ZCL_RX_TIER42_PRICE_LABEL_ATTRIBUTE_ID (0x8029)
+#define ZCL_RX_TIER43_PRICE_LABEL_ATTRIBUTE_ID (0x802A)
+#define ZCL_RX_TIER44_PRICE_LABEL_ATTRIBUTE_ID (0x802B)
+#define ZCL_RX_TIER45_PRICE_LABEL_ATTRIBUTE_ID (0x802C)
+#define ZCL_RX_TIER46_PRICE_LABEL_ATTRIBUTE_ID (0x802D)
+#define ZCL_RX_TIER47_PRICE_LABEL_ATTRIBUTE_ID (0x802E)
+#define ZCL_RX_TIER48_PRICE_LABEL_ATTRIBUTE_ID (0x802F)
+#define ZCL_RX_BLOCK1_THRESHOLD_ATTRIBUTE_ID (0x8100)
+#define ZCL_RX_BLOCK2_THRESHOLD_ATTRIBUTE_ID (0x8101)
+#define ZCL_RX_BLOCK3_THRESHOLD_ATTRIBUTE_ID (0x8102)
+#define ZCL_RX_BLOCK4_THRESHOLD_ATTRIBUTE_ID (0x8103)
+#define ZCL_RX_BLOCK5_THRESHOLD_ATTRIBUTE_ID (0x8104)
+#define ZCL_RX_BLOCK6_THRESHOLD_ATTRIBUTE_ID (0x8105)
+#define ZCL_RX_BLOCK7_THRESHOLD_ATTRIBUTE_ID (0x8106)
+#define ZCL_RX_BLOCK8_THRESHOLD_ATTRIBUTE_ID (0x8107)
+#define ZCL_RX_BLOCK9_THRESHOLD_ATTRIBUTE_ID (0x8108)
+#define ZCL_RX_BLOCK10_THRESHOLD_ATTRIBUTE_ID (0x8109)
+#define ZCL_RX_BLOCK11_THRESHOLD_ATTRIBUTE_ID (0x810A)
+#define ZCL_RX_BLOCK12_THRESHOLD_ATTRIBUTE_ID (0x810B)
+#define ZCL_RX_BLOCK13_THRESHOLD_ATTRIBUTE_ID (0x810C)
+#define ZCL_RX_BLOCK14_THRESHOLD_ATTRIBUTE_ID (0x810D)
+#define ZCL_RX_BLOCK15_THRESHOLD_ATTRIBUTE_ID (0x810E)
+#define ZCL_RX_START_OF_BLOCK_PERIOD_ATTRIBUTE_ID (0x8200)
+#define ZCL_RX_BLOCK_PERIOD_DURATION_ATTRIBUTE_ID (0x8201)
+#define ZCL_RX_THRESHOLD_MULTIPLIER_ATTRIBUTE_ID (0x8202)
+#define ZCL_RX_THRESHOLD_DIVISOR_ATTRIBUTE_ID (0x8203)
+#define ZCL_RX_NO_TIER_BLOCK1_PRICE_ATTRIBUTE_ID (0x8400)
+#define ZCL_RX_NO_TIER_BLOCK2_PRICE_ATTRIBUTE_ID (0x8401)
+#define ZCL_RX_NO_TIER_BLOCK3_PRICE_ATTRIBUTE_ID (0x8402)
+#define ZCL_RX_NO_TIER_BLOCK4_PRICE_ATTRIBUTE_ID (0x8403)
+#define ZCL_RX_NO_TIER_BLOCK5_PRICE_ATTRIBUTE_ID (0x8404)
+#define ZCL_RX_NO_TIER_BLOCK6_PRICE_ATTRIBUTE_ID (0x8405)
+#define ZCL_RX_NO_TIER_BLOCK7_PRICE_ATTRIBUTE_ID (0x8406)
+#define ZCL_RX_NO_TIER_BLOCK8_PRICE_ATTRIBUTE_ID (0x8407)
+#define ZCL_RX_NO_TIER_BLOCK9_PRICE_ATTRIBUTE_ID (0x8408)
+#define ZCL_RX_NO_TIER_BLOCK10_PRICE_ATTRIBUTE_ID (0x8409)
+#define ZCL_RX_NO_TIER_BLOCK11_PRICE_ATTRIBUTE_ID (0x840A)
+#define ZCL_RX_NO_TIER_BLOCK12_PRICE_ATTRIBUTE_ID (0x840B)
+#define ZCL_RX_NO_TIER_BLOCK13_PRICE_ATTRIBUTE_ID (0x840C)
+#define ZCL_RX_NO_TIER_BLOCK14_PRICE_ATTRIBUTE_ID (0x840D)
+#define ZCL_RX_NO_TIER_BLOCK15_PRICE_ATTRIBUTE_ID (0x840E)
+#define ZCL_RX_NO_TIER_BLOCK16_PRICE_ATTRIBUTE_ID (0x840F)
+#define ZCL_RX_TIER1_BLOCK1_PRICE_ATTRIBUTE_ID (0x8410)
+#define ZCL_RX_TIER1_BLOCK2_PRICE_ATTRIBUTE_ID (0x8411)
+#define ZCL_RX_TIER1_BLOCK3_PRICE_ATTRIBUTE_ID (0x8412)
+#define ZCL_RX_TIER1_BLOCK4_PRICE_ATTRIBUTE_ID (0x8413)
+#define ZCL_RX_TIER1_BLOCK5_PRICE_ATTRIBUTE_ID (0x8414)
+#define ZCL_RX_TIER1_BLOCK6_PRICE_ATTRIBUTE_ID (0x8415)
+#define ZCL_RX_TIER1_BLOCK7_PRICE_ATTRIBUTE_ID (0x8416)
+#define ZCL_RX_TIER1_BLOCK8_PRICE_ATTRIBUTE_ID (0x8417)
+#define ZCL_RX_TIER1_BLOCK9_PRICE_ATTRIBUTE_ID (0x8418)
+#define ZCL_RX_TIER1_BLOCK10_PRICE_ATTRIBUTE_ID (0x8419)
+#define ZCL_RX_TIER1_BLOCK11_PRICE_ATTRIBUTE_ID (0x841A)
+#define ZCL_RX_TIER1_BLOCK12_PRICE_ATTRIBUTE_ID (0x841B)
+#define ZCL_RX_TIER1_BLOCK13_PRICE_ATTRIBUTE_ID (0x841C)
+#define ZCL_RX_TIER1_BLOCK14_PRICE_ATTRIBUTE_ID (0x841D)
+#define ZCL_RX_TIER1_BLOCK15_PRICE_ATTRIBUTE_ID (0x841E)
+#define ZCL_RX_TIER1_BLOCK16_PRICE_ATTRIBUTE_ID (0x841F)
+#define ZCL_RX_TIER2_BLOCK1_PRICE_ATTRIBUTE_ID (0x8420)
+#define ZCL_RX_TIER2_BLOCK2_PRICE_ATTRIBUTE_ID (0x8421)
+#define ZCL_RX_TIER2_BLOCK3_PRICE_ATTRIBUTE_ID (0x8422)
+#define ZCL_RX_TIER2_BLOCK4_PRICE_ATTRIBUTE_ID (0x8423)
+#define ZCL_RX_TIER2_BLOCK5_PRICE_ATTRIBUTE_ID (0x8424)
+#define ZCL_RX_TIER2_BLOCK6_PRICE_ATTRIBUTE_ID (0x8425)
+#define ZCL_RX_TIER2_BLOCK7_PRICE_ATTRIBUTE_ID (0x8426)
+#define ZCL_RX_TIER2_BLOCK8_PRICE_ATTRIBUTE_ID (0x8427)
+#define ZCL_RX_TIER2_BLOCK9_PRICE_ATTRIBUTE_ID (0x8428)
+#define ZCL_RX_TIER2_BLOCK10_PRICE_ATTRIBUTE_ID (0x8429)
+#define ZCL_RX_TIER2_BLOCK11_PRICE_ATTRIBUTE_ID (0x842A)
+#define ZCL_RX_TIER2_BLOCK12_PRICE_ATTRIBUTE_ID (0x842B)
+#define ZCL_RX_TIER2_BLOCK13_PRICE_ATTRIBUTE_ID (0x842C)
+#define ZCL_RX_TIER2_BLOCK14_PRICE_ATTRIBUTE_ID (0x842D)
+#define ZCL_RX_TIER2_BLOCK15_PRICE_ATTRIBUTE_ID (0x842E)
+#define ZCL_RX_TIER2_BLOCK16_PRICE_ATTRIBUTE_ID (0x842F)
+#define ZCL_RX_TIER3_BLOCK1_PRICE_ATTRIBUTE_ID (0x8430)
+#define ZCL_RX_TIER3_BLOCK2_PRICE_ATTRIBUTE_ID (0x8431)
+#define ZCL_RX_TIER3_BLOCK3_PRICE_ATTRIBUTE_ID (0x8432)
+#define ZCL_RX_TIER3_BLOCK4_PRICE_ATTRIBUTE_ID (0x8433)
+#define ZCL_RX_TIER3_BLOCK5_PRICE_ATTRIBUTE_ID (0x8434)
+#define ZCL_RX_TIER3_BLOCK6_PRICE_ATTRIBUTE_ID (0x8435)
+#define ZCL_RX_TIER3_BLOCK7_PRICE_ATTRIBUTE_ID (0x8436)
+#define ZCL_RX_TIER3_BLOCK8_PRICE_ATTRIBUTE_ID (0x8437)
+#define ZCL_RX_TIER3_BLOCK9_PRICE_ATTRIBUTE_ID (0x8438)
+#define ZCL_RX_TIER3_BLOCK10_PRICE_ATTRIBUTE_ID (0x8439)
+#define ZCL_RX_TIER3_BLOCK11_PRICE_ATTRIBUTE_ID (0x843A)
+#define ZCL_RX_TIER3_BLOCK12_PRICE_ATTRIBUTE_ID (0x843B)
+#define ZCL_RX_TIER3_BLOCK13_PRICE_ATTRIBUTE_ID (0x843C)
+#define ZCL_RX_TIER3_BLOCK14_PRICE_ATTRIBUTE_ID (0x843D)
+#define ZCL_RX_TIER3_BLOCK15_PRICE_ATTRIBUTE_ID (0x843E)
+#define ZCL_RX_TIER3_BLOCK16_PRICE_ATTRIBUTE_ID (0x843F)
+#define ZCL_RX_TIER4_BLOCK1_PRICE_ATTRIBUTE_ID (0x8440)
+#define ZCL_RX_TIER4_BLOCK2_PRICE_ATTRIBUTE_ID (0x8441)
+#define ZCL_RX_TIER4_BLOCK3_PRICE_ATTRIBUTE_ID (0x8442)
+#define ZCL_RX_TIER4_BLOCK4_PRICE_ATTRIBUTE_ID (0x8443)
+#define ZCL_RX_TIER4_BLOCK5_PRICE_ATTRIBUTE_ID (0x8444)
+#define ZCL_RX_TIER4_BLOCK6_PRICE_ATTRIBUTE_ID (0x8445)
+#define ZCL_RX_TIER4_BLOCK7_PRICE_ATTRIBUTE_ID (0x8446)
+#define ZCL_RX_TIER4_BLOCK8_PRICE_ATTRIBUTE_ID (0x8447)
+#define ZCL_RX_TIER4_BLOCK9_PRICE_ATTRIBUTE_ID (0x8448)
+#define ZCL_RX_TIER4_BLOCK10_PRICE_ATTRIBUTE_ID (0x8449)
+#define ZCL_RX_TIER4_BLOCK11_PRICE_ATTRIBUTE_ID (0x844A)
+#define ZCL_RX_TIER4_BLOCK12_PRICE_ATTRIBUTE_ID (0x844B)
+#define ZCL_RX_TIER4_BLOCK13_PRICE_ATTRIBUTE_ID (0x844C)
+#define ZCL_RX_TIER4_BLOCK14_PRICE_ATTRIBUTE_ID (0x844D)
+#define ZCL_RX_TIER4_BLOCK15_PRICE_ATTRIBUTE_ID (0x844E)
+#define ZCL_RX_TIER4_BLOCK16_PRICE_ATTRIBUTE_ID (0x844F)
+#define ZCL_RX_TIER5_BLOCK1_PRICE_ATTRIBUTE_ID (0x8450)
+#define ZCL_RX_TIER5_BLOCK2_PRICE_ATTRIBUTE_ID (0x8451)
+#define ZCL_RX_TIER5_BLOCK3_PRICE_ATTRIBUTE_ID (0x8452)
+#define ZCL_RX_TIER5_BLOCK4_PRICE_ATTRIBUTE_ID (0x8453)
+#define ZCL_RX_TIER5_BLOCK5_PRICE_ATTRIBUTE_ID (0x8454)
+#define ZCL_RX_TIER5_BLOCK6_PRICE_ATTRIBUTE_ID (0x8455)
+#define ZCL_RX_TIER5_BLOCK7_PRICE_ATTRIBUTE_ID (0x8456)
+#define ZCL_RX_TIER5_BLOCK8_PRICE_ATTRIBUTE_ID (0x8457)
+#define ZCL_RX_TIER5_BLOCK9_PRICE_ATTRIBUTE_ID (0x8458)
+#define ZCL_RX_TIER5_BLOCK10_PRICE_ATTRIBUTE_ID (0x8459)
+#define ZCL_RX_TIER5_BLOCK11_PRICE_ATTRIBUTE_ID (0x845A)
+#define ZCL_RX_TIER5_BLOCK12_PRICE_ATTRIBUTE_ID (0x845B)
+#define ZCL_RX_TIER5_BLOCK13_PRICE_ATTRIBUTE_ID (0x845C)
+#define ZCL_RX_TIER5_BLOCK14_PRICE_ATTRIBUTE_ID (0x845D)
+#define ZCL_RX_TIER5_BLOCK15_PRICE_ATTRIBUTE_ID (0x845E)
+#define ZCL_RX_TIER5_BLOCK16_PRICE_ATTRIBUTE_ID (0x845F)
+#define ZCL_RX_TIER6_BLOCK1_PRICE_ATTRIBUTE_ID (0x8460)
+#define ZCL_RX_TIER6_BLOCK2_PRICE_ATTRIBUTE_ID (0x8461)
+#define ZCL_RX_TIER6_BLOCK3_PRICE_ATTRIBUTE_ID (0x8462)
+#define ZCL_RX_TIER6_BLOCK4_PRICE_ATTRIBUTE_ID (0x8463)
+#define ZCL_RX_TIER6_BLOCK5_PRICE_ATTRIBUTE_ID (0x8464)
+#define ZCL_RX_TIER6_BLOCK6_PRICE_ATTRIBUTE_ID (0x8465)
+#define ZCL_RX_TIER6_BLOCK7_PRICE_ATTRIBUTE_ID (0x8466)
+#define ZCL_RX_TIER6_BLOCK8_PRICE_ATTRIBUTE_ID (0x8467)
+#define ZCL_RX_TIER6_BLOCK9_PRICE_ATTRIBUTE_ID (0x8468)
+#define ZCL_RX_TIER6_BLOCK10_PRICE_ATTRIBUTE_ID (0x8469)
+#define ZCL_RX_TIER6_BLOCK11_PRICE_ATTRIBUTE_ID (0x846A)
+#define ZCL_RX_TIER6_BLOCK12_PRICE_ATTRIBUTE_ID (0x846B)
+#define ZCL_RX_TIER6_BLOCK13_PRICE_ATTRIBUTE_ID (0x846C)
+#define ZCL_RX_TIER6_BLOCK14_PRICE_ATTRIBUTE_ID (0x846D)
+#define ZCL_RX_TIER6_BLOCK15_PRICE_ATTRIBUTE_ID (0x846E)
+#define ZCL_RX_TIER6_BLOCK16_PRICE_ATTRIBUTE_ID (0x846F)
+#define ZCL_RX_TIER7_BLOCK1_PRICE_ATTRIBUTE_ID (0x8470)
+#define ZCL_RX_TIER7_BLOCK2_PRICE_ATTRIBUTE_ID (0x8471)
+#define ZCL_RX_TIER7_BLOCK3_PRICE_ATTRIBUTE_ID (0x8472)
+#define ZCL_RX_TIER7_BLOCK4_PRICE_ATTRIBUTE_ID (0x8473)
+#define ZCL_RX_TIER7_BLOCK5_PRICE_ATTRIBUTE_ID (0x8474)
+#define ZCL_RX_TIER7_BLOCK6_PRICE_ATTRIBUTE_ID (0x8475)
+#define ZCL_RX_TIER7_BLOCK7_PRICE_ATTRIBUTE_ID (0x8476)
+#define ZCL_RX_TIER7_BLOCK8_PRICE_ATTRIBUTE_ID (0x8477)
+#define ZCL_RX_TIER7_BLOCK9_PRICE_ATTRIBUTE_ID (0x8478)
+#define ZCL_RX_TIER7_BLOCK10_PRICE_ATTRIBUTE_ID (0x8479)
+#define ZCL_RX_TIER7_BLOCK11_PRICE_ATTRIBUTE_ID (0x847A)
+#define ZCL_RX_TIER7_BLOCK12_PRICE_ATTRIBUTE_ID (0x847B)
+#define ZCL_RX_TIER7_BLOCK13_PRICE_ATTRIBUTE_ID (0x847C)
+#define ZCL_RX_TIER7_BLOCK14_PRICE_ATTRIBUTE_ID (0x847D)
+#define ZCL_RX_TIER7_BLOCK15_PRICE_ATTRIBUTE_ID (0x847E)
+#define ZCL_RX_TIER7_BLOCK16_PRICE_ATTRIBUTE_ID (0x847F)
+#define ZCL_RX_TIER8_BLOCK1_PRICE_ATTRIBUTE_ID (0x8480)
+#define ZCL_RX_TIER8_BLOCK2_PRICE_ATTRIBUTE_ID (0x8481)
+#define ZCL_RX_TIER8_BLOCK3_PRICE_ATTRIBUTE_ID (0x8482)
+#define ZCL_RX_TIER8_BLOCK4_PRICE_ATTRIBUTE_ID (0x8483)
+#define ZCL_RX_TIER8_BLOCK5_PRICE_ATTRIBUTE_ID (0x8484)
+#define ZCL_RX_TIER8_BLOCK6_PRICE_ATTRIBUTE_ID (0x8485)
+#define ZCL_RX_TIER8_BLOCK7_PRICE_ATTRIBUTE_ID (0x8486)
+#define ZCL_RX_TIER8_BLOCK8_PRICE_ATTRIBUTE_ID (0x8487)
+#define ZCL_RX_TIER8_BLOCK9_PRICE_ATTRIBUTE_ID (0x8488)
+#define ZCL_RX_TIER8_BLOCK10_PRICE_ATTRIBUTE_ID (0x8489)
+#define ZCL_RX_TIER8_BLOCK11_PRICE_ATTRIBUTE_ID (0x848A)
+#define ZCL_RX_TIER8_BLOCK12_PRICE_ATTRIBUTE_ID (0x848B)
+#define ZCL_RX_TIER8_BLOCK13_PRICE_ATTRIBUTE_ID (0x848C)
+#define ZCL_RX_TIER8_BLOCK14_PRICE_ATTRIBUTE_ID (0x848D)
+#define ZCL_RX_TIER8_BLOCK15_PRICE_ATTRIBUTE_ID (0x848E)
+#define ZCL_RX_TIER8_BLOCK16_PRICE_ATTRIBUTE_ID (0x848F)
+#define ZCL_RX_TIER9_BLOCK1_PRICE_ATTRIBUTE_ID (0x8490)
+#define ZCL_RX_TIER9_BLOCK2_PRICE_ATTRIBUTE_ID (0x8491)
+#define ZCL_RX_TIER9_BLOCK3_PRICE_ATTRIBUTE_ID (0x8492)
+#define ZCL_RX_TIER9_BLOCK4_PRICE_ATTRIBUTE_ID (0x8493)
+#define ZCL_RX_TIER9_BLOCK5_PRICE_ATTRIBUTE_ID (0x8494)
+#define ZCL_RX_TIER9_BLOCK6_PRICE_ATTRIBUTE_ID (0x8495)
+#define ZCL_RX_TIER9_BLOCK7_PRICE_ATTRIBUTE_ID (0x8496)
+#define ZCL_RX_TIER9_BLOCK8_PRICE_ATTRIBUTE_ID (0x8497)
+#define ZCL_RX_TIER9_BLOCK9_PRICE_ATTRIBUTE_ID (0x8498)
+#define ZCL_RX_TIER9_BLOCK10_PRICE_ATTRIBUTE_ID (0x8499)
+#define ZCL_RX_TIER9_BLOCK11_PRICE_ATTRIBUTE_ID (0x849A)
+#define ZCL_RX_TIER9_BLOCK12_PRICE_ATTRIBUTE_ID (0x849B)
+#define ZCL_RX_TIER9_BLOCK13_PRICE_ATTRIBUTE_ID (0x849C)
+#define ZCL_RX_TIER9_BLOCK14_PRICE_ATTRIBUTE_ID (0x849D)
+#define ZCL_RX_TIER9_BLOCK15_PRICE_ATTRIBUTE_ID (0x849E)
+#define ZCL_RX_TIER9_BLOCK16_PRICE_ATTRIBUTE_ID (0x849F)
+#define ZCL_RX_TIER10_BLOCK1_PRICE_ATTRIBUTE_ID (0x84A0)
+#define ZCL_RX_TIER10_BLOCK2_PRICE_ATTRIBUTE_ID (0x84A1)
+#define ZCL_RX_TIER10_BLOCK3_PRICE_ATTRIBUTE_ID (0x84A2)
+#define ZCL_RX_TIER10_BLOCK4_PRICE_ATTRIBUTE_ID (0x84A3)
+#define ZCL_RX_TIER10_BLOCK5_PRICE_ATTRIBUTE_ID (0x84A4)
+#define ZCL_RX_TIER10_BLOCK6_PRICE_ATTRIBUTE_ID (0x84A5)
+#define ZCL_RX_TIER10_BLOCK7_PRICE_ATTRIBUTE_ID (0x84A6)
+#define ZCL_RX_TIER10_BLOCK8_PRICE_ATTRIBUTE_ID (0x84A7)
+#define ZCL_RX_TIER10_BLOCK9_PRICE_ATTRIBUTE_ID (0x84A8)
+#define ZCL_RX_TIER10_BLOCK10_PRICE_ATTRIBUTE_ID (0x84A9)
+#define ZCL_RX_TIER10_BLOCK11_PRICE_ATTRIBUTE_ID (0x84AA)
+#define ZCL_RX_TIER10_BLOCK12_PRICE_ATTRIBUTE_ID (0x84AB)
+#define ZCL_RX_TIER10_BLOCK13_PRICE_ATTRIBUTE_ID (0x84AC)
+#define ZCL_RX_TIER10_BLOCK14_PRICE_ATTRIBUTE_ID (0x84AD)
+#define ZCL_RX_TIER10_BLOCK15_PRICE_ATTRIBUTE_ID (0x84AE)
+#define ZCL_RX_TIER10_BLOCK16_PRICE_ATTRIBUTE_ID (0x84AF)
+#define ZCL_RX_TIER11_BLOCK1_PRICE_ATTRIBUTE_ID (0x84B0)
+#define ZCL_RX_TIER11_BLOCK2_PRICE_ATTRIBUTE_ID (0x84B1)
+#define ZCL_RX_TIER11_BLOCK3_PRICE_ATTRIBUTE_ID (0x84B2)
+#define ZCL_RX_TIER11_BLOCK4_PRICE_ATTRIBUTE_ID (0x84B3)
+#define ZCL_RX_TIER11_BLOCK5_PRICE_ATTRIBUTE_ID (0x84B4)
+#define ZCL_RX_TIER11_BLOCK6_PRICE_ATTRIBUTE_ID (0x84B5)
+#define ZCL_RX_TIER11_BLOCK7_PRICE_ATTRIBUTE_ID (0x84B6)
+#define ZCL_RX_TIER11_BLOCK8_PRICE_ATTRIBUTE_ID (0x84B7)
+#define ZCL_RX_TIER11_BLOCK9_PRICE_ATTRIBUTE_ID (0x84B8)
+#define ZCL_RX_TIER11_BLOCK10_PRICE_ATTRIBUTE_ID (0x84B9)
+#define ZCL_RX_TIER11_BLOCK11_PRICE_ATTRIBUTE_ID (0x84BA)
+#define ZCL_RX_TIER11_BLOCK12_PRICE_ATTRIBUTE_ID (0x84BB)
+#define ZCL_RX_TIER11_BLOCK13_PRICE_ATTRIBUTE_ID (0x84BC)
+#define ZCL_RX_TIER11_BLOCK14_PRICE_ATTRIBUTE_ID (0x84BD)
+#define ZCL_RX_TIER11_BLOCK15_PRICE_ATTRIBUTE_ID (0x84BE)
+#define ZCL_RX_TIER11_BLOCK16_PRICE_ATTRIBUTE_ID (0x84BF)
+#define ZCL_RX_TIER12_BLOCK1_PRICE_ATTRIBUTE_ID (0x84C0)
+#define ZCL_RX_TIER12_BLOCK2_PRICE_ATTRIBUTE_ID (0x84C1)
+#define ZCL_RX_TIER12_BLOCK3_PRICE_ATTRIBUTE_ID (0x84C2)
+#define ZCL_RX_TIER12_BLOCK4_PRICE_ATTRIBUTE_ID (0x84C3)
+#define ZCL_RX_TIER12_BLOCK5_PRICE_ATTRIBUTE_ID (0x84C4)
+#define ZCL_RX_TIER12_BLOCK6_PRICE_ATTRIBUTE_ID (0x84C5)
+#define ZCL_RX_TIER12_BLOCK7_PRICE_ATTRIBUTE_ID (0x84C6)
+#define ZCL_RX_TIER12_BLOCK8_PRICE_ATTRIBUTE_ID (0x84C7)
+#define ZCL_RX_TIER12_BLOCK9_PRICE_ATTRIBUTE_ID (0x84C8)
+#define ZCL_RX_TIER12_BLOCK10_PRICE_ATTRIBUTE_ID (0x84C9)
+#define ZCL_RX_TIER12_BLOCK11_PRICE_ATTRIBUTE_ID (0x84CA)
+#define ZCL_RX_TIER12_BLOCK12_PRICE_ATTRIBUTE_ID (0x84CB)
+#define ZCL_RX_TIER12_BLOCK13_PRICE_ATTRIBUTE_ID (0x84CC)
+#define ZCL_RX_TIER12_BLOCK14_PRICE_ATTRIBUTE_ID (0x84CD)
+#define ZCL_RX_TIER12_BLOCK15_PRICE_ATTRIBUTE_ID (0x84CE)
+#define ZCL_RX_TIER12_BLOCK16_PRICE_ATTRIBUTE_ID (0x84CF)
+#define ZCL_RX_TIER13_BLOCK1_PRICE_ATTRIBUTE_ID (0x84D0)
+#define ZCL_RX_TIER13_BLOCK2_PRICE_ATTRIBUTE_ID (0x84D1)
+#define ZCL_RX_TIER13_BLOCK3_PRICE_ATTRIBUTE_ID (0x84D2)
+#define ZCL_RX_TIER13_BLOCK4_PRICE_ATTRIBUTE_ID (0x84D3)
+#define ZCL_RX_TIER13_BLOCK5_PRICE_ATTRIBUTE_ID (0x84D4)
+#define ZCL_RX_TIER13_BLOCK6_PRICE_ATTRIBUTE_ID (0x84D5)
+#define ZCL_RX_TIER13_BLOCK7_PRICE_ATTRIBUTE_ID (0x84D6)
+#define ZCL_RX_TIER13_BLOCK8_PRICE_ATTRIBUTE_ID (0x84D7)
+#define ZCL_RX_TIER13_BLOCK9_PRICE_ATTRIBUTE_ID (0x84D8)
+#define ZCL_RX_TIER13_BLOCK10_PRICE_ATTRIBUTE_ID (0x84D9)
+#define ZCL_RX_TIER13_BLOCK11_PRICE_ATTRIBUTE_ID (0x84DA)
+#define ZCL_RX_TIER13_BLOCK12_PRICE_ATTRIBUTE_ID (0x84DB)
+#define ZCL_RX_TIER13_BLOCK13_PRICE_ATTRIBUTE_ID (0x84DC)
+#define ZCL_RX_TIER13_BLOCK14_PRICE_ATTRIBUTE_ID (0x84DD)
+#define ZCL_RX_TIER13_BLOCK15_PRICE_ATTRIBUTE_ID (0x84DE)
+#define ZCL_RX_TIER13_BLOCK16_PRICE_ATTRIBUTE_ID (0x84DF)
+#define ZCL_RX_TIER14_BLOCK1_PRICE_ATTRIBUTE_ID (0x84E0)
+#define ZCL_RX_TIER14_BLOCK2_PRICE_ATTRIBUTE_ID (0x84E1)
+#define ZCL_RX_TIER14_BLOCK3_PRICE_ATTRIBUTE_ID (0x84E2)
+#define ZCL_RX_TIER14_BLOCK4_PRICE_ATTRIBUTE_ID (0x84E3)
+#define ZCL_RX_TIER14_BLOCK5_PRICE_ATTRIBUTE_ID (0x84E4)
+#define ZCL_RX_TIER14_BLOCK6_PRICE_ATTRIBUTE_ID (0x84E5)
+#define ZCL_RX_TIER14_BLOCK7_PRICE_ATTRIBUTE_ID (0x84E6)
+#define ZCL_RX_TIER14_BLOCK8_PRICE_ATTRIBUTE_ID (0x84E7)
+#define ZCL_RX_TIER14_BLOCK9_PRICE_ATTRIBUTE_ID (0x84E8)
+#define ZCL_RX_TIER14_BLOCK10_PRICE_ATTRIBUTE_ID (0x84E9)
+#define ZCL_RX_TIER14_BLOCK11_PRICE_ATTRIBUTE_ID (0x84EA)
+#define ZCL_RX_TIER14_BLOCK12_PRICE_ATTRIBUTE_ID (0x84EB)
+#define ZCL_RX_TIER14_BLOCK13_PRICE_ATTRIBUTE_ID (0x84EC)
+#define ZCL_RX_TIER14_BLOCK14_PRICE_ATTRIBUTE_ID (0x84ED)
+#define ZCL_RX_TIER14_BLOCK15_PRICE_ATTRIBUTE_ID (0x84EE)
+#define ZCL_RX_TIER14_BLOCK16_PRICE_ATTRIBUTE_ID (0x84EF)
+#define ZCL_RX_TIER15_BLOCK1_PRICE_ATTRIBUTE_ID (0x84F0)
+#define ZCL_RX_TIER15_BLOCK2_PRICE_ATTRIBUTE_ID (0x84F1)
+#define ZCL_RX_TIER15_BLOCK3_PRICE_ATTRIBUTE_ID (0x84F2)
+#define ZCL_RX_TIER15_BLOCK4_PRICE_ATTRIBUTE_ID (0x84F3)
+#define ZCL_RX_TIER15_BLOCK5_PRICE_ATTRIBUTE_ID (0x84F4)
+#define ZCL_RX_TIER15_BLOCK6_PRICE_ATTRIBUTE_ID (0x84F5)
+#define ZCL_RX_TIER15_BLOCK7_PRICE_ATTRIBUTE_ID (0x84F6)
+#define ZCL_RX_TIER15_BLOCK8_PRICE_ATTRIBUTE_ID (0x84F7)
+#define ZCL_RX_TIER15_BLOCK9_PRICE_ATTRIBUTE_ID (0x84F8)
+#define ZCL_RX_TIER15_BLOCK10_PRICE_ATTRIBUTE_ID (0x84F9)
+#define ZCL_RX_TIER15_BLOCK11_PRICE_ATTRIBUTE_ID (0x84FA)
+#define ZCL_RX_TIER15_BLOCK12_PRICE_ATTRIBUTE_ID (0x84FB)
+#define ZCL_RX_TIER15_BLOCK13_PRICE_ATTRIBUTE_ID (0x84FC)
+#define ZCL_RX_TIER15_BLOCK14_PRICE_ATTRIBUTE_ID (0x84FD)
+#define ZCL_RX_TIER15_BLOCK15_PRICE_ATTRIBUTE_ID (0x84FE)
+#define ZCL_RX_TIER15_BLOCK16_PRICE_ATTRIBUTE_ID (0x84FF)
+#define ZCL_RX_PRICE_TIER16_ATTRIBUTE_ID (0x850F)
+#define ZCL_RX_PRICE_TIER17_ATTRIBUTE_ID (0x8510)
+#define ZCL_RX_PRICE_TIER18_ATTRIBUTE_ID (0x8511)
+#define ZCL_RX_PRICE_TIER19_ATTRIBUTE_ID (0x8512)
+#define ZCL_RX_PRICE_TIER20_ATTRIBUTE_ID (0x8513)
+#define ZCL_RX_PRICE_TIER21_ATTRIBUTE_ID (0x8514)
+#define ZCL_RX_PRICE_TIER22_ATTRIBUTE_ID (0x8515)
+#define ZCL_RX_PRICE_TIER23_ATTRIBUTE_ID (0x8516)
+#define ZCL_RX_PRICE_TIER24_ATTRIBUTE_ID (0x8517)
+#define ZCL_RX_PRICE_TIER25_ATTRIBUTE_ID (0x8518)
+#define ZCL_RX_PRICE_TIER26_ATTRIBUTE_ID (0x8519)
+#define ZCL_RX_PRICE_TIER27_ATTRIBUTE_ID (0x851A)
+#define ZCL_RX_PRICE_TIER28_ATTRIBUTE_ID (0x851B)
+#define ZCL_RX_PRICE_TIER29_ATTRIBUTE_ID (0x851C)
+#define ZCL_RX_PRICE_TIER30_ATTRIBUTE_ID (0x851D)
+#define ZCL_RX_PRICE_TIER31_ATTRIBUTE_ID (0x851E)
+#define ZCL_RX_PRICE_TIER32_ATTRIBUTE_ID (0x851F)
+#define ZCL_RX_PRICE_TIER33_ATTRIBUTE_ID (0x8520)
+#define ZCL_RX_PRICE_TIER34_ATTRIBUTE_ID (0x8521)
+#define ZCL_RX_PRICE_TIER35_ATTRIBUTE_ID (0x8522)
+#define ZCL_RX_PRICE_TIER36_ATTRIBUTE_ID (0x8523)
+#define ZCL_RX_PRICE_TIER37_ATTRIBUTE_ID (0x8524)
+#define ZCL_RX_PRICE_TIER38_ATTRIBUTE_ID (0x8525)
+#define ZCL_RX_PRICE_TIER39_ATTRIBUTE_ID (0x8526)
+#define ZCL_RX_PRICE_TIER40_ATTRIBUTE_ID (0x8527)
+#define ZCL_RX_PRICE_TIER41_ATTRIBUTE_ID (0x8528)
+#define ZCL_RX_PRICE_TIER42_ATTRIBUTE_ID (0x8529)
+#define ZCL_RX_PRICE_TIER43_ATTRIBUTE_ID (0x852A)
+#define ZCL_RX_PRICE_TIER44_ATTRIBUTE_ID (0x852B)
+#define ZCL_RX_PRICE_TIER45_ATTRIBUTE_ID (0x852C)
+#define ZCL_RX_PRICE_TIER46_ATTRIBUTE_ID (0x852D)
+#define ZCL_RX_PRICE_TIER47_ATTRIBUTE_ID (0x852E)
+#define ZCL_RX_PRICE_TIER48_ATTRIBUTE_ID (0x852F)
+#define ZCL_RX_TARIFF_LABEL_ATTRIBUTE_ID (0x8610)
+#define ZCL_RX_NUMBER_OF_PRICE_TIERS_IN_USE_ATTRIBUTE_ID (0x8611)
+#define ZCL_RX_NUMBER_OF_BLOCK_THRESHOLDS_IN_USE_ATTRIBUTE_ID (0x8612)
+#define ZCL_RX_TIER_BLOCK_MODE_ATTRIBUTE_ID (0x8613)
+#define ZCL_RX_TARIFF_RESOLUTION_PERIOD_ATTRIBUTE_ID (0x8615)
+#define ZCL_RX_CO2_ATTRIBUTE_ID (0x8625)
+#define ZCL_RX_CO2_UNIT_ATTRIBUTE_ID (0x8626)
+#define ZCL_RX_CO2_TRAILING_DIGIT_ATTRIBUTE_ID (0x8627)
+#define ZCL_RX_CURRENT_BILLING_PERIOD_START_ATTRIBUTE_ID (0x8700)
+#define ZCL_RX_CURRENT_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x8701)
+#define ZCL_RX_LAST_BILLING_PERIOD_START_ATTRIBUTE_ID (0x8702)
+#define ZCL_RX_LAST_BILLING_PERIOD_DURATION_ATTRIBUTE_ID (0x8703)
+#define ZCL_RX_LAST_BILLING_PERIOD_CONSOLIDATED_BILL_ATTRIBUTE_ID (0x8704)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Demand Response and Load Control
+
+// Client attributes
+#define ZCL_UTILITY_ENROLLMENT_GROUP_ATTRIBUTE_ID (0x0000)
+#define ZCL_START_RANDOMIZATION_MINUTES_ATTRIBUTE_ID (0x0001)
+#define ZCL_DURATION_RANDOMIZATION_MINUTES_ATTRIBUTE_ID (0x0002)
+#define ZCL_DEVICE_CLASS_VALUE_ATTRIBUTE_ID (0x0003)
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Simple Metering
+
+// Client attributes
+#define ZCL_FUNCTIONAL_NOTIFICATION_FLAGS_ATTRIBUTE_ID (0x0000)
+#define ZCL_NOTIFICATION_FLAGS_2_ATTRIBUTE_ID (0x0001)
+#define ZCL_NOTIFICATION_FLAGS_3_ATTRIBUTE_ID (0x0002)
+#define ZCL_NOTIFICATION_FLAGS_4_ATTRIBUTE_ID (0x0003)
+#define ZCL_NOTIFICATION_FLAGS_5_ATTRIBUTE_ID (0x0004)
+#define ZCL_NOTIFICATION_FLAGS_6_ATTRIBUTE_ID (0x0005)
+#define ZCL_NOTIFICATION_FLAGS_7_ATTRIBUTE_ID (0x0006)
+#define ZCL_NOTIFICATION_FLAGS_8_ATTRIBUTE_ID (0x0007)
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CURRENT_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0000)
+#define ZCL_CURRENT_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0002)
+#define ZCL_CURRENT_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0003)
+#define ZCL_DFT_SUMMATION_ATTRIBUTE_ID (0x0004)
+#define ZCL_DAILY_FREEZE_TIME_ATTRIBUTE_ID (0x0005)
+#define ZCL_POWER_FACTOR_ATTRIBUTE_ID (0x0006)
+#define ZCL_READING_SNAP_SHOT_TIME_ATTRIBUTE_ID (0x0007)
+#define ZCL_CURRENT_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0008)
+#define ZCL_CURRENT_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0009)
+#define ZCL_DEFAULT_UPDATE_PERIOD_ATTRIBUTE_ID (0x000A)
+#define ZCL_FAST_POLL_UPDATE_PERIOD_ATTRIBUTE_ID (0x000B)
+#define ZCL_CURRENT_BLOCK_PERIOD_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x000C)
+#define ZCL_DAILY_CONSUMPTION_TARGET_ATTRIBUTE_ID (0x000D)
+#define ZCL_CURRENT_BLOCK_ATTRIBUTE_ID (0x000E)
+#define ZCL_PROFILE_INTERVAL_PERIOD_ATTRIBUTE_ID (0x000F)
+#define ZCL_INTERVAL_READ_REPORTING_PERIOD_ATTRIBUTE_ID (0x0010)
+#define ZCL_PRESET_READING_TIME_ATTRIBUTE_ID (0x0011)
+#define ZCL_VOLUME_PER_REPORT_ATTRIBUTE_ID (0x0012)
+#define ZCL_FLOW_RESTRICTION_ATTRIBUTE_ID (0x0013)
+#define ZCL_SUPPLY_STATUS_ATTRIBUTE_ID (0x0014)
+#define ZCL_CURRENT_INLET_ENERGY_CARRIER_SUMMATION_ATTRIBUTE_ID (0x0015)
+#define ZCL_CURRENT_OUTLET_ENERGY_CARRIER_SUMMATION_ATTRIBUTE_ID (0x0016)
+#define ZCL_INLET_TEMPERATURE_ATTRIBUTE_ID (0x0017)
+#define ZCL_OUTLET_TEMPERATURE_ATTRIBUTE_ID (0x0018)
+#define ZCL_CONTROL_TEMPERATURE_ATTRIBUTE_ID (0x0019)
+#define ZCL_CURRENT_INLET_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x001A)
+#define ZCL_CURRENT_OUTLET_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x001B)
+#define ZCL_PREVIOUS_BLOCK_PERIOD_CONSUMIPTION_DELIVERED_ATTRIBUTE_ID (0x001C)
+#define ZCL_CURRENT_BLOCK_PERIOD_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x001D)
+#define ZCL_CURRENT_BLOCK_RECEIVED_ATTRIBUTE_ID (0x001E)
+#define ZCL_DFT_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x001F)
+#define ZCL_ACTIVE_REGISTER_TIER_DELIVERED_ATTRIBUTE_ID (0x0020)
+#define ZCL_ACTIVE_REGISTER_TIER_RECEIVED_ATTRIBUTE_ID (0x0021)
+#define ZCL_LAST_BLOCK_SWITCH_TIME_ATTRIBUTE_ID (0x0022)
+#define ZCL_CURRENT_TIER1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0100)
+#define ZCL_CURRENT_TIER1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0101)
+#define ZCL_CURRENT_TIER2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0102)
+#define ZCL_CURRENT_TIER2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0103)
+#define ZCL_CURRENT_TIER3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0104)
+#define ZCL_CURRENT_TIER3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0105)
+#define ZCL_CURRENT_TIER4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0106)
+#define ZCL_CURRENT_TIER4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0107)
+#define ZCL_CURRENT_TIER5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0108)
+#define ZCL_CURRENT_TIER5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0109)
+#define ZCL_CURRENT_TIER6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x010A)
+#define ZCL_CURRENT_TIER6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x010B)
+#define ZCL_CURRENT_TIER7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x010C)
+#define ZCL_CURRENT_TIER7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x010D)
+#define ZCL_CURRENT_TIER8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x010E)
+#define ZCL_CURRENT_TIER8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x010F)
+#define ZCL_CURRENT_TIER9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0110)
+#define ZCL_CURRENT_TIER9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0111)
+#define ZCL_CURRENT_TIER10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0112)
+#define ZCL_CURRENT_TIER10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0113)
+#define ZCL_CURRENT_TIER11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0114)
+#define ZCL_CURRENT_TIER11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0115)
+#define ZCL_CURRENT_TIER12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0116)
+#define ZCL_CURRENT_TIER12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0117)
+#define ZCL_CURRENT_TIER13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0118)
+#define ZCL_CURRENT_TIER13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0119)
+#define ZCL_CURRENT_TIER14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x011A)
+#define ZCL_CURRENT_TIER14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x011B)
+#define ZCL_CURRENT_TIER15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x011C)
+#define ZCL_CURRENT_TIER15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x011D)
+#define ZCL_CURRENT_TIER16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x011E)
+#define ZCL_CURRENT_TIER16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x011F)
+#define ZCL_CURRENT_TIER17_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0120)
+#define ZCL_CURRENT_TIER17_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0121)
+#define ZCL_CURRENT_TIER18_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0122)
+#define ZCL_CURRENT_TIER18_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0123)
+#define ZCL_CURRENT_TIER19_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0124)
+#define ZCL_CURRENT_TIER19_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0125)
+#define ZCL_CURRENT_TIER20_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0126)
+#define ZCL_CURRENT_TIER20_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0127)
+#define ZCL_CURRENT_TIER21_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0128)
+#define ZCL_CURRENT_TIER21_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0129)
+#define ZCL_CURRENT_TIER22_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x012A)
+#define ZCL_CURRENT_TIER22_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x012B)
+#define ZCL_CURRENT_TIER23_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x012C)
+#define ZCL_CURRENT_TIER23_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x012D)
+#define ZCL_CURRENT_TIER24_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x012E)
+#define ZCL_CURRENT_TIER24_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x012F)
+#define ZCL_CURRENT_TIER25_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0130)
+#define ZCL_CURRENT_TIER25_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0131)
+#define ZCL_CURRENT_TIER26_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0132)
+#define ZCL_CURRENT_TIER26_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0133)
+#define ZCL_CURRENT_TIER27_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0134)
+#define ZCL_CURRENT_TIER27_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0135)
+#define ZCL_CURRENT_TIER28_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0136)
+#define ZCL_CURRENT_TIER28_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0137)
+#define ZCL_CURRENT_TIER29_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0138)
+#define ZCL_CURRENT_TIER29_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0139)
+#define ZCL_CURRENT_TIER30_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x013A)
+#define ZCL_CURRENT_TIER30_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x013B)
+#define ZCL_CURRENT_TIER31_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x013C)
+#define ZCL_CURRENT_TIER31_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x013D)
+#define ZCL_CURRENT_TIER32_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x013E)
+#define ZCL_CURRENT_TIER32_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x013F)
+#define ZCL_CURRENT_TIER33_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0140)
+#define ZCL_CURRENT_TIER33_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0141)
+#define ZCL_CURRENT_TIER34_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0142)
+#define ZCL_CURRENT_TIER34_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0143)
+#define ZCL_CURRENT_TIER35_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0144)
+#define ZCL_CURRENT_TIER35_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0145)
+#define ZCL_CURRENT_TIER36_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0146)
+#define ZCL_CURRENT_TIER36_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0147)
+#define ZCL_CURRENT_TIER37_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0148)
+#define ZCL_CURRENT_TIER37_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0149)
+#define ZCL_CURRENT_TIER38_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x014A)
+#define ZCL_CURRENT_TIER38_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x014B)
+#define ZCL_CURRENT_TIER39_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x014C)
+#define ZCL_CURRENT_TIER39_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x014D)
+#define ZCL_CURRENT_TIER40_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x014E)
+#define ZCL_CURRENT_TIER40_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x014F)
+#define ZCL_CURRENT_TIER41_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0150)
+#define ZCL_CURRENT_TIER41_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0151)
+#define ZCL_CURRENT_TIER42_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0152)
+#define ZCL_CURRENT_TIER42_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0153)
+#define ZCL_CURRENT_TIER43_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0154)
+#define ZCL_CURRENT_TIER43_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0155)
+#define ZCL_CURRENT_TIER44_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0156)
+#define ZCL_CURRENT_TIER44_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0157)
+#define ZCL_CURRENT_TIER45_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0158)
+#define ZCL_CURRENT_TIER45_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0159)
+#define ZCL_CURRENT_TIER46_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x015A)
+#define ZCL_CURRENT_TIER46_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x015B)
+#define ZCL_CURRENT_TIER47_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x015C)
+#define ZCL_CURRENT_TIER47_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x015D)
+#define ZCL_CURRENT_TIER48_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x015E)
+#define ZCL_CURRENT_TIER48_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x015F)
+#define ZCL_CPP1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x01FC)
+#define ZCL_CPP2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x01FE)
+#define ZCL_STATUS_ATTRIBUTE_ID (0x0200)
+#define ZCL_REMAINING_BATTERY_LIFE_ATTRIBUTE_ID (0x0201)
+#define ZCL_HOURS_IN_OPERATION_ATTRIBUTE_ID (0x0202)
+#define ZCL_HOURS_IN_FAULT_ATTRIBUTE_ID (0x0203)
+#define ZCL_EXTENDED_STATUS_ATTRIBUTE_ID (0x0204)
+#define ZCL_REMAINING_BATTERY_LIFE_IN_DAYS_ATTRIBUTE_ID (0x0205)
+#define ZCL_CURRENT_METER_ID_ATTRIBUTE_ID (0x0206)
+#define ZCL_AMBIENT_CONSUMPTION_INDICATOR_ATTRIBUTE_ID (0x0207)
+#define ZCL_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0300)
+#define ZCL_MULTIPLIER_ATTRIBUTE_ID (0x0301)
+#define ZCL_DIVISOR_ATTRIBUTE_ID (0x0302)
+#define ZCL_SUMMATION_FORMATTING_ATTRIBUTE_ID (0x0303)
+#define ZCL_DEMAND_FORMATTING_ATTRIBUTE_ID (0x0304)
+#define ZCL_HISTORICAL_CONSUMPTION_FORMATTING_ATTRIBUTE_ID (0x0305)
+#define ZCL_METERING_DEVICE_TYPE_ATTRIBUTE_ID (0x0306)
+#define ZCL_SITE_ID_ATTRIBUTE_ID (0x0307)
+#define ZCL_METER_SERIAL_NUMBER_ATTRIBUTE_ID (0x0308)
+#define ZCL_ENERGY_CARRIER_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0309)
+#define ZCL_ENERGY_CARRIER_SUMMATION_FORMATTING_ATTRIBUTE_ID (0x030A)
+#define ZCL_ENERGY_CARRIER_DEMAND_FORMATTING_ATTRIBUTE_ID (0x030B)
+#define ZCL_TEMPERATURE_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x030C)
+#define ZCL_TEMPERATURE_FORMATTING_ATTRIBUTE_ID (0x030D)
+#define ZCL_MODULE_SERIAL_NUMBER_ATTRIBUTE_ID (0x030E)
+#define ZCL_OPERATING_TARIFF_LABEL_DELIVERED_ATTRIBUTE_ID (0x030F)
+#define ZCL_OPERATING_TARIFF_LABEL_RECEIVED_ATTRIBUTE_ID (0x0310)
+#define ZCL_CUSTOMER_ID_NUMBER_ATTRIBUTE_ID (0x0311)
+#define ZCL_ALTERNATIVE_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0312)
+#define ZCL_ALTERNATIVE_DEMAND_FORMATTING_ATTRIBUTE_ID (0x0313)
+#define ZCL_ALTERNATIVE_CONSUMPTION_FORMATTING_ATTRIBUTE_ID (0x0314)
+#define ZCL_INSTANTANEOUS_DEMAND_ATTRIBUTE_ID (0x0400)
+#define ZCL_CURRENT_DAY_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0401)
+#define ZCL_CURRENT_DAY_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0402)
+#define ZCL_PREVIOUS_DAY_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0403)
+#define ZCL_PREVIOUS_DAY_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0404)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_START_TIME_DELIVERED_ATTRIBUTE_ID (0x0405)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_START_TIME_RECEIVED_ATTRIBUTE_ID (0x0406)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_VALUE_DELIVERED_ATTRIBUTE_ID (0x0407)
+#define ZCL_CURRENT_PARTIAL_PROFILE_INTERVAL_VALUE_RECEIVED_ATTRIBUTE_ID (0x0408)
+#define ZCL_CURRENT_DAY_MAX_PRESSURE_ATTRIBUTE_ID (0x0409)
+#define ZCL_CURRENT_DAY_MIN_PRESSURE_ATTRIBUTE_ID (0x040A)
+#define ZCL_PREVIOUS_DAY_MAX_PRESSURE_ATTRIBUTE_ID (0x040B)
+#define ZCL_PREVIOUS_DAY_MIN_PRESSURE_ATTRIBUTE_ID (0x040C)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_ATTRIBUTE_ID (0x040D)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_ATTRIBUTE_ID (0x040E)
+#define ZCL_CURRENT_MONTH_MAX_DEMAND_ATTRIBUTE_ID (0x040F)
+#define ZCL_CURRENT_YEAR_MAX_DEMAND_ATTRIBUTE_ID (0x0410)
+#define ZCL_CURRENT_DAY_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0411)
+#define ZCL_PREVIOUS_DAY_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0412)
+#define ZCL_CURRENT_MONTH_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0413)
+#define ZCL_CURRENT_MONTH_MIN_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0414)
+#define ZCL_CURRENT_YEAR_MAX_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0415)
+#define ZCL_CURRENT_YEAR_MIN_ENERGY_CARRIER_DEMAND_ATTRIBUTE_ID (0x0416)
+#define ZCL_PREVIOUS_DAY2_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0420)
+#define ZCL_PREVIOUS_DAY2_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0421)
+#define ZCL_PREVIOUS_DAY3_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0422)
+#define ZCL_PREVIOUS_DAY3_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0423)
+#define ZCL_PREVIOUS_DAY4_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0424)
+#define ZCL_PREVIOUS_DAY4_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0425)
+#define ZCL_PREVIOUS_DAY5_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0426)
+#define ZCL_PREVIOUS_DAY5_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0427)
+#define ZCL_PREVIOUS_DAY6_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0428)
+#define ZCL_PREVIOUS_DAY6_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0429)
+#define ZCL_PREVIOUS_DAY7_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x042A)
+#define ZCL_PREVIOUS_DAY7_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x042B)
+#define ZCL_PREVIOUS_DAY8_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x042C)
+#define ZCL_PREVIOUS_DAY8_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x042D)
+#define ZCL_CURRENT_WEEK_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0430)
+#define ZCL_CURRENT_WEEK_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0431)
+#define ZCL_PREVIOUS_WEEK_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0432)
+#define ZCL_PREVIOUS_WEEK_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0433)
+#define ZCL_PREVIOUS_WEEK2_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0434)
+#define ZCL_PREVIOUS_WEEK2_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0435)
+#define ZCL_PREVIOUS_WEEK3_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0436)
+#define ZCL_PREVIOUS_WEEK3_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0437)
+#define ZCL_PREVIOUS_WEEK4_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0438)
+#define ZCL_PREVIOUS_WEEK4_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0439)
+#define ZCL_PREVIOUS_WEEK5_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x043A)
+#define ZCL_PREVIOUS_WEEK5_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x043B)
+#define ZCL_CURRENT_MONTH_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0440)
+#define ZCL_CURRENT_MONTH_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0441)
+#define ZCL_PREVIOUS_MONTH_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0442)
+#define ZCL_PREVIOUS_MONTH_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0443)
+#define ZCL_PREVIOUS_MONTH2_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0444)
+#define ZCL_PREVIOUS_MONTH2_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0445)
+#define ZCL_PREVIOUS_MONTH3_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0446)
+#define ZCL_PREVIOUS_MONTH3_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0447)
+#define ZCL_PREVIOUS_MONTH4_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0448)
+#define ZCL_PREVIOUS_MONTH4_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0449)
+#define ZCL_PREVIOUS_MONTH5_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x044A)
+#define ZCL_PREVIOUS_MONTH5_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x044B)
+#define ZCL_PREVIOUS_MONTH6_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x044C)
+#define ZCL_PREVIOUS_MONTH6_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x044D)
+#define ZCL_PREVIOUS_MONTH7_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x044E)
+#define ZCL_PREVIOUS_MONTH7_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x044F)
+#define ZCL_PREVIOUS_MONTH8_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0450)
+#define ZCL_PREVIOUS_MONTH8_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0451)
+#define ZCL_PREVIOUS_MONTH9_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0452)
+#define ZCL_PREVIOUS_MONTH9_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0453)
+#define ZCL_PREVIOUS_MONTH10_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0454)
+#define ZCL_PREVIOUS_MONTH10_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0455)
+#define ZCL_PREVIOUS_MONTH11_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0456)
+#define ZCL_PREVIOUS_MONTH11_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0457)
+#define ZCL_PREVIOUS_MONTH12_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0458)
+#define ZCL_PREVIOUS_MONTH12_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0459)
+#define ZCL_PREVIOUS_MONTH13_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x045A)
+#define ZCL_PREVIOUS_MONTH13_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x045B)
+#define ZCL_METERING_HISTORICAL_FREEZE_TIME_ATTRIBUTE_ID (0x045C)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x045D)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x045E)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x045F)
+#define ZCL_CURRENT_DAY_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0460)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0461)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0462)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0463)
+#define ZCL_PREVIOUS_DAY_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0464)
+#define ZCL_MAX_NUMBER_OF_PERIODS_DELIVERED_ATTRIBUTE_ID (0x0500)
+#define ZCL_CURRENT_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0600)
+#define ZCL_DEMAND_LIMIT_ATTRIBUTE_ID (0x0601)
+#define ZCL_DEMAND_INTEGRATION_PERIOD_ATTRIBUTE_ID (0x0602)
+#define ZCL_NUMBER_OF_DEMAND_SUBINTERVALS_ATTRIBUTE_ID (0x0603)
+#define ZCL_DEMAND_LIMIT_ARM_DURATION_IN_MINUTES_ATTRIBUTE_ID (0x0604)
+#define ZCL_LOAD_LIMIT_SUPPLY_STATE_ATTRIBUTE_ID (0x0605)
+#define ZCL_LOAD_LIMIT_COUNTER_ATTRIBUTE_ID (0x0606)
+#define ZCL_SUPPLY_TAMPER_STATE_ATTRIBUTE_ID (0x0607)
+#define ZCL_SUPPLY_DEPLETION_STATE_ATTRIBUTE_ID (0x0608)
+#define ZCL_SUPPLY_UNCONTROLLED_FLOW_STATE_ATTRIBUTE_ID (0x0609)
+#define ZCL_CURRENT_NO_TIER_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0700)
+#define ZCL_CURRENT_NO_TIER_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0701)
+#define ZCL_CURRENT_NO_TIER_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0702)
+#define ZCL_CURRENT_NO_TIER_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0703)
+#define ZCL_CURRENT_NO_TIER_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0704)
+#define ZCL_CURRENT_NO_TIER_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0705)
+#define ZCL_CURRENT_NO_TIER_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0706)
+#define ZCL_CURRENT_NO_TIER_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0707)
+#define ZCL_CURRENT_NO_TIER_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0708)
+#define ZCL_CURRENT_NO_TIER_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0709)
+#define ZCL_CURRENT_NO_TIER_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070A)
+#define ZCL_CURRENT_NO_TIER_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070B)
+#define ZCL_CURRENT_NO_TIER_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070C)
+#define ZCL_CURRENT_NO_TIER_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070D)
+#define ZCL_CURRENT_NO_TIER_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070E)
+#define ZCL_CURRENT_NO_TIER_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x070F)
+#define ZCL_CURRENT_TIER1_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0710)
+#define ZCL_CURRENT_TIER1_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0711)
+#define ZCL_CURRENT_TIER1_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0712)
+#define ZCL_CURRENT_TIER1_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0713)
+#define ZCL_CURRENT_TIER1_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0714)
+#define ZCL_CURRENT_TIER1_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0715)
+#define ZCL_CURRENT_TIER1_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0716)
+#define ZCL_CURRENT_TIER1_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0717)
+#define ZCL_CURRENT_TIER1_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0718)
+#define ZCL_CURRENT_TIER1_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0719)
+#define ZCL_CURRENT_TIER1_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071A)
+#define ZCL_CURRENT_TIER1_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071B)
+#define ZCL_CURRENT_TIER1_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071C)
+#define ZCL_CURRENT_TIER1_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071D)
+#define ZCL_CURRENT_TIER1_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071E)
+#define ZCL_CURRENT_TIER1_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x071F)
+#define ZCL_CURRENT_TIER2_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0720)
+#define ZCL_CURRENT_TIER2_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0721)
+#define ZCL_CURRENT_TIER2_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0722)
+#define ZCL_CURRENT_TIER2_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0723)
+#define ZCL_CURRENT_TIER2_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0724)
+#define ZCL_CURRENT_TIER2_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0725)
+#define ZCL_CURRENT_TIER2_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0726)
+#define ZCL_CURRENT_TIER2_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0727)
+#define ZCL_CURRENT_TIER2_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0728)
+#define ZCL_CURRENT_TIER2_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0729)
+#define ZCL_CURRENT_TIER2_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072A)
+#define ZCL_CURRENT_TIER2_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072B)
+#define ZCL_CURRENT_TIER2_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072C)
+#define ZCL_CURRENT_TIER2_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072D)
+#define ZCL_CURRENT_TIER2_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072E)
+#define ZCL_CURRENT_TIER2_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x072F)
+#define ZCL_CURRENT_TIER3_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0730)
+#define ZCL_CURRENT_TIER3_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0731)
+#define ZCL_CURRENT_TIER3_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0732)
+#define ZCL_CURRENT_TIER3_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0733)
+#define ZCL_CURRENT_TIER3_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0734)
+#define ZCL_CURRENT_TIER3_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0735)
+#define ZCL_CURRENT_TIER3_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0736)
+#define ZCL_CURRENT_TIER3_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0737)
+#define ZCL_CURRENT_TIER3_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0738)
+#define ZCL_CURRENT_TIER3_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0739)
+#define ZCL_CURRENT_TIER3_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073A)
+#define ZCL_CURRENT_TIER3_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073B)
+#define ZCL_CURRENT_TIER3_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073C)
+#define ZCL_CURRENT_TIER3_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073D)
+#define ZCL_CURRENT_TIER3_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073E)
+#define ZCL_CURRENT_TIER3_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x073F)
+#define ZCL_CURRENT_TIER4_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0740)
+#define ZCL_CURRENT_TIER4_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0741)
+#define ZCL_CURRENT_TIER4_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0742)
+#define ZCL_CURRENT_TIER4_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0743)
+#define ZCL_CURRENT_TIER4_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0744)
+#define ZCL_CURRENT_TIER4_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0745)
+#define ZCL_CURRENT_TIER4_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0746)
+#define ZCL_CURRENT_TIER4_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0747)
+#define ZCL_CURRENT_TIER4_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0748)
+#define ZCL_CURRENT_TIER4_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0749)
+#define ZCL_CURRENT_TIER4_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074A)
+#define ZCL_CURRENT_TIER4_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074B)
+#define ZCL_CURRENT_TIER4_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074C)
+#define ZCL_CURRENT_TIER4_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074D)
+#define ZCL_CURRENT_TIER4_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074E)
+#define ZCL_CURRENT_TIER4_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x074F)
+#define ZCL_CURRENT_TIER5_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0750)
+#define ZCL_CURRENT_TIER5_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0751)
+#define ZCL_CURRENT_TIER5_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0752)
+#define ZCL_CURRENT_TIER5_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0753)
+#define ZCL_CURRENT_TIER5_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0754)
+#define ZCL_CURRENT_TIER5_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0755)
+#define ZCL_CURRENT_TIER5_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0756)
+#define ZCL_CURRENT_TIER5_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0757)
+#define ZCL_CURRENT_TIER5_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0758)
+#define ZCL_CURRENT_TIER5_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0759)
+#define ZCL_CURRENT_TIER5_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075A)
+#define ZCL_CURRENT_TIER5_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075B)
+#define ZCL_CURRENT_TIER5_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075C)
+#define ZCL_CURRENT_TIER5_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075D)
+#define ZCL_CURRENT_TIER5_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075E)
+#define ZCL_CURRENT_TIER5_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x075F)
+#define ZCL_CURRENT_TIER6_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0760)
+#define ZCL_CURRENT_TIER6_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0761)
+#define ZCL_CURRENT_TIER6_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0762)
+#define ZCL_CURRENT_TIER6_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0763)
+#define ZCL_CURRENT_TIER6_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0764)
+#define ZCL_CURRENT_TIER6_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0765)
+#define ZCL_CURRENT_TIER6_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0766)
+#define ZCL_CURRENT_TIER6_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0767)
+#define ZCL_CURRENT_TIER6_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0768)
+#define ZCL_CURRENT_TIER6_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0769)
+#define ZCL_CURRENT_TIER6_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076A)
+#define ZCL_CURRENT_TIER6_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076B)
+#define ZCL_CURRENT_TIER6_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076C)
+#define ZCL_CURRENT_TIER6_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076D)
+#define ZCL_CURRENT_TIER6_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076E)
+#define ZCL_CURRENT_TIER6_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x076F)
+#define ZCL_CURRENT_TIER7_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0770)
+#define ZCL_CURRENT_TIER7_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0771)
+#define ZCL_CURRENT_TIER7_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0772)
+#define ZCL_CURRENT_TIER7_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0773)
+#define ZCL_CURRENT_TIER7_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0774)
+#define ZCL_CURRENT_TIER7_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0775)
+#define ZCL_CURRENT_TIER7_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0776)
+#define ZCL_CURRENT_TIER7_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0777)
+#define ZCL_CURRENT_TIER7_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0778)
+#define ZCL_CURRENT_TIER7_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0779)
+#define ZCL_CURRENT_TIER7_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077A)
+#define ZCL_CURRENT_TIER7_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077B)
+#define ZCL_CURRENT_TIER7_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077C)
+#define ZCL_CURRENT_TIER7_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077D)
+#define ZCL_CURRENT_TIER7_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077E)
+#define ZCL_CURRENT_TIER7_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x077F)
+#define ZCL_CURRENT_TIER8_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0780)
+#define ZCL_CURRENT_TIER8_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0781)
+#define ZCL_CURRENT_TIER8_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0782)
+#define ZCL_CURRENT_TIER8_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0783)
+#define ZCL_CURRENT_TIER8_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0784)
+#define ZCL_CURRENT_TIER8_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0785)
+#define ZCL_CURRENT_TIER8_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0786)
+#define ZCL_CURRENT_TIER8_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0787)
+#define ZCL_CURRENT_TIER8_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0788)
+#define ZCL_CURRENT_TIER8_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0789)
+#define ZCL_CURRENT_TIER8_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078A)
+#define ZCL_CURRENT_TIER8_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078B)
+#define ZCL_CURRENT_TIER8_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078C)
+#define ZCL_CURRENT_TIER8_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078D)
+#define ZCL_CURRENT_TIER8_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078E)
+#define ZCL_CURRENT_TIER8_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x078F)
+#define ZCL_CURRENT_TIER9_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0790)
+#define ZCL_CURRENT_TIER9_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0791)
+#define ZCL_CURRENT_TIER9_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0792)
+#define ZCL_CURRENT_TIER9_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0793)
+#define ZCL_CURRENT_TIER9_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0794)
+#define ZCL_CURRENT_TIER9_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0795)
+#define ZCL_CURRENT_TIER9_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0796)
+#define ZCL_CURRENT_TIER9_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0797)
+#define ZCL_CURRENT_TIER9_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0798)
+#define ZCL_CURRENT_TIER9_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x0799)
+#define ZCL_CURRENT_TIER9_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079A)
+#define ZCL_CURRENT_TIER9_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079B)
+#define ZCL_CURRENT_TIER9_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079C)
+#define ZCL_CURRENT_TIER9_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079D)
+#define ZCL_CURRENT_TIER9_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079E)
+#define ZCL_CURRENT_TIER9_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x079F)
+#define ZCL_CURRENT_TIER10_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A0)
+#define ZCL_CURRENT_TIER10_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A1)
+#define ZCL_CURRENT_TIER10_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A2)
+#define ZCL_CURRENT_TIER10_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A3)
+#define ZCL_CURRENT_TIER10_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A4)
+#define ZCL_CURRENT_TIER10_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A5)
+#define ZCL_CURRENT_TIER10_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A6)
+#define ZCL_CURRENT_TIER10_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A7)
+#define ZCL_CURRENT_TIER10_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A8)
+#define ZCL_CURRENT_TIER10_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07A9)
+#define ZCL_CURRENT_TIER10_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AA)
+#define ZCL_CURRENT_TIER10_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AB)
+#define ZCL_CURRENT_TIER10_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AC)
+#define ZCL_CURRENT_TIER10_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AD)
+#define ZCL_CURRENT_TIER10_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AE)
+#define ZCL_CURRENT_TIER10_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07AF)
+#define ZCL_CURRENT_TIER11_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B0)
+#define ZCL_CURRENT_TIER11_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B1)
+#define ZCL_CURRENT_TIER11_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B2)
+#define ZCL_CURRENT_TIER11_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B3)
+#define ZCL_CURRENT_TIER11_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B4)
+#define ZCL_CURRENT_TIER11_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B5)
+#define ZCL_CURRENT_TIER11_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B6)
+#define ZCL_CURRENT_TIER11_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B7)
+#define ZCL_CURRENT_TIER11_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B8)
+#define ZCL_CURRENT_TIER11_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07B9)
+#define ZCL_CURRENT_TIER11_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BA)
+#define ZCL_CURRENT_TIER11_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BB)
+#define ZCL_CURRENT_TIER11_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BC)
+#define ZCL_CURRENT_TIER11_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BD)
+#define ZCL_CURRENT_TIER11_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BE)
+#define ZCL_CURRENT_TIER11_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07BF)
+#define ZCL_CURRENT_TIER12_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C0)
+#define ZCL_CURRENT_TIER12_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C1)
+#define ZCL_CURRENT_TIER12_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C2)
+#define ZCL_CURRENT_TIER12_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C3)
+#define ZCL_CURRENT_TIER12_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C4)
+#define ZCL_CURRENT_TIER12_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C5)
+#define ZCL_CURRENT_TIER12_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C6)
+#define ZCL_CURRENT_TIER12_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C7)
+#define ZCL_CURRENT_TIER12_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C8)
+#define ZCL_CURRENT_TIER12_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07C9)
+#define ZCL_CURRENT_TIER12_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CA)
+#define ZCL_CURRENT_TIER12_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CB)
+#define ZCL_CURRENT_TIER12_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CC)
+#define ZCL_CURRENT_TIER12_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CD)
+#define ZCL_CURRENT_TIER12_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CE)
+#define ZCL_CURRENT_TIER12_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07CF)
+#define ZCL_CURRENT_TIER13_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D0)
+#define ZCL_CURRENT_TIER13_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D1)
+#define ZCL_CURRENT_TIER13_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D2)
+#define ZCL_CURRENT_TIER13_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D3)
+#define ZCL_CURRENT_TIER13_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D4)
+#define ZCL_CURRENT_TIER13_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D5)
+#define ZCL_CURRENT_TIER13_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D6)
+#define ZCL_CURRENT_TIER13_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D7)
+#define ZCL_CURRENT_TIER13_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D8)
+#define ZCL_CURRENT_TIER13_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07D9)
+#define ZCL_CURRENT_TIER13_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DA)
+#define ZCL_CURRENT_TIER13_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DB)
+#define ZCL_CURRENT_TIER13_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DC)
+#define ZCL_CURRENT_TIER13_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DD)
+#define ZCL_CURRENT_TIER13_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DE)
+#define ZCL_CURRENT_TIER13_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07DF)
+#define ZCL_CURRENT_TIER14_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E0)
+#define ZCL_CURRENT_TIER14_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E1)
+#define ZCL_CURRENT_TIER14_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E2)
+#define ZCL_CURRENT_TIER14_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E3)
+#define ZCL_CURRENT_TIER14_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E4)
+#define ZCL_CURRENT_TIER14_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E5)
+#define ZCL_CURRENT_TIER14_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E6)
+#define ZCL_CURRENT_TIER14_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E7)
+#define ZCL_CURRENT_TIER14_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E8)
+#define ZCL_CURRENT_TIER14_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07E9)
+#define ZCL_CURRENT_TIER14_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EA)
+#define ZCL_CURRENT_TIER14_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EB)
+#define ZCL_CURRENT_TIER14_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EC)
+#define ZCL_CURRENT_TIER14_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07ED)
+#define ZCL_CURRENT_TIER14_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EE)
+#define ZCL_CURRENT_TIER14_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07EF)
+#define ZCL_CURRENT_TIER15_BLOCK1_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F0)
+#define ZCL_CURRENT_TIER15_BLOCK2_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F1)
+#define ZCL_CURRENT_TIER15_BLOCK3_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F2)
+#define ZCL_CURRENT_TIER15_BLOCK4_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F3)
+#define ZCL_CURRENT_TIER15_BLOCK5_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F4)
+#define ZCL_CURRENT_TIER15_BLOCK6_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F5)
+#define ZCL_CURRENT_TIER15_BLOCK7_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F6)
+#define ZCL_CURRENT_TIER15_BLOCK8_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F7)
+#define ZCL_CURRENT_TIER15_BLOCK9_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F8)
+#define ZCL_CURRENT_TIER15_BLOCK10_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07F9)
+#define ZCL_CURRENT_TIER15_BLOCK11_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FA)
+#define ZCL_CURRENT_TIER15_BLOCK12_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FB)
+#define ZCL_CURRENT_TIER15_BLOCK13_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FC)
+#define ZCL_CURRENT_TIER15_BLOCK14_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FD)
+#define ZCL_CURRENT_TIER15_BLOCK15_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FE)
+#define ZCL_CURRENT_TIER15_BLOCK16_SUMMATION_DELIVERED_ATTRIBUTE_ID (0x07FF)
+#define ZCL_GENERIC_ALARM_MASK_ATTRIBUTE_ID (0x0800)
+#define ZCL_ELECTRICITY_ALARM_MASK_ATTRIBUTE_ID (0x0801)
+#define ZCL_GENERIC_FLOW_PRESSURE_ALARM_MASK_ATTRIBUTE_ID (0x0802)
+#define ZCL_WATER_SPECIFIC_ALARM_MASK_ATTRIBUTE_ID (0x0803)
+#define ZCL_HEAT_AND_COOLING_SPECIFIC_ALARM_MASK_ATTRIBUTE_ID (0x0804)
+#define ZCL_GAS_SPECIFIC_ALARM_MASK_ATTRIBUTE_ID (0x0805)
+#define ZCL_METERING_EXTENDED_GENERIC_ALARM_MASK_ATTRIBUTE_ID (0x0806)
+#define ZCL_METERING_MANUFACTURE_ALARM_MASK_ATTRIBUTE_ID (0x0807)
+#define ZCL_CURRENT_NO_TIER_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0900)
+#define ZCL_CURRENT_NO_TIER_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0901)
+#define ZCL_CURRENT_NO_TIER_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0902)
+#define ZCL_CURRENT_NO_TIER_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0903)
+#define ZCL_CURRENT_NO_TIER_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0904)
+#define ZCL_CURRENT_NO_TIER_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0905)
+#define ZCL_CURRENT_NO_TIER_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0906)
+#define ZCL_CURRENT_NO_TIER_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0907)
+#define ZCL_CURRENT_NO_TIER_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0908)
+#define ZCL_CURRENT_NO_TIER_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0909)
+#define ZCL_CURRENT_NO_TIER_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090A)
+#define ZCL_CURRENT_NO_TIER_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090B)
+#define ZCL_CURRENT_NO_TIER_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090C)
+#define ZCL_CURRENT_NO_TIER_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090D)
+#define ZCL_CURRENT_NO_TIER_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090E)
+#define ZCL_CURRENT_NO_TIER_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x090F)
+#define ZCL_CURRENT_TIER1_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0910)
+#define ZCL_CURRENT_TIER1_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0911)
+#define ZCL_CURRENT_TIER1_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0912)
+#define ZCL_CURRENT_TIER1_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0913)
+#define ZCL_CURRENT_TIER1_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0914)
+#define ZCL_CURRENT_TIER1_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0915)
+#define ZCL_CURRENT_TIER1_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0916)
+#define ZCL_CURRENT_TIER1_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0917)
+#define ZCL_CURRENT_TIER1_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0918)
+#define ZCL_CURRENT_TIER1_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0919)
+#define ZCL_CURRENT_TIER1_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091A)
+#define ZCL_CURRENT_TIER1_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091B)
+#define ZCL_CURRENT_TIER1_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091C)
+#define ZCL_CURRENT_TIER1_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091D)
+#define ZCL_CURRENT_TIER1_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091E)
+#define ZCL_CURRENT_TIER1_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x091F)
+#define ZCL_CURRENT_TIER2_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0920)
+#define ZCL_CURRENT_TIER2_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0921)
+#define ZCL_CURRENT_TIER2_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0922)
+#define ZCL_CURRENT_TIER2_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0923)
+#define ZCL_CURRENT_TIER2_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0924)
+#define ZCL_CURRENT_TIER2_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0925)
+#define ZCL_CURRENT_TIER2_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0926)
+#define ZCL_CURRENT_TIER2_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0927)
+#define ZCL_CURRENT_TIER2_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0928)
+#define ZCL_CURRENT_TIER2_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0929)
+#define ZCL_CURRENT_TIER2_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092A)
+#define ZCL_CURRENT_TIER2_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092B)
+#define ZCL_CURRENT_TIER2_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092C)
+#define ZCL_CURRENT_TIER2_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092D)
+#define ZCL_CURRENT_TIER2_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092E)
+#define ZCL_CURRENT_TIER2_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x092F)
+#define ZCL_CURRENT_TIER3_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0930)
+#define ZCL_CURRENT_TIER3_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0931)
+#define ZCL_CURRENT_TIER3_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0932)
+#define ZCL_CURRENT_TIER3_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0933)
+#define ZCL_CURRENT_TIER3_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0934)
+#define ZCL_CURRENT_TIER3_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0935)
+#define ZCL_CURRENT_TIER3_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0936)
+#define ZCL_CURRENT_TIER3_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0937)
+#define ZCL_CURRENT_TIER3_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0938)
+#define ZCL_CURRENT_TIER3_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0939)
+#define ZCL_CURRENT_TIER3_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093A)
+#define ZCL_CURRENT_TIER3_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093B)
+#define ZCL_CURRENT_TIER3_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093C)
+#define ZCL_CURRENT_TIER3_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093D)
+#define ZCL_CURRENT_TIER3_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093E)
+#define ZCL_CURRENT_TIER3_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x093F)
+#define ZCL_CURRENT_TIER4_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0940)
+#define ZCL_CURRENT_TIER4_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0941)
+#define ZCL_CURRENT_TIER4_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0942)
+#define ZCL_CURRENT_TIER4_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0943)
+#define ZCL_CURRENT_TIER4_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0944)
+#define ZCL_CURRENT_TIER4_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0945)
+#define ZCL_CURRENT_TIER4_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0946)
+#define ZCL_CURRENT_TIER4_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0947)
+#define ZCL_CURRENT_TIER4_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0948)
+#define ZCL_CURRENT_TIER4_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0949)
+#define ZCL_CURRENT_TIER4_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094A)
+#define ZCL_CURRENT_TIER4_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094B)
+#define ZCL_CURRENT_TIER4_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094C)
+#define ZCL_CURRENT_TIER4_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094D)
+#define ZCL_CURRENT_TIER4_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094E)
+#define ZCL_CURRENT_TIER4_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x094F)
+#define ZCL_CURRENT_TIER5_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0950)
+#define ZCL_CURRENT_TIER5_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0951)
+#define ZCL_CURRENT_TIER5_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0952)
+#define ZCL_CURRENT_TIER5_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0953)
+#define ZCL_CURRENT_TIER5_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0954)
+#define ZCL_CURRENT_TIER5_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0955)
+#define ZCL_CURRENT_TIER5_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0956)
+#define ZCL_CURRENT_TIER5_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0957)
+#define ZCL_CURRENT_TIER5_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0958)
+#define ZCL_CURRENT_TIER5_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0959)
+#define ZCL_CURRENT_TIER5_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095A)
+#define ZCL_CURRENT_TIER5_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095B)
+#define ZCL_CURRENT_TIER5_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095C)
+#define ZCL_CURRENT_TIER5_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095D)
+#define ZCL_CURRENT_TIER5_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095E)
+#define ZCL_CURRENT_TIER5_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x095F)
+#define ZCL_CURRENT_TIER6_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0960)
+#define ZCL_CURRENT_TIER6_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0961)
+#define ZCL_CURRENT_TIER6_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0962)
+#define ZCL_CURRENT_TIER6_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0963)
+#define ZCL_CURRENT_TIER6_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0964)
+#define ZCL_CURRENT_TIER6_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0965)
+#define ZCL_CURRENT_TIER6_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0966)
+#define ZCL_CURRENT_TIER6_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0967)
+#define ZCL_CURRENT_TIER6_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0968)
+#define ZCL_CURRENT_TIER6_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0969)
+#define ZCL_CURRENT_TIER6_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096A)
+#define ZCL_CURRENT_TIER6_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096B)
+#define ZCL_CURRENT_TIER6_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096C)
+#define ZCL_CURRENT_TIER6_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096D)
+#define ZCL_CURRENT_TIER6_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096E)
+#define ZCL_CURRENT_TIER6_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x096F)
+#define ZCL_CURRENT_TIER7_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0970)
+#define ZCL_CURRENT_TIER7_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0971)
+#define ZCL_CURRENT_TIER7_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0972)
+#define ZCL_CURRENT_TIER7_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0973)
+#define ZCL_CURRENT_TIER7_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0974)
+#define ZCL_CURRENT_TIER7_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0975)
+#define ZCL_CURRENT_TIER7_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0976)
+#define ZCL_CURRENT_TIER7_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0977)
+#define ZCL_CURRENT_TIER7_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0978)
+#define ZCL_CURRENT_TIER7_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0979)
+#define ZCL_CURRENT_TIER7_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097A)
+#define ZCL_CURRENT_TIER7_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097B)
+#define ZCL_CURRENT_TIER7_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097C)
+#define ZCL_CURRENT_TIER7_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097D)
+#define ZCL_CURRENT_TIER7_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097E)
+#define ZCL_CURRENT_TIER7_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x097F)
+#define ZCL_CURRENT_TIER8_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0980)
+#define ZCL_CURRENT_TIER8_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0981)
+#define ZCL_CURRENT_TIER8_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0982)
+#define ZCL_CURRENT_TIER8_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0983)
+#define ZCL_CURRENT_TIER8_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0984)
+#define ZCL_CURRENT_TIER8_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0985)
+#define ZCL_CURRENT_TIER8_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0986)
+#define ZCL_CURRENT_TIER8_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0987)
+#define ZCL_CURRENT_TIER8_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0988)
+#define ZCL_CURRENT_TIER8_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0989)
+#define ZCL_CURRENT_TIER8_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098A)
+#define ZCL_CURRENT_TIER8_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098B)
+#define ZCL_CURRENT_TIER8_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098C)
+#define ZCL_CURRENT_TIER8_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098D)
+#define ZCL_CURRENT_TIER8_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098E)
+#define ZCL_CURRENT_TIER8_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x098F)
+#define ZCL_CURRENT_TIER9_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0990)
+#define ZCL_CURRENT_TIER9_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0991)
+#define ZCL_CURRENT_TIER9_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0992)
+#define ZCL_CURRENT_TIER9_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0993)
+#define ZCL_CURRENT_TIER9_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0994)
+#define ZCL_CURRENT_TIER9_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0995)
+#define ZCL_CURRENT_TIER9_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0996)
+#define ZCL_CURRENT_TIER9_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0997)
+#define ZCL_CURRENT_TIER9_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0998)
+#define ZCL_CURRENT_TIER9_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x0999)
+#define ZCL_CURRENT_TIER9_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099A)
+#define ZCL_CURRENT_TIER9_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099B)
+#define ZCL_CURRENT_TIER9_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099C)
+#define ZCL_CURRENT_TIER9_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099D)
+#define ZCL_CURRENT_TIER9_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099E)
+#define ZCL_CURRENT_TIER9_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x099F)
+#define ZCL_CURRENT_TIER10_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A0)
+#define ZCL_CURRENT_TIER10_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A1)
+#define ZCL_CURRENT_TIER10_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A2)
+#define ZCL_CURRENT_TIER10_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A3)
+#define ZCL_CURRENT_TIER10_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A4)
+#define ZCL_CURRENT_TIER10_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A5)
+#define ZCL_CURRENT_TIER10_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A6)
+#define ZCL_CURRENT_TIER10_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A7)
+#define ZCL_CURRENT_TIER10_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A8)
+#define ZCL_CURRENT_TIER10_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09A9)
+#define ZCL_CURRENT_TIER10_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AA)
+#define ZCL_CURRENT_TIER10_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AB)
+#define ZCL_CURRENT_TIER10_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AC)
+#define ZCL_CURRENT_TIER10_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AD)
+#define ZCL_CURRENT_TIER10_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AE)
+#define ZCL_CURRENT_TIER10_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09AF)
+#define ZCL_CURRENT_TIER11_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B0)
+#define ZCL_CURRENT_TIER11_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B1)
+#define ZCL_CURRENT_TIER11_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B2)
+#define ZCL_CURRENT_TIER11_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B3)
+#define ZCL_CURRENT_TIER11_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B4)
+#define ZCL_CURRENT_TIER11_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B5)
+#define ZCL_CURRENT_TIER11_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B6)
+#define ZCL_CURRENT_TIER11_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B7)
+#define ZCL_CURRENT_TIER11_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B8)
+#define ZCL_CURRENT_TIER11_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09B9)
+#define ZCL_CURRENT_TIER11_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BA)
+#define ZCL_CURRENT_TIER11_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BB)
+#define ZCL_CURRENT_TIER11_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BC)
+#define ZCL_CURRENT_TIER11_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BD)
+#define ZCL_CURRENT_TIER11_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BE)
+#define ZCL_CURRENT_TIER11_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09BF)
+#define ZCL_CURRENT_TIER12_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C0)
+#define ZCL_CURRENT_TIER12_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C1)
+#define ZCL_CURRENT_TIER12_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C2)
+#define ZCL_CURRENT_TIER12_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C3)
+#define ZCL_CURRENT_TIER12_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C4)
+#define ZCL_CURRENT_TIER12_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C5)
+#define ZCL_CURRENT_TIER12_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C6)
+#define ZCL_CURRENT_TIER12_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C7)
+#define ZCL_CURRENT_TIER12_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C8)
+#define ZCL_CURRENT_TIER12_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09C9)
+#define ZCL_CURRENT_TIER12_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CA)
+#define ZCL_CURRENT_TIER12_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CB)
+#define ZCL_CURRENT_TIER12_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CC)
+#define ZCL_CURRENT_TIER12_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CD)
+#define ZCL_CURRENT_TIER12_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CE)
+#define ZCL_CURRENT_TIER12_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09CF)
+#define ZCL_CURRENT_TIER13_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D0)
+#define ZCL_CURRENT_TIER13_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D1)
+#define ZCL_CURRENT_TIER13_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D2)
+#define ZCL_CURRENT_TIER13_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D3)
+#define ZCL_CURRENT_TIER13_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D4)
+#define ZCL_CURRENT_TIER13_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D5)
+#define ZCL_CURRENT_TIER13_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D6)
+#define ZCL_CURRENT_TIER13_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D7)
+#define ZCL_CURRENT_TIER13_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D8)
+#define ZCL_CURRENT_TIER13_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09D9)
+#define ZCL_CURRENT_TIER13_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DA)
+#define ZCL_CURRENT_TIER13_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DB)
+#define ZCL_CURRENT_TIER13_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DC)
+#define ZCL_CURRENT_TIER13_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DD)
+#define ZCL_CURRENT_TIER13_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DE)
+#define ZCL_CURRENT_TIER13_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09DF)
+#define ZCL_CURRENT_TIER14_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E0)
+#define ZCL_CURRENT_TIER14_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E1)
+#define ZCL_CURRENT_TIER14_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E2)
+#define ZCL_CURRENT_TIER14_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E3)
+#define ZCL_CURRENT_TIER14_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E4)
+#define ZCL_CURRENT_TIER14_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E5)
+#define ZCL_CURRENT_TIER14_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E6)
+#define ZCL_CURRENT_TIER14_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E7)
+#define ZCL_CURRENT_TIER14_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E8)
+#define ZCL_CURRENT_TIER14_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09E9)
+#define ZCL_CURRENT_TIER14_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EA)
+#define ZCL_CURRENT_TIER14_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EB)
+#define ZCL_CURRENT_TIER14_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EC)
+#define ZCL_CURRENT_TIER14_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09ED)
+#define ZCL_CURRENT_TIER14_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EE)
+#define ZCL_CURRENT_TIER14_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09EF)
+#define ZCL_CURRENT_TIER15_BLOCK1_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F0)
+#define ZCL_CURRENT_TIER15_BLOCK2_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F1)
+#define ZCL_CURRENT_TIER15_BLOCK3_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F2)
+#define ZCL_CURRENT_TIER15_BLOCK4_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F3)
+#define ZCL_CURRENT_TIER15_BLOCK5_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F4)
+#define ZCL_CURRENT_TIER15_BLOCK6_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F5)
+#define ZCL_CURRENT_TIER15_BLOCK7_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F6)
+#define ZCL_CURRENT_TIER15_BLOCK8_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F7)
+#define ZCL_CURRENT_TIER15_BLOCK9_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F8)
+#define ZCL_CURRENT_TIER15_BLOCK10_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09F9)
+#define ZCL_CURRENT_TIER15_BLOCK11_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FA)
+#define ZCL_CURRENT_TIER15_BLOCK12_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FB)
+#define ZCL_CURRENT_TIER15_BLOCK13_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FC)
+#define ZCL_CURRENT_TIER15_BLOCK14_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FD)
+#define ZCL_CURRENT_TIER15_BLOCK15_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FE)
+#define ZCL_CURRENT_TIER15_BLOCK16_SUMMATION_RECEIVED_ATTRIBUTE_ID (0x09FF)
+#define ZCL_BILL_TO_DATE_DELIVERED_ATTRIBUTE_ID (0x0A00)
+#define ZCL_BILL_TO_DATE_TIME_STAMP_DELIVERED_ATTRIBUTE_ID (0x0A01)
+#define ZCL_PROJECTED_BILL_DELIVERED_ATTRIBUTE_ID (0x0A02)
+#define ZCL_PROJECTED_BILL_TIME_STAMP_DELIVERED_ATTRIBUTE_ID (0x0A03)
+#define ZCL_BILL_DELIVERED_TRAILING_DIGIT_ATTRIBUTE_ID (0x0A04)
+#define ZCL_BILL_TO_DATE_RECEIVED_ATTRIBUTE_ID (0x0A10)
+#define ZCL_BILL_TO_DATE_TIME_STAMP_RECEIVED_ATTRIBUTE_ID (0x0A11)
+#define ZCL_PROJECTED_BILL_RECEIVED_ATTRIBUTE_ID (0x0A12)
+#define ZCL_PROJECTED_BILL_TIME_STAMP_RECEIVED_ATTRIBUTE_ID (0x0A13)
+#define ZCL_BILL_RECEIVED_TRAILING_DIGIT_ATTRIBUTE_ID (0x0A14)
+#define ZCL_PROPOSED_CHANGE_SUPPLY_IMPLEMENTATION_TIME_ATTRIBUTE_ID (0x0B00)
+#define ZCL_PROPOSED_CHANGE_SUPPLY_STATUS_ATTRIBUTE_ID (0x0B01)
+#define ZCL_UNCONTROLLED_FLOW_THESHOLD_ATTRIBUTE_ID (0x0B10)
+#define ZCL_UNCONTROLLED_FLOW_THESHOLD_UNIT_OF_MEASURE_ATTRIBUTE_ID (0x0B11)
+#define ZCL_UNCONTROLLED_FLOW_MULTIPLIER_ATTRIBUTE_ID (0x0B12)
+#define ZCL_UNCONTROLLED_FLOW_DIVISOR_ATTRIBUTE_ID (0x0B13)
+#define ZCL_FLOW_STABILIZATION_PERIOD_ATTRIBUTE_ID (0x0B14)
+#define ZCL_FLOW_MEASUREMENT_PERIOD_ATTRIBUTE_ID (0x0B15)
+#define ZCL_ALTERNATIVE_INSTANTANEOUS_DEMAND_ATTRIBUTE_ID (0x0C00)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C01)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C02)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C03)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C04)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_START_TIME_DELIVERED_ATTRIBUTE_ID (0x0C05)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_START_TIME_RECEIVED_ATTRIBUTE_ID (0x0C06)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_VALUE_DELIVERED_ATTRIBUTE_ID (0x0C07)
+#define ZCL_CURRENT_ALTERNATIVE_PARTIAL_PROFILE_INTERVAL_VALUE_RECEIVED_ATTRIBUTE_ID (0x0C08)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_MAX_PRESSURE_ATTRIBUTE_ID (0x0C09)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_MIN_PRESSURE_ATTRIBUTE_ID (0x0C0A)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_PRESSURE_ATTRIBUTE_ID (0x0C0B)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MIN_PRESSURE_ATTRIBUTE_ID (0x0C0C)
+#define ZCL_CURRENT_ALTERNATIVE_DAY_ALTERNATIVE_MAX_DEMAND_ATTRIBUTE_ID (0x0C0D)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_ATTRIBUTE_ID (0x0C0E)
+#define ZCL_CURRENT_ALTERNATIVE_MONTH_MAX_DEMAND_ATTRIBUTE_ID (0x0C0F)
+#define ZCL_CURRENT_ALTERNATIVE_YEAR_MAX_DEMAND_ATTRIBUTE_ID (0x0C10)
+#define ZCL_PREVIOUS_DAY2_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C20)
+#define ZCL_PREVIOUS_DAY2_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C21)
+#define ZCL_PREVIOUS_DAY3_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C22)
+#define ZCL_PREVIOUS_DAY3_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C23)
+#define ZCL_PREVIOUS_DAY4_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C24)
+#define ZCL_PREVIOUS_DAY4_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C25)
+#define ZCL_PREVIOUS_DAY5_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C26)
+#define ZCL_PREVIOUS_DAY5_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C27)
+#define ZCL_PREVIOUS_DAY6_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C28)
+#define ZCL_PREVIOUS_DAY6_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C29)
+#define ZCL_PREVIOUS_DAY7_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C2A)
+#define ZCL_PREVIOUS_DAY7_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C2B)
+#define ZCL_PREVIOUS_DAY8_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C2C)
+#define ZCL_PREVIOUS_DAY8_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C2D)
+#define ZCL_CURRENT_WEEK_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C30)
+#define ZCL_CURRENT_WEEK_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C31)
+#define ZCL_PREVIOUS_WEEK_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C32)
+#define ZCL_PREVIOUS_WEEK_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C33)
+#define ZCL_PREVIOUS_WEEK2_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C34)
+#define ZCL_PREVIOUS_WEEK2_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C35)
+#define ZCL_PREVIOUS_WEEK3_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C36)
+#define ZCL_PREVIOUS_WEEK3_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C37)
+#define ZCL_PREVIOUS_WEEK4_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C38)
+#define ZCL_PREVIOUS_WEEK4_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C39)
+#define ZCL_PREVIOUS_WEEK5_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C3A)
+#define ZCL_PREVIOUS_WEEK5_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C3B)
+#define ZCL_CURRENT_MONTH_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C40)
+#define ZCL_CURRENT_MONTH_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C41)
+#define ZCL_PREVIOUS_MONTH_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C42)
+#define ZCL_PREVIOUS_MONTH_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C43)
+#define ZCL_PREVIOUS_MONTH2_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C44)
+#define ZCL_PREVIOUS_MONTH2_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C45)
+#define ZCL_PREVIOUS_MONTH3_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C46)
+#define ZCL_PREVIOUS_MONTH3_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C47)
+#define ZCL_PREVIOUS_MONTH4_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C48)
+#define ZCL_PREVIOUS_MONTH4_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C49)
+#define ZCL_PREVIOUS_MONTH5_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C4A)
+#define ZCL_PREVIOUS_MONTH5_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C4B)
+#define ZCL_PREVIOUS_MONTH6_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C4C)
+#define ZCL_PREVIOUS_MONTH6_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C4D)
+#define ZCL_PREVIOUS_MONTH7_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C4E)
+#define ZCL_PREVIOUS_MONTH7_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C4F)
+#define ZCL_PREVIOUS_MONTH8_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C50)
+#define ZCL_PREVIOUS_MONTH8_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C51)
+#define ZCL_PREVIOUS_MONTH9_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C52)
+#define ZCL_PREVIOUS_MONTH9_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C53)
+#define ZCL_PREVIOUS_MONTH10_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C54)
+#define ZCL_PREVIOUS_MONTH10_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C55)
+#define ZCL_PREVIOUS_MONTH11_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C56)
+#define ZCL_PREVIOUS_MONTH11_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C57)
+#define ZCL_PREVIOUS_MONTH12_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C58)
+#define ZCL_PREVIOUS_MONTH12_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C59)
+#define ZCL_PREVIOUS_MONTH13_ALTERNATIVE_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0C5A)
+#define ZCL_PREVIOUS_MONTH13_ALTERNATIVE_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0C5B)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0C5C)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0C5D)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0C5E)
+#define ZCL_CURRENT_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0C5F)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_ATTRIBUTE_ID (0x0C60)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_DELIVERED_TIME_ATTRIBUTE_ID (0x0C61)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_ATTRIBUTE_ID (0x0C62)
+#define ZCL_PREVIOUS_DAY_ALTERNATIVE_MAX_DEMAND_RECEIVED_TIME_ATTRIBUTE_ID (0x0C63)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q1_ATTRIBUTE_ID (0x0D01)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q2_ATTRIBUTE_ID (0x0D02)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q3_ATTRIBUTE_ID (0x0D03)
+#define ZCL_CURRENT_ACTIVE_SUMMATION_Q4_ATTRIBUTE_ID (0x0D04)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q1_ATTRIBUTE_ID (0x0D05)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q2_ATTRIBUTE_ID (0x0D06)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q3_ATTRIBUTE_ID (0x0D07)
+#define ZCL_CURRENT_REACTIVE_SUMMATION_Q4_ATTRIBUTE_ID (0x0D08)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Messaging
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Tunneling
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CLOSE_TUNNEL_TIMEOUT_ATTRIBUTE_ID (0x0000)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Prepayment
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_PAYMENT_CONTROL_CONFIGURATION_ATTRIBUTE_ID (0x0000)
+#define ZCL_CREDIT_REMAINING_ATTRIBUTE_ID (0x0001)
+#define ZCL_EMERGENCY_CREDIT_REMAINING_ATTRIBUTE_ID (0x0002)
+#define ZCL_CREDIT_STATUS_ATTRIBUTE_ID (0x0003)
+#define ZCL_CREDIT_REMAINING_TIMESTAMP_ATTRIBUTE_ID (0x0004)
+#define ZCL_ACCUMULATED_DEBT_ATTRIBUTE_ID (0x0005)
+#define ZCL_OVERALL_DEBT_CAP_ATTRIBUTE_ID (0x0006)
+#define ZCL_EMERGENCY_CREDIT_LIMIT_ALLOWANCE_ATTRIBUTE_ID (0x0010)
+#define ZCL_EMERGENCY_CREDIT_THRESHOLD_ATTRIBUTE_ID (0x0011)
+#define ZCL_TOTAL_CREDIT_ADDED_ATTRIBUTE_ID (0x0020)
+#define ZCL_MAX_CREDIT_LIMIT_ATTRIBUTE_ID (0x0021)
+#define ZCL_MAX_CREDIT_PER_TOP_UP_ATTRIBUTE_ID (0x0022)
+#define ZCL_FRIENDLY_CREDIT_WARNING_ATTRIBUTE_ID (0x0030)
+#define ZCL_LOW_CREDIT_WARNING_ATTRIBUTE_ID (0x0031)
+#define ZCL_IHD_LOW_CREDIT_WARNING_ATTRIBUTE_ID (0x0032)
+#define ZCL_INTERRUPT_SUSPEND_TIME_ATTRIBUTE_ID (0x0033)
+#define ZCL_REMAINING_FRIENDLY_CREDIT_TIME_ATTRIBUTE_ID (0x0034)
+#define ZCL_NEXT_FRIENDLY_CREDIT_PERIOD_ATTRIBUTE_ID (0x0035)
+#define ZCL_CUT_OFF_VALUE_ATTRIBUTE_ID (0x0040)
+#define ZCL_TOKEN_CARRIER_ID_ATTRIBUTE_ID (0x0080)
+#define ZCL_TOP_UP_DATE_TIME_1_ATTRIBUTE_ID (0x0100)
+#define ZCL_TOP_UP_AMOUNT_1_ATTRIBUTE_ID (0x0101)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_1_ATTRIBUTE_ID (0x0102)
+#define ZCL_TOP_UP_CODE_1_ATTRIBUTE_ID (0x0103)
+#define ZCL_TOP_UP_DATE_TIME_2_ATTRIBUTE_ID (0x0110)
+#define ZCL_TOP_UP_AMOUNT_2_ATTRIBUTE_ID (0x0111)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_2_ATTRIBUTE_ID (0x0112)
+#define ZCL_TOP_UP_CODE_2_ATTRIBUTE_ID (0x0113)
+#define ZCL_TOP_UP_DATE_TIME_3_ATTRIBUTE_ID (0x0120)
+#define ZCL_TOP_UP_AMOUNT_3_ATTRIBUTE_ID (0x0121)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_3_ATTRIBUTE_ID (0x0122)
+#define ZCL_TOP_UP_CODE_3_ATTRIBUTE_ID (0x0123)
+#define ZCL_TOP_UP_DATE_TIME_4_ATTRIBUTE_ID (0x0130)
+#define ZCL_TOP_UP_AMOUNT_4_ATTRIBUTE_ID (0x0131)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_4_ATTRIBUTE_ID (0x0132)
+#define ZCL_TOP_UP_CODE_4_ATTRIBUTE_ID (0x0133)
+#define ZCL_TOP_UP_DATE_TIME_5_ATTRIBUTE_ID (0x0140)
+#define ZCL_TOP_UP_AMOUNT_5_ATTRIBUTE_ID (0x0141)
+#define ZCL_TOP_UP_ORIGINATING_DEVICE_5_ATTRIBUTE_ID (0x0142)
+#define ZCL_TOP_UP_CODE_5_ATTRIBUTE_ID (0x0143)
+#define ZCL_DEBT_LABEL_1_ATTRIBUTE_ID (0x0210)
+#define ZCL_DEBT_AMOUNT_1_ATTRIBUTE_ID (0x0211)
+#define ZCL_DEBT_RECOVERY_METHOD_1_ATTRIBUTE_ID (0x0212)
+#define ZCL_DEBT_RECOVERY_START_TIME_1_ATTRIBUTE_ID (0x0213)
+#define ZCL_DEBT_RECOVERY_COLLECTION_TIME_1_ATTRIBUTE_ID (0x0214)
+#define ZCL_DEBT_RECOVERY_FREQUENCY_1_ATTRIBUTE_ID (0x0216)
+#define ZCL_DEBT_RECOVERY_AMOUNT_1_ATTRIBUTE_ID (0x0217)
+#define ZCL_DEBT_RECOVERY_TOP_UP_PERCENTAGE_1_ATTRIBUTE_ID (0x0219)
+#define ZCL_DEBT_LABEL_2_ATTRIBUTE_ID (0x0220)
+#define ZCL_DEBT_AMOUNT_2_ATTRIBUTE_ID (0x0221)
+#define ZCL_DEBT_RECOVERY_METHOD_2_ATTRIBUTE_ID (0x0222)
+#define ZCL_DEBT_RECOVERY_START_TIME_2_ATTRIBUTE_ID (0x0223)
+#define ZCL_DEBT_RECOVERY_COLLECTION_TIME_2_ATTRIBUTE_ID (0x0224)
+#define ZCL_DEBT_RECOVERY_FREQUENCY_2_ATTRIBUTE_ID (0x0226)
+#define ZCL_DEBT_RECOVERY_AMOUNT_2_ATTRIBUTE_ID (0x0227)
+#define ZCL_DEBT_RECOVERY_TOP_UP_PERCENTAGE_2_ATTRIBUTE_ID (0x0229)
+#define ZCL_DEBT_LABEL_3_ATTRIBUTE_ID (0x0230)
+#define ZCL_DEBT_AMOUNT_3_ATTRIBUTE_ID (0x0231)
+#define ZCL_DEBT_RECOVERY_METHOD_3_ATTRIBUTE_ID (0x0232)
+#define ZCL_DEBT_RECOVERY_START_TIME_3_ATTRIBUTE_ID (0x0233)
+#define ZCL_DEBT_RECOVERY_COLLECTION_TIME_3_ATTRIBUTE_ID (0x0234)
+#define ZCL_DEBT_RECOVERY_FREQUENCY_3_ATTRIBUTE_ID (0x0236)
+#define ZCL_DEBT_RECOVERY_AMOUNT_3_ATTRIBUTE_ID (0x0237)
+#define ZCL_DEBT_RECOVERY_TOP_UP_PERCENTAGE_3_ATTRIBUTE_ID (0x0239)
+#define ZCL_PREPAYMENT_ALARM_STATUS_ATTRIBUTE_ID (0x0400)
+#define ZCL_PREPAY_GENERIC_ALARM_MASK_ATTRIBUTE_ID (0x0401)
+#define ZCL_PREPAY_SWITCH_ALARM_MASK_ATTRIBUTE_ID (0x0402)
+#define ZCL_PREPAY_EVENT_ALARM_MASK_ATTRIBUTE_ID (0x0403)
+#define ZCL_HISTORICAL_COST_CONSUMPTION_FORMATTING_ATTRIBUTE_ID (0x0500)
+#define ZCL_CONSUMPTION_UNIT_OF_MEASUREMENT_ATTRIBUTE_ID (0x0501)
+#define ZCL_CURRENCY_SCALING_FACTOR_ATTRIBUTE_ID (0x0502)
+#define ZCL_PREPAYMANT_CURRENCY_ATTRIBUTE_ID (0x0503)
+#define ZCL_CURRENT_DAY_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x051C)
+#define ZCL_CURRENT_DAY_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x051D)
+#define ZCL_PREVIOUS_DAY_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x051E)
+#define ZCL_PREVIOUS_DAY_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x051F)
+#define ZCL_PREVIOUS_DAY_2_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0520)
+#define ZCL_PREVIOUS_DAY_2_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0521)
+#define ZCL_PREVIOUS_DAY_3_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0522)
+#define ZCL_PREVIOUS_DAY_3_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0523)
+#define ZCL_PREVIOUS_DAY_4_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0524)
+#define ZCL_PREVIOUS_DAY_4_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0525)
+#define ZCL_PREVIOUS_DAY_5_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0526)
+#define ZCL_PREVIOUS_DAY_5_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0527)
+#define ZCL_PREVIOUS_DAY_6_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0528)
+#define ZCL_PREVIOUS_DAY_6_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0529)
+#define ZCL_PREVIOUS_DAY_7_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x052A)
+#define ZCL_PREVIOUS_DAY_7_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x052B)
+#define ZCL_PREVIOUS_DAY_8_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x052C)
+#define ZCL_PREVIOUS_DAY_8_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x052D)
+#define ZCL_CURRENT_WEEK_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0530)
+#define ZCL_CURRENT_WEEK_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0531)
+#define ZCL_PREVIOUS_WEEK_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0532)
+#define ZCL_PREVIOUS_WEEK_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0533)
+#define ZCL_PREVIOUS_WEEK_2_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0534)
+#define ZCL_PREVIOUS_WEEK_2_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0535)
+#define ZCL_PREVIOUS_WEEK_3_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0536)
+#define ZCL_PREVIOUS_WEEK_3_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0537)
+#define ZCL_PREVIOUS_WEEK_4_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0538)
+#define ZCL_PREVIOUS_WEEK_4_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0539)
+#define ZCL_PREVIOUS_WEEK_5_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x053A)
+#define ZCL_PREVIOUS_WEEK_5_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x053B)
+#define ZCL_CURRENT_MONTH_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0540)
+#define ZCL_CURRENT_MONTH_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0541)
+#define ZCL_PREVIOUS_MONTH_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0542)
+#define ZCL_PREVIOUS_MONTH_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0543)
+#define ZCL_PREVIOUS_MONTH_2_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0544)
+#define ZCL_PREVIOUS_MONTH_2_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0545)
+#define ZCL_PREVIOUS_MONTH_3_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0546)
+#define ZCL_PREVIOUS_MONTH_3_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0547)
+#define ZCL_PREVIOUS_MONTH_4_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0548)
+#define ZCL_PREVIOUS_MONTH_4_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0549)
+#define ZCL_PREVIOUS_MONTH_5_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x054A)
+#define ZCL_PREVIOUS_MONTH_5_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x054B)
+#define ZCL_PREVIOUS_MONTH_6_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x054C)
+#define ZCL_PREVIOUS_MONTH_6_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x054D)
+#define ZCL_PREVIOUS_MONTH_7_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x054E)
+#define ZCL_PREVIOUS_MONTH_7_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x054F)
+#define ZCL_PREVIOUS_MONTH_8_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0550)
+#define ZCL_PREVIOUS_MONTH_8_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0551)
+#define ZCL_PREVIOUS_MONTH_9_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0552)
+#define ZCL_PREVIOUS_MONTH_9_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0553)
+#define ZCL_PREVIOUS_MONTH_10_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0554)
+#define ZCL_PREVIOUS_MONTH_10_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0555)
+#define ZCL_PREVIOUS_MONTH_11_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0556)
+#define ZCL_PREVIOUS_MONTH_11_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0557)
+#define ZCL_PREVIOUS_MONTH_12_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x0558)
+#define ZCL_PREVIOUS_MONTH_12_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x0559)
+#define ZCL_PREVIOUS_MONTH_13_COST_CONSUMPTION_DELIVERED_ATTRIBUTE_ID (0x055A)
+#define ZCL_PREVIOUS_MONTH_13_COST_CONSUMPTION_RECEIVED_ATTRIBUTE_ID (0x055B)
+#define ZCL_PREPAYMENT_HISTORICAL_FREEZE_TIME_ATTRIBUTE_ID (0x055C)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Energy Management
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_LOAD_CONTROL_STATE_ATTRIBUTE_ID (0x0000)
+#define ZCL_CURRENT_EVENT_ID_ATTRIBUTE_ID (0x0001)
+#define ZCL_CURRENT_EVENT_STATUS_ATTRIBUTE_ID (0x0002)
+#define ZCL_CONFORMANCE_LEVEL_ATTRIBUTE_ID (0x0003)
+#define ZCL_MINIMUM_OFF_TIME_ATTRIBUTE_ID (0x0004)
+#define ZCL_MINIMUM_ON_TIME_ATTRIBUTE_ID (0x0005)
+#define ZCL_MINIMUM_CYCLE_PERIOD_ATTRIBUTE_ID (0x0006)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Calendar
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_AUXILIARY_SWITCH_1_LABEL_ATTRIBUTE_ID (0x0000)
+#define ZCL_AUXILIARY_SWITCH_2_LABEL_ATTRIBUTE_ID (0x0001)
+#define ZCL_AUXILIARY_SWITCH_3_LABEL_ATTRIBUTE_ID (0x0002)
+#define ZCL_AUXILIARY_SWITCH_4_LABEL_ATTRIBUTE_ID (0x0003)
+#define ZCL_AUXILIARY_SWITCH_5_LABEL_ATTRIBUTE_ID (0x0004)
+#define ZCL_AUXILIARY_SWITCH_6_LABEL_ATTRIBUTE_ID (0x0005)
+#define ZCL_AUXILIARY_SWITCH_7_LABEL_ATTRIBUTE_ID (0x0006)
+#define ZCL_AUXILIARY_SWITCH_8_LABEL_ATTRIBUTE_ID (0x0007)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Device Management
+
+// Client attributes
+#define ZCL_PROVIDER_ID_CLIENT_ATTRIBUTE_ID (0x0000)
+#define ZCL_RECEIVED_PROVIDER_ID_CLIENT_ATTRIBUTE_ID (0x0010)
+#define ZCL_TOU_TARIFF_ACTIVATION_ATTRIBUTE_ID (0x0100)
+#define ZCL_BLOCK_TARIFF_ACTIVATED_ATTRIBUTE_ID (0x0101)
+#define ZCL_BLOCK_TOU_TARIFF_ACTIVATED_ATTRIBUTE_ID (0x0102)
+#define ZCL_SINGLE_TARIFF_RATE_ACTIVATED_ATTRIBUTE_ID (0x0103)
+#define ZCL_ASYNCHRONOUS_BILLING_OCCURRED_ATTRIBUTE_ID (0x0104)
+#define ZCL_SYNCHRONOUS_BILLING_OCCURRED_ATTRIBUTE_ID (0x0105)
+#define ZCL_TARIFF_NOT_SUPPORTED_ATTRIBUTE_ID (0x0106)
+#define ZCL_PRICE_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0107)
+#define ZCL_CURRENCY_CHANGE_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x0108)
+#define ZCL_CURRENCY_CHANGE_PASSIVE_UPDATED_ATTRIBUTE_ID (0x0109)
+#define ZCL_PRICE_MATRIX_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x010A)
+#define ZCL_PRICE_MATRIX_PASSIVE_UPDATED_ATTRIBUTE_ID (0x010B)
+#define ZCL_TARIFF_CHANGE_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x010C)
+#define ZCL_TARIFF_CHANGE_PASSIVE_UPDATED_ATTRIBUTE_ID (0x010D)
+#define ZCL_PUBLISH_PRICE_RECEIVED_ATTRIBUTE_ID (0x01B0)
+#define ZCL_PUBLISH_PRICE_ACTIONED_ATTRIBUTE_ID (0x01B1)
+#define ZCL_PUBLISH_PRICE_CANCELLED_ATTRIBUTE_ID (0x01B2)
+#define ZCL_PUBLISH_PRICE_REJECTED_ATTRIBUTE_ID (0x01B3)
+#define ZCL_PUBLISH_TARIFF_INFO_RECEIVED_ATTRIBUTE_ID (0x01B4)
+#define ZCL_PUBLISH_TARIFF_INFO_ACTIONED_ATTRIBUTE_ID (0x01B5)
+#define ZCL_PUBLISH_TARIFF_INFO_CANCELLED_ATTRIBUTE_ID (0x01B6)
+#define ZCL_PUBLISH_TARIFF_INFO_REJECTED_ATTRIBUTE_ID (0x01B7)
+#define ZCL_PUBLISH_PRICE_MATRIX_RECEIVED_ATTRIBUTE_ID (0x01B8)
+#define ZCL_PUBLISH_PRICE_MATRIX_ACTIONED_ATTRIBUTE_ID (0x01B9)
+#define ZCL_PUBLISH_PRICE_MATRIX_CANCELLED_ATTRIBUTE_ID (0x01BA)
+#define ZCL_PUBLISH_PRICE_MATRIX_REJECTED_ATTRIBUTE_ID (0x01BB)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_RECEIVED_ATTRIBUTE_ID (0x01BC)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_ACTIONED_ATTRIBUTE_ID (0x01BD)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_CANCELLED_ATTRIBUTE_ID (0x01BE)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_REJECTED_ATTRIBUTE_ID (0x01BF)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_RECEIVED_ATTRIBUTE_ID (0x01C0)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_ACTIONED_ATTRIBUTE_ID (0x01C1)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_CANCELLED_ATTRIBUTE_ID (0x01C2)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_REJECTED_ATTRIBUTE_ID (0x01C3)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_RECEIVED_ATTRIBUTE_ID (0x01C4)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_ACTIONED_ATTRIBUTE_ID (0x01C5)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_CANCELLED_ATTRIBUTE_ID (0x01C6)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_REJECTED_ATTRIBUTE_ID (0x01C7)
+#define ZCL_PUBLISH_CO2_VALUE_RECEIVED_ATTRIBUTE_ID (0x01C8)
+#define ZCL_PUBLISH_CO2_VALUE_ACTIONED_ATTRIBUTE_ID (0x01C9)
+#define ZCL_PUBLISH_CO2_VALUE_CANCELLED_ATTRIBUTE_ID (0x01CA)
+#define ZCL_PUBLISH_CO2_VALUE_REJECTED_ATTRIBUTE_ID (0x01CB)
+#define ZCL_PUBLISH_CPP_EVENT_RECEIVED_ATTRIBUTE_ID (0x01CC)
+#define ZCL_PUBLISH_CPP_EVENT_ACTIONED_ATTRIBUTE_ID (0x01CD)
+#define ZCL_PUBLISH_CPP_EVENT_CANCELLED_ATTRIBUTE_ID (0x01CE)
+#define ZCL_PUBLISH_CPP_EVENT_REJECTED_ATTRIBUTE_ID (0x01CF)
+#define ZCL_PUBLISH_TIER_LABELS_RECEIVED_ATTRIBUTE_ID (0x01D0)
+#define ZCL_PUBLISH_TIER_LABELS_ACTIONED_ATTRIBUTE_ID (0x01D1)
+#define ZCL_PUBLISH_TIER_LABELS_CANCELLED_ATTRIBUTE_ID (0x01D2)
+#define ZCL_PUBLISH_TIER_LABELS_REJECTED_ATTRIBUTE_ID (0x01D3)
+#define ZCL_PUBLISH_BILLING_PERIOD_RECEIVED_ATTRIBUTE_ID (0x01D4)
+#define ZCL_PUBLISH_BILLING_PERIOD_ACTIONED_ATTRIBUTE_ID (0x01D5)
+#define ZCL_PUBLISH_BILLING_PERIOD_CANCELLED_ATTRIBUTE_ID (0x01D6)
+#define ZCL_PUBLISH_BILLING_PERIOD_REJECTED_ATTRIBUTE_ID (0x01D7)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_RECEIVED_ATTRIBUTE_ID (0x01D8)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_ACTIONED_ATTRIBUTE_ID (0x01D9)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_CANCELLED_ATTRIBUTE_ID (0x01DA)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_REJECTED_ATTRIBUTE_ID (0x01DB)
+#define ZCL_PUBLISH_BLOCK_PERIOD_RECEIVED_ATTRIBUTE_ID (0x01DC)
+#define ZCL_PUBLISH_BLOCK_PERIOD_ACTIONED_ATTRIBUTE_ID (0x01DD)
+#define ZCL_PUBLISH_BLOCK_PERIOD_CANCELLED_ATTRIBUTE_ID (0x01DE)
+#define ZCL_PUBLISH_BLOCK_PERIOD_REJECTED_ATTRIBUTE_ID (0x01DF)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_RECEIVED_ATTRIBUTE_ID (0x01E0)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_ACTIONED_ATTRIBUTE_ID (0x01E1)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_CANCELLED_ATTRIBUTE_ID (0x01E2)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_INFO_REJECTED_ATTRIBUTE_ID (0x01E3)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_RECEIVED_ATTRIBUTE_ID (0x01E4)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_ACTIONED_ATTRIBUTE_ID (0x01E5)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_CANCELLED_ATTRIBUTE_ID (0x01E6)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_REJECTED_ATTRIBUTE_ID (0x01E7)
+#define ZCL_CHECK_METER_ATTRIBUTE_ID (0x0200)
+#define ZCL_LOW_BATTERY_ATTRIBUTE_ID (0x0201)
+#define ZCL_TAMPER_DETECT_ATTRIBUTE_ID (0x0202)
+#define ZCL_DEVICE_MANAGEMENT_SUPPLY_STATUS_ATTRIBUTE_ID (0x0203)
+#define ZCL_SUPPLY_QUALITY_ATTRIBUTE_ID (0x0204)
+#define ZCL_LEAK_DETECT_ATTRIBUTE_ID (0x0205)
+#define ZCL_SERVICE_DISCONNECT_ATTRIBUTE_ID (0x0206)
+#define ZCL_REVERSE_FLOW_GENERAL_ATTRIBUTE_ID (0x0207)
+#define ZCL_METER_COVER_REMOVED_ATTRIBUTE_ID (0x0208)
+#define ZCL_METER_COVER_CLOSED_ATTRIBUTE_ID (0x0209)
+#define ZCL_STRONG_MAGNETIC_FIELD_ATTRIBUTE_ID (0x020A)
+#define ZCL_NO_STRONG_MAGNETIC_FIELD_ATTRIBUTE_ID (0x020B)
+#define ZCL_BATTERY_FAILURE_ATTRIBUTE_ID (0x020C)
+#define ZCL_PROGRAM_MEMORY_ERROR_ATTRIBUTE_ID (0x020D)
+#define ZCL_RAM_ERROR_ATTRIBUTE_ID (0x020E)
+#define ZCL_NV_MEMORY_ERROR_ATTRIBUTE_ID (0x020F)
+#define ZCL_LOW_VOLTAGE_L1_ATTRIBUTE_ID (0x0210)
+#define ZCL_HIGH_VOLTAGE_L1_ATTRIBUTE_ID (0x0211)
+#define ZCL_LOW_VOLTAGE_L2_ATTRIBUTE_ID (0x0212)
+#define ZCL_HIGH_VOLTAGE_L2_ATTRIBUTE_ID (0x0213)
+#define ZCL_LOW_VOLTAGE_L3_ATTRIBUTE_ID (0x0214)
+#define ZCL_HIGH_VOLTAGE_L3_ATTRIBUTE_ID (0x0215)
+#define ZCL_OVER_CURRENT_L1_ATTRIBUTE_ID (0x0216)
+#define ZCL_OVER_CURRENT_L2_ATTRIBUTE_ID (0x0217)
+#define ZCL_OVER_CURRENT_L3_ATTRIBUTE_ID (0x0218)
+#define ZCL_FREQUENCY_TOO_LOW_L1_ATTRIBUTE_ID (0x0219)
+#define ZCL_FREQUENCY_TOO_HIGH_L1_ATTRIBUTE_ID (0x021A)
+#define ZCL_FREQUENCY_TOO_LOW_L2_ATTRIBUTE_ID (0x021B)
+#define ZCL_FREQUENCY_TOO_HIGH_L2_ATTRIBUTE_ID (0x021C)
+#define ZCL_FREQUENCY_TOO_LOW_L3_ATTRIBUTE_ID (0x021D)
+#define ZCL_FREQUENCY_TOO_HIGH_L3_ATTRIBUTE_ID (0x021E)
+#define ZCL_GROUND_FAULT_ATTRIBUTE_ID (0x021F)
+#define ZCL_ELECTRIC_TAMPER_DETECT_ATTRIBUTE_ID (0x0220)
+#define ZCL_INCORRECT_POLARITY_ATTRIBUTE_ID (0x0221)
+#define ZCL_CURRENT_NO_VOLTAGE_ATTRIBUTE_ID (0x0222)
+#define ZCL_UNDER_VOLTAGE_ATTRIBUTE_ID (0x0223)
+#define ZCL_OVER_VOLTAGE_ATTRIBUTE_ID (0x0224)
+#define ZCL_NORMAL_VOLTAGE_ATTRIBUTE_ID (0x0225)
+#define ZCL_PF_BELOW_THRESHOLD_ATTRIBUTE_ID (0x0226)
+#define ZCL_PF_ABOVE_THRESHOLD_ATTRIBUTE_ID (0x0227)
+#define ZCL_TERMINAL_COVER_REMOVED_ATTRIBUTE_ID (0x0228)
+#define ZCL_TERMINAL_COVER_CLOSED_ATTRIBUTE_ID (0x0229)
+#define ZCL_BURST_DETECT_ATTRIBUTE_ID (0x0230)
+#define ZCL_PRESSURE_TOO_LOW_ATTRIBUTE_ID (0x0231)
+#define ZCL_PRESSURE_TOO_HIGH_ATTRIBUTE_ID (0x0232)
+#define ZCL_FLOW_SENSOR_COMMUNICATION_ERROR_ATTRIBUTE_ID (0x0233)
+#define ZCL_FLOW_SENSOR_MEASUREMENT_FAULT_ATTRIBUTE_ID (0x0234)
+#define ZCL_FLOW_SENSOR_REVERSE_FLOW_ATTRIBUTE_ID (0x0235)
+#define ZCL_FLOW_SENSOR_AIR_DETECT_ATTRIBUTE_ID (0x0236)
+#define ZCL_PIPE_EMPTY_ATTRIBUTE_ID (0x0237)
+#define ZCL_INLET_TEMP_SENSOR_FAULT_ATTRIBUTE_ID (0x0250)
+#define ZCL_OUTLET_TEMP_SENSOR_FAULT_ATTRIBUTE_ID (0x0251)
+#define ZCL_REVERSE_FLOW_ATTRIBUTE_ID (0x0260)
+#define ZCL_TILT_TAMPER_ATTRIBUTE_ID (0x0261)
+#define ZCL_BATTERY_COVER_REMOVED_ATTRIBUTE_ID (0x0262)
+#define ZCL_BATTERY_COVER_CLOSED_ATTRIBUTE_ID (0x0263)
+#define ZCL_EXCESS_FLOW_ATTRIBUTE_ID (0x0264)
+#define ZCL_TILT_TAMPER_ENABLED_ATTRIBUTE_ID (0x0265)
+#define ZCL_MEASUREMENT_SYSTEM_ERROR_ATTRIBUTE_ID (0x0270)
+#define ZCL_WATCHDOG_ERROR_ATTRIBUTE_ID (0x0271)
+#define ZCL_SUPPLY_DISCONNECT_FAILURE_ATTRIBUTE_ID (0x0272)
+#define ZCL_SUPPLY_CONNECT_FAILURE_ATTRIBUTE_ID (0x0273)
+#define ZCL_MEASUREMENT_SOFTWARE_CHANGED_ATTRIBUTE_ID (0x0274)
+#define ZCL_DST_ENABLED_ATTRIBUTE_ID (0x0275)
+#define ZCL_DST_DISABLED_ATTRIBUTE_ID (0x0276)
+#define ZCL_CLOCK_ADJ_BACKWARD_ATTRIBUTE_ID (0x0277)
+#define ZCL_CLOCK_ADJ_FORWARD_ATTRIBUTE_ID (0x0278)
+#define ZCL_CLOCK_INVALID_ATTRIBUTE_ID (0x0279)
+#define ZCL_COMMUNICATION_ERROR_HAN_ATTRIBUTE_ID (0x027A)
+#define ZCL_COMMUNICATION_OK_HAN_ATTRIBUTE_ID (0x027B)
+#define ZCL_METER_FRAUD_ATTEMPT_ATTRIBUTE_ID (0x027C)
+#define ZCL_POWER_LOSS_ATTRIBUTE_ID (0x027D)
+#define ZCL_UNUSUAL_HAN_TRAFFIC_ATTRIBUTE_ID (0x027E)
+#define ZCL_UNEXPECTED_CLOCK_CHANGE_ATTRIBUTE_ID (0x027F)
+#define ZCL_COMMS_USING_UNAUTHENTICATED_COMPONENT_ATTRIBUTE_ID (0x0280)
+#define ZCL_METERING_ERROR_REG_CLEAR_ATTRIBUTE_ID (0x0281)
+#define ZCL_METERING_ALARM_REG_CLEAR_ATTRIBUTE_ID (0x0282)
+#define ZCL_UNEXPECTED_HW_RESET_ATTRIBUTE_ID (0x0283)
+#define ZCL_UNEXPECTED_PROGRAM_EXECUTION_ATTRIBUTE_ID (0x0284)
+#define ZCL_LIMIT_THRESHOLD_EXCEEDED_ATTRIBUTE_ID (0x0285)
+#define ZCL_LIMIT_THRESHOLD_OK_ATTRIBUTE_ID (0x0286)
+#define ZCL_LIMIT_THRESHOLD_CHANGED_ATTRIBUTE_ID (0x0287)
+#define ZCL_MAXIMUM_DEMAND_EXCEEDED_ATTRIBUTE_ID (0x0288)
+#define ZCL_PROFILE_CLEARED_ATTRIBUTE_ID (0x0289)
+#define ZCL_LOAD_PROFILE_CLEARED_ATTRIBUTE_ID (0x028A)
+#define ZCL_BATTERY_WARN_ATTRIBUTE_ID (0x028B)
+#define ZCL_WRONG_SIGNATURE_ATTRIBUTE_ID (0x028C)
+#define ZCL_NO_SIGNATURE_ATTRIBUTE_ID (0x028D)
+#define ZCL_SIGNATURE_NOT_VALID_ATTRIBUTE_ID (0x028E)
+#define ZCL_UNAUTHORISE_ACTION_FROM_HAN_ATTRIBUTE_ID (0x028F)
+#define ZCL_FAST_POLLING_START_ATTRIBUTE_ID (0x0290)
+#define ZCL_FAST_POLLING_END_ATTRIBUTE_ID (0x0291)
+#define ZCL_METER_REPORTING_INTERVAL_CHANGED_ATTRIBUTE_ID (0x0292)
+#define ZCL_DISCONNECT_TO_LOAD_LIMIT_ATTRIBUTE_ID (0x0293)
+#define ZCL_METER_SUPPLY_STATUS_REGISTER_CHANGED_ATTRIBUTE_ID (0x0294)
+#define ZCL_METER_ALARM_STATUS_REGISTER_CHANGED_ATTRIBUTE_ID (0x0295)
+#define ZCL_EXTENDED_METER_ALARM_STATUS_REGISTER_CHANGED_ATTRIBUTE_ID (0x0296)
+#define ZCL_DATA_ACCESS_VIA_LOCAL_PORT_ATTRIBUTE_ID (0x0297)
+#define ZCL_CONFIGURE_MIRROR_SUCCESS_ATTRIBUTE_ID (0x0298)
+#define ZCL_CONFIGURE_MIRROR_FAILURE_ATTRIBUTE_ID (0x0299)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAG_SCHEME_SUCCESS_ATTRIBUTE_ID (0x029A)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAG_SCHEME_FAILURE_ATTRIBUTE_ID (0x029B)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAGS_SUCCESS_ATTRIBUTE_ID (0x029C)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAGS_FAILURE_ATTRIBUTE_ID (0x029D)
+#define ZCL_STAY_AWAKE_REQUEST_HAN_ATTRIBUTE_ID (0x029E)
+#define ZCL_STAY_AWAKE_REQUEST_WAN_ATTRIBUTE_ID (0x029F)
+#define ZCL_MANUFACTURER_SPECIFIC_A_ATTRIBUTE_ID (0x02B0)
+#define ZCL_MANUFACTURER_SPECIFIC_B_ATTRIBUTE_ID (0x02B1)
+#define ZCL_MANUFACTURER_SPECIFIC_C_ATTRIBUTE_ID (0x02B2)
+#define ZCL_MANUFACTURER_SPECIFIC_D_ATTRIBUTE_ID (0x02B3)
+#define ZCL_MANUFACTURER_SPECIFIC_E_ATTRIBUTE_ID (0x02B4)
+#define ZCL_MANUFACTURER_SPECIFIC_F_ATTRIBUTE_ID (0x02B5)
+#define ZCL_MANUFACTURER_SPECIFIC_G_ATTRIBUTE_ID (0x02B6)
+#define ZCL_MANUFACTURER_SPECIFIC_H_ATTRIBUTE_ID (0x02B7)
+#define ZCL_MANUFACTURER_SPECIFIC_I_ATTRIBUTE_ID (0x02B8)
+#define ZCL_GET_PROFILE_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02C0)
+#define ZCL_GET_PROFILE_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02C1)
+#define ZCL_GET_PROFILE_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02C2)
+#define ZCL_GET_PROFILE_COMMAND_REJECTED_ATTRIBUTE_ID (0x02C3)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02C4)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02C5)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02C6)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_REJECTED_ATTRIBUTE_ID (0x02C7)
+#define ZCL_MIRROR_REMOVED_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02C8)
+#define ZCL_MIRROR_REMOVED_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02C9)
+#define ZCL_MIRROR_REMOVED_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02CA)
+#define ZCL_MIRROR_REMOVED_COMMAND_REJECTED_ATTRIBUTE_ID (0x02CB)
+#define ZCL_GET_SNAPSHOT_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02CC)
+#define ZCL_GET_SNAPSHOT_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02CD)
+#define ZCL_GET_SNAPSHOT_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02CE)
+#define ZCL_GET_SNAPSHOT_COMMAND_REJECTED_ATTRIBUTE_ID (0x02CF)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02D0)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02D1)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02D2)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_REJECTED_ATTRIBUTE_ID (0x02D3)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02D4)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02D5)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02D6)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_REJECTED_ATTRIBUTE_ID (0x02D7)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02D8)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02D9)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02DA)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_REJECTED_ATTRIBUTE_ID (0x02DB)
+#define ZCL_START_SAMPLING_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02DC)
+#define ZCL_START_SAMPLING_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02DD)
+#define ZCL_START_SAMPLING_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02DE)
+#define ZCL_START_SAMPLING_COMMAND_REJECTED_ATTRIBUTE_ID (0x02DF)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x02E0)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_ACTIONED_ATTRIBUTE_ID (0x02E1)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_CANCELLED_ATTRIBUTE_ID (0x02E2)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x02E3)
+#define ZCL_SUPPLY_ON_ATTRIBUTE_ID (0x02E4)
+#define ZCL_SUPPLY_ARMED_ATTRIBUTE_ID (0x02E5)
+#define ZCL_SUPPLY_OFF_ATTRIBUTE_ID (0x02E6)
+#define ZCL_DISCONNECTED_DUE_TO_TAMPER_DETECTED_ATTRIBUTE_ID (0x02E7)
+#define ZCL_MANUAL_DISCONNECT_ATTRIBUTE_ID (0x02E8)
+#define ZCL_MANUAL_CONNECT_ATTRIBUTE_ID (0x02E9)
+#define ZCL_REMOTE_DISCONNECTION_ATTRIBUTE_ID (0x02EA)
+#define ZCL_REMOTE_CONNECT_ATTRIBUTE_ID (0x02EB)
+#define ZCL_LOCAL_DISCONNECTION_ATTRIBUTE_ID (0x02EC)
+#define ZCL_LOCAL_CONNECT_ATTRIBUTE_ID (0x02ED)
+#define ZCL_CHANGE_SUPPLY_RECEIVED_ATTRIBUTE_ID (0x02EE)
+#define ZCL_CHANGE_SUPPLY_ACTIONED_ATTRIBUTE_ID (0x02EF)
+#define ZCL_CHANGE_SUPPLY_CANCELLED_ATTRIBUTE_ID (0x02F0)
+#define ZCL_CHANGE_SUPPLY_REJECTED_ATTRIBUTE_ID (0x02F1)
+#define ZCL_LOCAL_CHANGE_SUPPLY_RECEIVED_ATTRIBUTE_ID (0x02F2)
+#define ZCL_LOCAL_CHANGE_SUPPLY_ACTIONED_ATTRIBUTE_ID (0x02F3)
+#define ZCL_LOCAL_CHANGE_SUPPLY_CANCELLED_ATTRIBUTE_ID (0x02F4)
+#define ZCL_LOCAL_CHANGE_SUPPLY_REJECTED_ATTRIBUTE_ID (0x02F5)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_RECEIVED_ATTRIBUTE_ID (0x02F6)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_ACTIONED_ATTRIBUTE_ID (0x02F7)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_CANCELLED_ATTRIBUTE_ID (0x02F8)
+#define ZCL_PUBLISH_UNCONTROLLED_FLOW_THRESHOLD_REJECTED_ATTRIBUTE_ID (0x02F9)
+#define ZCL_MESSAGE_CONFIRMATION_SENT_ATTRIBUTE_ID (0x0300)
+#define ZCL_DISPLAY_MESSAGE_RECEIVED_ATTRIBUTE_ID (0x03C0)
+#define ZCL_DISPLAY_MESSAGE_ACTIONED_ATTRIBUTE_ID (0x03C1)
+#define ZCL_DISPLAY_MESSAGE_CANCELLED_ATTRIBUTE_ID (0x03C2)
+#define ZCL_DISPLAY_MESSAGE_REJECTED_ATTRIBUTE_ID (0x03C3)
+#define ZCL_CANCEL_MESSAGE_RECEIVED_ATTRIBUTE_ID (0x03C4)
+#define ZCL_CANCEL_MESSAGE_ACTIONED_ATTRIBUTE_ID (0x03C5)
+#define ZCL_CANCEL_MESSAGE_CANCELLED_ATTRIBUTE_ID (0x03C6)
+#define ZCL_CANCEL_MESSAGE_REJECTED_ATTRIBUTE_ID (0x03C7)
+#define ZCL_LOW_CREDIT_ATTRIBUTE_ID (0x0400)
+#define ZCL_NO_CREDIT_ATTRIBUTE_ID (0x0401)
+#define ZCL_CREDIT_EXHAUSTED_ATTRIBUTE_ID (0x0402)
+#define ZCL_EMERGENCY_CREDIT_ENABLED_ATTRIBUTE_ID (0x0403)
+#define ZCL_EMERGENCY_CREDIT_EXHAUSTED_ATTRIBUTE_ID (0x0404)
+#define ZCL_PREPAY_IHD_LOW_CREDIT_WARNING_ATTRIBUTE_ID (0x0405)
+#define ZCL_PHYSICAL_ATTACK_ON_THE_PREPAY_METER_ATTRIBUTE_ID (0x0420)
+#define ZCL_ELECTRONIC_ATTACK_ON_THE_PREPAY_METER_ATTRIBUTE_ID (0x0421)
+#define ZCL_DISCOUNT_APPLIED_ATTRIBUTE_ID (0x0422)
+#define ZCL_CREDIT_ADJUSTMENT_ATTRIBUTE_ID (0x0423)
+#define ZCL_CREDIT_ADJUST_FAIL_ATTRIBUTE_ID (0x0424)
+#define ZCL_DEBT_ADJUSTMENT_ATTRIBUTE_ID (0x0425)
+#define ZCL_DEBT_ADJUST_FAIL_ATTRIBUTE_ID (0x0426)
+#define ZCL_MODE_CHANGE_ATTRIBUTE_ID (0x0427)
+#define ZCL_TOPUP_CODE_ERROR_ATTRIBUTE_ID (0x0428)
+#define ZCL_TOPUP_ALREADY_USED_ATTRIBUTE_ID (0x0429)
+#define ZCL_TOPUP_CODE_INVALID_ATTRIBUTE_ID (0x042A)
+#define ZCL_TOPUP_ACCEPTED_VIA_REMOTE_ATTRIBUTE_ID (0x042B)
+#define ZCL_TOPUP_ACCEPTED_VIA_MANUAL_ENTRY_ATTRIBUTE_ID (0x042C)
+#define ZCL_FRIENDLY_CREDIT_IN_USE_ATTRIBUTE_ID (0x042D)
+#define ZCL_FRIENDLY_CREDIT_END_WARNING_ATTRIBUTE_ID (0x042E)
+#define ZCL_FRIENDLY_CREDIT_PERIOD_END_ATTRIBUTE_ID (0x042F)
+#define ZCL_PREPAY_ERROR_REG_CLEAR_ATTRIBUTE_ID (0x0430)
+#define ZCL_PREPAY_ALARM_REG_CLEAR_ATTRIBUTE_ID (0x0431)
+#define ZCL_PREPAY_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0432)
+#define ZCL_TOPUP_VALUE_TOO_LARGE_ATTRIBUTE_ID (0x0433)
+#define ZCL_MODE_CREDIT_2_PREPAY_ATTRIBUTE_ID (0x0441)
+#define ZCL_MODE_PREPAY_2_CREDIT_ATTRIBUTE_ID (0x0442)
+#define ZCL_MODE_DEFAULT_ATTRIBUTE_ID (0x0443)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_RECEIVED_ATTRIBUTE_ID (0x04C0)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_ACTIONED_ATTRIBUTE_ID (0x04C1)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_CANCELLED_ATTRIBUTE_ID (0x04C2)
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_REJECTED_ATTRIBUTE_ID (0x04C3)
+#define ZCL_CHANGE_DEBT_RECEIVED_ATTRIBUTE_ID (0x04C4)
+#define ZCL_CHANGE_DEBT_ACTIONED_ATTRIBUTE_ID (0x04C5)
+#define ZCL_CHANGE_DEBT_CANCELLED_ATTRIBUTE_ID (0x04C6)
+#define ZCL_CHANGE_DEBT_REJECTED_ATTRIBUTE_ID (0x04C7)
+#define ZCL_EMERGENCY_CREDIT_SETUP_RECEIVED_ATTRIBUTE_ID (0x04C8)
+#define ZCL_EMERGENCY_CREDIT_SETUP_ACTIONED_ATTRIBUTE_ID (0x04C9)
+#define ZCL_EMERGENCY_CREDIT_SETUP_CANCELLED_ATTRIBUTE_ID (0x04CA)
+#define ZCL_EMERGENCY_CREDIT_SETUP_REJECTED_ATTRIBUTE_ID (0x04CB)
+#define ZCL_CONSUMER_TOPUP_RECEIVED_ATTRIBUTE_ID (0x04CC)
+#define ZCL_CONSUMER_TOPUP_ACTIONED_ATTRIBUTE_ID (0x04CD)
+#define ZCL_CONSUMER_TOPUP_CANCELLED_ATTRIBUTE_ID (0x04CE)
+#define ZCL_CONSUMER_TOPUP_REJECTED_ATTRIBUTE_ID (0x04CF)
+#define ZCL_CREDIT_ADJUSTMENT_RECEIVED_ATTRIBUTE_ID (0x04D0)
+#define ZCL_CREDIT_ADJUSTMENT_ACTIONED_ATTRIBUTE_ID (0x04D1)
+#define ZCL_CREDIT_ADJUSTMENT_CANCELLED_ATTRIBUTE_ID (0x04D2)
+#define ZCL_CREDIT_ADJUSTMENT_REJECTED_ATTRIBUTE_ID (0x04D3)
+#define ZCL_CHANGE_PAYMENT_MODE_RECEIVED_ATTRIBUTE_ID (0x04D4)
+#define ZCL_CHANGE_PAYMENT_MODE_ACTIONED_ATTRIBUTE_ID (0x04D5)
+#define ZCL_CHANGE_PAYMENT_MODE_CANCELLED_ATTRIBUTE_ID (0x04D6)
+#define ZCL_CHANGE_PAYMENT_MODE_REJECTED_ATTRIBUTE_ID (0x04D7)
+#define ZCL_GET_PREPAY_SNAPSHOT_RECEIVED_ATTRIBUTE_ID (0x04D8)
+#define ZCL_GET_PREPAY_SNAPSHOT_ACTIONED_ATTRIBUTE_ID (0x04D9)
+#define ZCL_GET_PREPAY_SNAPSHOT_CANCELLED_ATTRIBUTE_ID (0x04DA)
+#define ZCL_GET_PREPAY_SNAPSHOT_REJECTED_ATTRIBUTE_ID (0x04DB)
+#define ZCL_GET_TOPUP_LOG_RECEIVED_ATTRIBUTE_ID (0x04DC)
+#define ZCL_GET_TOPUP_LOG_ACTIONED_ATTRIBUTE_ID (0x04DD)
+#define ZCL_GET_TOPUP_LOG_CANCELLED_ATTRIBUTE_ID (0x04DE)
+#define ZCL_GET_TOPUP_LOG_REJECTED_ATTRIBUTE_ID (0x04DF)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_RECEIVED_ATTRIBUTE_ID (0x04E0)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_ACTIONED_ATTRIBUTE_ID (0x04E1)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_CANCELLED_ATTRIBUTE_ID (0x04E2)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_REJECTED_ATTRIBUTE_ID (0x04E3)
+#define ZCL_GET_DEBT_REPAY_LOG_RECEIVED_ATTRIBUTE_ID (0x04E4)
+#define ZCL_GET_DEBT_REPAY_LOG_ACTIONED_ATTRIBUTE_ID (0x04E5)
+#define ZCL_GET_DEBT_REPAY_LOG_CANCELLED_ATTRIBUTE_ID (0x04E6)
+#define ZCL_GET_DEBT_REPAY_LOG_REJECTED_ATTRIBUTE_ID (0x04E7)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_RECEIVED_ATTRIBUTE_ID (0x04E8)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_ACTIONED_ATTRIBUTE_ID (0x04E9)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_CANCELLED_ATTRIBUTE_ID (0x04EA)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_REJECTED_ATTRIBUTE_ID (0x04EB)
+#define ZCL_SET_OVERALL_DEBT_CAP_RECEIVED_ATTRIBUTE_ID (0x04EC)
+#define ZCL_SET_OVERALL_DEBT_CAP_ACTIONED_ATTRIBUTE_ID (0x04ED)
+#define ZCL_SET_OVERALL_DEBT_CAP_CANCELLED_ATTRIBUTE_ID (0x04EE)
+#define ZCL_SET_OVERALL_DEBT_CAP_REJECTED_ATTRIBUTE_ID (0x04EF)
+#define ZCL_CALENDAR_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0500)
+#define ZCL_CALENDAR_CHANGE_PASSIVE_ACTIVATED_ATTRIBUTE_ID (0x0501)
+#define ZCL_CALENDAR_CHANGE_PASSIVE_UPDATED_ATTRIBUTE_ID (0x0502)
+#define ZCL_PUBLISH_CALENDAR_RECEIVED_ATTRIBUTE_ID (0x05C0)
+#define ZCL_PUBLISH_CALENDAR_ACTIONED_ATTRIBUTE_ID (0x05C1)
+#define ZCL_PUBLISH_CALENDAR_CANCELLED_ATTRIBUTE_ID (0x05C2)
+#define ZCL_PUBLISH_CALENDAR_REJECTED_ATTRIBUTE_ID (0x05C3)
+#define ZCL_PUBLISH_DAY_PROFILE_RECEIVED_ATTRIBUTE_ID (0x05C4)
+#define ZCL_PUBLISH_DAY_PROFILE_ACTIONED_ATTRIBUTE_ID (0x05C5)
+#define ZCL_PUBLISH_DAY_PROFILE_CANCELLED_ATTRIBUTE_ID (0x05C6)
+#define ZCL_PUBLISH_DAY_PROFILE_REJECTED_ATTRIBUTE_ID (0x05C7)
+#define ZCL_PUBLISH_WEEK_PROFILE_RECEIVED_ATTRIBUTE_ID (0x05C8)
+#define ZCL_PUBLISH_WEEK_PROFILE_ACTIONED_ATTRIBUTE_ID (0x05C9)
+#define ZCL_PUBLISH_WEEK_PROFILE_CANCELLED_ATTRIBUTE_ID (0x05CA)
+#define ZCL_PUBLISH_WEEK_PROFILE_REJECTED_ATTRIBUTE_ID (0x05CB)
+#define ZCL_PUBLISH_SEASONS_RECEIVED_ATTRIBUTE_ID (0x05CC)
+#define ZCL_PUBLISH_SEASONS_ACTIONED_ATTRIBUTE_ID (0x05CD)
+#define ZCL_PUBLISH_SEASONS_CANCELLED_ATTRIBUTE_ID (0x05CE)
+#define ZCL_PUBLISH_SEASONS_REJECTED_ATTRIBUTE_ID (0x05CF)
+#define ZCL_PUBLISH_SPECIAL_DAYS_RECEIVED_ATTRIBUTE_ID (0x05D0)
+#define ZCL_PUBLISH_SPECIAL_DAYS_ACTIONED_ATTRIBUTE_ID (0x05D1)
+#define ZCL_PUBLISH_SPECIAL_DAYS_CANCELLED_ATTRIBUTE_ID (0x05D2)
+#define ZCL_PUBLISH_SPECIAL_DAYS_REJECTED_ATTRIBUTE_ID (0x05D3)
+#define ZCL_PASSWORD_1_CHANGE_ATTRIBUTE_ID (0x0600)
+#define ZCL_PASSWORD_2_CHANGE_ATTRIBUTE_ID (0x0601)
+#define ZCL_PASSWORD_3_CHANGE_ATTRIBUTE_ID (0x0602)
+#define ZCL_PASSWORD_4_CHANGE_ATTRIBUTE_ID (0x0603)
+#define ZCL_EVENT_LOG_CLEARED_ATTRIBUTE_ID (0x0604)
+#define ZCL_ZIGBEE_APS_TIMEOUT_ATTRIBUTE_ID (0x0610)
+#define ZCL_ZIGBEE_IEEE_TRANSMISSION_FAILURE_OVER_THRESHOLD_ATTRIBUTE_ID (0x0611)
+#define ZCL_ZIGBEE_IEEE_FRAME_CHECK_SEQUENCE_THRESHOLD_ATTRIBUTE_ID (0x0612)
+#define ZCL_ERROR_CERTIFICATE_ATTRIBUTE_ID (0x0613)
+#define ZCL_ERROR_SIGNATURE_ATTRIBUTE_ID (0x0614)
+#define ZCL_ERROR_PROGRAM_STORAGE_ATTRIBUTE_ID (0x0615)
+#define ZCL_PUBLISH_COT_RECEIVED_ATTRIBUTE_ID (0x06C0)
+#define ZCL_PUBLISH_COT_ACTIONED_ATTRIBUTE_ID (0x06C1)
+#define ZCL_PUBLISH_COT_CANCELLED_ATTRIBUTE_ID (0x06C2)
+#define ZCL_PUBLISH_COT_REJECTED_ATTRIBUTE_ID (0x06C3)
+#define ZCL_PUBLISH_COS_RECEIVED_ATTRIBUTE_ID (0x06C4)
+#define ZCL_PUBLISH_COS_ACTIONED_ATTRIBUTE_ID (0x06C5)
+#define ZCL_PUBLISH_COS_CANCELLED_ATTRIBUTE_ID (0x06C6)
+#define ZCL_PUBLISH_COS_REJECTED_ATTRIBUTE_ID (0x06C7)
+#define ZCL_CHANGE_PASSWORD_RECEIVED_ATTRIBUTE_ID (0x06C8)
+#define ZCL_CHANGE_PASSWORD_ACTIONED_ATTRIBUTE_ID (0x06C9)
+#define ZCL_CHANGE_PASSWORD_CANCELLED_ATTRIBUTE_ID (0x06CA)
+#define ZCL_CHANGE_PASSWORD_REJECTED_ATTRIBUTE_ID (0x06CB)
+#define ZCL_SET_EVENT_CONFIGURATION_RECEIVED_ATTRIBUTE_ID (0x06CC)
+#define ZCL_SET_EVENT_CONFIGURATION_ACTIONED_ATTRIBUTE_ID (0x06CD)
+#define ZCL_SET_EVENT_CONFIGURATION_CANCELLED_ATTRIBUTE_ID (0x06CE)
+#define ZCL_SET_EVENT_CONFIGURATION_REJECTED_ATTRIBUTE_ID (0x06CF)
+#define ZCL_UPDATE_SITE_ID_RECEIVED_ATTRIBUTE_ID (0x06D0)
+#define ZCL_UPDATE_SITE_ID_ACTIONED_ATTRIBUTE_ID (0x06D1)
+#define ZCL_UPDATE_SITE_ID_CANCELLED_ATTRIBUTE_ID (0x06D2)
+#define ZCL_UPDATE_SITE_ID_REJECTED_ATTRIBUTE_ID (0x06D3)
+#define ZCL_UPDATE_CIN_RECEIVED_ATTRIBUTE_ID (0x06D4)
+#define ZCL_UPDATE_CIN_ACTIONED_ATTRIBUTE_ID (0x06D5)
+#define ZCL_UPDATE_CIN_CANCELLED_ATTRIBUTE_ID (0x06D6)
+#define ZCL_UPDATE_CIN_REJECTED_ATTRIBUTE_ID (0x06D7)
+#define ZCL_TUNNELING_CLUSTER_NOT_FOUND_ATTRIBUTE_ID (0x0700)
+#define ZCL_UNSUPPORTED_PROTOCOL_ATTRIBUTE_ID (0x0701)
+#define ZCL_INCORRECT_PROTOCOL_ATTRIBUTE_ID (0x0702)
+#define ZCL_REQUEST_TUNNEL_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C0)
+#define ZCL_REQUEST_TUNNEL_COMMAND_REJECTED_ATTRIBUTE_ID (0x07C1)
+#define ZCL_REQUEST_TUNNEL_COMMAND_GENERATED_ATTRIBUTE_ID (0x07C2)
+#define ZCL_CLOSE_TUNNEL_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C3)
+#define ZCL_CLOSE_TUNNEL_COMMAND_REJECTED_ATTRIBUTE_ID (0x07C4)
+#define ZCL_CLOSE_TUNNEL_COMMAND_GENERATED_ATTRIBUTE_ID (0x07C5)
+#define ZCL_TRANSFER_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C6)
+#define ZCL_TRANSFER_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x07C7)
+#define ZCL_TRANSFER_DATA_COMMAND_GENERATED_ATTRIBUTE_ID (0x07C8)
+#define ZCL_TRANSFER_DATA_ERROR_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07C9)
+#define ZCL_TRANSFER_DATA_ERROR_COMMAND_REJECTED_ATTRIBUTE_ID (0x07CA)
+#define ZCL_TRANSFER_DATA_ERROR_COMMAND_GENERATED_ATTRIBUTE_ID (0x07CB)
+#define ZCL_ACK_TRANSFER_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07CC)
+#define ZCL_ACK_TRANSFER_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x07CD)
+#define ZCL_ACK_TRANSFER_DATA_COMMAND_GENERATED_ATTRIBUTE_ID (0x07CE)
+#define ZCL_READY_DATA_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07CF)
+#define ZCL_READY_DATA_COMMAND_REJECTED_ATTRIBUTE_ID (0x07D0)
+#define ZCL_READY_DATA_COMMAND_GENERATED_ATTRIBUTE_ID (0x07D1)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_RECEIVED_ATTRIBUTE_ID (0x07D2)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_REJECTED_ATTRIBUTE_ID (0x07D3)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_GENERATED_ATTRIBUTE_ID (0x07D4)
+#define ZCL_FIRMWARE_READY_FOR_ACTIVATION_ATTRIBUTE_ID (0x0800)
+#define ZCL_FIRMWARE_ACTIVATED_ATTRIBUTE_ID (0x0801)
+#define ZCL_FIRMWARE_ACTIVATION_FAILURE_ATTRIBUTE_ID (0x0802)
+#define ZCL_PATCH_READY_FOR_ACTIVATION_ATTRIBUTE_ID (0x0803)
+#define ZCL_PATCH_ACTIVATED_ATTRIBUTE_ID (0x0804)
+#define ZCL_PATCH_FAILURE_ATTRIBUTE_ID (0x0805)
+#define ZCL_IMAGE_NOTIFY_COMMAND_RECEIVED_ATTRIBUTE_ID (0x08C0)
+#define ZCL_IMAGE_NOTIFY_COMMAND_REJECTED_ATTRIBUTE_ID (0x08C1)
+#define ZCL_QUERY_NEXT_IMAGE_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C2)
+#define ZCL_QUERY_NEXT_IMAGE_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08C3)
+#define ZCL_QUERY_NEXT_IMAGE_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08C4)
+#define ZCL_IMAGE_BLOCK_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C5)
+#define ZCL_IMAGE_PAGE_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C6)
+#define ZCL_IMAGE_BLOCK_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08C7)
+#define ZCL_IMAGE_BLOCK_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08C8)
+#define ZCL_UPGRADE_END_REQUEST_GENERATED_ATTRIBUTE_ID (0x08C9)
+#define ZCL_UPGRADE_END_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08CA)
+#define ZCL_UPGRADE_END_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08CB)
+#define ZCL_QUERY_SPECIFIC_FILE_REQUEST_GENERATED_ATTRIBUTE_ID (0x08CC)
+#define ZCL_QUERY_SPECIFIC_FILE_RESPONSE_RECEIVED_ATTRIBUTE_ID (0x08CD)
+#define ZCL_QUERY_SPECIFIC_FILE_RESPONSE_REJECTED_ATTRIBUTE_ID (0x08CE)
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_PROVIDER_ID_SERVER_ATTRIBUTE_ID (0x0100)
+#define ZCL_PROVIDER_NAME_ATTRIBUTE_ID (0x0101)
+#define ZCL_PROVIDER_CONTACT_DETAILS_ATTRIBUTE_ID (0x0102)
+#define ZCL_PROPOSED_PROVIDER_ID_ATTRIBUTE_ID (0x0110)
+#define ZCL_PROPOSED_PROVIDER_NAME_ATTRIBUTE_ID (0x0111)
+#define ZCL_PROPOSED_PROVIDER_CHANGE_DATE_TIME_ATTRIBUTE_ID (0x0112)
+#define ZCL_PROPOSED_PROVIDER_CHANGE_CONTROL_ATTRIBUTE_ID (0x0113)
+#define ZCL_RECEIVED_PROVIDER_ID_SERVER_ATTRIBUTE_ID (0x0120)
+#define ZCL_RECEIVED_PROVIDER_NAME_ATTRIBUTE_ID (0x0121)
+#define ZCL_RECEIVED_PROVIDER_CONTACT_DETAILS_ATTRIBUTE_ID (0x0122)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_ID_ATTRIBUTE_ID (0x0130)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_NAME_ATTRIBUTE_ID (0x0131)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_CHANGE_DATE_TIME_ATTRIBUTE_ID (0x0132)
+#define ZCL_RECEIVED_PROPOSED_PROVIDER_CHANGE_CONTROL_ATTRIBUTE_ID (0x0133)
+#define ZCL_CHANGE_OF_TENANCY_UPDATE_DATE_TIME_ATTRIBUTE_ID (0x0200)
+#define ZCL_PROPOSED_TENANCY_CHANGE_CONTROL_ATTRIBUTE_ID (0x0201)
+#define ZCL_WAN_STATUS_ATTRIBUTE_ID (0x0300)
+#define ZCL_LOW_MEDIUM_THRESHOLD_ATTRIBUTE_ID (0x0400)
+#define ZCL_MEDIUM_HIGH_THRESHOLD_ATTRIBUTE_ID (0x0401)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Events
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: MDU Pairing
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Sub-GHz
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_SUB_GHZ_CLUSTER_CHANNEL_CHANGE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_28_CHANNEL_MASK_ATTRIBUTE_ID (0x0001)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_29_CHANNEL_MASK_ATTRIBUTE_ID (0x0002)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_30_CHANNEL_MASK_ATTRIBUTE_ID (0x0003)
+#define ZCL_SUB_GHZ_CLUSTER_PAGE_31_CHANNEL_MASK_ATTRIBUTE_ID (0x0004)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Key Establishment
+
+// Client attributes
+#define ZCL_KEY_ESTABLISHMENT_SUITE_CLIENT_ATTRIBUTE_ID (0x0000)
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_KEY_ESTABLISHMENT_SUITE_SERVER_ATTRIBUTE_ID (0x0000)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Information
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_NODE_DESCRIPTION_ATTRIBUTE_ID (0x0000)
+#define ZCL_DELIVERY_ENABLE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PUSH_INFORMATION_TIMER_ATTRIBUTE_ID (0x0002)
+#define ZCL_ENABLE_SECURE_CONFIGURATION_ATTRIBUTE_ID (0x0003)
+#define ZCL_NUMBER_OF_CONTENTS_ATTRIBUTE_ID (0x0010)
+#define ZCL_CONTENT_ROOT_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Data Sharing
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_DEVICE_NAME_ATTRIBUTE_ID (0x0000)
+#define ZCL_DEVICE_DESCRIPTION_ATTRIBUTE_ID (0x0001)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Gaming
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_PLAYER_NAME_ATTRIBUTE_ID (0x0000)
+#define ZCL_NB_OF_GAMES_ATTRIBUTE_ID (0x0001)
+#define ZCL_LIST_OF_GAMES_ATTRIBUTE_ID (0x0002)
+#define ZCL_ANNOUNCEMENT_INTERVAL_ATTRIBUTE_ID (0x0003)
+#define ZCL_GAME_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_NAME_OF_GAME_ATTRIBUTE_ID (0x0011)
+#define ZCL_GAME_MASTER_ATTRIBUTE_ID (0x0012)
+#define ZCL_GAMING_STATUS_ATTRIBUTE_ID (0x0013)
+#define ZCL_CURRENT_NB_OF_PLAYERS_ATTRIBUTE_ID (0x0014)
+#define ZCL_LIST_OF_CURRENT_PLAYERS_ATTRIBUTE_ID (0x0015)
+#define ZCL_MAX_NB_OF_PLAYERS_ATTRIBUTE_ID (0x0016)
+#define ZCL_MIN_NB_OF_PLAYERS_ATTRIBUTE_ID (0x0017)
+#define ZCL_CURRENT_GAME_LEVEL_ATTRIBUTE_ID (0x0018)
+#define ZCL_SCORE_OF_THIS_PLAYER_ATTRIBUTE_ID (0x0019)
+#define ZCL_TIMER1_ATTRIBUTE_ID (0x001A)
+#define ZCL_TIMER2_ATTRIBUTE_ID (0x001B)
+#define ZCL_TIMER3_ATTRIBUTE_ID (0x001C)
+#define ZCL_COUNTER1_ATTRIBUTE_ID (0x001D)
+#define ZCL_COUNTER2_ATTRIBUTE_ID (0x001E)
+#define ZCL_DOWNLOADABLE_ATTRIBUTE_ID (0x001F)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Data Rate Control
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_AVERAGE_LATENCY_REQUIREMENT_ATTRIBUTE_ID (0x0000)
+#define ZCL_MAX_LATENCY_REQUIREMENT_ATTRIBUTE_ID (0x0001)
+#define ZCL_BANDWIDTH_REQUIREMENT_ATTRIBUTE_ID (0x0002)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Voice over ZigBee
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CODEC_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAMPLING_FREQUENCY_ATTRIBUTE_ID (0x0001)
+#define ZCL_CODEC_RATE_ATTRIBUTE_ID (0x0002)
+#define ZCL_ESTABLISHMENT_TIMEOUT_ATTRIBUTE_ID (0x0003)
+#define ZCL_CODEC_TYPE_SUB1_ATTRIBUTE_ID (0x0004)
+#define ZCL_CODEC_TYPE_SUB2_ATTRIBUTE_ID (0x0005)
+#define ZCL_CODEC_TYPE_SUB3_ATTRIBUTE_ID (0x0006)
+#define ZCL_COMPRESSION_TYPE_ATTRIBUTE_ID (0x0007)
+#define ZCL_COMPRESSION_RATE_ATTRIBUTE_ID (0x0008)
+#define ZCL_OPTION_FLAGS_ATTRIBUTE_ID (0x0009)
+#define ZCL_THRESHOLD_ATTRIBUTE_ID (0x000A)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Chatting
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_U_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_NICKNAME_ATTRIBUTE_ID (0x0001)
+#define ZCL_C_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_NAME_ATTRIBUTE_ID (0x0011)
+#define ZCL_ENABLE_ADD_CHAT_ATTRIBUTE_ID (0x0020)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Payment
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_PAYMENT_USER_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_USER_TYPE_ATTRIBUTE_ID (0x0001)
+#define ZCL_PAYMENT_SERVICE_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_PAYMENT_SERVICE_PROVIDER_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_TOTEM_ID_ATTRIBUTE_ID (0x0012)
+#define ZCL_CURRENCY_ATTRIBUTE_ID (0x0020)
+#define ZCL_PRICE_TRAILING_DIGIT_ATTRIBUTE_ID (0x0021)
+#define ZCL_PRICE_ATTRIBUTE_ID (0x0022)
+#define ZCL_GOOD_ID_ATTRIBUTE_ID (0x0030)
+#define ZCL_SERIAL_NUMBER_ATTRIBUTE_ID (0x0031)
+#define ZCL_PAYMENT_TIMESTAMP_ATTRIBUTE_ID (0x0032)
+#define ZCL_TRANS_ID_ATTRIBUTE_ID (0x0033)
+#define ZCL_TRANS_STATUS_ATTRIBUTE_ID (0x0034)
+#define ZCL_PAYMENT_STATUS_ATTRIBUTE_ID (0x0035)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Billing
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_USER_ID_ATTRIBUTE_ID (0x0000)
+#define ZCL_SERVICE_ID_ATTRIBUTE_ID (0x0010)
+#define ZCL_SERVICE_PROVIDER_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_SESSION_INTERVAL_ATTRIBUTE_ID (0x0012)
+#define ZCL_TIMESTAMP_ATTRIBUTE_ID (0x0020)
+#define ZCL_DURATION_ATTRIBUTE_ID (0x0021)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Appliance Identification
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_BASIC_IDENTIFICATION_ATTRIBUTE_ID (0x0000)
+#define ZCL_APPLIANCE_COMPANY_NAME_ATTRIBUTE_ID (0x0010)
+#define ZCL_COMPANY_ID_ATTRIBUTE_ID (0x0011)
+#define ZCL_BRAND_NAME_ATTRIBUTE_ID (0x0012)
+#define ZCL_BRAND_ID_ATTRIBUTE_ID (0x0013)
+#define ZCL_APPLIANCE_MODEL_ATTRIBUTE_ID (0x0014)
+#define ZCL_APPLIANCE_PART_NUMBER_ATTRIBUTE_ID (0x0015)
+#define ZCL_APPLIANCE_PRODUCT_REVISION_ATTRIBUTE_ID (0x0016)
+#define ZCL_APPLIANCE_SOFTWARE_REVISION_ATTRIBUTE_ID (0x0017)
+#define ZCL_PRODUCT_TYPE_NAME_ATTRIBUTE_ID (0x0018)
+#define ZCL_PRODUCT_TYPE_ID_ATTRIBUTE_ID (0x0019)
+#define ZCL_CECED_SPECIFICATION_VERSION_ATTRIBUTE_ID (0x001A)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Meter Identification
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_METER_COMPANY_NAME_ATTRIBUTE_ID (0x0000)
+#define ZCL_METER_TYPE_ID_ATTRIBUTE_ID (0x0001)
+#define ZCL_DATA_QUALITY_ID_ATTRIBUTE_ID (0x0004)
+#define ZCL_CUSTOMER_NAME_ATTRIBUTE_ID (0x0005)
+#define ZCL_METER_MODEL_ATTRIBUTE_ID (0x0006)
+#define ZCL_METER_PART_NUMBER_ATTRIBUTE_ID (0x0007)
+#define ZCL_METER_PRODUCT_REVISION_ATTRIBUTE_ID (0x0008)
+#define ZCL_METER_SOFTWARE_REVISION_ATTRIBUTE_ID (0x000A)
+#define ZCL_UTILITY_NAME_ATTRIBUTE_ID (0x000B)
+#define ZCL_POD_ATTRIBUTE_ID (0x000C)
+#define ZCL_AVAILABLE_POWER_ATTRIBUTE_ID (0x000D)
+#define ZCL_POWER_THRESHOLD_ATTRIBUTE_ID (0x000E)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Appliance Events and Alert
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Appliance Statistics
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_LOG_MAX_SIZE_ATTRIBUTE_ID (0x0000)
+#define ZCL_LOG_QUEUE_MAX_SIZE_ATTRIBUTE_ID (0x0001)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Electrical Measurement
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_MEASUREMENT_TYPE_ATTRIBUTE_ID (0x0000)
+#define ZCL_DC_VOLTAGE_ATTRIBUTE_ID (0x0100)
+#define ZCL_DC_VOLTAGE_MIN_ATTRIBUTE_ID (0x0101)
+#define ZCL_DC_VOLTAGE_MAX_ATTRIBUTE_ID (0x0102)
+#define ZCL_DC_CURRENT_ATTRIBUTE_ID (0x0103)
+#define ZCL_DC_CURRENT_MIN_ATTRIBUTE_ID (0x0104)
+#define ZCL_DC_CURRENT_MAX_ATTRIBUTE_ID (0x0105)
+#define ZCL_DC_POWER_ATTRIBUTE_ID (0x0106)
+#define ZCL_DC_POWER_MIN_ATTRIBUTE_ID (0x0107)
+#define ZCL_DC_POWER_MAX_ATTRIBUTE_ID (0x0108)
+#define ZCL_DC_VOLTAGE_MULTIPLIER_ATTRIBUTE_ID (0x0200)
+#define ZCL_DC_VOLTAGE_DIVISOR_ATTRIBUTE_ID (0x0201)
+#define ZCL_DC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0202)
+#define ZCL_DC_CURRENT_DIVISOR_ATTRIBUTE_ID (0x0203)
+#define ZCL_DC_POWER_MULTIPLIER_ATTRIBUTE_ID (0x0204)
+#define ZCL_DC_POWER_DIVISOR_ATTRIBUTE_ID (0x0205)
+#define ZCL_AC_FREQUENCY_ATTRIBUTE_ID (0x0300)
+#define ZCL_AC_FREQUENCY_MIN_ATTRIBUTE_ID (0x0301)
+#define ZCL_AC_FREQUENCY_MAX_ATTRIBUTE_ID (0x0302)
+#define ZCL_NEUTRAL_CURRENT_ATTRIBUTE_ID (0x0303)
+#define ZCL_TOTAL_ACTIVE_POWER_ATTRIBUTE_ID (0x0304)
+#define ZCL_TOTAL_REACTIVE_POWER_ATTRIBUTE_ID (0x0305)
+#define ZCL_TOTAL_APPARENT_POWER_ATTRIBUTE_ID (0x0306)
+#define ZCL_MEASURED_1_ST_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0307)
+#define ZCL_MEASURED_3_RD_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0308)
+#define ZCL_MEASURED_5_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0309)
+#define ZCL_MEASURED_7_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030A)
+#define ZCL_MEASURED_9_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030B)
+#define ZCL_MEASURED_11_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030C)
+#define ZCL_MEASURED_PHASE_1_ST_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030D)
+#define ZCL_MEASURED_PHASE_3_RD_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030E)
+#define ZCL_MEASURED_PHASE_5_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x030F)
+#define ZCL_MEASURED_PHASE_7_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0310)
+#define ZCL_MEASURED_PHASE_9_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0311)
+#define ZCL_MEASURED_PHASE_11_TH_HARMONIC_CURRENT_ATTRIBUTE_ID (0x0312)
+#define ZCL_AC_FREQUENCY_MULTIPLIER_ATTRIBUTE_ID (0x0400)
+#define ZCL_AC_FREQUENCY_DIVISOR_ATTRIBUTE_ID (0x0401)
+#define ZCL_POWER_MULTIPLIER_ATTRIBUTE_ID (0x0402)
+#define ZCL_POWER_DIVISOR_ATTRIBUTE_ID (0x0403)
+#define ZCL_HARMONIC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0404)
+#define ZCL_PHASE_HARMONIC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0405)
+#define ZCL_INSTANTANEOUS_VOLTAGE_ATTRIBUTE_ID (0x0500)
+#define ZCL_INSTANTANEOUS_LINE_CURRENT_ATTRIBUTE_ID (0x0501)
+#define ZCL_INSTANTANEOUS_ACTIVE_CURRENT_ATTRIBUTE_ID (0x0502)
+#define ZCL_INSTANTANEOUS_REACTIVE_CURRENT_ATTRIBUTE_ID (0x0503)
+#define ZCL_INSTANTANEOUS_POWER_ATTRIBUTE_ID (0x0504)
+#define ZCL_RMS_VOLTAGE_ATTRIBUTE_ID (0x0505)
+#define ZCL_RMS_VOLTAGE_MIN_ATTRIBUTE_ID (0x0506)
+#define ZCL_RMS_VOLTAGE_MAX_ATTRIBUTE_ID (0x0507)
+#define ZCL_RMS_CURRENT_ATTRIBUTE_ID (0x0508)
+#define ZCL_RMS_CURRENT_MIN_ATTRIBUTE_ID (0x0509)
+#define ZCL_RMS_CURRENT_MAX_ATTRIBUTE_ID (0x050A)
+#define ZCL_ACTIVE_POWER_ATTRIBUTE_ID (0x050B)
+#define ZCL_ACTIVE_POWER_MIN_ATTRIBUTE_ID (0x050C)
+#define ZCL_ACTIVE_POWER_MAX_ATTRIBUTE_ID (0x050D)
+#define ZCL_REACTIVE_POWER_ATTRIBUTE_ID (0x050E)
+#define ZCL_APPARENT_POWER_ATTRIBUTE_ID (0x050F)
+#define ZCL_AC_POWER_FACTOR_ATTRIBUTE_ID (0x0510)
+#define ZCL_AVERAGE_RMS_VOLTAGE_MEASUREMENT_PERIOD_ATTRIBUTE_ID (0x0511)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_COUNTER_ATTRIBUTE_ID (0x0513)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_PERIOD_ATTRIBUTE_ID (0x0514)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_PERIOD_ATTRIBUTE_ID (0x0515)
+#define ZCL_RMS_VOLTAGE_SAG_PERIOD_ATTRIBUTE_ID (0x0516)
+#define ZCL_RMS_VOLTAGE_SWELL_PERIOD_ATTRIBUTE_ID (0x0517)
+#define ZCL_AC_VOLTAGE_MULTIPLIER_ATTRIBUTE_ID (0x0600)
+#define ZCL_AC_VOLTAGE_DIVISOR_ATTRIBUTE_ID (0x0601)
+#define ZCL_AC_CURRENT_MULTIPLIER_ATTRIBUTE_ID (0x0602)
+#define ZCL_AC_CURRENT_DIVISOR_ATTRIBUTE_ID (0x0603)
+#define ZCL_AC_POWER_MULTIPLIER_ATTRIBUTE_ID (0x0604)
+#define ZCL_AC_POWER_DIVISOR_ATTRIBUTE_ID (0x0605)
+#define ZCL_DC_OVERLOAD_ALARMS_MASK_ATTRIBUTE_ID (0x0700)
+#define ZCL_DC_VOLTAGE_OVERLOAD_ATTRIBUTE_ID (0x0701)
+#define ZCL_DC_CURRENT_OVERLOAD_ATTRIBUTE_ID (0x0702)
+#define ZCL_AC_OVERLOAD_ALARMS_MASK_ATTRIBUTE_ID (0x0800)
+#define ZCL_AC_VOLTAGE_OVERLOAD_ATTRIBUTE_ID (0x0801)
+#define ZCL_AC_CURRENT_OVERLOAD_ATTRIBUTE_ID (0x0802)
+#define ZCL_AC_POWER_OVERLOAD_ATTRIBUTE_ID (0x0803)
+#define ZCL_AC_REACTIVE_POWER_OVERLOAD_ATTRIBUTE_ID (0x0804)
+#define ZCL_AVERAGE_RMS_OVER_VOLTAGE_ATTRIBUTE_ID (0x0805)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_ATTRIBUTE_ID (0x0806)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_ATTRIBUTE_ID (0x0807)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_ATTRIBUTE_ID (0x0808)
+#define ZCL_RMS_VOLTAGE_SAG_ATTRIBUTE_ID (0x0809)
+#define ZCL_RMS_VOLTAGE_SWELL_ATTRIBUTE_ID (0x080A)
+#define ZCL_LINE_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0901)
+#define ZCL_ACTIVE_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0902)
+#define ZCL_REACTIVE_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0903)
+#define ZCL_RMS_VOLTAGE_PHASE_B_ATTRIBUTE_ID (0x0905)
+#define ZCL_RMS_VOLTAGE_MIN_PHASE_B_ATTRIBUTE_ID (0x0906)
+#define ZCL_RMS_VOLTAGE_MAX_PHASE_B_ATTRIBUTE_ID (0x0907)
+#define ZCL_RMS_CURRENT_PHASE_B_ATTRIBUTE_ID (0x0908)
+#define ZCL_RMS_CURRENT_MIN_PHASE_B_ATTRIBUTE_ID (0x0909)
+#define ZCL_RMS_CURRENT_MAX_PHASE_B_ATTRIBUTE_ID (0x090A)
+#define ZCL_ACTIVE_POWER_PHASE_B_ATTRIBUTE_ID (0x090B)
+#define ZCL_ACTIVE_POWER_MIN_PHASE_B_ATTRIBUTE_ID (0x090C)
+#define ZCL_ACTIVE_POWER_MAX_PHASE_B_ATTRIBUTE_ID (0x090D)
+#define ZCL_REACTIVE_POWER_PHASE_B_ATTRIBUTE_ID (0x090E)
+#define ZCL_APPARENT_POWER_PHASE_B_ATTRIBUTE_ID (0x090F)
+#define ZCL_POWER_FACTOR_PHASE_B_ATTRIBUTE_ID (0x0910)
+#define ZCL_AVERAGE_RMS_VOLTAGE_MEASUREMENT_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0911)
+#define ZCL_AVERAGE_RMS_OVER_VOLTAGE_COUNTER_PHASE_B_ATTRIBUTE_ID (0x0912)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_COUNTER_PHASE_B_ATTRIBUTE_ID (0x0913)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0914)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0915)
+#define ZCL_RMS_VOLTAGE_SAG_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0916)
+#define ZCL_RMS_VOLTAGE_SWELL_PERIOD_PHASE_B_ATTRIBUTE_ID (0x0917)
+#define ZCL_LINE_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A01)
+#define ZCL_ACTIVE_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A02)
+#define ZCL_REACTIVE_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A03)
+#define ZCL_RMS_VOLTAGE_PHASE_C_ATTRIBUTE_ID (0x0A05)
+#define ZCL_RMS_VOLTAGE_MIN_PHASE_C_ATTRIBUTE_ID (0x0A06)
+#define ZCL_RMS_VOLTAGE_MAX_PHASE_C_ATTRIBUTE_ID (0x0A07)
+#define ZCL_RMS_CURRENT_PHASE_C_ATTRIBUTE_ID (0x0A08)
+#define ZCL_RMS_CURRENT_MIN_PHASE_C_ATTRIBUTE_ID (0x0A09)
+#define ZCL_RMS_CURRENT_MAX_PHASE_C_ATTRIBUTE_ID (0x0A0A)
+#define ZCL_ACTIVE_POWER_PHASE_C_ATTRIBUTE_ID (0x0A0B)
+#define ZCL_ACTIVE_POWER_MIN_PHASE_C_ATTRIBUTE_ID (0x0A0C)
+#define ZCL_ACTIVE_POWER_MAX_PHASE_C_ATTRIBUTE_ID (0x0A0D)
+#define ZCL_REACTIVE_POWER_PHASE_C_ATTRIBUTE_ID (0x0A0E)
+#define ZCL_APPARENT_POWER_PHASE_C_ATTRIBUTE_ID (0x0A0F)
+#define ZCL_POWER_FACTOR_PHASE_C_ATTRIBUTE_ID (0x0A10)
+#define ZCL_AVERAGE_RMS_VOLTAGE_MEASUREMENT_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A11)
+#define ZCL_AVERAGE_RMS_OVER_VOLTAGE_COUNTER_PHASE_C_ATTRIBUTE_ID (0x0A12)
+#define ZCL_AVERAGE_RMS_UNDER_VOLTAGE_COUNTER_PHASE_C_ATTRIBUTE_ID (0x0A13)
+#define ZCL_RMS_EXTREME_OVER_VOLTAGE_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A14)
+#define ZCL_RMS_EXTREME_UNDER_VOLTAGE_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A15)
+#define ZCL_RMS_VOLTAGE_SAG_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A16)
+#define ZCL_RMS_VOLTAGE_SWELL_PERIOD_PHASE_C_ATTRIBUTE_ID (0x0A17)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Diagnostics
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_NUMBER_OF_RESETS_ATTRIBUTE_ID (0x0000)
+#define ZCL_PERSISTENT_MEMORY_WRITES_ATTRIBUTE_ID (0x0001)
+#define ZCL_MAC_RX_BCAST_ATTRIBUTE_ID (0x0100)
+#define ZCL_MAC_TX_BCAST_ATTRIBUTE_ID (0x0101)
+#define ZCL_MAC_RX_UCAST_ATTRIBUTE_ID (0x0102)
+#define ZCL_MAC_TX_UCAST_ATTRIBUTE_ID (0x0103)
+#define ZCL_MAC_TX_UCAST_RETRY_ATTRIBUTE_ID (0x0104)
+#define ZCL_MAC_TX_UCAST_FAIL_ATTRIBUTE_ID (0x0105)
+#define ZCL_APS_RX_BCAST_ATTRIBUTE_ID (0x0106)
+#define ZCL_APS_TX_BCAST_ATTRIBUTE_ID (0x0107)
+#define ZCL_APS_RX_UCAST_ATTRIBUTE_ID (0x0108)
+#define ZCL_APS_UCAST_SUCCESS_ATTRIBUTE_ID (0x0109)
+#define ZCL_APS_TX_UCAST_RETRY_ATTRIBUTE_ID (0x010A)
+#define ZCL_APS_TX_UCAST_FAIL_ATTRIBUTE_ID (0x010B)
+#define ZCL_ROUTE_DISC_INITIATED_ATTRIBUTE_ID (0x010C)
+#define ZCL_NEIGHBOR_ADDED_ATTRIBUTE_ID (0x010D)
+#define ZCL_NEIGHBOR_REMOVED_ATTRIBUTE_ID (0x010E)
+#define ZCL_NEIGHBOR_STALE_ATTRIBUTE_ID (0x010F)
+#define ZCL_JOIN_INDICATION_ATTRIBUTE_ID (0x0110)
+#define ZCL_CHILD_MOVED_ATTRIBUTE_ID (0x0111)
+#define ZCL_NWK_FC_FAILURE_ATTRIBUTE_ID (0x0112)
+#define ZCL_APS_FC_FAILURE_ATTRIBUTE_ID (0x0113)
+#define ZCL_APS_UNAUTHORIZED_KEY_ATTRIBUTE_ID (0x0114)
+#define ZCL_NWK_DECRYPT_FAILURE_ATTRIBUTE_ID (0x0115)
+#define ZCL_APS_DECRYPT_FAILURE_ATTRIBUTE_ID (0x0116)
+#define ZCL_PACKET_BUFFER_ALLOC_FAILURES_ATTRIBUTE_ID (0x0117)
+#define ZCL_RELAYED_UNICAST_ATTRIBUTE_ID (0x0118)
+#define ZCL_PHY_TO_MAC_QUEUE_LIMIT_REACHED_ATTRIBUTE_ID (0x0119)
+#define ZCL_PACKET_VALIDATE_DROP_COUNT_ATTRIBUTE_ID (0x011A)
+#define ZCL_AVERAGE_MAC_RETRY_PER_APS_MSG_SENT_ATTRIBUTE_ID (0x011B)
+#define ZCL_LAST_MESSAGE_LQI_ATTRIBUTE_ID (0x011C)
+#define ZCL_LAST_MESSAGE_RSSI_ATTRIBUTE_ID (0x011D)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: ZLL Commissioning
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Sample Mfg Specific Cluster
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_ATTRIBUTE_ONE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ATTRIBUTE_TWO_ATTRIBUTE_ID (0x0001)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Sample Mfg Specific Cluster 2
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_ATTRIBUTE_THREE_ATTRIBUTE_ID (0x0000)
+#define ZCL_ATTRIBUTE_FOUR_ATTRIBUTE_ID (0x0001)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: Configuration Cluster
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_TOKENS_LOCKED_ATTRIBUTE_ID (0x0000)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: MFGLIB Cluster
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_PACKETS_RECEIVED_ATTRIBUTE_ID (0x0000)
+#define ZCL_SAVED_RSSI_ATTRIBUTE_ID (0x0001)
+#define ZCL_SAVED_LQI_ATTRIBUTE_ID (0x0002)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
+
+// Attribute ids for cluster: SL Works With All Hubs
+
+// Client attributes
+#define ZCL_CLUSTER_REVISION_CLIENT_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_CLIENT_ATTRIBUTE_ID (0xFFFE)
+
+// Server attributes
+#define ZCL_SL_DISABLE_OTA_DOWNGRADES_ATTRIBUTE_ID (0x0002)
+#define ZCL_SL_MGMT_LEAVE_WITHOUT_REJOIN_ENABLED_ATTRIBUTE_ID (0x0003)
+#define ZCL_SL_NWK_RETRY_COUNT_ATTRIBUTE_ID (0x0004)
+#define ZCL_SL_MAC_RETRY_COUNT_ATTRIBUTE_ID (0x0005)
+#define ZCL_SL_ROUTER_CHECKIN_ENABLED_ATTRIBUTE_ID (0x0006)
+#define ZCL_SL_TOUCHLINK_INTERPAN_ENABLED_ATTRIBUTE_ID (0x0007)
+#define ZCL_SL_WWAH_PARENT_CLASSIFICATION_ENABLED_ATTRIBUTE_ID (0x0008)
+#define ZCL_SL_WWAH_APP_EVENT_RETRY_ENABLED_ATTRIBUTE_ID (0x0009)
+#define ZCL_SL_WWAH_APP_EVENT_RETRY_QUEUE_SIZE_ATTRIBUTE_ID (0x000A)
+#define ZCL_SL_WWAH_REJOIN_ENABLED_ATTRIBUTE_ID (0x000B)
+#define ZCL_SL_MAC_POLL_FAILURE_WAIT_TIME_ATTRIBUTE_ID (0x000C)
+#define ZCL_SL_CONFIGURATION_MODE_ENABLED_ATTRIBUTE_ID (0x000D)
+#define ZCL_SL_CURRENT_DEBUG_REPORT_ID_ATTRIBUTE_ID (0x000E)
+#define ZCL_SL_TC_SECURITY_ON_NTWK_KEY_ROTATION_ENABLED_ATTRIBUTE_ID (0x000F)
+#define ZCL_SL_WWAH_BAD_PARENT_RECOVERY_ENABLED_ATTRIBUTE_ID (0x0010)
+#define ZCL_SL_PENDING_NETWORK_UPDATE_CHANNEL_ATTRIBUTE_ID (0x0011)
+#define ZCL_SL_PENDING_NETWORK_UPDATE_PANID_ATTRIBUTE_ID (0x0012)
+#define ZCL_SL_OTA_MAX_OFFLINE_DURATION_ATTRIBUTE_ID (0x0013)
+#define ZCL_CLUSTER_REVISION_SERVER_ATTRIBUTE_ID (0xFFFD)
+#define ZCL_REPORTING_STATUS_SERVER_ATTRIBUTE_ID (0xFFFE)
diff --git a/examples/all-clusters-app/all-clusters-common/gen/attribute-size.h b/examples/all-clusters-app/all-clusters-common/gen/attribute-size.h
new file mode 100644
index 00000000000000..8d8659ee7ece2e
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/attribute-size.h
@@ -0,0 +1,34 @@
+
+/*
+ *
+ * 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.
+ */
+
+// Prevent multiple inclusion
+#pragma once
+
+// ZCL attribute sizes
+ZCL_DATA8_ATTRIBUTE_TYPE, 1, ZCL_DATA16_ATTRIBUTE_TYPE, 2, ZCL_DATA24_ATTRIBUTE_TYPE, 3, ZCL_DATA32_ATTRIBUTE_TYPE, 4,
+ ZCL_DATA40_ATTRIBUTE_TYPE, 5, ZCL_DATA48_ATTRIBUTE_TYPE, 6, ZCL_DATA56_ATTRIBUTE_TYPE, 7, ZCL_DATA64_ATTRIBUTE_TYPE, 8,
+ ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, ZCL_BITMAP8_ATTRIBUTE_TYPE, 1, ZCL_BITMAP16_ATTRIBUTE_TYPE, 2, ZCL_BITMAP24_ATTRIBUTE_TYPE, 3,
+ ZCL_BITMAP32_ATTRIBUTE_TYPE, 4, ZCL_BITMAP40_ATTRIBUTE_TYPE, 5, ZCL_BITMAP48_ATTRIBUTE_TYPE, 6, ZCL_BITMAP56_ATTRIBUTE_TYPE, 7,
+ ZCL_BITMAP64_ATTRIBUTE_TYPE, 8, ZCL_INT8U_ATTRIBUTE_TYPE, 1, ZCL_INT16U_ATTRIBUTE_TYPE, 2, ZCL_INT24U_ATTRIBUTE_TYPE, 3,
+ ZCL_INT32U_ATTRIBUTE_TYPE, 4, ZCL_INT40U_ATTRIBUTE_TYPE, 5, ZCL_INT48U_ATTRIBUTE_TYPE, 6, ZCL_INT56U_ATTRIBUTE_TYPE, 7,
+ ZCL_INT64U_ATTRIBUTE_TYPE, 8, ZCL_INT8S_ATTRIBUTE_TYPE, 1, ZCL_INT16S_ATTRIBUTE_TYPE, 2, ZCL_INT24S_ATTRIBUTE_TYPE, 3,
+ ZCL_INT32S_ATTRIBUTE_TYPE, 4, ZCL_INT40S_ATTRIBUTE_TYPE, 5, ZCL_INT48S_ATTRIBUTE_TYPE, 6, ZCL_INT56S_ATTRIBUTE_TYPE, 7,
+ ZCL_INT64S_ATTRIBUTE_TYPE, 8, ZCL_ENUM8_ATTRIBUTE_TYPE, 1, ZCL_ENUM16_ATTRIBUTE_TYPE, 2, ZCL_FLOAT_SEMI_ATTRIBUTE_TYPE, 2,
+ ZCL_FLOAT_SINGLE_ATTRIBUTE_TYPE, 4, ZCL_FLOAT_DOUBLE_ATTRIBUTE_TYPE, 8, ZCL_TIME_OF_DAY_ATTRIBUTE_TYPE, 4,
+ ZCL_DATE_ATTRIBUTE_TYPE, 4, ZCL_UTC_TIME_ATTRIBUTE_TYPE, 4, ZCL_CLUSTER_ID_ATTRIBUTE_TYPE, 2, ZCL_ATTRIBUTE_ID_ATTRIBUTE_TYPE,
+ 2, ZCL_BACNET_OID_ATTRIBUTE_TYPE, 4, ZCL_IEEE_ADDRESS_ATTRIBUTE_TYPE, 8, ZCL_SECURITY_KEY_ATTRIBUTE_TYPE, 16,
diff --git a/examples/lock-app/efr32/src/gen/attribute-type.h b/examples/all-clusters-app/all-clusters-common/gen/attribute-type.h
similarity index 82%
rename from examples/lock-app/efr32/src/gen/attribute-type.h
rename to examples/all-clusters-app/all-clusters-common/gen/attribute-type.h
index 35879dabb2ed6e..bc5d1bae34b365 100644
--- a/examples/lock-app/efr32/src/gen/attribute-type.h
+++ b/examples/all-clusters-app/all-clusters-common/gen/attribute-type.h
@@ -1,23 +1,7 @@
-/**
- *
- * 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.
- */
-/**
+/*
*
- * Copyright (c) 2020 Silicon Labs
+ * 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.
@@ -31,13 +15,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// This file is generated by Simplicity Studio. Please do not edit manually.
-//
-//
-// Enclosing macro to prevent multiple inclusion
-#ifndef SILABS_EMBER_AF_ATTRIBUTE_TYPES
-#define SILABS_EMBER_AF_ATTRIBUTE_TYPES
+// Prevent multiple inclusion
+#pragma once
// ZCL attribute types
enum
@@ -97,7 +77,5 @@ enum
ZCL_BACNET_OID_ATTRIBUTE_TYPE = 0xEA, // BACnet OID
ZCL_IEEE_ADDRESS_ATTRIBUTE_TYPE = 0xF0, // IEEE address
ZCL_SECURITY_KEY_ATTRIBUTE_TYPE = 0xF1, // 128-bit security key
- ZCL_UNKNOWN_ATTRIBUTE_TYPE = 0xFF // Unknown
-
+ ZCL_UNKNOWN_ATTRIBUTE_TYPE = 0xFF, // Unknown
};
-#endif // SILABS_EMBER_AF_ATTRIBUTE_TYPES
diff --git a/examples/all-clusters-app/all-clusters-common/gen/call-command-handler.cpp b/examples/all-clusters-app/all-clusters-common/gen/call-command-handler.cpp
new file mode 100644
index 00000000000000..9db10b94ef3350
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/call-command-handler.cpp
@@ -0,0 +1,2239 @@
+
+/*
+ *
+ * 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.
+ */
+
+#include
+
+#include "af-structs.h"
+#include "call-command-handler.h"
+#include "callback.h"
+#include "command-id.h"
+#include "util.h"
+
+using namespace chip;
+
+EmberAfStatus emberAfBarrierControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfBarrierControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfBasicClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfBasicClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfColorControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfColorControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfDoorLockClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfGroupsClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfIasZoneClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfIdentifyClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfLevelControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfOnOffClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfTemperatureMeasurementClusterServerCommandParse(EmberAfClusterCommand * cmd);
+
+static EmberAfStatus status(bool wasHandled, bool clusterExists, bool mfgSpecific)
+{
+ if (wasHandled)
+ {
+ return EMBER_ZCL_STATUS_SUCCESS;
+ }
+ else if (mfgSpecific)
+ {
+ return EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND;
+ }
+ else if (clusterExists)
+ {
+ return EMBER_ZCL_STATUS_UNSUP_COMMAND;
+ }
+ else
+ {
+ return EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER;
+ }
+}
+
+// Main command parsing controller.
+EmberAfStatus emberAfClusterSpecificCommandParse(EmberAfClusterCommand * cmd)
+{
+ EmberAfStatus result = status(false, false, cmd->mfgSpecific);
+ if (cmd->direction == (uint8_t) ZCL_DIRECTION_SERVER_TO_CLIENT &&
+ emberAfContainsClientWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
+ {
+ switch (cmd->apsFrame->clusterId)
+ {
+ case ZCL_BARRIER_CONTROL_CLUSTER_ID:
+ // No commands are enabled for cluster Barrier Control
+ result = status(false, true, cmd->mfgSpecific);
+ break;
+ case ZCL_BASIC_CLUSTER_ID:
+ // No commands are enabled for cluster Basic
+ result = status(false, true, cmd->mfgSpecific);
+ break;
+ case ZCL_COLOR_CONTROL_CLUSTER_ID:
+ // No commands are enabled for cluster Color Control
+ result = status(false, true, cmd->mfgSpecific);
+ break;
+ case ZCL_DOOR_LOCK_CLUSTER_ID:
+ result = emberAfDoorLockClusterClientCommandParse(cmd);
+ break;
+ case ZCL_GROUPS_CLUSTER_ID:
+ result = emberAfGroupsClusterClientCommandParse(cmd);
+ break;
+ case ZCL_IDENTIFY_CLUSTER_ID:
+ result = emberAfIdentifyClusterClientCommandParse(cmd);
+ break;
+ case ZCL_LEVEL_CONTROL_CLUSTER_ID:
+ // No commands are enabled for cluster Level Control
+ result = status(false, true, cmd->mfgSpecific);
+ break;
+ case ZCL_ON_OFF_CLUSTER_ID:
+ // No commands are enabled for cluster On/off
+ result = status(false, true, cmd->mfgSpecific);
+ break;
+ case ZCL_SCENES_CLUSTER_ID:
+ result = emberAfScenesClusterClientCommandParse(cmd);
+ break;
+ default:
+ // Unrecognized cluster ID, error status will apply.
+ break;
+ }
+ }
+ else if (cmd->direction == (uint8_t) ZCL_DIRECTION_CLIENT_TO_SERVER &&
+ emberAfContainsServerWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
+ {
+ switch (cmd->apsFrame->clusterId)
+ {
+ case ZCL_BARRIER_CONTROL_CLUSTER_ID:
+ result = emberAfBarrierControlClusterServerCommandParse(cmd);
+ break;
+ case ZCL_BASIC_CLUSTER_ID:
+ result = emberAfBasicClusterServerCommandParse(cmd);
+ break;
+ case ZCL_COLOR_CONTROL_CLUSTER_ID:
+ result = emberAfColorControlClusterServerCommandParse(cmd);
+ break;
+ case ZCL_DOOR_LOCK_CLUSTER_ID:
+ result = emberAfDoorLockClusterServerCommandParse(cmd);
+ break;
+ case ZCL_GROUPS_CLUSTER_ID:
+ result = emberAfGroupsClusterServerCommandParse(cmd);
+ break;
+ case ZCL_IAS_ZONE_CLUSTER_ID:
+ result = emberAfIasZoneClusterServerCommandParse(cmd);
+ break;
+ case ZCL_IDENTIFY_CLUSTER_ID:
+ result = emberAfIdentifyClusterServerCommandParse(cmd);
+ break;
+ case ZCL_LEVEL_CONTROL_CLUSTER_ID:
+ result = emberAfLevelControlClusterServerCommandParse(cmd);
+ break;
+ case ZCL_ON_OFF_CLUSTER_ID:
+ result = emberAfOnOffClusterServerCommandParse(cmd);
+ break;
+ case ZCL_SCENES_CLUSTER_ID:
+ result = emberAfScenesClusterServerCommandParse(cmd);
+ break;
+ case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
+ // No commands are enabled for cluster Temperature Measurement
+ result = status(false, true, cmd->mfgSpecific);
+ break;
+ default:
+ // Unrecognized cluster ID, error status will apply.
+ break;
+ }
+ }
+ return result;
+}
+
+// Cluster specific command parsing
+
+EmberAfStatus emberAfBarrierControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t percentOpen;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ percentOpen = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfBarrierControlClusterBarrierControlGoToPercentCallback(percentOpen);
+ break;
+ }
+ case ZCL_BARRIER_CONTROL_STOP_COMMAND_ID: {
+ wasHandled = emberAfBarrierControlClusterBarrierControlStopCallback();
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfBasicClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_RESET_TO_FACTORY_DEFAULTS_COMMAND_ID: {
+ wasHandled = emberAfBasicClusterResetToFactoryDefaultsCallback();
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfColorControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_MOVE_COLOR_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ int16_t rateX;
+ int16_t rateY;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ rateX = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ rateY = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfColorControlClusterMoveColorCallback(rateX, rateY, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t moveMode;
+ uint16_t rate;
+ uint16_t colorTemperatureMinimum;
+ uint16_t colorTemperatureMaximum;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ rate = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ colorTemperatureMinimum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ colorTemperatureMaximum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfColorControlClusterMoveColorTemperatureCallback(
+ moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_MOVE_HUE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t moveMode;
+ uint8_t rate;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfColorControlClusterMoveHueCallback(moveMode, rate, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_MOVE_SATURATION_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t moveMode;
+ uint8_t rate;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfColorControlClusterMoveSaturationCallback(moveMode, rate, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_MOVE_TO_COLOR_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t colorX;
+ uint16_t colorY;
+ uint16_t transitionTime;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ colorX = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ colorY = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled =
+ emberAfColorControlClusterMoveToColorCallback(colorX, colorY, transitionTime, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t colorTemperature;
+ uint16_t transitionTime;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ colorTemperature = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfColorControlClusterMoveToColorTemperatureCallback(colorTemperature, transitionTime, optionsMask,
+ optionsOverride);
+ break;
+ }
+ case ZCL_MOVE_TO_HUE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t hue;
+ uint8_t direction;
+ uint16_t transitionTime;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ hue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ direction = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfColorControlClusterMoveToHueCallback(hue, direction, transitionTime, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t hue;
+ uint8_t saturation;
+ uint16_t transitionTime;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ hue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ saturation = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfColorControlClusterMoveToHueAndSaturationCallback(hue, saturation, transitionTime, optionsMask,
+ optionsOverride);
+ break;
+ }
+ case ZCL_MOVE_TO_SATURATION_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t saturation;
+ uint16_t transitionTime;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ saturation = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled =
+ emberAfColorControlClusterMoveToSaturationCallback(saturation, transitionTime, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_STEP_COLOR_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ int16_t stepX;
+ int16_t stepY;
+ uint16_t transitionTime;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepX = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepY = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfColorControlClusterStepColorCallback(stepX, stepY, transitionTime, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t stepMode;
+ uint16_t stepSize;
+ uint16_t transitionTime;
+ uint16_t colorTemperatureMinimum;
+ uint16_t colorTemperatureMaximum;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepSize = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ colorTemperatureMinimum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ colorTemperatureMaximum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfColorControlClusterStepColorTemperatureCallback(
+ stepMode, stepSize, transitionTime, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_STEP_HUE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t stepMode;
+ uint8_t stepSize;
+ uint8_t transitionTime;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled =
+ emberAfColorControlClusterStepHueCallback(stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_STEP_SATURATION_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t stepMode;
+ uint8_t stepSize;
+ uint8_t transitionTime;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled =
+ emberAfColorControlClusterStepSaturationCallback(stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+ break;
+ }
+ case ZCL_STOP_MOVE_STEP_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t optionsMask;
+ uint8_t optionsOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfColorControlClusterStopMoveStepCallback(optionsMask, optionsOverride);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterLockDoorResponseCallback(status);
+ break;
+ }
+ case ZCL_UNLOCK_DOOR_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterUnlockDoorResponseCallback(status);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfDoorLockClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_CLEAR_ALL_PINS_COMMAND_ID: {
+ wasHandled = emberAfDoorLockClusterClearAllPinsCallback();
+ break;
+ }
+ case ZCL_CLEAR_ALL_RFIDS_COMMAND_ID: {
+ wasHandled = emberAfDoorLockClusterClearAllRfidsCallback();
+ break;
+ }
+ case ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t scheduleId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterClearHolidayScheduleCallback(scheduleId);
+ break;
+ }
+ case ZCL_CLEAR_PIN_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t userId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterClearPinCallback(userId);
+ break;
+ }
+ case ZCL_CLEAR_RFID_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t userId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterClearRfidCallback(userId);
+ break;
+ }
+ case ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t scheduleId;
+ uint16_t userId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterClearWeekdayScheduleCallback(scheduleId, userId);
+ break;
+ }
+ case ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t scheduleId;
+ uint16_t userId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterClearYeardayScheduleCallback(scheduleId, userId);
+ break;
+ }
+ case ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t scheduleId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterGetHolidayScheduleCallback(scheduleId);
+ break;
+ }
+ case ZCL_GET_LOG_RECORD_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t logIndex;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ logIndex = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterGetLogRecordCallback(logIndex);
+ break;
+ }
+ case ZCL_GET_PIN_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t userId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterGetPinCallback(userId);
+ break;
+ }
+ case ZCL_GET_RFID_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t userId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterGetRfidCallback(userId);
+ break;
+ }
+ case ZCL_GET_USER_TYPE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t userId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterGetUserTypeCallback(userId);
+ break;
+ }
+ case ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t scheduleId;
+ uint16_t userId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterGetWeekdayScheduleCallback(scheduleId, userId);
+ break;
+ }
+ case ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t scheduleId;
+ uint16_t userId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterGetYeardayScheduleCallback(scheduleId, userId);
+ break;
+ }
+ case ZCL_LOCK_DOOR_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * PIN;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ PIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterLockDoorCallback(PIN);
+ break;
+ }
+ case ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t scheduleId;
+ uint32_t localStartTime;
+ uint32_t localEndTime;
+ uint8_t operatingModeDuringHoliday;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 4;
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 4;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operatingModeDuringHoliday = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterSetHolidayScheduleCallback(scheduleId, localStartTime, localEndTime,
+ operatingModeDuringHoliday);
+ break;
+ }
+ case ZCL_SET_PIN_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t userId;
+ uint8_t userStatus;
+ uint8_t userType;
+ uint8_t * pin;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterSetPinCallback(userId, userStatus, userType, pin);
+ break;
+ }
+ case ZCL_SET_RFID_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t userId;
+ uint8_t userStatus;
+ uint8_t userType;
+ uint8_t * id;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ id = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterSetRfidCallback(userId, userStatus, userType, id);
+ break;
+ }
+ case ZCL_SET_USER_TYPE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t userId;
+ uint8_t userType;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterSetUserTypeCallback(userId, userType);
+ break;
+ }
+ case ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t scheduleId;
+ uint16_t userId;
+ uint8_t daysMask;
+ uint8_t startHour;
+ uint8_t startMinute;
+ uint8_t endHour;
+ uint8_t endMinute;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ daysMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ startHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ startMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ endHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ endMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterSetWeekdayScheduleCallback(scheduleId, userId, daysMask, startHour, startMinute,
+ endHour, endMinute);
+ break;
+ }
+ case ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t scheduleId;
+ uint16_t userId;
+ uint32_t localStartTime;
+ uint32_t localEndTime;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 4;
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterSetYeardayScheduleCallback(scheduleId, userId, localStartTime, localEndTime);
+ break;
+ }
+ case ZCL_UNLOCK_DOOR_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * PIN;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ PIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterUnlockDoorCallback(PIN);
+ break;
+ }
+ case ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t timeoutInSeconds;
+ uint8_t * pin;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutInSeconds = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfDoorLockClusterUnlockWithTimeoutCallback(timeoutInSeconds, pin);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_ADD_GROUP_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+ uint16_t groupId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfGroupsClusterAddGroupResponseCallback(status, groupId);
+ break;
+ }
+ case ZCL_GET_GROUP_MEMBERSHIP_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t capacity;
+ uint8_t groupCount;
+ /* TYPE WARNING: array array defaults to */ uint8_t * groupList;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ capacity = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ groupList = cmd->buffer + payloadOffset;
+
+ wasHandled = emberAfGroupsClusterGetGroupMembershipResponseCallback(capacity, groupCount, groupList);
+ break;
+ }
+ case ZCL_REMOVE_GROUP_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+ uint16_t groupId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfGroupsClusterRemoveGroupResponseCallback(status, groupId);
+ break;
+ }
+ case ZCL_VIEW_GROUP_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+ uint16_t groupId;
+ uint8_t * groupName;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfGroupsClusterViewGroupResponseCallback(status, groupId, groupName);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfGroupsClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_ADD_GROUP_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+ uint8_t * groupName;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfGroupsClusterAddGroupCallback(groupId, groupName);
+ break;
+ }
+ case ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+ uint8_t * groupName;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfGroupsClusterAddGroupIfIdentifyingCallback(groupId, groupName);
+ break;
+ }
+ case ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t groupCount;
+ /* TYPE WARNING: array array defaults to */ uint8_t * groupList;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ groupList = cmd->buffer + payloadOffset;
+
+ wasHandled = emberAfGroupsClusterGetGroupMembershipCallback(groupCount, groupList);
+ break;
+ }
+ case ZCL_REMOVE_ALL_GROUPS_COMMAND_ID: {
+ wasHandled = emberAfGroupsClusterRemoveAllGroupsCallback();
+ break;
+ }
+ case ZCL_REMOVE_GROUP_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfGroupsClusterRemoveGroupCallback(groupId);
+ break;
+ }
+ case ZCL_VIEW_GROUP_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfGroupsClusterViewGroupCallback(groupId);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfIasZoneClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t enrollResponseCode;
+ uint8_t zoneId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ enrollResponseCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ zoneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfIasZoneClusterZoneEnrollResponseCallback(enrollResponseCode, zoneId);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_IDENTIFY_QUERY_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t timeout;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeout = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfIdentifyClusterIdentifyQueryResponseCallback(timeout);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfIdentifyClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_IDENTIFY_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t identifyTime;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ identifyTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfIdentifyClusterIdentifyCallback(identifyTime);
+ break;
+ }
+ case ZCL_IDENTIFY_QUERY_COMMAND_ID: {
+ wasHandled = emberAfIdentifyClusterIdentifyQueryCallback();
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_MOVE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t moveMode;
+ uint8_t rate;
+ uint8_t optionMask;
+ uint8_t optionOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfLevelControlClusterMoveCallback(moveMode, rate, optionMask, optionOverride);
+ break;
+ }
+ case ZCL_MOVE_TO_LEVEL_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t level;
+ uint16_t transitionTime;
+ uint8_t optionMask;
+ uint8_t optionOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ level = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfLevelControlClusterMoveToLevelCallback(level, transitionTime, optionMask, optionOverride);
+ break;
+ }
+ case ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t level;
+ uint16_t transitionTime;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ level = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfLevelControlClusterMoveToLevelWithOnOffCallback(level, transitionTime);
+ break;
+ }
+ case ZCL_MOVE_WITH_ON_OFF_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t moveMode;
+ uint8_t rate;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfLevelControlClusterMoveWithOnOffCallback(moveMode, rate);
+ break;
+ }
+ case ZCL_STEP_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t stepMode;
+ uint8_t stepSize;
+ uint16_t transitionTime;
+ uint8_t optionMask;
+ uint8_t optionOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfLevelControlClusterStepCallback(stepMode, stepSize, transitionTime, optionMask, optionOverride);
+ break;
+ }
+ case ZCL_STEP_WITH_ON_OFF_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t stepMode;
+ uint8_t stepSize;
+ uint16_t transitionTime;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfLevelControlClusterStepWithOnOffCallback(stepMode, stepSize, transitionTime);
+ break;
+ }
+ case ZCL_STOP_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t optionMask;
+ uint8_t optionOverride;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfLevelControlClusterStopCallback(optionMask, optionOverride);
+ break;
+ }
+ case ZCL_STOP_WITH_ON_OFF_COMMAND_ID: {
+ wasHandled = emberAfLevelControlClusterStopWithOnOffCallback();
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_OFF_COMMAND_ID: {
+ wasHandled = emberAfOnOffClusterOffCallback();
+ break;
+ }
+ case ZCL_ON_COMMAND_ID: {
+ wasHandled = emberAfOnOffClusterOnCallback();
+ break;
+ }
+ case ZCL_TOGGLE_COMMAND_ID: {
+ wasHandled = emberAfOnOffClusterToggleCallback();
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_ADD_SCENE_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+ uint16_t groupId;
+ uint8_t sceneId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfScenesClusterAddSceneResponseCallback(status, groupId, sceneId);
+ break;
+ }
+ case ZCL_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+ uint8_t capacity;
+ uint16_t groupId;
+ uint8_t sceneCount;
+ /* TYPE WARNING: array array defaults to */ uint8_t * sceneList;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ capacity = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (status == 0)
+ {
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ }
+ else
+ {
+ sceneCount = UINT8_MAX;
+ }
+ if (status == 0)
+ {
+ sceneList = cmd->buffer + payloadOffset;
+ }
+ else
+ {
+ sceneList = NULL;
+ }
+
+ wasHandled = emberAfScenesClusterGetSceneMembershipResponseCallback(status, capacity, groupId, sceneCount, sceneList);
+ break;
+ }
+ case ZCL_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+ uint16_t groupId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfScenesClusterRemoveAllScenesResponseCallback(status, groupId);
+ break;
+ }
+ case ZCL_REMOVE_SCENE_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+ uint16_t groupId;
+ uint8_t sceneId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfScenesClusterRemoveSceneResponseCallback(status, groupId, sceneId);
+ break;
+ }
+ case ZCL_STORE_SCENE_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+ uint16_t groupId;
+ uint8_t sceneId;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfScenesClusterStoreSceneResponseCallback(status, groupId, sceneId);
+ break;
+ }
+ case ZCL_VIEW_SCENE_RESPONSE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t status;
+ uint16_t groupId;
+ uint8_t sceneId;
+ uint16_t transitionTime;
+ uint8_t * sceneName;
+ /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
+
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (status == 0)
+ {
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ }
+ else
+ {
+ transitionTime = UINT16_MAX;
+ }
+ if (status == 0)
+ {
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += emberAfStringLength(sceneName) + 1u;
+ }
+ else
+ {
+ sceneName = NULL;
+ }
+ if (status == 0)
+ {
+ extensionFieldSets = cmd->buffer + payloadOffset;
+ }
+ else
+ {
+ extensionFieldSets = NULL;
+ }
+
+ wasHandled = emberAfScenesClusterViewSceneResponseCallback(status, groupId, sceneId, transitionTime, sceneName,
+ extensionFieldSets);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
+EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_ADD_SCENE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+ uint8_t sceneId;
+ uint16_t transitionTime;
+ uint8_t * sceneName;
+ /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += emberAfStringLength(sceneName) + 1u;
+ extensionFieldSets = cmd->buffer + payloadOffset;
+
+ wasHandled = emberAfScenesClusterAddSceneCallback(groupId, sceneId, transitionTime, sceneName, extensionFieldSets);
+ break;
+ }
+ case ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfScenesClusterGetSceneMembershipCallback(groupId);
+ break;
+ }
+ case ZCL_RECALL_SCENE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+ uint8_t sceneId;
+ uint16_t transitionTime;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 1;
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfScenesClusterRecallSceneCallback(groupId, sceneId, transitionTime);
+ break;
+ }
+ case ZCL_REMOVE_ALL_SCENES_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfScenesClusterRemoveAllScenesCallback(groupId);
+ break;
+ }
+ case ZCL_REMOVE_SCENE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+ uint8_t sceneId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfScenesClusterRemoveSceneCallback(groupId, sceneId);
+ break;
+ }
+ case ZCL_STORE_SCENE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+ uint8_t sceneId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfScenesClusterStoreSceneCallback(groupId, sceneId);
+ break;
+ }
+ case ZCL_VIEW_SCENE_COMMAND_ID: {
+ uint32_t payloadOffset = cmd->payloadStartIndex;
+ uint16_t groupId;
+ uint8_t sceneId;
+
+ if (cmd->bufLen < payloadOffset + 2)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset += 2;
+ if (cmd->bufLen < payloadOffset + 1)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfScenesClusterViewSceneCallback(groupId, sceneId);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
diff --git a/src/platform/tests/TestMdns.h b/examples/all-clusters-app/all-clusters-common/gen/call-command-handler.h
similarity index 92%
rename from src/platform/tests/TestMdns.h
rename to examples/all-clusters-app/all-clusters-common/gen/call-command-handler.h
index f1169ec544208b..c1b06642f07ac9 100644
--- a/src/platform/tests/TestMdns.h
+++ b/examples/all-clusters-app/all-clusters-common/gen/call-command-handler.h
@@ -1,3 +1,4 @@
+
/*
*
* Copyright (c) 2020 Project CHIP Authors
@@ -15,6 +16,7 @@
* limitations under the License.
*/
+// Prevent multiple inclusion
#pragma once
-int TestMdns();
+#include "af-types.h"
diff --git a/examples/all-clusters-app/all-clusters-common/gen/callback-stub.cpp b/examples/all-clusters-app/all-clusters-common/gen/callback-stub.cpp
new file mode 100644
index 00000000000000..e8214b31cc4718
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/callback-stub.cpp
@@ -0,0 +1,624 @@
+
+/*
+ *
+ * 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.
+ */
+
+#include "callback.h"
+#include "cluster-id.h"
+
+using namespace chip;
+
+// Cluster Init Functions
+void emberAfClusterInitCallback(EndpointId endpoint, ClusterId clusterId)
+{
+ switch (clusterId)
+ {
+ case ZCL_BARRIER_CONTROL_CLUSTER_ID:
+ emberAfBarrierControlClusterInitCallback(endpoint);
+ break;
+ case ZCL_BASIC_CLUSTER_ID:
+ emberAfBasicClusterInitCallback(endpoint);
+ break;
+ case ZCL_COLOR_CONTROL_CLUSTER_ID:
+ emberAfColorControlClusterInitCallback(endpoint);
+ break;
+ case ZCL_DOOR_LOCK_CLUSTER_ID:
+ emberAfDoorLockClusterInitCallback(endpoint);
+ break;
+ case ZCL_GROUPS_CLUSTER_ID:
+ emberAfGroupsClusterInitCallback(endpoint);
+ break;
+ case ZCL_IAS_ZONE_CLUSTER_ID:
+ emberAfIasZoneClusterInitCallback(endpoint);
+ break;
+ case ZCL_IDENTIFY_CLUSTER_ID:
+ emberAfIdentifyClusterInitCallback(endpoint);
+ break;
+ case ZCL_LEVEL_CONTROL_CLUSTER_ID:
+ emberAfLevelControlClusterInitCallback(endpoint);
+ break;
+ case ZCL_ON_OFF_CLUSTER_ID:
+ emberAfOnOffClusterInitCallback(endpoint);
+ break;
+ case ZCL_SCENES_CLUSTER_ID:
+ emberAfScenesClusterInitCallback(endpoint);
+ break;
+ case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
+ emberAfTemperatureMeasurementClusterInitCallback(endpoint);
+ break;
+ default:
+ // Unrecognized cluster ID
+ break;
+ }
+}
+
+void __attribute__((weak)) emberAfBarrierControlClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+void __attribute__((weak)) emberAfBasicClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+void __attribute__((weak)) emberAfColorControlClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+void __attribute__((weak)) emberAfDoorLockClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+void __attribute__((weak)) emberAfGroupsClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+void __attribute__((weak)) emberAfIasZoneClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+void __attribute__((weak)) emberAfIdentifyClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+void __attribute__((weak)) emberAfLevelControlClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+void __attribute__((weak)) emberAfOnOffClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+void __attribute__((weak)) emberAfScenesClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+void __attribute__((weak)) emberAfTemperatureMeasurementClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
+
+//
+// Non-Cluster Related Callbacks
+//
+
+/** @brief Add To Current App Tasks
+ *
+ * This function is only useful to sleepy end devices. This function will note
+ * the passed item as part of a set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement). This will affect how the
+ * application behaves with regard to sleeping and polling. Until the
+ * outstanding task is completed, the device may poll more frequently and sleep
+ * less often.
+ *
+ * @param tasks Ver.: always
+ */
+void emberAfAddToCurrentAppTasksCallback(EmberAfApplicationTask tasks) {}
+
+/** @brief Remove From Current App Tasks
+ *
+ * This function is only useful to sleepy end devices. This function will
+ * remove the passed item from the set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement). This will affect how the
+ * application behaves with regard to sleeping and polling. Removing the item
+ * from the list of outstanding tasks may allow the device to sleep longer and
+ * poll less frequently. If there are other outstanding tasks the system may
+ * still have to stay away and poll more often.
+ *
+ * @param tasks Ver.: always
+ */
+void emberAfRemoveFromCurrentAppTasksCallback(EmberAfApplicationTask tasks) {}
+
+/** @brief Allow Network Write Attribute
+ *
+ * This function is called by the application framework before it writes an
+ * attribute in response to a write attribute request from an external device.
+ * The value passed into this callback is the value to which the attribute is to
+ * be set by the framework.
+ Example: In mirroring simple metering data
+ * on an Energy Services Interface (ESI) (formerly called Energy Service Portal
+ * (ESP) in SE 1.0).), a mirrored simple meter needs to write read-only
+ * attributes on its mirror. The-meter-mirror sample application, located in
+ * app/framework/sample-apps, uses this callback to allow the mirrored device to
+ * write simple metering attributes on the mirror regardless of the fact that
+ * most simple metering attributes are defined as read-only by the ZigBee
+ * specification.
+ Note: The ZCL specification does not (as of this
+ * writing) specify any permission-level security for writing writeable
+ * attributes. As far as the ZCL specification is concerned, if an attribute is
+ * writeable, any device that has a link key for the device should be able to
+ * write that attribute. Furthermore if an attribute is read only, it should not
+ * be written over the air. Thus, if you implement permissions for writing
+ * attributes as a feature, you MAY be operating outside the specification. This
+ * is unlikely to be a problem for writing read-only attributes, but it may be a
+ * problem for attributes that are writeable according to the specification but
+ * restricted by the application implementing this callback.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param attributeId Ver.: always
+ * @param mask Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param value Ver.: always
+ * @param type Ver.: always
+ */
+EmberAfAttributeWritePermission emberAfAllowNetworkWriteAttributeCallback(EndpointId endpoint, ClusterId clusterId,
+ AttributeId attributeId, uint8_t mask,
+ uint16_t manufacturerCode, uint8_t * value, uint8_t type)
+{
+ return EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_ALLOW_WRITE_NORMAL; // Default
+}
+
+/** @brief Attribute Read Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute read.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param attributeId Ver.: always
+ */
+bool emberAfAttributeReadAccessCallback(EndpointId endpoint, ClusterId clusterId, uint16_t manufacturerCode,
+ AttributeId attributeId)
+{
+ return true;
+}
+
+/** @brief Attribute Write Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute write.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param attributeId Ver.: always
+ */
+bool emberAfAttributeWriteAccessCallback(EndpointId endpoint, ClusterId clusterId, uint16_t manufacturerCode,
+ AttributeId attributeId)
+{
+ return true;
+}
+
+/** @brief Default Response
+ *
+ * This function is called by the application framework when a Default Response
+ * command is received from an external device. The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param commandId The command identifier to which this is a response. Ver.:
+ * always
+ * @param status Specifies either SUCCESS or the nature of the error that was
+ * detected in the received command. Ver.: always
+ */
+bool emberAfDefaultResponseCallback(ClusterId clusterId, CommandId commandId, EmberAfStatus status)
+{
+ return false;
+}
+
+/** @brief Discover Attributes Response
+ *
+ * This function is called by the application framework when a Discover
+ * Attributes Response or Discover Attributes Extended Response command is
+ * received from an external device. The Discover Attributes Response command
+ * contains a bool indicating if discovery is complete and a list of zero or
+ * more attribute identifier/type records. The final argument indicates whether
+ * the response is in the extended format or not. The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param discoveryComplete Indicates whether there are more attributes to be
+ * discovered. true if there are no more attributes to be discovered. Ver.:
+ * always
+ * @param buffer Buffer containing the list of attribute identifier/type
+ * records. Ver.: always
+ * @param bufLen The length in bytes of the list. Ver.: always
+ * @param extended Indicates whether the response is in the extended format or
+ * not. Ver.: always
+ */
+bool emberAfDiscoverAttributesResponseCallback(ClusterId clusterId, bool discoveryComplete, uint8_t * buffer, uint16_t bufLen,
+ bool extended)
+{
+ return false;
+}
+
+/** @brief Discover Commands Generated Response
+ *
+ * This function is called by the framework when Discover Commands Generated
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param manufacturerCode Manufacturer code Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered. Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers. Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers. Ver.: always
+ */
+bool emberAfDiscoverCommandsGeneratedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+ CommandId * commandIds, uint16_t commandIdCount)
+{
+ return false;
+}
+
+/** @brief Discover Commands Received Response
+ *
+ * This function is called by the framework when Discover Commands Received
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param manufacturerCode Manufacturer code Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered. Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers. Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers. Ver.: always
+ */
+bool emberAfDiscoverCommandsReceivedResponseCallback(ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+ CommandId * commandIds, uint16_t commandIdCount)
+{
+ return false;
+}
+
+/** @brief Pre Command Received
+ *
+ * This callback is the second in the Application Framework's message processing
+ * chain. At this point in the processing of incoming over-the-air messages, the
+ * application has determined that the incoming message is a ZCL command. It
+ * parses enough of the message to populate an EmberAfClusterCommand struct. The
+ * Application Framework defines this struct value in a local scope to the
+ * command processing but also makes it available through a global pointer
+ * called emberAfCurrentCommand, in app/framework/util/util.c. When command
+ * processing is complete, this pointer is cleared.
+ *
+ * @param cmd Ver.: always
+ */
+bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand * cmd)
+{
+ return false;
+}
+
+/** @brief Pre Message Send
+ *
+ * This function is called by the framework when it is about to pass a message
+ * to the stack primitives for sending. This message may or may not be ZCL,
+ * ZDO, or some other protocol. This is called prior to
+ any ZigBee
+ * fragmentation that may be done. If the function returns true it is assumed
+ * the callback has consumed and processed the message. The callback must also
+ * set the EmberStatus status code to be passed back to the caller. The
+ * framework will do no further processing on the message.
+ If the
+ * function returns false then it is assumed that the callback has not processed
+ * the mesasge and the framework will continue to process accordingly.
+ *
+ * @param messageStruct The structure containing the parameters of the APS
+ * message to be sent. Ver.: always
+ * @param status A pointer to the status code value that will be returned to the
+ * caller. Ver.: always
+ */
+bool emberAfPreMessageSendCallback(EmberAfMessageStruct * messageStruct, EmberStatus * status)
+{
+ return false;
+}
+
+/** @brief Message Sent
+ *
+ * This function is called by the application framework from the message sent
+ * handler, when it is informed by the stack regarding the message sent status.
+ * All of the values passed to the emberMessageSentHandler are passed on to this
+ * callback. This provides an opportunity for the application to verify that its
+ * message has been sent successfully and take the appropriate action. This
+ * callback should return a bool value of true or false. A value of true
+ * indicates that the message sent notification has been handled and should not
+ * be handled by the application framework.
+ *
+ * @param type Ver.: always
+ * @param indexOrDestination Ver.: always
+ * @param apsFrame Ver.: always
+ * @param msgLen Ver.: always
+ * @param message Ver.: always
+ * @param status Ver.: always
+ */
+bool emberAfMessageSentCallback(EmberOutgoingMessageType type, uint16_t indexOrDestination, EmberApsFrame * apsFrame,
+ uint16_t msgLen, uint8_t * message, EmberStatus status)
+{
+ return false;
+}
+
+/** @brief Pre Attribute Change
+ *
+ * This function is called by the application framework before it changes an
+ * attribute value. The value passed into this callback is the value to which
+ * the attribute is to be set by the framework. The application should return
+ * ::EMBER_ZCL_STATUS_SUCCESS to permit the change or any other ::EmberAfStatus
+ * to reject it.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param attributeId Ver.: always
+ * @param mask Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param type Ver.: always
+ * @param size Ver.: always
+ * @param value Ver.: always
+ */
+EmberAfStatus emberAfPreAttributeChangeCallback(EndpointId endpoint, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+ uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
+{
+ return EMBER_ZCL_STATUS_SUCCESS;
+}
+
+/** @brief Read Attributes Response
+ *
+ * This function is called by the application framework when a Read Attributes
+ * Response command is received from an external device. The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param buffer Buffer containing the list of read attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list. Ver.: always
+ */
+bool emberAfReadAttributesResponseCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+ return false;
+}
+
+/** @brief External Attribute Read
+ *
+ * Like emberAfExternalAttributeWriteCallback above, this function is called
+ * when the framework needs to read an attribute that is not stored within the
+ * Application Framework's data structures.
+ All of the important
+ * information about the attribute itself is passed as a pointer to an
+ * EmberAfAttributeMetadata struct, which is stored within the application and
+ * used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h
+ This function assumes that the
+ * application is able to read the attribute, write it into the passed buffer,
+ * and return immediately. Any attributes that require a state machine for
+ * reading and writing are not really candidates for externalization at the
+ * present time. The Application Framework does not currently include a state
+ * machine for reading or writing attributes that must take place across a
+ * series of application ticks. Attributes that cannot be read in a timely
+ * manner should be stored within the Application Framework and updated
+ * occasionally by the application code from within the
+ * emberAfMainTickCallback.
+ If the application was successfully able to
+ * read the attribute and write it into the passed buffer, it should return a
+ * value of EMBER_ZCL_STATUS_SUCCESS. Ensure that the size of the externally
+ * managed attribute value is smaller than what the buffer can hold. In the case
+ * of a buffer overflow throw an appropriate error such as
+ * EMBER_ZCL_STATUS_INSUFFICIENT_SPACE. Any other return value indicates the
+ * application was not able to read the attribute.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param attributeMetadata Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param buffer Ver.: always
+ * @param maxReadLength Ver.: always
+ */
+EmberAfStatus emberAfExternalAttributeReadCallback(EndpointId endpoint, ClusterId clusterId,
+ EmberAfAttributeMetadata * attributeMetadata, uint16_t manufacturerCode,
+ uint8_t * buffer, uint16_t maxReadLength)
+{
+ return EMBER_ZCL_STATUS_FAILURE;
+}
+
+/** @brief Write Attributes Response
+ *
+ * This function is called by the application framework when a Write Attributes
+ * Response command is received from an external device. The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param buffer Buffer containing the list of write attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list. Ver.: always
+ */
+bool emberAfWriteAttributesResponseCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+ return false;
+}
+
+/** @brief External Attribute Write
+ *
+ * This function is called whenever the Application Framework needs to write an
+ * attribute which is not stored within the data structures of the Application
+ * Framework itself. One of the new features in Version 2 is the ability to
+ * store attributes outside the Framework. This is particularly useful for
+ * attributes that do not need to be stored because they can be read off the
+ * hardware when they are needed, or are stored in some central location used by
+ * many modules within the system. In this case, you can indicate that the
+ * attribute is stored externally. When the framework needs to write an external
+ * attribute, it makes a call to this callback.
+ This callback is very
+ * useful for host micros which need to store attributes in persistent memory.
+ * Because each host micro (used with an Ember NCP) has its own type of
+ * persistent memory storage, the Application Framework does not include the
+ * ability to mark attributes as stored in flash the way that it does for Ember
+ * SoCs like the EM35x. On a host micro, any attributes that need to be stored
+ * in persistent memory should be marked as external and accessed through the
+ * external read and write callbacks. Any host code associated with the
+ * persistent storage should be implemented within this callback.
+ All of
+ * the important information about the attribute itself is passed as a pointer
+ * to an EmberAfAttributeMetadata struct, which is stored within the application
+ * and used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h.
+ This function assumes that the
+ * application is able to write the attribute and return immediately. Any
+ * attributes that require a state machine for reading and writing are not
+ * candidates for externalization at the present time. The Application Framework
+ * does not currently include a state machine for reading or writing attributes
+ * that must take place across a series of application ticks. Attributes that
+ * cannot be written immediately should be stored within the Application
+ * Framework and updated occasionally by the application code from within the
+ * emberAfMainTickCallback.
+ If the application was successfully able to
+ * write the attribute, it returns a value of EMBER_ZCL_STATUS_SUCCESS. Any
+ * other return value indicates the application was not able to write the
+ * attribute.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param attributeMetadata Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param buffer Ver.: always
+ */
+EmberAfStatus emberAfExternalAttributeWriteCallback(EndpointId endpoint, ClusterId clusterId,
+ EmberAfAttributeMetadata * attributeMetadata, uint16_t manufacturerCode,
+ uint8_t * buffer)
+{
+ return EMBER_ZCL_STATUS_FAILURE;
+}
+
+/** @brief Report Attributes
+ *
+ * This function is called by the application framework when a Report Attributes
+ * command is received from an external device. The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this command. Ver.: always
+ * @param buffer Buffer containing the list of attribute report records. Ver.:
+ * always
+ * @param bufLen The length in bytes of the list. Ver.: always
+ */
+bool emberAfReportAttributesCallback(ClusterId clusterId, uint8_t * buffer, uint16_t bufLen)
+{
+ return false;
+}
+
+/** @brief Get Current Time
+ *
+ * This callback is called when device attempts to get current time from the
+ * hardware. If this device has means to retrieve exact time, then this method
+ * should implement it. If the callback can't provide the exact time it should
+ * return 0 to indicate failure. Default action is to return 0, which indicates
+ * that device does not have access to real time.
+ *
+ */
+uint32_t emberAfGetCurrentTimeCallback()
+{
+ return 0;
+}
+
+/** @brief Get Endpoint Info
+ *
+ * This function is a callback to an application implemented endpoint that
+ * operates outside the normal application framework. When the framework wishes
+ * to perform operations with that endpoint it uses this callback to retrieve
+ * the endpoint's information. If the endpoint exists and the application can
+ * provide data then true shall be returned. Otherwise the callback must return
+ * false.
+ *
+ * @param endpoint The endpoint to retrieve data for. Ver.: always
+ * @param returnNetworkIndex The index corresponding to the ZigBee network the
+ * endpoint belongs to. If not using a multi-network device, 0 must be
+ * returned. Otherwise on a multi-network device the stack will switch to this
+ * network before sending the message. Ver.: always
+ * @param returnEndpointInfo A pointer to a data struct that will be written
+ * with information about the endpoint. Ver.: always
+ */
+bool emberAfGetEndpointInfoCallback(EndpointId endpoint, uint8_t * returnNetworkIndex,
+ EmberAfEndpointInfoStruct * returnEndpointInfo)
+{
+ return false;
+}
+
+/** @brief Get Source Route Overhead
+ *
+ * This function is called by the framework to determine the overhead required
+ * in the network frame for source routing to a particular destination.
+ *
+ * @param destination The node id of the destination Ver.: always
+ */
+uint8_t emberAfGetSourceRouteOverheadCallback(EmberNodeId destination)
+{
+ return 0;
+}
+
+/** @brief Registration Abort
+ *
+ * This callback is called when the device should abort the registration
+ * process.
+ *
+ */
+void emberAfRegistrationAbortCallback() {}
+
+/** @brief Interpan Send Message
+ *
+ * This function will send a raw MAC message with interpan frame format using
+ * the passed parameters.
+ *
+ * @param header Interpan header info Ver.: always
+ * @param messageLength The length of the message received or to send Ver.:
+ * always
+ * @param message The message data received or to send. Ver.: always
+ */
+EmberStatus emberAfInterpanSendMessageCallback(EmberAfInterpanHeader * header, uint16_t messageLength, uint8_t * message)
+{
+ return EMBER_LIBRARY_NOT_PRESENT;
+}
+
+/** @brief Start Move
+ *
+ * This function is called to initiate the process for a device to move (rejoin)
+ * to a new parent.
+ *
+ */
+bool emberAfStartMoveCallback()
+{
+ return false;
+}
diff --git a/examples/all-clusters-app/all-clusters-common/gen/callback.h b/examples/all-clusters-app/all-clusters-common/gen/callback.h
new file mode 100644
index 00000000000000..7391f06f5fcdf0
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/callback.h
@@ -0,0 +1,2680 @@
+
+/*
+ *
+ * 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.
+ */
+
+// Prevent multiple inclusion
+#pragma once
+
+#include "af-structs.h"
+#include "af-types.h"
+#include "basic-types.h"
+
+/** @brief 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
+ * @param clusterId Ver.: always
+ */
+void emberAfClusterInitCallback(chip::EndpointId endpoint, chip::ClusterId clusterId);
+
+// Cluster Init Functions
+
+/** @brief Barrier Control Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfBarrierControlClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Basic Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfBasicClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Color Control Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfColorControlClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Door Lock Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfDoorLockClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Groups Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfGroupsClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief IAS Zone Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfIasZoneClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Identify Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfIdentifyClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Level Control Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfLevelControlClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief On/off Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfOnOffClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Scenes Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfScenesClusterInitCallback(chip::EndpointId endpoint);
+
+/** @brief Temperature Measurement Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfTemperatureMeasurementClusterInitCallback(chip::EndpointId endpoint);
+
+// Cluster Server/Client Init Functions
+
+//
+// Barrier Control Cluster client
+//
+
+/** @brief Barrier Control Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfBarrierControlClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Barrier Control Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfBarrierControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Barrier Control Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfBarrierControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Barrier Control Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfBarrierControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Barrier Control Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfBarrierControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Barrier Control Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfBarrierControlClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Barrier Control Cluster server
+//
+
+/** @brief Barrier Control Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfBarrierControlClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Barrier Control Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfBarrierControlClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Barrier Control Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfBarrierControlClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Barrier Control Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfBarrierControlClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Barrier Control Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfBarrierControlClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Barrier Control Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfBarrierControlClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
+// Basic Cluster client
+//
+
+/** @brief Basic Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfBasicClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Basic Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfBasicClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Basic Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfBasicClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Basic Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfBasicClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief Basic Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfBasicClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Basic Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfBasicClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Basic Cluster server
+//
+
+/** @brief Basic Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfBasicClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Basic Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfBasicClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Basic Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfBasicClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Basic Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfBasicClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief Basic Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfBasicClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Basic Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfBasicClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
+// Color Control Cluster client
+//
+
+/** @brief Color Control Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfColorControlClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Color Control Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfColorControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Color Control Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfColorControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Color Control Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfColorControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Color Control Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfColorControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Color Control Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfColorControlClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Color Control Cluster server
+//
+
+/** @brief Color Control Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfColorControlClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Color Control Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfColorControlClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Color Control Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfColorControlClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Color Control Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfColorControlClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Color Control Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfColorControlClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Color Control Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfColorControlClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
+// Door Lock Cluster client
+//
+
+/** @brief Door Lock Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfDoorLockClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Door Lock Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfDoorLockClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Door Lock Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfDoorLockClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Door Lock Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfDoorLockClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Door Lock Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfDoorLockClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Door Lock Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfDoorLockClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Door Lock Cluster server
+//
+
+/** @brief Door Lock Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfDoorLockClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Door Lock Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfDoorLockClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Door Lock Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfDoorLockClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Door Lock Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfDoorLockClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Door Lock Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfDoorLockClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Door Lock Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfDoorLockClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
+// Groups Cluster client
+//
+
+/** @brief Groups Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfGroupsClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Groups Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfGroupsClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Groups Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfGroupsClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Groups Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfGroupsClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Groups Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfGroupsClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Groups Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfGroupsClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Groups Cluster server
+//
+
+/** @brief Groups Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfGroupsClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Groups Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfGroupsClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Groups Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfGroupsClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Groups Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfGroupsClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Groups Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfGroupsClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Groups Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfGroupsClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
+// IAS Zone Cluster server
+//
+
+/** @brief IAS Zone Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfIasZoneClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief IAS Zone Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfIasZoneClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief IAS Zone Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfIasZoneClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief IAS Zone Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfIasZoneClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief IAS Zone Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfIasZoneClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief IAS Zone Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfIasZoneClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
+// Identify Cluster client
+//
+
+/** @brief Identify Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfIdentifyClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Identify Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfIdentifyClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Identify Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfIdentifyClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Identify Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfIdentifyClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Identify Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfIdentifyClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Identify Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfIdentifyClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Identify Cluster server
+//
+
+/** @brief Identify Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfIdentifyClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Identify Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfIdentifyClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Identify Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfIdentifyClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Identify Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfIdentifyClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Identify Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfIdentifyClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Identify Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfIdentifyClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
+// Level Control Cluster client
+//
+
+/** @brief Level Control Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfLevelControlClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Level Control Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfLevelControlClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Level Control Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfLevelControlClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Level Control Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfLevelControlClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Level Control Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfLevelControlClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Level Control Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfLevelControlClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Level Control Cluster server
+//
+
+/** @brief Level Control Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfLevelControlClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Level Control Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfLevelControlClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Level Control Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfLevelControlClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Level Control Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfLevelControlClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Level Control Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfLevelControlClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Level Control Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfLevelControlClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
+// On/off Cluster client
+//
+
+/** @brief On/off Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfOnOffClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief On/off Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfOnOffClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief On/off Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfOnOffClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief On/off Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfOnOffClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief On/off Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfOnOffClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief On/off Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfOnOffClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// On/off Cluster server
+//
+
+/** @brief On/off Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfOnOffClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief On/off Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfOnOffClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief On/off Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfOnOffClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief On/off Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfOnOffClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief On/off Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfOnOffClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief On/off Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfOnOffClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
+// Scenes Cluster client
+//
+
+/** @brief Scenes Cluster Client Init
+ *
+ * Client Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfScenesClusterClientInitCallback(chip::EndpointId endpoint);
+
+/** @brief Scenes Cluster Client Attribute Changed
+ *
+ * Client Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfScenesClusterClientAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Scenes Cluster Client Manufacturer Specific Attribute Changed
+ *
+ * Client Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfScenesClusterClientManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Scenes Cluster Client Message Sent
+ *
+ * Client Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfScenesClusterClientMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Scenes Cluster Client Pre Attribute Changed
+ *
+ * client Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfScenesClusterClientPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Scenes Cluster Client Tick
+ *
+ * client Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfScenesClusterClientTickCallback(chip::EndpointId endpoint);
+
+//
+// Scenes Cluster server
+//
+
+/** @brief Scenes Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfScenesClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Scenes Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfScenesClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Scenes Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfScenesClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Scenes Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfScenesClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Scenes Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfScenesClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Scenes Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfScenesClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
+// Temperature Measurement Cluster server
+//
+
+/** @brief Temperature Measurement Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfTemperatureMeasurementClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Temperature Measurement Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfTemperatureMeasurementClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Temperature Measurement Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfTemperatureMeasurementClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Temperature Measurement Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfTemperatureMeasurementClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Temperature Measurement Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfTemperatureMeasurementClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType,
+ uint8_t size, uint8_t * value);
+
+/** @brief Temperature Measurement Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfTemperatureMeasurementClusterServerTickCallback(chip::EndpointId endpoint);
+
+// Cluster Commands Callback
+
+/**
+ * @brief Barrier Control Cluster BarrierControlGoToPercent Command callback
+ * @param percentOpen
+ */
+
+bool emberAfBarrierControlClusterBarrierControlGoToPercentCallback(uint8_t percentOpen);
+
+/**
+ * @brief Barrier Control Cluster BarrierControlStop Command callback
+ */
+
+bool emberAfBarrierControlClusterBarrierControlStopCallback();
+
+/**
+ * @brief Basic Cluster ResetToFactoryDefaults Command callback
+ */
+
+bool emberAfBasicClusterResetToFactoryDefaultsCallback();
+
+/**
+ * @brief Color Control Cluster MoveColor Command callback
+ * @param rateX
+ * @param rateY
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterMoveColorCallback(int16_t rateX, int16_t rateY, uint8_t optionsMask, uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster MoveColorTemperature Command callback
+ * @param moveMode
+ * @param rate
+ * @param colorTemperatureMinimum
+ * @param colorTemperatureMaximum
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterMoveColorTemperatureCallback(uint8_t moveMode, uint16_t rate, uint16_t colorTemperatureMinimum,
+ uint16_t colorTemperatureMaximum, uint8_t optionsMask,
+ uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster MoveHue Command callback
+ * @param moveMode
+ * @param rate
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterMoveHueCallback(uint8_t moveMode, uint8_t rate, uint8_t optionsMask, uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster MoveSaturation Command callback
+ * @param moveMode
+ * @param rate
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterMoveSaturationCallback(uint8_t moveMode, uint8_t rate, uint8_t optionsMask, uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster MoveToColor Command callback
+ * @param colorX
+ * @param colorY
+ * @param transitionTime
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterMoveToColorCallback(uint16_t colorX, uint16_t colorY, uint16_t transitionTime, uint8_t optionsMask,
+ uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster MoveToColorTemperature Command callback
+ * @param colorTemperature
+ * @param transitionTime
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterMoveToColorTemperatureCallback(uint16_t colorTemperature, uint16_t transitionTime,
+ uint8_t optionsMask, uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster MoveToHue Command callback
+ * @param hue
+ * @param direction
+ * @param transitionTime
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterMoveToHueCallback(uint8_t hue, uint8_t direction, uint16_t transitionTime, uint8_t optionsMask,
+ uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster MoveToHueAndSaturation Command callback
+ * @param hue
+ * @param saturation
+ * @param transitionTime
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterMoveToHueAndSaturationCallback(uint8_t hue, uint8_t saturation, uint16_t transitionTime,
+ uint8_t optionsMask, uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster MoveToSaturation Command callback
+ * @param saturation
+ * @param transitionTime
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterMoveToSaturationCallback(uint8_t saturation, uint16_t transitionTime, uint8_t optionsMask,
+ uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster StepColor Command callback
+ * @param stepX
+ * @param stepY
+ * @param transitionTime
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterStepColorCallback(int16_t stepX, int16_t stepY, uint16_t transitionTime, uint8_t optionsMask,
+ uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster StepColorTemperature Command callback
+ * @param stepMode
+ * @param stepSize
+ * @param transitionTime
+ * @param colorTemperatureMinimum
+ * @param colorTemperatureMaximum
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterStepColorTemperatureCallback(uint8_t stepMode, uint16_t stepSize, uint16_t transitionTime,
+ uint16_t colorTemperatureMinimum, uint16_t colorTemperatureMaximum,
+ uint8_t optionsMask, uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster StepHue Command callback
+ * @param stepMode
+ * @param stepSize
+ * @param transitionTime
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterStepHueCallback(uint8_t stepMode, uint8_t stepSize, uint8_t transitionTime, uint8_t optionsMask,
+ uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster StepSaturation Command callback
+ * @param stepMode
+ * @param stepSize
+ * @param transitionTime
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterStepSaturationCallback(uint8_t stepMode, uint8_t stepSize, uint8_t transitionTime,
+ uint8_t optionsMask, uint8_t optionsOverride);
+
+/**
+ * @brief Color Control Cluster StopMoveStep Command callback
+ * @param optionsMask
+ * @param optionsOverride
+ */
+
+bool emberAfColorControlClusterStopMoveStepCallback(uint8_t optionsMask, uint8_t optionsOverride);
+
+/**
+ * @brief Door Lock Cluster LockDoorResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterLockDoorResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster UnlockDoorResponse Command callback
+ * @param status
+ */
+
+bool emberAfDoorLockClusterUnlockDoorResponseCallback(uint8_t status);
+
+/**
+ * @brief Door Lock Cluster ClearAllPins Command callback
+ */
+
+bool emberAfDoorLockClusterClearAllPinsCallback();
+
+/**
+ * @brief Door Lock Cluster ClearAllRfids Command callback
+ */
+
+bool emberAfDoorLockClusterClearAllRfidsCallback();
+
+/**
+ * @brief Door Lock Cluster ClearHolidaySchedule Command callback
+ * @param scheduleId
+ */
+
+bool emberAfDoorLockClusterClearHolidayScheduleCallback(uint8_t scheduleId);
+
+/**
+ * @brief Door Lock Cluster ClearPin Command callback
+ * @param userId
+ */
+
+bool emberAfDoorLockClusterClearPinCallback(uint16_t userId);
+
+/**
+ * @brief Door Lock Cluster ClearRfid Command callback
+ * @param userId
+ */
+
+bool emberAfDoorLockClusterClearRfidCallback(uint16_t userId);
+
+/**
+ * @brief Door Lock Cluster ClearWeekdaySchedule Command callback
+ * @param scheduleId
+ * @param userId
+ */
+
+bool emberAfDoorLockClusterClearWeekdayScheduleCallback(uint8_t scheduleId, uint16_t userId);
+
+/**
+ * @brief Door Lock Cluster ClearYeardaySchedule Command callback
+ * @param scheduleId
+ * @param userId
+ */
+
+bool emberAfDoorLockClusterClearYeardayScheduleCallback(uint8_t scheduleId, uint16_t userId);
+
+/**
+ * @brief Door Lock Cluster GetHolidaySchedule Command callback
+ * @param scheduleId
+ */
+
+bool emberAfDoorLockClusterGetHolidayScheduleCallback(uint8_t scheduleId);
+
+/**
+ * @brief Door Lock Cluster GetLogRecord Command callback
+ * @param logIndex
+ */
+
+bool emberAfDoorLockClusterGetLogRecordCallback(uint16_t logIndex);
+
+/**
+ * @brief Door Lock Cluster GetPin Command callback
+ * @param userId
+ */
+
+bool emberAfDoorLockClusterGetPinCallback(uint16_t userId);
+
+/**
+ * @brief Door Lock Cluster GetRfid Command callback
+ * @param userId
+ */
+
+bool emberAfDoorLockClusterGetRfidCallback(uint16_t userId);
+
+/**
+ * @brief Door Lock Cluster GetUserType Command callback
+ * @param userId
+ */
+
+bool emberAfDoorLockClusterGetUserTypeCallback(uint16_t userId);
+
+/**
+ * @brief Door Lock Cluster GetWeekdaySchedule Command callback
+ * @param scheduleId
+ * @param userId
+ */
+
+bool emberAfDoorLockClusterGetWeekdayScheduleCallback(uint8_t scheduleId, uint16_t userId);
+
+/**
+ * @brief Door Lock Cluster GetYeardaySchedule Command callback
+ * @param scheduleId
+ * @param userId
+ */
+
+bool emberAfDoorLockClusterGetYeardayScheduleCallback(uint8_t scheduleId, uint16_t userId);
+
+/**
+ * @brief Door Lock Cluster LockDoor Command callback
+ * @param pin
+ */
+
+bool emberAfDoorLockClusterLockDoorCallback(uint8_t * PIN);
+
+/**
+ * @brief Door Lock Cluster SetHolidaySchedule Command callback
+ * @param scheduleId
+ * @param localStartTime
+ * @param localEndTime
+ * @param operatingModeDuringHoliday
+ */
+
+bool emberAfDoorLockClusterSetHolidayScheduleCallback(uint8_t scheduleId, uint32_t localStartTime, uint32_t localEndTime,
+ uint8_t operatingModeDuringHoliday);
+
+/**
+ * @brief Door Lock Cluster SetPin Command callback
+ * @param userId
+ * @param userStatus
+ * @param userType
+ * @param pin
+ */
+
+bool emberAfDoorLockClusterSetPinCallback(uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * pin);
+
+/**
+ * @brief Door Lock Cluster SetRfid Command callback
+ * @param userId
+ * @param userStatus
+ * @param userType
+ * @param id
+ */
+
+bool emberAfDoorLockClusterSetRfidCallback(uint16_t userId, uint8_t userStatus, uint8_t userType, uint8_t * id);
+
+/**
+ * @brief Door Lock Cluster SetUserType Command callback
+ * @param userId
+ * @param userType
+ */
+
+bool emberAfDoorLockClusterSetUserTypeCallback(uint16_t userId, uint8_t userType);
+
+/**
+ * @brief Door Lock Cluster SetWeekdaySchedule Command callback
+ * @param scheduleId
+ * @param userId
+ * @param daysMask
+ * @param startHour
+ * @param startMinute
+ * @param endHour
+ * @param endMinute
+ */
+
+bool emberAfDoorLockClusterSetWeekdayScheduleCallback(uint8_t scheduleId, uint16_t userId, uint8_t daysMask, uint8_t startHour,
+ uint8_t startMinute, uint8_t endHour, uint8_t endMinute);
+
+/**
+ * @brief Door Lock Cluster SetYeardaySchedule Command callback
+ * @param scheduleId
+ * @param userId
+ * @param localStartTime
+ * @param localEndTime
+ */
+
+bool emberAfDoorLockClusterSetYeardayScheduleCallback(uint8_t scheduleId, uint16_t userId, uint32_t localStartTime,
+ uint32_t localEndTime);
+
+/**
+ * @brief Door Lock Cluster UnlockDoor Command callback
+ * @param pin
+ */
+
+bool emberAfDoorLockClusterUnlockDoorCallback(uint8_t * PIN);
+
+/**
+ * @brief Door Lock Cluster UnlockWithTimeout Command callback
+ * @param timeoutInSeconds
+ * @param pin
+ */
+
+bool emberAfDoorLockClusterUnlockWithTimeoutCallback(uint16_t timeoutInSeconds, uint8_t * pin);
+
+/**
+ * @brief Groups Cluster AddGroupResponse Command callback
+ * @param status
+ * @param groupId
+ */
+
+bool emberAfGroupsClusterAddGroupResponseCallback(uint8_t status, uint16_t groupId);
+
+/**
+ * @brief Groups Cluster GetGroupMembershipResponse Command callback
+ * @param capacity
+ * @param groupCount
+ * @param groupList
+ */
+
+bool emberAfGroupsClusterGetGroupMembershipResponseCallback(uint8_t capacity, uint8_t groupCount,
+ /* TYPE WARNING: array array defaults to */ uint8_t * groupList);
+
+/**
+ * @brief Groups Cluster RemoveGroupResponse Command callback
+ * @param status
+ * @param groupId
+ */
+
+bool emberAfGroupsClusterRemoveGroupResponseCallback(uint8_t status, uint16_t groupId);
+
+/**
+ * @brief Groups Cluster ViewGroupResponse Command callback
+ * @param status
+ * @param groupId
+ * @param groupName
+ */
+
+bool emberAfGroupsClusterViewGroupResponseCallback(uint8_t status, uint16_t groupId, uint8_t * groupName);
+
+/**
+ * @brief Groups Cluster AddGroup Command callback
+ * @param groupId
+ * @param groupName
+ */
+
+bool emberAfGroupsClusterAddGroupCallback(uint16_t groupId, uint8_t * groupName);
+
+/**
+ * @brief Groups Cluster AddGroupIfIdentifying Command callback
+ * @param groupId
+ * @param groupName
+ */
+
+bool emberAfGroupsClusterAddGroupIfIdentifyingCallback(uint16_t groupId, uint8_t * groupName);
+
+/**
+ * @brief Groups Cluster GetGroupMembership Command callback
+ * @param groupCount
+ * @param groupList
+ */
+
+bool emberAfGroupsClusterGetGroupMembershipCallback(uint8_t groupCount,
+ /* TYPE WARNING: array array defaults to */ uint8_t * groupList);
+
+/**
+ * @brief Groups Cluster RemoveAllGroups Command callback
+ */
+
+bool emberAfGroupsClusterRemoveAllGroupsCallback();
+
+/**
+ * @brief Groups Cluster RemoveGroup Command callback
+ * @param groupId
+ */
+
+bool emberAfGroupsClusterRemoveGroupCallback(uint16_t groupId);
+
+/**
+ * @brief Groups Cluster ViewGroup Command callback
+ * @param groupId
+ */
+
+bool emberAfGroupsClusterViewGroupCallback(uint16_t groupId);
+
+/**
+ * @brief IAS Zone Cluster ZoneEnrollResponse Command callback
+ * @param enrollResponseCode
+ * @param zoneId
+ */
+
+bool emberAfIasZoneClusterZoneEnrollResponseCallback(uint8_t enrollResponseCode, uint8_t zoneId);
+
+/**
+ * @brief Identify Cluster IdentifyQueryResponse Command callback
+ * @param timeout
+ */
+
+bool emberAfIdentifyClusterIdentifyQueryResponseCallback(uint16_t timeout);
+
+/**
+ * @brief Identify Cluster Identify Command callback
+ * @param identifyTime
+ */
+
+bool emberAfIdentifyClusterIdentifyCallback(uint16_t identifyTime);
+
+/**
+ * @brief Identify Cluster IdentifyQuery Command callback
+ */
+
+bool emberAfIdentifyClusterIdentifyQueryCallback();
+
+/**
+ * @brief Level Control Cluster Move Command callback
+ * @param moveMode
+ * @param rate
+ * @param optionMask
+ * @param optionOverride
+ */
+
+bool emberAfLevelControlClusterMoveCallback(uint8_t moveMode, uint8_t rate, uint8_t optionMask, uint8_t optionOverride);
+
+/**
+ * @brief Level Control Cluster MoveToLevel Command callback
+ * @param level
+ * @param transitionTime
+ * @param optionMask
+ * @param optionOverride
+ */
+
+bool emberAfLevelControlClusterMoveToLevelCallback(uint8_t level, uint16_t transitionTime, uint8_t optionMask,
+ uint8_t optionOverride);
+
+/**
+ * @brief Level Control Cluster MoveToLevelWithOnOff Command callback
+ * @param level
+ * @param transitionTime
+ */
+
+bool emberAfLevelControlClusterMoveToLevelWithOnOffCallback(uint8_t level, uint16_t transitionTime);
+
+/**
+ * @brief Level Control Cluster MoveWithOnOff Command callback
+ * @param moveMode
+ * @param rate
+ */
+
+bool emberAfLevelControlClusterMoveWithOnOffCallback(uint8_t moveMode, uint8_t rate);
+
+/**
+ * @brief Level Control Cluster Step Command callback
+ * @param stepMode
+ * @param stepSize
+ * @param transitionTime
+ * @param optionMask
+ * @param optionOverride
+ */
+
+bool emberAfLevelControlClusterStepCallback(uint8_t stepMode, uint8_t stepSize, uint16_t transitionTime, uint8_t optionMask,
+ uint8_t optionOverride);
+
+/**
+ * @brief Level Control Cluster StepWithOnOff Command callback
+ * @param stepMode
+ * @param stepSize
+ * @param transitionTime
+ */
+
+bool emberAfLevelControlClusterStepWithOnOffCallback(uint8_t stepMode, uint8_t stepSize, uint16_t transitionTime);
+
+/**
+ * @brief Level Control Cluster Stop Command callback
+ * @param optionMask
+ * @param optionOverride
+ */
+
+bool emberAfLevelControlClusterStopCallback(uint8_t optionMask, uint8_t optionOverride);
+
+/**
+ * @brief Level Control Cluster StopWithOnOff Command callback
+ */
+
+bool emberAfLevelControlClusterStopWithOnOffCallback();
+
+/**
+ * @brief On/off Cluster Off Command callback
+ */
+
+bool emberAfOnOffClusterOffCallback();
+
+/**
+ * @brief On/off Cluster On Command callback
+ */
+
+bool emberAfOnOffClusterOnCallback();
+
+/**
+ * @brief On/off Cluster Toggle Command callback
+ */
+
+bool emberAfOnOffClusterToggleCallback();
+
+/**
+ * @brief Scenes Cluster AddSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterAddSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster GetSceneMembershipResponse Command callback
+ * @param status
+ * @param capacity
+ * @param groupId
+ * @param sceneCount
+ * @param sceneList
+ */
+
+bool emberAfScenesClusterGetSceneMembershipResponseCallback(uint8_t status, uint8_t capacity, uint16_t groupId, uint8_t sceneCount,
+ /* TYPE WARNING: array array defaults to */ uint8_t * sceneList);
+
+/**
+ * @brief Scenes Cluster RemoveAllScenesResponse Command callback
+ * @param status
+ * @param groupId
+ */
+
+bool emberAfScenesClusterRemoveAllScenesResponseCallback(uint8_t status, uint16_t groupId);
+
+/**
+ * @brief Scenes Cluster RemoveSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterRemoveSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster StoreSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterStoreSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster ViewSceneResponse Command callback
+ * @param status
+ * @param groupId
+ * @param sceneId
+ * @param transitionTime
+ * @param sceneName
+ * @param extensionFieldSets
+ */
+
+bool emberAfScenesClusterViewSceneResponseCallback(uint8_t status, uint16_t groupId, uint8_t sceneId, uint16_t transitionTime,
+ uint8_t * sceneName,
+ /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets);
+
+/**
+ * @brief Scenes Cluster AddScene Command callback
+ * @param groupId
+ * @param sceneId
+ * @param transitionTime
+ * @param sceneName
+ * @param extensionFieldSets
+ */
+
+bool emberAfScenesClusterAddSceneCallback(uint16_t groupId, uint8_t sceneId, uint16_t transitionTime, uint8_t * sceneName,
+ /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets);
+
+/**
+ * @brief Scenes Cluster GetSceneMembership Command callback
+ * @param groupId
+ */
+
+bool emberAfScenesClusterGetSceneMembershipCallback(uint16_t groupId);
+
+/**
+ * @brief Scenes Cluster RecallScene Command callback
+ * @param groupId
+ * @param sceneId
+ * @param transitionTime
+ */
+
+bool emberAfScenesClusterRecallSceneCallback(uint16_t groupId, uint8_t sceneId, uint16_t transitionTime);
+
+/**
+ * @brief Scenes Cluster RemoveAllScenes Command callback
+ * @param groupId
+ */
+
+bool emberAfScenesClusterRemoveAllScenesCallback(uint16_t groupId);
+
+/**
+ * @brief Scenes Cluster RemoveScene Command callback
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterRemoveSceneCallback(uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster StoreScene Command callback
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterStoreSceneCallback(uint16_t groupId, uint8_t sceneId);
+
+/**
+ * @brief Scenes Cluster ViewScene Command callback
+ * @param groupId
+ * @param sceneId
+ */
+
+bool emberAfScenesClusterViewSceneCallback(uint16_t groupId, uint8_t sceneId);
+
+//
+// Non-Cluster Related Callbacks
+//
+
+/** @brief Add To Current App Tasks
+ *
+ * This function is only useful to sleepy end devices. This function will note
+ * the passed item as part of a set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement). This will affect how the
+ * application behaves with regard to sleeping and polling. Until the
+ * outstanding task is completed, the device may poll more frequently and sleep
+ * less often.
+ *
+ * @param tasks Ver.: always
+ */
+void emberAfAddToCurrentAppTasksCallback(EmberAfApplicationTask tasks);
+
+/** @brief Remove From Current App Tasks
+ *
+ * This function is only useful to sleepy end devices. This function will
+ * remove the passed item from the set of tasks the application has outstanding
+ * (e.g. message sent requiring APS acknwoledgement). This will affect how the
+ * application behaves with regard to sleeping and polling. Removing the item
+ * from the list of outstanding tasks may allow the device to sleep longer and
+ * poll less frequently. If there are other outstanding tasks the system may
+ * still have to stay away and poll more often.
+ *
+ * @param tasks Ver.: always
+ */
+void emberAfRemoveFromCurrentAppTasksCallback(EmberAfApplicationTask tasks);
+
+/** @brief Allow Network Write Attribute
+ *
+ * This function is called by the application framework before it writes an
+ * attribute in response to a write attribute request from an external device.
+ * The value passed into this callback is the value to which the attribute is to
+ * be set by the framework.
+ Example: In mirroring simple metering data
+ * on an Energy Services Interface (ESI) (formerly called Energy Service Portal
+ * (ESP) in SE 1.0).), a mirrored simple meter needs to write read-only
+ * attributes on its mirror. The-meter-mirror sample application, located in
+ * app/framework/sample-apps, uses this callback to allow the mirrored device to
+ * write simple metering attributes on the mirror regardless of the fact that
+ * most simple metering attributes are defined as read-only by the ZigBee
+ * specification.
+ Note: The ZCL specification does not (as of this
+ * writing) specify any permission-level security for writing writeable
+ * attributes. As far as the ZCL specification is concerned, if an attribute is
+ * writeable, any device that has a link key for the device should be able to
+ * write that attribute. Furthermore if an attribute is read only, it should not
+ * be written over the air. Thus, if you implement permissions for writing
+ * attributes as a feature, you MAY be operating outside the specification. This
+ * is unlikely to be a problem for writing read-only attributes, but it may be a
+ * problem for attributes that are writeable according to the specification but
+ * restricted by the application implementing this callback.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param attributeId Ver.: always
+ * @param mask Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param value Ver.: always
+ * @param type Ver.: always
+ */
+EmberAfAttributeWritePermission emberAfAllowNetworkWriteAttributeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
+ chip::AttributeId attributeId, uint8_t mask,
+ uint16_t manufacturerCode, uint8_t * value, uint8_t type);
+
+/** @brief Attribute Read Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute read.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param attributeId Ver.: always
+ */
+bool emberAfAttributeReadAccessCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, uint16_t manufacturerCode,
+ chip::AttributeId attributeId);
+
+/** @brief Attribute Write Access
+ *
+ * This function is called whenever the Application Framework needs to check
+ * access permission for an attribute write.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param attributeId Ver.: always
+ */
+bool emberAfAttributeWriteAccessCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, uint16_t manufacturerCode,
+ chip::AttributeId attributeId);
+
+/** @brief Default Response
+ *
+ * This function is called by the application framework when a Default Response
+ * command is received from an external device. The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param commandId The command identifier to which this is a response. Ver.:
+ * always
+ * @param status Specifies either SUCCESS or the nature of the error that was
+ * detected in the received command. Ver.: always
+ */
+bool emberAfDefaultResponseCallback(chip::ClusterId clusterId, chip::CommandId commandId, EmberAfStatus status);
+
+/** @brief Discover Attributes Response
+ *
+ * This function is called by the application framework when a Discover
+ * Attributes Response or Discover Attributes Extended Response command is
+ * received from an external device. The Discover Attributes Response command
+ * contains a bool indicating if discovery is complete and a list of zero or
+ * more attribute identifier/type records. The final argument indicates whether
+ * the response is in the extended format or not. The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param discoveryComplete Indicates whether there are more attributes to be
+ * discovered. true if there are no more attributes to be discovered. Ver.:
+ * always
+ * @param buffer Buffer containing the list of attribute identifier/type
+ * records. Ver.: always
+ * @param bufLen The length in bytes of the list. Ver.: always
+ * @param extended Indicates whether the response is in the extended format or
+ * not. Ver.: always
+ */
+bool emberAfDiscoverAttributesResponseCallback(chip::ClusterId clusterId, bool discoveryComplete, uint8_t * buffer, uint16_t bufLen,
+ bool extended);
+
+/** @brief Discover Commands Generated Response
+ *
+ * This function is called by the framework when Discover Commands Generated
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param manufacturerCode Manufacturer code Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered. Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers. Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers. Ver.: always
+ */
+bool emberAfDiscoverCommandsGeneratedResponseCallback(chip::ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+ chip::CommandId * commandIds, uint16_t commandIdCount);
+
+/** @brief Discover Commands Received Response
+ *
+ * This function is called by the framework when Discover Commands Received
+ * Response is received.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param manufacturerCode Manufacturer code Ver.: always
+ * @param discoveryComplete Indicates whether there are more commands to be
+ * discovered. Ver.: always
+ * @param commandIds Buffer containing the list of command identifiers. Ver.:
+ * always
+ * @param commandIdCount The length of bytes of the list, whish is the same as
+ * the number of identifiers. Ver.: always
+ */
+bool emberAfDiscoverCommandsReceivedResponseCallback(chip::ClusterId clusterId, uint16_t manufacturerCode, bool discoveryComplete,
+ chip::CommandId * commandIds, uint16_t commandIdCount);
+
+/** @brief Pre Command Received
+ *
+ * This callback is the second in the Application Framework's message processing
+ * chain. At this point in the processing of incoming over-the-air messages, the
+ * application has determined that the incoming message is a ZCL command. It
+ * parses enough of the message to populate an EmberAfClusterCommand struct. The
+ * Application Framework defines this struct value in a local scope to the
+ * command processing but also makes it available through a global pointer
+ * called emberAfCurrentCommand, in app/framework/util/util.c. When command
+ * processing is complete, this pointer is cleared.
+ *
+ * @param cmd Ver.: always
+ */
+bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand * cmd);
+
+/** @brief Pre Message Send
+ *
+ * This function is called by the framework when it is about to pass a message
+ * to the stack primitives for sending. This message may or may not be ZCL,
+ * ZDO, or some other protocol. This is called prior to
+ any ZigBee
+ * fragmentation that may be done. If the function returns true it is assumed
+ * the callback has consumed and processed the message. The callback must also
+ * set the EmberStatus status code to be passed back to the caller. The
+ * framework will do no further processing on the message.
+ If the
+ * function returns false then it is assumed that the callback has not processed
+ * the mesasge and the framework will continue to process accordingly.
+ *
+ * @param messageStruct The structure containing the parameters of the APS
+ * message to be sent. Ver.: always
+ * @param status A pointer to the status code value that will be returned to the
+ * caller. Ver.: always
+ */
+bool emberAfPreMessageSendCallback(EmberAfMessageStruct * messageStruct, EmberStatus * status);
+
+/** @brief Message Sent
+ *
+ * This function is called by the application framework from the message sent
+ * handler, when it is informed by the stack regarding the message sent status.
+ * All of the values passed to the emberMessageSentHandler are passed on to this
+ * callback. This provides an opportunity for the application to verify that its
+ * message has been sent successfully and take the appropriate action. This
+ * callback should return a bool value of true or false. A value of true
+ * indicates that the message sent notification has been handled and should not
+ * be handled by the application framework.
+ *
+ * @param type Ver.: always
+ * @param indexOrDestination Ver.: always
+ * @param apsFrame Ver.: always
+ * @param msgLen Ver.: always
+ * @param message Ver.: always
+ * @param status Ver.: always
+ */
+bool emberAfMessageSentCallback(EmberOutgoingMessageType type, uint16_t indexOrDestination, EmberApsFrame * apsFrame,
+ uint16_t msgLen, uint8_t * message, EmberStatus status);
+
+/** @brief Pre Attribute Change
+ *
+ * This function is called by the application framework before it changes an
+ * attribute value. The value passed into this callback is the value to which
+ * the attribute is to be set by the framework. The application should return
+ * ::EMBER_ZCL_STATUS_SUCCESS to permit the change or any other ::EmberAfStatus
+ * to reject it.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param attributeId Ver.: always
+ * @param mask Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param type Ver.: always
+ * @param size Ver.: always
+ * @param value Ver.: always
+ */
+EmberAfStatus emberAfPreAttributeChangeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, chip::AttributeId attributeId,
+ uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint8_t size,
+ uint8_t * value);
+
+/** @brief Post Attribute Change
+ *
+ * This function is called by the application framework after it changes an
+ * attribute value. The value passed into this callback is the value to which
+ * the attribute was set by the framework.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param attributeId Ver.: always
+ * @param mask Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param type Ver.: always
+ * @param size Ver.: always
+ * @param value Ver.: always
+ */
+void emberAfPostAttributeChangeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, chip::AttributeId attributeId,
+ uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value);
+
+/** @brief Read Attributes Response
+ *
+ * This function is called by the application framework when a Read Attributes
+ * Response command is received from an external device. The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param buffer Buffer containing the list of read attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list. Ver.: always
+ */
+bool emberAfReadAttributesResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief External Attribute Read
+ *
+ * Like emberAfExternalAttributeWriteCallback above, this function is called
+ * when the framework needs to read an attribute that is not stored within the
+ * Application Framework's data structures.
+ All of the important
+ * information about the attribute itself is passed as a pointer to an
+ * EmberAfAttributeMetadata struct, which is stored within the application and
+ * used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h
+ This function assumes that the
+ * application is able to read the attribute, write it into the passed buffer,
+ * and return immediately. Any attributes that require a state machine for
+ * reading and writing are not really candidates for externalization at the
+ * present time. The Application Framework does not currently include a state
+ * machine for reading or writing attributes that must take place across a
+ * series of application ticks. Attributes that cannot be read in a timely
+ * manner should be stored within the Application Framework and updated
+ * occasionally by the application code from within the
+ * emberAfMainTickCallback.
+ If the application was successfully able to
+ * read the attribute and write it into the passed buffer, it should return a
+ * value of EMBER_ZCL_STATUS_SUCCESS. Ensure that the size of the externally
+ * managed attribute value is smaller than what the buffer can hold. In the case
+ * of a buffer overflow throw an appropriate error such as
+ * EMBER_ZCL_STATUS_INSUFFICIENT_SPACE. Any other return value indicates the
+ * application was not able to read the attribute.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param attributeMetadata Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param buffer Ver.: always
+ * @param maxReadLength Ver.: always
+ */
+EmberAfStatus emberAfExternalAttributeReadCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
+ EmberAfAttributeMetadata * attributeMetadata, uint16_t manufacturerCode,
+ uint8_t * buffer, uint16_t maxReadLength);
+
+/** @brief Write Attributes Response
+ *
+ * This function is called by the application framework when a Write Attributes
+ * Response command is received from an external device. The application should
+ * return true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this response. Ver.: always
+ * @param buffer Buffer containing the list of write attribute status records.
+ * Ver.: always
+ * @param bufLen The length in bytes of the list. Ver.: always
+ */
+bool emberAfWriteAttributesResponseCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief External Attribute Write
+ *
+ * This function is called whenever the Application Framework needs to write an
+ * attribute which is not stored within the data structures of the Application
+ * Framework itself. One of the new features in Version 2 is the ability to
+ * store attributes outside the Framework. This is particularly useful for
+ * attributes that do not need to be stored because they can be read off the
+ * hardware when they are needed, or are stored in some central location used by
+ * many modules within the system. In this case, you can indicate that the
+ * attribute is stored externally. When the framework needs to write an external
+ * attribute, it makes a call to this callback.
+ This callback is very
+ * useful for host micros which need to store attributes in persistent memory.
+ * Because each host micro (used with an Ember NCP) has its own type of
+ * persistent memory storage, the Application Framework does not include the
+ * ability to mark attributes as stored in flash the way that it does for Ember
+ * SoCs like the EM35x. On a host micro, any attributes that need to be stored
+ * in persistent memory should be marked as external and accessed through the
+ * external read and write callbacks. Any host code associated with the
+ * persistent storage should be implemented within this callback.
+ All of
+ * the important information about the attribute itself is passed as a pointer
+ * to an EmberAfAttributeMetadata struct, which is stored within the application
+ * and used to manage the attribute. A complete description of the
+ * EmberAfAttributeMetadata struct is provided in
+ * app/framework/include/af-types.h.
+ This function assumes that the
+ * application is able to write the attribute and return immediately. Any
+ * attributes that require a state machine for reading and writing are not
+ * candidates for externalization at the present time. The Application Framework
+ * does not currently include a state machine for reading or writing attributes
+ * that must take place across a series of application ticks. Attributes that
+ * cannot be written immediately should be stored within the Application
+ * Framework and updated occasionally by the application code from within the
+ * emberAfMainTickCallback.
+ If the application was successfully able to
+ * write the attribute, it returns a value of EMBER_ZCL_STATUS_SUCCESS. Any
+ * other return value indicates the application was not able to write the
+ * attribute.
+ *
+ * @param endpoint Ver.: always
+ * @param clusterId Ver.: always
+ * @param attributeMetadata Ver.: always
+ * @param manufacturerCode Ver.: always
+ * @param buffer Ver.: always
+ */
+EmberAfStatus emberAfExternalAttributeWriteCallback(chip::EndpointId endpoint, chip::ClusterId clusterId,
+ EmberAfAttributeMetadata * attributeMetadata, uint16_t manufacturerCode,
+ uint8_t * buffer);
+
+/** @brief Report Attributes
+ *
+ * This function is called by the application framework when a Report Attributes
+ * command is received from an external device. The application should return
+ * true if the message was processed or false if it was not.
+ *
+ * @param clusterId The cluster identifier of this command. Ver.: always
+ * @param buffer Buffer containing the list of attribute report records. Ver.:
+ * always
+ * @param bufLen The length in bytes of the list. Ver.: always
+ */
+bool emberAfReportAttributesCallback(chip::ClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief Get Current Time
+ *
+ * This callback is called when device attempts to get current time from the
+ * hardware. If this device has means to retrieve exact time, then this method
+ * should implement it. If the callback can't provide the exact time it should
+ * return 0 to indicate failure. Default action is to return 0, which indicates
+ * that device does not have access to real time.
+ *
+ */
+uint32_t emberAfGetCurrentTimeCallback();
+
+/** @brief Get Endpoint Info
+ *
+ * This function is a callback to an application implemented endpoint that
+ * operates outside the normal application framework. When the framework wishes
+ * to perform operations with that endpoint it uses this callback to retrieve
+ * the endpoint's information. If the endpoint exists and the application can
+ * provide data then true shall be returned. Otherwise the callback must return
+ * false.
+ *
+ * @param endpoint The endpoint to retrieve data for. Ver.: always
+ * @param returnNetworkIndex The index corresponding to the ZigBee network the
+ * endpoint belongs to. If not using a multi-network device, 0 must be
+ * returned. Otherwise on a multi-network device the stack will switch to this
+ * network before sending the message. Ver.: always
+ * @param returnEndpointInfo A pointer to a data struct that will be written
+ * with information about the endpoint. Ver.: always
+ */
+bool emberAfGetEndpointInfoCallback(chip::EndpointId endpoint, uint8_t * returnNetworkIndex,
+ EmberAfEndpointInfoStruct * returnEndpointInfo);
+
+/** @brief Get Source Route Overhead
+ *
+ * This function is called by the framework to determine the overhead required
+ * in the network frame for source routing to a particular destination.
+ *
+ * @param destination The node id of the destination Ver.: always
+ */
+uint8_t emberAfGetSourceRouteOverheadCallback(EmberNodeId destination);
+
+/** @brief Registration Abort
+ *
+ * This callback is called when the device should abort the registration
+ * process.
+ *
+ */
+void emberAfRegistrationAbortCallback();
+
+/** @brief Interpan Send Message
+ *
+ * This function will send a raw MAC message with interpan frame format using
+ * the passed parameters.
+ *
+ * @param header Interpan header info Ver.: always
+ * @param messageLength The length of the message received or to send Ver.:
+ * always
+ * @param message The message data received or to send. Ver.: always
+ */
+EmberStatus emberAfInterpanSendMessageCallback(EmberAfInterpanHeader * header, uint16_t messageLength, uint8_t * message);
+
+/** @brief Start Move
+ *
+ * This function is called to initiate the process for a device to move (rejoin)
+ * to a new parent.
+ *
+ */
+bool emberAfStartMoveCallback();
diff --git a/examples/all-clusters-app/all-clusters-common/gen/client-command-macro.h b/examples/all-clusters-app/all-clusters-common/gen/client-command-macro.h
new file mode 100644
index 00000000000000..f1b0c4633a2b14
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/client-command-macro.h
@@ -0,0 +1,6165 @@
+
+/*
+ *
+ * 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.
+ */
+
+// Prevent multiple inclusion
+#pragma once
+
+/** @brief Command description for ReadAttributes
+ *
+ * Command: ReadAttributes
+ * @param attributeIds ATTRIBUTE_ID []
+ * @param attributeIdsLen int
+ */
+#define emberAfFillCommandGlobalReadAttributes(clusterId, attributeIds, attributeIdsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_ATTRIBUTES_COMMAND_ID, "b", attributeIds, attributeIdsLen);
+
+/** @brief Command description for ReadAttributesResponse
+ *
+ * Command: ReadAttributesResponse
+ * @param readAttributeStatusRecords ReadAttributeStatusRecord []
+ * @param readAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadAttributesResponse(clusterId, readAttributeStatusRecords, readAttributeStatusRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_ATTRIBUTES_RESPONSE_COMMAND_ID, "b", readAttributeStatusRecords, \
+ readAttributeStatusRecordsLen);
+
+/** @brief Command description for WriteAttributes
+ *
+ * Command: WriteAttributes
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributes(clusterId, writeAttributeRecords, writeAttributeRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_COMMAND_ID, "b", writeAttributeRecords, \
+ writeAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesUndivided
+ *
+ * Command: WriteAttributesUndivided
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesUndivided(clusterId, writeAttributeRecords, writeAttributeRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_UNDIVIDED_COMMAND_ID, "b", writeAttributeRecords, \
+ writeAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesResponse
+ *
+ * Command: WriteAttributesResponse
+ * @param writeAttributeStatusRecords WriteAttributeStatusRecord []
+ * @param writeAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesResponse(clusterId, writeAttributeStatusRecords, writeAttributeStatusRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_RESPONSE_COMMAND_ID, "b", writeAttributeStatusRecords, \
+ writeAttributeStatusRecordsLen);
+
+/** @brief Command description for WriteAttributesNoResponse
+ *
+ * Command: WriteAttributesNoResponse
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesNoResponse(clusterId, writeAttributeRecords, writeAttributeRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_NO_RESPONSE_COMMAND_ID, "b", writeAttributeRecords, \
+ writeAttributeRecordsLen);
+
+/** @brief Command description for ConfigureReporting
+ *
+ * Command: ConfigureReporting
+ * @param configureReportingRecords ConfigureReportingRecord []
+ * @param configureReportingRecordsLen int
+ */
+#define emberAfFillCommandGlobalConfigureReporting(clusterId, configureReportingRecords, configureReportingRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_CONFIGURE_REPORTING_COMMAND_ID, "b", configureReportingRecords, \
+ configureReportingRecordsLen);
+
+/** @brief Command description for ConfigureReportingResponse
+ *
+ * Command: ConfigureReportingResponse
+ * @param configureReportingStatusRecords ConfigureReportingStatusRecord []
+ * @param configureReportingStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalConfigureReportingResponse(clusterId, configureReportingStatusRecords, \
+ configureReportingStatusRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_CONFIGURE_REPORTING_RESPONSE_COMMAND_ID, "b", configureReportingStatusRecords, \
+ configureReportingStatusRecordsLen);
+
+/** @brief Command description for ReadReportingConfiguration
+ *
+ * Command: ReadReportingConfiguration
+ * @param readReportingConfigurationAttributeRecords ReadReportingConfigurationAttributeRecord []
+ * @param readReportingConfigurationAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadReportingConfiguration(clusterId, readReportingConfigurationAttributeRecords, \
+ readReportingConfigurationAttributeRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_REPORTING_CONFIGURATION_COMMAND_ID, "b", \
+ readReportingConfigurationAttributeRecords, readReportingConfigurationAttributeRecordsLen);
+
+/** @brief Command description for ReadReportingConfigurationResponse
+ *
+ * Command: ReadReportingConfigurationResponse
+ * @param readReportingConfigurationRecords ReadReportingConfigurationRecord []
+ * @param readReportingConfigurationRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadReportingConfigurationResponse(clusterId, readReportingConfigurationRecords, \
+ readReportingConfigurationRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_REPORTING_CONFIGURATION_RESPONSE_COMMAND_ID, "b", \
+ readReportingConfigurationRecords, readReportingConfigurationRecordsLen);
+
+/** @brief Command description for ReportAttributes
+ *
+ * Command: ReportAttributes
+ * @param reportAttributeRecords ReportAttributeRecord []
+ * @param reportAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalReportAttributes(clusterId, reportAttributeRecords, reportAttributeRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_REPORT_ATTRIBUTES_COMMAND_ID, "b", reportAttributeRecords, \
+ reportAttributeRecordsLen);
+
+/** @brief Command description for DefaultResponse
+ *
+ * Command: DefaultResponse
+ * @param commandId INT8U
+ * @param status Status
+ */
+#define emberAfFillCommandGlobalDefaultResponse(clusterId, commandId, status) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_DEFAULT_RESPONSE_COMMAND_ID, "uu", commandId, status);
+
+/** @brief Command description for DiscoverAttributes
+ *
+ * Command: DiscoverAttributes
+ * @param startId ATTRIBUTE_ID
+ * @param maxAttributeIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverAttributes(clusterId, startId, maxAttributeIds) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID, "uu", startId, maxAttributeIds);
+
+/** @brief Command description for DiscoverAttributesResponse
+ *
+ * Command: DiscoverAttributesResponse
+ * @param discoveryComplete INT8U
+ * @param discoverAttributesInfoRecords DiscoverAttributesInfoRecord []
+ * @param discoverAttributesInfoRecordsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverAttributesResponse(clusterId, discoveryComplete, discoverAttributesInfoRecords, \
+ discoverAttributesInfoRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_RESPONSE_COMMAND_ID, "ub", discoveryComplete, \
+ discoverAttributesInfoRecords, discoverAttributesInfoRecordsLen);
+
+/** @brief Command description for ReadAttributesStructured
+ *
+ * Command: ReadAttributesStructured
+ * @param readStructuredAttributeRecords ReadStructuredAttributeRecord []
+ * @param readStructuredAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalReadAttributesStructured(clusterId, readStructuredAttributeRecords, \
+ readStructuredAttributeRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_READ_ATTRIBUTES_STRUCTURED_COMMAND_ID, "b", readStructuredAttributeRecords, \
+ readStructuredAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesStructured
+ *
+ * Command: WriteAttributesStructured
+ * @param writeStructuredAttributeRecords WriteStructuredAttributeRecord []
+ * @param writeStructuredAttributeRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesStructured(clusterId, writeStructuredAttributeRecords, \
+ writeStructuredAttributeRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_STRUCTURED_COMMAND_ID, "b", writeStructuredAttributeRecords, \
+ writeStructuredAttributeRecordsLen);
+
+/** @brief Command description for WriteAttributesStructuredResponse
+ *
+ * Command: WriteAttributesStructuredResponse
+ * @param writeStructuredAttributeStatusRecords WriteStructuredAttributeStatusRecord []
+ * @param writeStructuredAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandGlobalWriteAttributesStructuredResponse(clusterId, writeStructuredAttributeStatusRecords, \
+ writeStructuredAttributeStatusRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_WRITE_ATTRIBUTES_STRUCTURED_RESPONSE_COMMAND_ID, "b", \
+ writeStructuredAttributeStatusRecords, writeStructuredAttributeStatusRecordsLen);
+
+/** @brief Command description for DiscoverCommandsReceived
+ *
+ * Command: DiscoverCommandsReceived
+ * @param startCommandId INT8U
+ * @param maxCommandIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsReceived(clusterId, startCommandId, maxCommandIds) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_RECEIVED_COMMAND_ID, "uu", startCommandId, maxCommandIds);
+
+/** @brief Command description for DiscoverCommandsReceivedResponse
+ *
+ * Command: DiscoverCommandsReceivedResponse
+ * @param discoveryComplete INT8U
+ * @param commandIds INT8U []
+ * @param commandIdsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsReceivedResponse(clusterId, discoveryComplete, commandIds, commandIdsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_RECEIVED_RESPONSE_COMMAND_ID, "ub", discoveryComplete, \
+ commandIds, commandIdsLen);
+
+/** @brief Command description for DiscoverCommandsGenerated
+ *
+ * Command: DiscoverCommandsGenerated
+ * @param startCommandId INT8U
+ * @param maxCommandIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsGenerated(clusterId, startCommandId, maxCommandIds) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_GENERATED_COMMAND_ID, "uu", startCommandId, maxCommandIds);
+
+/** @brief Command description for DiscoverCommandsGeneratedResponse
+ *
+ * Command: DiscoverCommandsGeneratedResponse
+ * @param discoveryComplete INT8U
+ * @param commandIds INT8U []
+ * @param commandIdsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverCommandsGeneratedResponse(clusterId, discoveryComplete, commandIds, commandIdsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_COMMANDS_GENERATED_RESPONSE_COMMAND_ID, "ub", discoveryComplete, \
+ commandIds, commandIdsLen);
+
+/** @brief Command description for DiscoverAttributesExtended
+ *
+ * Command: DiscoverAttributesExtended
+ * @param startId ATTRIBUTE_ID
+ * @param maxAttributeIds INT8U
+ */
+#define emberAfFillCommandGlobalDiscoverAttributesExtended(clusterId, startId, maxAttributeIds) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_EXTENDED_COMMAND_ID, "uu", startId, maxAttributeIds);
+
+/** @brief Command description for DiscoverAttributesExtendedResponse
+ *
+ * Command: DiscoverAttributesExtendedResponse
+ * @param discoveryComplete INT8U
+ * @param extendedDiscoverAttributesInfoRecords ExtendedDiscoverAttributesInfoRecord []
+ * @param extendedDiscoverAttributesInfoRecordsLen int
+ */
+#define emberAfFillCommandGlobalDiscoverAttributesExtendedResponse( \
+ clusterId, discoveryComplete, extendedDiscoverAttributesInfoRecords, extendedDiscoverAttributesInfoRecordsLen) \
+ emberAfFillExternalBuffer(mask, clusterId, ZCL_DISCOVER_ATTRIBUTES_EXTENDED_RESPONSE_COMMAND_ID, "ub", discoveryComplete, \
+ extendedDiscoverAttributesInfoRecords, extendedDiscoverAttributesInfoRecordsLen);
+
+/** @brief Command description for ResetToFactoryDefaults
+ *
+ * Command: ResetToFactoryDefaults
+ */
+#define emberAfFillCommandBasicClusterResetToFactoryDefaults() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RESET_TO_FACTORY_DEFAULTS_COMMAND_ID, "", );
+
+/** @brief Command description for Identify
+ *
+ * Command: Identify
+ * @param identifyTime INT16U
+ * @param timeout INT16U
+ */
+#define emberAfFillCommandIdentifyClusterIdentify(identifyTime, timeout) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_IDENTIFY_COMMAND_ID, "uu", identifyTime, timeout);
+
+/** @brief Command description for IdentifyQuery
+ *
+ * Command: IdentifyQuery
+ */
+#define emberAfFillCommandIdentifyClusterIdentifyQuery() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_IDENTIFY_QUERY_COMMAND_ID, "", );
+
+/** @brief Command description for EZModeInvoke
+ *
+ * Command: EZModeInvoke
+ * @param action BITMAP8
+ */
+#define emberAfFillCommandIdentifyClusterEZModeInvoke(action) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_EZ_MODE_INVOKE_COMMAND_ID, "u", action);
+
+/** @brief Command description for UpdateCommissionState
+ *
+ * Command: UpdateCommissionState
+ * @param action ENUM8
+ * @param commissionStateMask BITMAP8
+ */
+#define emberAfFillCommandIdentifyClusterUpdateCommissionState(action, commissionStateMask) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_COMMISSION_STATE_COMMAND_ID, "uu", action, commissionStateMask);
+
+/** @brief Command description for TriggerEffect
+ *
+ * Command: TriggerEffect
+ * @param effectId IdentifyEffectIdentifier
+ * @param effectVariant IdentifyEffectVariant
+ */
+#define emberAfFillCommandIdentifyClusterTriggerEffect(effectId, effectVariant) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TRIGGER_EFFECT_COMMAND_ID, "uu", effectId, effectVariant);
+
+/** @brief Command description for AddGroup
+ *
+ * Command: AddGroup
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupName CHAR_STRING
+ * @param groupId INT16U
+ */
+#define emberAfFillCommandGroupsClusterAddGroup(groupId, status, groupName, groupId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_GROUP_COMMAND_ID, "uuuu", groupId, status, groupName, groupId);
+
+/** @brief Command description for ViewGroup
+ *
+ * Command: ViewGroup
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupId INT16U
+ * @param groupName CHAR_STRING
+ */
+#define emberAfFillCommandGroupsClusterViewGroup(groupId, status, groupId, groupName) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_VIEW_GROUP_COMMAND_ID, "uuuu", groupId, status, groupId, groupName);
+
+/** @brief Command description for GetGroupMembership
+ *
+ * Command: GetGroupMembership
+ * @param groupCount INT8U
+ * @param capacity INT8U
+ * @param groupList INT16U []
+ * @param groupListLen int
+ * @param groupCount INT8U
+ * @param groupList INT16U []
+ * @param groupListLen int
+ */
+#define emberAfFillCommandGroupsClusterGetGroupMembership(groupCount, capacity, groupList, groupListLen, groupCount, groupList, \
+ groupListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID, "uubub", groupCount, capacity, groupList, groupListLen, \
+ groupCount, groupList, groupListLen);
+
+/** @brief Command description for RemoveGroup
+ *
+ * Command: RemoveGroup
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupId INT16U
+ */
+#define emberAfFillCommandGroupsClusterRemoveGroup(groupId, status, groupId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_GROUP_COMMAND_ID, "uuu", groupId, status, groupId);
+
+/** @brief Command description for RemoveAllGroups
+ *
+ * Command: RemoveAllGroups
+ */
+#define emberAfFillCommandGroupsClusterRemoveAllGroups() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_ALL_GROUPS_COMMAND_ID, "", );
+
+/** @brief Command description for AddGroupIfIdentifying
+ *
+ * Command: AddGroupIfIdentifying
+ * @param groupId INT16U
+ * @param groupName CHAR_STRING
+ */
+#define emberAfFillCommandGroupsClusterAddGroupIfIdentifying(groupId, groupName) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID, "uu", groupId, groupName);
+
+/** @brief Command description for AddScene
+ *
+ * Command: AddScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param transitionTime INT16U
+ * @param sceneId INT8U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterAddScene(groupId, status, sceneId, groupId, transitionTime, sceneId, sceneName, \
+ extensionFieldSets, extensionFieldSetsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, transitionTime, sceneId, \
+ sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for ViewScene
+ *
+ * Command: ViewScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ * @param transitionTime INT16U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterViewScene(groupId, status, sceneId, groupId, sceneId, transitionTime, sceneName, \
+ extensionFieldSets, extensionFieldSetsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_VIEW_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, sceneId, transitionTime, \
+ sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for RemoveScene
+ *
+ * Command: RemoveScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ */
+#define emberAfFillCommandScenesClusterRemoveScene(groupId, status, sceneId, groupId, sceneId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_SCENE_COMMAND_ID, "uuuuu", groupId, status, sceneId, groupId, sceneId);
+
+/** @brief Command description for RemoveAllScenes
+ *
+ * Command: RemoveAllScenes
+ * @param groupId INT16U
+ * @param status Status
+ * @param groupId INT16U
+ */
+#define emberAfFillCommandScenesClusterRemoveAllScenes(groupId, status, groupId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_ALL_SCENES_COMMAND_ID, "uuu", groupId, status, groupId);
+
+/** @brief Command description for StoreScene
+ *
+ * Command: StoreScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ */
+#define emberAfFillCommandScenesClusterStoreScene(groupId, status, sceneId, groupId, sceneId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STORE_SCENE_COMMAND_ID, "uuuuu", groupId, status, sceneId, groupId, sceneId);
+
+/** @brief Command description for RecallScene
+ *
+ * Command: RecallScene
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandScenesClusterRecallScene(groupId, sceneId, transitionTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RECALL_SCENE_COMMAND_ID, "uuu", groupId, sceneId, transitionTime);
+
+/** @brief Command description for GetSceneMembership
+ *
+ * Command: GetSceneMembership
+ * @param groupId INT16U
+ * @param status Status
+ * @param capacity INT8U
+ * @param groupId INT16U
+ * @param sceneCount INT8U
+ * @param sceneList INT8U []
+ * @param sceneListLen int
+ */
+#define emberAfFillCommandScenesClusterGetSceneMembership(groupId, status, capacity, groupId, sceneCount, sceneList, sceneListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID, "uuuuub", groupId, status, capacity, groupId, sceneCount, \
+ sceneList, sceneListLen);
+
+/** @brief Command description for EnhancedAddScene
+ *
+ * Command: EnhancedAddScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param transitionTime INT16U
+ * @param sceneId INT8U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterEnhancedAddScene(groupId, status, sceneId, groupId, transitionTime, sceneId, sceneName, \
+ extensionFieldSets, extensionFieldSetsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENHANCED_ADD_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, transitionTime, \
+ sceneId, sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for EnhancedViewScene
+ *
+ * Command: EnhancedViewScene
+ * @param groupId INT16U
+ * @param status Status
+ * @param sceneId INT8U
+ * @param groupId INT16U
+ * @param sceneId INT8U
+ * @param transitionTime INT16U
+ * @param sceneName CHAR_STRING
+ * @param extensionFieldSets SceneExtensionFieldSet []
+ * @param extensionFieldSetsLen int
+ */
+#define emberAfFillCommandScenesClusterEnhancedViewScene(groupId, status, sceneId, groupId, sceneId, transitionTime, sceneName, \
+ extensionFieldSets, extensionFieldSetsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENHANCED_VIEW_SCENE_COMMAND_ID, "uuuuuuub", groupId, status, sceneId, groupId, sceneId, \
+ transitionTime, sceneName, extensionFieldSets, extensionFieldSetsLen);
+
+/** @brief Command description for CopyScene
+ *
+ * Command: CopyScene
+ * @param mode ScenesCopyMode
+ * @param status Status
+ * @param groupIdFrom INT16U
+ * @param groupIdFrom INT16U
+ * @param sceneIdFrom INT8U
+ * @param sceneIdFrom INT8U
+ * @param groupIdTo INT16U
+ * @param sceneIdTo INT8U
+ */
+#define emberAfFillCommandScenesClusterCopyScene(mode, status, groupIdFrom, groupIdFrom, sceneIdFrom, sceneIdFrom, groupIdTo, \
+ sceneIdTo) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_COPY_SCENE_COMMAND_ID, "uuuuuuuu", mode, status, groupIdFrom, groupIdFrom, sceneIdFrom, \
+ sceneIdFrom, groupIdTo, sceneIdTo);
+
+/** @brief Command description for Off
+ *
+ * Command: Off
+ */
+#define emberAfFillCommandOn \
+ / \
+ offClusterOff() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_OFF_COMMAND_ID, "", );
+
+/** @brief Command description for On
+ *
+ * Command: On
+ */
+#define emberAfFillCommandOn \
+ / \
+ offClusterOn() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ON_COMMAND_ID, "", );
+
+/** @brief Command description for Toggle
+ *
+ * Command: Toggle
+ */
+#define emberAfFillCommandOn \
+ / \
+ offClusterToggle() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TOGGLE_COMMAND_ID, "", );
+
+/** @brief Command description for OffWithEffect
+ *
+ * Command: OffWithEffect
+ * @param effectId OnOffEffectIdentifier
+ * @param effectVariant ENUM8
+ */
+#define emberAfFillCommandOn \
+ / \
+ offClusterOffWithEffect(effectId, effectVariant) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_OFF_WITH_EFFECT_COMMAND_ID, "uu", effectId, effectVariant);
+
+/** @brief Command description for OnWithRecallGlobalScene
+ *
+ * Command: OnWithRecallGlobalScene
+ */
+#define emberAfFillCommandOn \
+ / \
+ offClusterOnWithRecallGlobalScene() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ON_WITH_RECALL_GLOBAL_SCENE_COMMAND_ID, "", );
+
+/** @brief Command description for OnWithTimedOff
+ *
+ * Command: OnWithTimedOff
+ * @param onOffControl OnOffControl
+ * @param onTime INT16U
+ * @param offWaitTime INT16U
+ */
+#define emberAfFillCommandOn \
+ / \
+ offClusterOnWithTimedOff(onOffControl, onTime, offWaitTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ON_WITH_TIMED_OFF_COMMAND_ID, "uuu", onOffControl, onTime, offWaitTime);
+
+/** @brief Command description for MoveToLevel
+ *
+ * Command: MoveToLevel
+ * @param level INT8U
+ * @param transitionTime INT16U
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel \
+ ControlClusterMoveToLevel(level, transitionTime, optionMask, optionOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_MOVE_TO_LEVEL_COMMAND_ID, "uuuu", level, transitionTime, optionMask, optionOverride);
+
+/** @brief Command description for Move
+ *
+ * Command: Move
+ * @param moveMode MoveMode
+ * @param rate INT8U
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel \
+ ControlClusterMove(moveMode, rate, optionMask, optionOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_MOVE_COMMAND_ID, "uuuu", moveMode, rate, optionMask, optionOverride);
+
+/** @brief Command description for Step
+ *
+ * Command: Step
+ * @param stepMode StepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT16U
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel \
+ ControlClusterStep(stepMode, stepSize, transitionTime, optionMask, optionOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STEP_COMMAND_ID, "uuuuu", stepMode, stepSize, transitionTime, optionMask, optionOverride);
+
+/** @brief Command description for Stop
+ *
+ * Command: Stop
+ * @param optionMask BITMAP8
+ * @param optionOverride BITMAP8
+ */
+#define emberAfFillCommandLevel \
+ ControlClusterStop(optionMask, optionOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STOP_COMMAND_ID, "uu", optionMask, optionOverride);
+
+/** @brief Command description for MoveToLevelWithOnOff
+ *
+ * Command: MoveToLevelWithOnOff
+ * @param level INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandLevel \
+ ControlClusterMoveToLevelWithOnOff(level, transitionTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID, "uu", level, transitionTime);
+
+/** @brief Command description for MoveWithOnOff
+ *
+ * Command: MoveWithOnOff
+ * @param moveMode MoveMode
+ * @param rate INT8U
+ */
+#define emberAfFillCommandLevel \
+ ControlClusterMoveWithOnOff(moveMode, rate) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_MOVE_WITH_ON_OFF_COMMAND_ID, "uu", moveMode, rate);
+
+/** @brief Command description for StepWithOnOff
+ *
+ * Command: StepWithOnOff
+ * @param stepMode StepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandLevel \
+ ControlClusterStepWithOnOff(stepMode, stepSize, transitionTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STEP_WITH_ON_OFF_COMMAND_ID, "uuu", stepMode, stepSize, transitionTime);
+
+/** @brief Command description for StopWithOnOff
+ *
+ * Command: StopWithOnOff
+ */
+#define emberAfFillCommandLevel \
+ ControlClusterStopWithOnOff() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STOP_WITH_ON_OFF_COMMAND_ID, "", );
+
+/** @brief Command description for ResetAlarm
+ *
+ * Command: ResetAlarm
+ * @param alarmCode ENUM8
+ * @param alarmCode ENUM8
+ * @param clusterId CLUSTER_ID
+ * @param clusterId CLUSTER_ID
+ */
+#define emberAfFillCommandAlarmsClusterResetAlarm(alarmCode, alarmCode, clusterId, clusterId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RESET_ALARM_COMMAND_ID, "uuuu", alarmCode, alarmCode, clusterId, clusterId);
+
+/** @brief Command description for ResetAllAlarms
+ *
+ * Command: ResetAllAlarms
+ * @param status Status
+ * @param alarmCode ENUM8
+ * @param clusterId CLUSTER_ID
+ * @param timeStamp INT32U
+ */
+#define emberAfFillCommandAlarmsClusterResetAllAlarms(status, alarmCode, clusterId, timeStamp) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RESET_ALL_ALARMS_COMMAND_ID, "uuuu", status, alarmCode, clusterId, timeStamp);
+
+/** @brief Command description for GetAlarm
+ *
+ * Command: GetAlarm
+ */
+#define emberAfFillCommandAlarmsClusterGetAlarm() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_ALARM_COMMAND_ID, "", );
+
+/** @brief Command description for ResetAlarmLog
+ *
+ * Command: ResetAlarmLog
+ */
+#define emberAfFillCommandAlarmsClusterResetAlarmLog() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RESET_ALARM_LOG_COMMAND_ID, "", );
+
+/** @brief Command description for SetAbsoluteLocation
+ *
+ * Command: SetAbsoluteLocation
+ * @param coordinate1 INT16S
+ * @param status Status
+ * @param coordinate2 INT16S
+ * @param power INT16S
+ * @param coordinate3 INT16S
+ * @param pathLossExponent INT16U
+ * @param power INT16S
+ * @param calculationPeriod INT16U
+ * @param pathLossExponent INT16U
+ * @param numberRssiMeasurements INT8U
+ * @param reportingPeriod INT16U
+ */
+#define emberAfFillCommandRSSI \
+ LocationClusterSetAbsoluteLocation(coordinate1, status, coordinate2, power, coordinate3, pathLossExponent, power, \
+ calculationPeriod, pathLossExponent, numberRssiMeasurements, reportingPeriod) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_ABSOLUTE_LOCATION_COMMAND_ID, "uuuuuuuuuuu", coordinate1, status, coordinate2, power, \
+ coordinate3, pathLossExponent, power, calculationPeriod, pathLossExponent, \
+ numberRssiMeasurements, reportingPeriod);
+
+/** @brief Command description for SetDeviceConfiguration
+ *
+ * Command: SetDeviceConfiguration
+ * @param power INT16S
+ * @param status Status
+ * @param pathLossExponent INT16U
+ * @param locationType LocationType
+ * @param calculationPeriod INT16U
+ * @param coordinate1 INT16S
+ * @param numberRssiMeasurements INT8U
+ * @param coordinate2 INT16S
+ * @param reportingPeriod INT16U
+ * @param coordinate3 INT16S
+ * @param power INT16S
+ * @param pathLossExponent INT16U
+ * @param locationMethod LocationMethod
+ * @param qualityMeasure INT8U
+ * @param locationAge INT16U
+ */
+#define emberAfFillCommandRSSI \
+ LocationClusterSetDeviceConfiguration(power, status, pathLossExponent, locationType, calculationPeriod, coordinate1, \
+ numberRssiMeasurements, coordinate2, reportingPeriod, coordinate3, power, \
+ pathLossExponent, locationMethod, qualityMeasure, locationAge) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_DEVICE_CONFIGURATION_COMMAND_ID, "uuuuuuuuuuuuuuu", power, status, pathLossExponent, \
+ locationType, calculationPeriod, coordinate1, numberRssiMeasurements, coordinate2, \
+ reportingPeriod, coordinate3, power, pathLossExponent, locationMethod, qualityMeasure, \
+ locationAge);
+
+/** @brief Command description for GetDeviceConfiguration
+ *
+ * Command: GetDeviceConfiguration
+ * @param targetAddress IEEE_ADDRESS
+ * @param locationType LocationType
+ * @param coordinate1 INT16S
+ * @param coordinate2 INT16S
+ * @param coordinate3 INT16S
+ * @param power INT16S
+ * @param pathLossExponent INT16U
+ * @param locationMethod LocationMethod
+ * @param qualityMeasure INT8U
+ * @param locationAge INT16U
+ */
+#define emberAfFillCommandRSSI \
+ LocationClusterGetDeviceConfiguration(targetAddress, locationType, coordinate1, coordinate2, coordinate3, power, \
+ pathLossExponent, locationMethod, qualityMeasure, locationAge) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_DEVICE_CONFIGURATION_COMMAND_ID, "uuuuuuuuuu", targetAddress, locationType, coordinate1, \
+ coordinate2, coordinate3, power, pathLossExponent, locationMethod, qualityMeasure, locationAge);
+
+/** @brief Command description for GetLocationData
+ *
+ * Command: GetLocationData
+ * @param flags GetLocationDataFlags
+ * @param locationType LocationType
+ * @param numberResponses INT8U
+ * @param coordinate1 INT16S
+ * @param targetAddress IEEE_ADDRESS
+ * @param coordinate2 INT16S
+ * @param coordinate3 INT16S
+ * @param qualityMeasure INT8U
+ * @param locationAge INT16U
+ */
+#define emberAfFillCommandRSSI \
+ LocationClusterGetLocationData(flags, locationType, numberResponses, coordinate1, targetAddress, coordinate2, coordinate3, \
+ qualityMeasure, locationAge) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LOCATION_DATA_COMMAND_ID, "uuuuuuuuu", flags, locationType, numberResponses, \
+ coordinate1, targetAddress, coordinate2, coordinate3, qualityMeasure, locationAge);
+
+/** @brief Command description for RssiResponse
+ *
+ * Command: RssiResponse
+ * @param replyingDevice IEEE_ADDRESS
+ * @param locationType LocationType
+ * @param coordinate1 INT16S
+ * @param coordinate2 INT16S
+ * @param coordinate3 INT16S
+ * @param rssi INT8S
+ * @param numberRssiMeasurements INT8U
+ */
+#define emberAfFillCommandRSSI \
+ LocationClusterRssiResponse(replyingDevice, locationType, coordinate1, coordinate2, coordinate3, rssi, numberRssiMeasurements) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RSSI_RESPONSE_COMMAND_ID, "uuuuuuu", replyingDevice, locationType, coordinate1, coordinate2, \
+ coordinate3, rssi, numberRssiMeasurements);
+
+/** @brief Command description for RssiRequest
+ *
+ * Command: RssiRequest
+ * @param targetAddress IEEE_ADDRESS
+ * @param numberRssiMeasurements INT8U
+ * @param calculationPeriod INT16U
+ */
+#define emberAfFillCommandRSSI \
+ LocationClusterRssiRequest(targetAddress, numberRssiMeasurements, calculationPeriod) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RSSI_REQUEST_COMMAND_ID, "uuu", targetAddress, numberRssiMeasurements, calculationPeriod);
+
+/** @brief Command description for AnchorNodeAnnounce
+ *
+ * Command: AnchorNodeAnnounce
+ * @param anchorNodeIeeeAddress IEEE_ADDRESS
+ * @param measuringDevice IEEE_ADDRESS
+ * @param coordinate1 INT16S
+ * @param neighbors INT8U
+ * @param coordinate2 INT16S
+ * @param neighborsInfo NeighborInfo []
+ * @param neighborsInfoLen int
+ * @param coordinate3 INT16S
+ */
+#define emberAfFillCommandRSSI \
+ LocationClusterAnchorNodeAnnounce(anchorNodeIeeeAddress, measuringDevice, coordinate1, neighbors, coordinate2, neighborsInfo, \
+ neighborsInfoLen, coordinate3) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ANCHOR_NODE_ANNOUNCE_COMMAND_ID, "uuuuubu", anchorNodeIeeeAddress, measuringDevice, \
+ coordinate1, neighbors, coordinate2, neighborsInfo, neighborsInfoLen, coordinate3);
+
+/** @brief Command description for RequestOwnLocation
+ *
+ * Command: RequestOwnLocation
+ * @param blindNode IEEE_ADDRESS
+ */
+#define emberAfFillCommandRSSI \
+ LocationClusterRequestOwnLocation(blindNode) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REQUEST_OWN_LOCATION_COMMAND_ID, "u", blindNode);
+
+/** @brief Command description for RestartDevice
+ *
+ * Command: RestartDevice
+ * @param options RestartOptions
+ * @param status ENUM8
+ * @param delay INT8U
+ * @param jitter INT8U
+ */
+#define emberAfFillCommandCommissioningClusterRestartDevice(options, status, delay, jitter) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RESTART_DEVICE_COMMAND_ID, "uuuu", options, status, delay, jitter);
+
+/** @brief Command description for SaveStartupParameters
+ *
+ * Command: SaveStartupParameters
+ * @param options BITMAP8
+ * @param status ENUM8
+ * @param index INT8U
+ */
+#define emberAfFillCommandCommissioningClusterSaveStartupParameters(options, status, index) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SAVE_STARTUP_PARAMETERS_COMMAND_ID, "uuu", options, status, index);
+
+/** @brief Command description for RestoreStartupParameters
+ *
+ * Command: RestoreStartupParameters
+ * @param options BITMAP8
+ * @param status ENUM8
+ * @param index INT8U
+ */
+#define emberAfFillCommandCommissioningClusterRestoreStartupParameters(options, status, index) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RESTORE_STARTUP_PARAMETERS_COMMAND_ID, "uuu", options, status, index);
+
+/** @brief Command description for ResetStartupParameters
+ *
+ * Command: ResetStartupParameters
+ * @param options ResetOptions
+ * @param status ENUM8
+ * @param index INT8U
+ */
+#define emberAfFillCommandCommissioningClusterResetStartupParameters(options, status, index) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RESET_STARTUP_PARAMETERS_COMMAND_ID, "uuu", options, status, index);
+
+/** @brief Command description for TransferPartitionedFrame
+ *
+ * Command: TransferPartitionedFrame
+ * @param fragmentationOptions BITMAP8
+ * @param ackOptions BITMAP8
+ * @param partitionedIndicatorAndFrame INT8U []
+ * @param partitionedIndicatorAndFrameLen int
+ * @param firstFrameIdAndNackList INT8U []
+ * @param firstFrameIdAndNackListLen int
+ */
+#define emberAfFillCommandPartitionClusterTransferPartitionedFrame(fragmentationOptions, ackOptions, partitionedIndicatorAndFrame, \
+ partitionedIndicatorAndFrameLen, firstFrameIdAndNackList, \
+ firstFrameIdAndNackListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TRANSFER_PARTITIONED_FRAME_COMMAND_ID, "uubb", fragmentationOptions, ackOptions, \
+ partitionedIndicatorAndFrame, partitionedIndicatorAndFrameLen, firstFrameIdAndNackList, \
+ firstFrameIdAndNackListLen);
+
+/** @brief Command description for ReadHandshakeParam
+ *
+ * Command: ReadHandshakeParam
+ * @param partitionedClusterId CLUSTER_ID
+ * @param partitionedClusterId CLUSTER_ID
+ * @param attributeList ATTRIBUTE_ID []
+ * @param attributeListLen int
+ * @param readAttributeStatusRecords ReadAttributeStatusRecord []
+ * @param readAttributeStatusRecordsLen int
+ */
+#define emberAfFillCommandPartitionClusterReadHandshakeParam(partitionedClusterId, partitionedClusterId, attributeList, \
+ attributeListLen, readAttributeStatusRecords, \
+ readAttributeStatusRecordsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_READ_HANDSHAKE_PARAM_COMMAND_ID, "uubb", partitionedClusterId, partitionedClusterId, \
+ attributeList, attributeListLen, readAttributeStatusRecords, readAttributeStatusRecordsLen);
+
+/** @brief Command description for WriteHandshakeParam
+ *
+ * Command: WriteHandshakeParam
+ * @param partitionedClusterId CLUSTER_ID
+ * @param writeAttributeRecords WriteAttributeRecord []
+ * @param writeAttributeRecordsLen int
+ */
+#define emberAfFillCommandPartitionClusterWriteHandshakeParam(partitionedClusterId, writeAttributeRecords, \
+ writeAttributeRecordsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_WRITE_HANDSHAKE_PARAM_COMMAND_ID, "ub", partitionedClusterId, writeAttributeRecords, \
+ writeAttributeRecordsLen);
+
+/** @brief Command description for ImageNotify
+ *
+ * Command: ImageNotify
+ * @param payloadType ENUM8
+ * @param queryJitter INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param newFileVersion INT32U
+ */
+#define emberAfFillCommandOver \
+ the Air BootloadingClusterImageNotify(payloadType, queryJitter, manufacturerId, imageType, newFileVersion) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_IMAGE_NOTIFY_COMMAND_ID, "uuuuu", payloadType, queryJitter, manufacturerId, imageType, \
+ newFileVersion);
+
+/** @brief Command description for QueryNextImageRequest
+ *
+ * Command: QueryNextImageRequest
+ * @param fieldControl INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param currentFileVersion INT32U
+ * @param hardwareVersion INT16U
+ */
+#define emberAfFillCommandOver \
+ the Air BootloadingClusterQueryNextImageRequest(fieldControl, manufacturerId, imageType, currentFileVersion, hardwareVersion) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_QUERY_NEXT_IMAGE_REQUEST_COMMAND_ID, "uuuuu", fieldControl, manufacturerId, imageType, \
+ currentFileVersion, hardwareVersion);
+
+/** @brief Command description for QueryNextImageResponse
+ *
+ * Command: QueryNextImageResponse
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param imageSize INT32U
+ */
+#define emberAfFillCommandOver \
+ the Air BootloadingClusterQueryNextImageResponse(status, manufacturerId, imageType, fileVersion, imageSize) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_QUERY_NEXT_IMAGE_RESPONSE_COMMAND_ID, "uuuuu", status, manufacturerId, imageType, \
+ fileVersion, imageSize);
+
+/** @brief Command description for ImageBlockRequest
+ *
+ * Command: ImageBlockRequest
+ * @param fieldControl INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param fileOffset INT32U
+ * @param maxDataSize INT8U
+ * @param requestNodeAddress IEEE_ADDRESS
+ */
+#define emberAfFillCommandOver \
+ the Air BootloadingClusterImageBlockRequest(fieldControl, manufacturerId, imageType, fileVersion, fileOffset, maxDataSize, \
+ requestNodeAddress) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_IMAGE_BLOCK_REQUEST_COMMAND_ID, "uuuuuuu", fieldControl, manufacturerId, imageType, \
+ fileVersion, fileOffset, maxDataSize, requestNodeAddress);
+
+/** @brief Command description for ImagePageRequest
+ *
+ * Command: ImagePageRequest
+ * @param fieldControl INT8U
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param fileOffset INT32U
+ * @param maxDataSize INT8U
+ * @param pageSize INT16U
+ * @param responseSpacing INT16U
+ * @param requestNodeAddress IEEE_ADDRESS
+ */
+#define emberAfFillCommandOver \
+ the Air BootloadingClusterImagePageRequest(fieldControl, manufacturerId, imageType, fileVersion, fileOffset, maxDataSize, \
+ pageSize, responseSpacing, requestNodeAddress) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_IMAGE_PAGE_REQUEST_COMMAND_ID, "uuuuuuuuu", fieldControl, manufacturerId, imageType, \
+ fileVersion, fileOffset, maxDataSize, pageSize, responseSpacing, requestNodeAddress);
+
+/** @brief Command description for ImageBlockResponse
+ *
+ * Command: ImageBlockResponse
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param fileOffset INT32U
+ * @param dataSize INT8U
+ * @param imageData INT8U []
+ * @param imageDataLen int
+ */
+#define emberAfFillCommandOver \
+ the Air BootloadingClusterImageBlockResponse(status, manufacturerId, imageType, fileVersion, fileOffset, dataSize, imageData, \
+ imageDataLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_IMAGE_BLOCK_RESPONSE_COMMAND_ID, "uuuuuub", status, manufacturerId, imageType, fileVersion, \
+ fileOffset, dataSize, imageData, imageDataLen);
+
+/** @brief Command description for UpgradeEndRequest
+ *
+ * Command: UpgradeEndRequest
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ */
+#define emberAfFillCommandOver \
+ the Air BootloadingClusterUpgradeEndRequest(status, manufacturerId, imageType, fileVersion) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPGRADE_END_REQUEST_COMMAND_ID, "uuuu", status, manufacturerId, imageType, fileVersion);
+
+/** @brief Command description for UpgradeEndResponse
+ *
+ * Command: UpgradeEndResponse
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param currentTime UTC_TIME
+ * @param upgradeTime UTC_TIME
+ */
+#define emberAfFillCommandOver \
+ the Air BootloadingClusterUpgradeEndResponse(manufacturerId, imageType, fileVersion, currentTime, upgradeTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPGRADE_END_RESPONSE_COMMAND_ID, "uuuuu", manufacturerId, imageType, fileVersion, \
+ currentTime, upgradeTime);
+
+/** @brief Command description for QuerySpecificFileRequest
+ *
+ * Command: QuerySpecificFileRequest
+ * @param requestNodeAddress IEEE_ADDRESS
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param currentZigbeeStackVersion INT16U
+ */
+#define emberAfFillCommandOver \
+ the Air BootloadingClusterQuerySpecificFileRequest(requestNodeAddress, manufacturerId, imageType, fileVersion, \
+ currentZigbeeStackVersion) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_QUERY_SPECIFIC_FILE_REQUEST_COMMAND_ID, "uuuuu", requestNodeAddress, manufacturerId, \
+ imageType, fileVersion, currentZigbeeStackVersion);
+
+/** @brief Command description for QuerySpecificFileResponse
+ *
+ * Command: QuerySpecificFileResponse
+ * @param status Status
+ * @param manufacturerId INT16U
+ * @param imageType INT16U
+ * @param fileVersion INT32U
+ * @param imageSize INT32U
+ */
+#define emberAfFillCommandOver \
+ the Air BootloadingClusterQuerySpecificFileResponse(status, manufacturerId, imageType, fileVersion, imageSize) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_QUERY_SPECIFIC_FILE_RESPONSE_COMMAND_ID, "uuuuu", status, manufacturerId, imageType, \
+ fileVersion, imageSize);
+
+/** @brief Command description for PowerProfileRequest
+ *
+ * Command: PowerProfileRequest
+ * @param powerProfileId INT8U
+ * @param totalProfileNum INT8U
+ * @param powerProfileId INT8U
+ * @param numOfTransferredPhases INT8U
+ * @param transferredPhases TransferredPhase []
+ * @param transferredPhasesLen int
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterPowerProfileRequest(powerProfileId, totalProfileNum, powerProfileId, numOfTransferredPhases, transferredPhases, \
+ transferredPhasesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_POWER_PROFILE_REQUEST_COMMAND_ID, "uuuub", powerProfileId, totalProfileNum, powerProfileId, \
+ numOfTransferredPhases, transferredPhases, transferredPhasesLen);
+
+/** @brief Command description for PowerProfileStateRequest
+ *
+ * Command: PowerProfileStateRequest
+ * @param totalProfileNum INT8U
+ * @param powerProfileId INT8U
+ * @param numOfTransferredPhases INT8U
+ * @param transferredPhases TransferredPhase []
+ * @param transferredPhasesLen int
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterPowerProfileStateRequest(totalProfileNum, powerProfileId, numOfTransferredPhases, transferredPhases, \
+ transferredPhasesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_POWER_PROFILE_STATE_REQUEST_COMMAND_ID, "uuub", totalProfileNum, powerProfileId, \
+ numOfTransferredPhases, transferredPhases, transferredPhasesLen);
+
+/** @brief Command description for GetPowerProfilePriceResponse
+ *
+ * Command: GetPowerProfilePriceResponse
+ * @param powerProfileId INT8U
+ * @param powerProfileCount INT8U
+ * @param currency INT16U
+ * @param powerProfileRecords PowerProfileRecord []
+ * @param powerProfileRecordsLen int
+ * @param price INT32U
+ * @param priceTrailingDigit INT8U
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterGetPowerProfilePriceResponse(powerProfileId, powerProfileCount, currency, powerProfileRecords, \
+ powerProfileRecordsLen, price, priceTrailingDigit) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_POWER_PROFILE_PRICE_RESPONSE_COMMAND_ID, "uuubuu", powerProfileId, powerProfileCount, \
+ currency, powerProfileRecords, powerProfileRecordsLen, price, priceTrailingDigit);
+
+/** @brief Command description for GetOverallSchedulePriceResponse
+ *
+ * Command: GetOverallSchedulePriceResponse
+ * @param currency INT16U
+ * @param powerProfileId INT8U
+ * @param price INT32U
+ * @param priceTrailingDigit INT8U
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterGetOverallSchedulePriceResponse(currency, powerProfileId, price, priceTrailingDigit) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_GET_OVERALL_SCHEDULE_PRICE_RESPONSE_COMMAND_ID, "uuuu", currency, powerProfileId, price, priceTrailingDigit);
+
+/** @brief Command description for EnergyPhasesScheduleNotification
+ *
+ * Command: EnergyPhasesScheduleNotification
+ * @param powerProfileId INT8U
+ * @param powerProfileCount INT8U
+ * @param numOfScheduledPhases INT8U
+ * @param powerProfileRecords PowerProfileRecord []
+ * @param powerProfileRecordsLen int
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterEnergyPhasesScheduleNotification(powerProfileId, powerProfileCount, numOfScheduledPhases, powerProfileRecords, \
+ powerProfileRecordsLen, scheduledPhases, scheduledPhasesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENERGY_PHASES_SCHEDULE_NOTIFICATION_COMMAND_ID, "uuubb", powerProfileId, powerProfileCount, \
+ numOfScheduledPhases, powerProfileRecords, powerProfileRecordsLen, scheduledPhases, \
+ scheduledPhasesLen);
+
+/** @brief Command description for GetOverallSchedulePrice
+ *
+ * Command: GetOverallSchedulePrice
+ * @param powerProfileId INT8U
+ * @param numOfScheduledPhases INT8U
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterGetOverallSchedulePrice(powerProfileId, numOfScheduledPhases, scheduledPhases, scheduledPhasesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_OVERALL_SCHEDULE_PRICE_COMMAND_ID, "uub", powerProfileId, numOfScheduledPhases, \
+ scheduledPhases, scheduledPhasesLen);
+
+/** @brief Command description for PowerProfileScheduleConstraintsRequest
+ *
+ * Command: PowerProfileScheduleConstraintsRequest
+ * @param powerProfileId INT8U
+ * @param powerProfileId INT8U
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterPowerProfileScheduleConstraintsRequest(powerProfileId, powerProfileId) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_REQUEST_COMMAND_ID, "uu", powerProfileId, powerProfileId);
+
+/** @brief Command description for EnergyPhasesScheduleStateRequest
+ *
+ * Command: EnergyPhasesScheduleStateRequest
+ * @param powerProfileId INT8U
+ * @param powerProfileId INT8U
+ * @param numOfScheduledPhases INT8U
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterEnergyPhasesScheduleStateRequest(powerProfileId, powerProfileId, numOfScheduledPhases, scheduledPhases, \
+ scheduledPhasesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENERGY_PHASES_SCHEDULE_STATE_REQUEST_COMMAND_ID, "uuub", powerProfileId, powerProfileId, \
+ numOfScheduledPhases, scheduledPhases, scheduledPhasesLen);
+
+/** @brief Command description for GetPowerProfilePriceExtendedResponse
+ *
+ * Command: GetPowerProfilePriceExtendedResponse
+ * @param powerProfileId INT8U
+ * @param powerProfileId INT8U
+ * @param currency INT16U
+ * @param numOfScheduledPhases INT8U
+ * @param price INT32U
+ * @param scheduledPhases ScheduledPhase []
+ * @param scheduledPhasesLen int
+ * @param priceTrailingDigit INT8U
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterGetPowerProfilePriceExtendedResponse(powerProfileId, powerProfileId, currency, numOfScheduledPhases, price, \
+ scheduledPhases, scheduledPhasesLen, priceTrailingDigit) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_RESPONSE_COMMAND_ID, "uuuuubu", powerProfileId, \
+ powerProfileId, currency, numOfScheduledPhases, price, scheduledPhases, scheduledPhasesLen, \
+ priceTrailingDigit);
+
+/** @brief Command description for PowerProfileScheduleConstraintsNotification
+ *
+ * Command: PowerProfileScheduleConstraintsNotification
+ * @param powerProfileId INT8U
+ * @param startAfter INT16U
+ * @param stopBefore INT16U
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterPowerProfileScheduleConstraintsNotification(powerProfileId, startAfter, stopBefore) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_NOTIFICATION_COMMAND_ID, "uuu", powerProfileId, startAfter, stopBefore);
+
+/** @brief Command description for PowerProfileScheduleConstraintsResponse
+ *
+ * Command: PowerProfileScheduleConstraintsResponse
+ * @param powerProfileId INT8U
+ * @param startAfter INT16U
+ * @param stopBefore INT16U
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterPowerProfileScheduleConstraintsResponse(powerProfileId, startAfter, stopBefore) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_RESPONSE_COMMAND_ID, "uuu", powerProfileId, startAfter, stopBefore);
+
+/** @brief Command description for GetPowerProfilePriceExtended
+ *
+ * Command: GetPowerProfilePriceExtended
+ * @param options BITMAP8
+ * @param powerProfileId INT8U
+ * @param powerProfileStartTime INT16U
+ */
+#define emberAfFillCommandPower \
+ ProfileClusterGetPowerProfilePriceExtended(options, powerProfileId, powerProfileStartTime) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_COMMAND_ID, "uuu", options, powerProfileId, powerProfileStartTime);
+
+/** @brief Command description for ExecutionOfACommand
+ *
+ * Command: ExecutionOfACommand
+ * @param commandId CommandIdentification
+ * @param applianceStatus ApplianceStatus
+ * @param remoteEnableFlagsAndDeviceStatus2 RemoteEnableFlagsAndDeviceStatus2
+ * @param applianceStatus2 INT24U
+ */
+#define emberAfFillCommandAppliance \
+ ControlClusterExecutionOfACommand(commandId, applianceStatus, remoteEnableFlagsAndDeviceStatus2, applianceStatus2) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_EXECUTION_OF_A_COMMAND_COMMAND_ID, "uuuu", commandId, applianceStatus, \
+ remoteEnableFlagsAndDeviceStatus2, applianceStatus2);
+
+/** @brief Command description for SignalState
+ *
+ * Command: SignalState
+ * @param applianceStatus ApplianceStatus
+ * @param remoteEnableFlagsAndDeviceStatus2 RemoteEnableFlagsAndDeviceStatus2
+ * @param applianceStatus2 INT24U
+ */
+#define emberAfFillCommandAppliance \
+ ControlClusterSignalState(applianceStatus, remoteEnableFlagsAndDeviceStatus2, applianceStatus2) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_SIGNAL_STATE_COMMAND_ID, "uuu", applianceStatus, remoteEnableFlagsAndDeviceStatus2, applianceStatus2);
+
+/** @brief Command description for WriteFunctions
+ *
+ * Command: WriteFunctions
+ * @param functionId INT16U
+ * @param functionDataType ENUM8
+ * @param functionData INT8U []
+ * @param functionDataLen int
+ */
+#define emberAfFillCommandAppliance \
+ ControlClusterWriteFunctions(functionId, functionDataType, functionData, functionDataLen) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_WRITE_FUNCTIONS_COMMAND_ID, "uub", functionId, functionDataType, functionData, functionDataLen);
+
+/** @brief Command description for OverloadPauseResume
+ *
+ * Command: OverloadPauseResume
+ */
+#define emberAfFillCommandAppliance \
+ ControlClusterOverloadPauseResume() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_OVERLOAD_PAUSE_RESUME_COMMAND_ID, "", );
+
+/** @brief Command description for OverloadPause
+ *
+ * Command: OverloadPause
+ */
+#define emberAfFillCommandAppliance \
+ ControlClusterOverloadPause() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_OVERLOAD_PAUSE_COMMAND_ID, "", );
+
+/** @brief Command description for OverloadWarning
+ *
+ * Command: OverloadWarning
+ * @param warningEvent WarningEvent
+ */
+#define emberAfFillCommandAppliance \
+ ControlClusterOverloadWarning(warningEvent) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_OVERLOAD_WARNING_COMMAND_ID, "u", warningEvent);
+
+/** @brief Command description for CheckIn
+ *
+ * Command: CheckIn
+ * @param startFastPolling BOOLEAN
+ * @param fastPollTimeout INT16U
+ */
+#define emberAfFillCommandPoll \
+ ControlClusterCheckIn(startFastPolling, fastPollTimeout) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CHECK_IN_COMMAND_ID, "uu", startFastPolling, fastPollTimeout);
+
+/** @brief Command description for FastPollStop
+ *
+ * Command: FastPollStop
+ */
+#define emberAfFillCommandPoll \
+ ControlClusterFastPollStop() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_FAST_POLL_STOP_COMMAND_ID, "", );
+
+/** @brief Command description for SetLongPollInterval
+ *
+ * Command: SetLongPollInterval
+ * @param newLongPollInterval INT32U
+ */
+#define emberAfFillCommandPoll \
+ ControlClusterSetLongPollInterval(newLongPollInterval) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_LONG_POLL_INTERVAL_COMMAND_ID, "u", newLongPollInterval);
+
+/** @brief Command description for SetShortPollInterval
+ *
+ * Command: SetShortPollInterval
+ * @param newShortPollInterval INT16U
+ */
+#define emberAfFillCommandPoll \
+ ControlClusterSetShortPollInterval(newShortPollInterval) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_SHORT_POLL_INTERVAL_COMMAND_ID, "u", newShortPollInterval);
+
+/** @brief Command description for GpNotification
+ *
+ * Command: GpNotification
+ * @param options GpNotificationOption
+ * @param options GpNotificationResponseOption
+ * @param gpdSrcId INT32U
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param gpdIeee IEEE_ADDRESS
+ * @param gpdEndpoint INT8U
+ * @param endpoint INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdCommandId INT8U
+ * @param gpdCommandPayload OCTET_STRING
+ * @param gppShortAddress INT16U
+ * @param gppDistance INT8U
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpNotification(options, options, gpdSrcId, gpdSrcId, gpdIeee, gpdIeee, gpdEndpoint, endpoint, \
+ gpdSecurityFrameCounter, gpdSecurityFrameCounter, gpdCommandId, gpdCommandPayload, gppShortAddress, \
+ gppDistance) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_NOTIFICATION_COMMAND_ID, "uuuuuuuuuuuuuu", options, options, gpdSrcId, gpdSrcId, gpdIeee, \
+ gpdIeee, gpdEndpoint, endpoint, gpdSecurityFrameCounter, gpdSecurityFrameCounter, gpdCommandId, \
+ gpdCommandPayload, gppShortAddress, gppDistance);
+
+/** @brief Command description for GpPairingSearch
+ *
+ * Command: GpPairingSearch
+ * @param options GpPairingSearchOption
+ * @param options GpPairingOption
+ * @param gpdSrcId INT32U
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param endpoint INT8U
+ * @param sinkIeeeAddress IEEE_ADDRESS
+ * @param sinkNwkAddress INT16U
+ * @param sinkGroupId INT16U
+ * @param deviceId GpDeviceId
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdKey SECURITY_KEY
+ * @param assignedAlias INT16U
+ * @param groupcastRadius INT8U
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpPairingSearch(options, options, gpdSrcId, gpdSrcId, gpdIeee, gpdIeee, endpoint, endpoint, sinkIeeeAddress, \
+ sinkNwkAddress, sinkGroupId, deviceId, gpdSecurityFrameCounter, gpdKey, assignedAlias, \
+ groupcastRadius) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_PAIRING_SEARCH_COMMAND_ID, "uuuuuuuuuuuuuuuu", options, options, gpdSrcId, gpdSrcId, \
+ gpdIeee, gpdIeee, endpoint, endpoint, sinkIeeeAddress, sinkNwkAddress, sinkGroupId, deviceId, \
+ gpdSecurityFrameCounter, gpdKey, assignedAlias, groupcastRadius);
+
+/** @brief Command description for GpProxyCommissioningMode
+ *
+ * Command: GpProxyCommissioningMode
+ * @param options GpProxyCommissioningModeOption
+ * @param commissioningWindow INT16U
+ * @param channel INT8U
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpProxyCommissioningMode(options, commissioningWindow, channel) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_PROXY_COMMISSIONING_MODE_COMMAND_ID, "uuu", options, commissioningWindow, channel);
+
+/** @brief Command description for GpTunnelingStop
+ *
+ * Command: GpTunnelingStop
+ * @param options GpTunnelingStopOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gppShortAddress INT16U
+ * @param gppDistance INT8S
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpTunnelingStop(options, gpdSrcId, gpdIeee, endpoint, gpdSecurityFrameCounter, gppShortAddress, gppDistance) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_TUNNELING_STOP_COMMAND_ID, "uuuuuuu", options, gpdSrcId, gpdIeee, endpoint, \
+ gpdSecurityFrameCounter, gppShortAddress, gppDistance);
+
+/** @brief Command description for GpCommissioningNotification
+ *
+ * Command: GpCommissioningNotification
+ * @param options GpCommissioningNotificationOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdCommandId INT8U
+ * @param gpdCommandPayload OCTET_STRING
+ * @param gppShortAddress INT16U
+ * @param gppLink INT8U
+ * @param mic INT32U
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpCommissioningNotification(options, gpdSrcId, gpdIeee, endpoint, gpdSecurityFrameCounter, gpdCommandId, \
+ gpdCommandPayload, gppShortAddress, gppLink, mic) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_COMMISSIONING_NOTIFICATION_COMMAND_ID, "uuuuuuuuuu", options, gpdSrcId, gpdIeee, \
+ endpoint, gpdSecurityFrameCounter, gpdCommandId, gpdCommandPayload, gppShortAddress, gppLink, \
+ mic);
+
+/** @brief Command description for GpSinkCommissioningMode
+ *
+ * Command: GpSinkCommissioningMode
+ * @param options GpSinkCommissioningModeOptions
+ * @param gpmAddrForSecurity INT16U
+ * @param gpmAddrForPairing INT16U
+ * @param sinkEndpoint INT8U
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpSinkCommissioningMode(options, gpmAddrForSecurity, gpmAddrForPairing, sinkEndpoint) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_GP_SINK_COMMISSIONING_MODE_COMMAND_ID, "uuuu", options, gpmAddrForSecurity, gpmAddrForPairing, sinkEndpoint);
+
+/** @brief Command description for GpResponse
+ *
+ * Command: GpResponse
+ * @param options GpResponseOption
+ * @param tempMasterShortAddress INT16U
+ * @param tempMasterTxChannel BITMAP8
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param gpdCommandId INT8U
+ * @param gpdCommandPayload OCTET_STRING
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpResponse(options, tempMasterShortAddress, tempMasterTxChannel, gpdSrcId, gpdIeee, endpoint, gpdCommandId, \
+ gpdCommandPayload) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_RESPONSE_COMMAND_ID, "uuuuuuuu", options, tempMasterShortAddress, tempMasterTxChannel, \
+ gpdSrcId, gpdIeee, endpoint, gpdCommandId, gpdCommandPayload);
+
+/** @brief Command description for GpTranslationTableUpdate
+ *
+ * Command: GpTranslationTableUpdate
+ * @param options GpTranslationTableUpdateOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param translations GpTranslationTableUpdateTranslation []
+ * @param translationsLen int
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpTranslationTableUpdate(options, gpdSrcId, gpdIeee, endpoint, translations, translationsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_TRANSLATION_TABLE_UPDATE_COMMAND_ID, "uuuub", options, gpdSrcId, gpdIeee, endpoint, \
+ translations, translationsLen);
+
+/** @brief Command description for GpTranslationTableRequest
+ *
+ * Command: GpTranslationTableRequest
+ * @param startIndex INT8U
+ * @param status GpTranslationTableResponseStatus
+ * @param options GpTranslationTableResponseOption
+ * @param totalNumberOfEntries INT8U
+ * @param startIndex INT8U
+ * @param entriesCount INT8U
+ * @param translationTableList INT8U []
+ * @param translationTableListLen int
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpTranslationTableRequest(startIndex, status, options, totalNumberOfEntries, startIndex, entriesCount, \
+ translationTableList, translationTableListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_TRANSLATION_TABLE_REQUEST_COMMAND_ID, "uuuuuub", startIndex, status, options, \
+ totalNumberOfEntries, startIndex, entriesCount, translationTableList, translationTableListLen);
+
+/** @brief Command description for GpPairingConfiguration
+ *
+ * Command: GpPairingConfiguration
+ * @param actions GpPairingConfigurationActions
+ * @param options GpPairingConfigurationOption
+ * @param gpdSrcId INT32U
+ * @param gpdIeee IEEE_ADDRESS
+ * @param endpoint INT8U
+ * @param deviceId INT8U
+ * @param groupListCount INT8U
+ * @param groupList GpPairingConfigurationGroupList []
+ * @param groupListLen int
+ * @param gpdAssignedAlias INT16U
+ * @param groupcastRadius INT8U
+ * @param securityOptions INT8U
+ * @param gpdSecurityFrameCounter INT32U
+ * @param gpdSecurityKey SECURITY_KEY
+ * @param numberOfPairedEndpoints INT8U
+ * @param pairedEndpoints INT8U []
+ * @param pairedEndpointsLen int
+ * @param applicationInformation GpApplicationInformation
+ * @param manufacturerId INT16U
+ * @param modeId INT16U
+ * @param numberOfGpdCommands INT8U
+ * @param gpdCommandIdList INT8U []
+ * @param gpdCommandIdListLen int
+ * @param clusterIdListCount INT8U
+ * @param clusterListServer INT16U []
+ * @param clusterListServerLen int
+ * @param clusterListClient INT16U []
+ * @param clusterListClientLen int
+ * @param switchInformationLength INT8U
+ * @param switchConfiguration INT8U
+ * @param currentContactStatus INT8U
+ * @param totalNumberOfReports INT8U
+ * @param numberOfReports INT8U
+ * @param reportDescriptor INT8U []
+ * @param reportDescriptorLen int
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpPairingConfiguration( \
+ actions, options, gpdSrcId, gpdIeee, endpoint, deviceId, groupListCount, groupList, groupListLen, gpdAssignedAlias, \
+ groupcastRadius, securityOptions, gpdSecurityFrameCounter, gpdSecurityKey, numberOfPairedEndpoints, pairedEndpoints, \
+ pairedEndpointsLen, applicationInformation, manufacturerId, modeId, numberOfGpdCommands, gpdCommandIdList, \
+ gpdCommandIdListLen, clusterIdListCount, clusterListServer, clusterListServerLen, clusterListClient, clusterListClientLen, \
+ switchInformationLength, switchConfiguration, currentContactStatus, totalNumberOfReports, numberOfReports, \
+ reportDescriptor, reportDescriptorLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_PAIRING_CONFIGURATION_COMMAND_ID, "uuuuuuubuuuuuubuuuububbuuuuub", actions, options, \
+ gpdSrcId, gpdIeee, endpoint, deviceId, groupListCount, groupList, groupListLen, \
+ gpdAssignedAlias, groupcastRadius, securityOptions, gpdSecurityFrameCounter, gpdSecurityKey, \
+ numberOfPairedEndpoints, pairedEndpoints, pairedEndpointsLen, applicationInformation, \
+ manufacturerId, modeId, numberOfGpdCommands, gpdCommandIdList, gpdCommandIdListLen, \
+ clusterIdListCount, clusterListServer, clusterListServerLen, clusterListClient, \
+ clusterListClientLen, switchInformationLength, switchConfiguration, currentContactStatus, \
+ totalNumberOfReports, numberOfReports, reportDescriptor, reportDescriptorLen);
+
+/** @brief Command description for GpSinkTableRequest
+ *
+ * Command: GpSinkTableRequest
+ * @param options GpSinkTableRequestOptions
+ * @param status ENUM8
+ * @param gpdSrcId INT32U
+ * @param totalNumberofNonEmptySinkTableEntries INT8U
+ * @param gpdIeee INT64U
+ * @param startIndex INT8U
+ * @param endpoint INT8U
+ * @param sinkTableEntriesCount INT8U
+ * @param index INT8U
+ * @param sinkTableEntries INT8U []
+ * @param sinkTableEntriesLen int
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpSinkTableRequest(options, status, gpdSrcId, totalNumberofNonEmptySinkTableEntries, gpdIeee, startIndex, \
+ endpoint, sinkTableEntriesCount, index, sinkTableEntries, sinkTableEntriesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_SINK_TABLE_REQUEST_COMMAND_ID, "uuuuuuuuub", options, status, gpdSrcId, \
+ totalNumberofNonEmptySinkTableEntries, gpdIeee, startIndex, endpoint, sinkTableEntriesCount, \
+ index, sinkTableEntries, sinkTableEntriesLen);
+
+/** @brief Command description for GpProxyTableResponse
+ *
+ * Command: GpProxyTableResponse
+ * @param status GpProxyTableResponseStatus
+ * @param options GpProxyTableRequestOptions
+ * @param totalNumberOfNonEmptyProxyTableEntries INT8U
+ * @param gpdSrcId INT32U
+ * @param startIndex INT8U
+ * @param gpdIeee INT64U
+ * @param entriesCount INT8U
+ * @param endpoint INT8U
+ * @param proxyTableEntries INT8U []
+ * @param proxyTableEntriesLen int
+ * @param index INT8U
+ */
+#define emberAfFillCommandGreen \
+ PowerClusterGpProxyTableResponse(status, options, totalNumberOfNonEmptyProxyTableEntries, gpdSrcId, startIndex, gpdIeee, \
+ entriesCount, endpoint, proxyTableEntries, proxyTableEntriesLen, index) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GP_PROXY_TABLE_RESPONSE_COMMAND_ID, "uuuuuuuubu", status, options, \
+ totalNumberOfNonEmptyProxyTableEntries, gpdSrcId, startIndex, gpdIeee, entriesCount, endpoint, \
+ proxyTableEntries, proxyTableEntriesLen, index);
+
+/** @brief Command description for LockDoor
+ *
+ * Command: LockDoor
+ * @param PIN CHAR_STRING
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterLockDoor(PIN, status) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_LOCK_DOOR_COMMAND_ID, "uu", PIN, status);
+
+/** @brief Command description for UnlockDoor
+ *
+ * Command: UnlockDoor
+ * @param PIN CHAR_STRING
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterUnlockDoor(PIN, status) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UNLOCK_DOOR_COMMAND_ID, "uu", PIN, status);
+
+/** @brief Command description for Toggle
+ *
+ * Command: Toggle
+ * @param pin CHAR_STRING
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterToggle(pin, status) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TOGGLE_COMMAND_ID, "uu", pin, status);
+
+/** @brief Command description for UnlockWithTimeout
+ *
+ * Command: UnlockWithTimeout
+ * @param timeoutInSeconds INT16U
+ * @param status INT8U
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor \
+ LockClusterUnlockWithTimeout(timeoutInSeconds, status, pin) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID, "uuu", timeoutInSeconds, status, pin);
+
+/** @brief Command description for GetLogRecord
+ *
+ * Command: GetLogRecord
+ * @param logIndex INT16U
+ * @param logEntryId INT16U
+ * @param timestamp INT32U
+ * @param eventType ENUM8
+ * @param source INT8U
+ * @param eventIdOrAlarmCode INT8U
+ * @param userId INT16U
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor \
+ LockClusterGetLogRecord(logIndex, logEntryId, timestamp, eventType, source, eventIdOrAlarmCode, userId, pin) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LOG_RECORD_COMMAND_ID, "uuuuuuuu", logIndex, logEntryId, timestamp, eventType, source, \
+ eventIdOrAlarmCode, userId, pin);
+
+/** @brief Command description for SetPin
+ *
+ * Command: SetPin
+ * @param userId INT16U
+ * @param status DoorLockSetPinOrIdStatus
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor \
+ LockClusterSetPin(userId, status, userStatus, userType, pin) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_PIN_COMMAND_ID, "uuuuu", userId, status, userStatus, userType, pin);
+
+/** @brief Command description for GetPin
+ *
+ * Command: GetPin
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param pin CHAR_STRING
+ */
+#define emberAfFillCommandDoor \
+ LockClusterGetPin(userId, userId, userStatus, userType, pin) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_PIN_COMMAND_ID, "uuuuu", userId, userId, userStatus, userType, pin);
+
+/** @brief Command description for ClearPin
+ *
+ * Command: ClearPin
+ * @param userId INT16U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterClearPin(userId, status) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_PIN_COMMAND_ID, "uu", userId, status);
+
+/** @brief Command description for ClearAllPins
+ *
+ * Command: ClearAllPins
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterClearAllPins(status) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_ALL_PINS_COMMAND_ID, "u", status);
+
+/** @brief Command description for SetUserStatus
+ *
+ * Command: SetUserStatus
+ * @param userId INT16U
+ * @param status INT8U
+ * @param userStatus INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterSetUserStatus(userId, status, userStatus) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_USER_STATUS_COMMAND_ID, "uuu", userId, status, userStatus);
+
+/** @brief Command description for GetUserStatus
+ *
+ * Command: GetUserStatus
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterGetUserStatus(userId, userId, status) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_USER_STATUS_COMMAND_ID, "uuu", userId, userId, status);
+
+/** @brief Command description for SetWeekdaySchedule
+ *
+ * Command: SetWeekdaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ * @param daysMask DoorLockDayOfWeek
+ * @param startHour INT8U
+ * @param startMinute INT8U
+ * @param endHour INT8U
+ * @param endMinute INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterSetWeekdaySchedule(scheduleId, status, userId, daysMask, startHour, startMinute, endHour, endMinute) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID, "uuuuuuuu", scheduleId, status, userId, daysMask, \
+ startHour, startMinute, endHour, endMinute);
+
+/** @brief Command description for GetWeekdaySchedule
+ *
+ * Command: GetWeekdaySchedule
+ * @param scheduleId INT8U
+ * @param scheduleId INT8U
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param status INT8U
+ * @param daysMask INT8U
+ * @param startHour INT8U
+ * @param startMinute INT8U
+ * @param endHour INT8U
+ * @param endMinute INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterGetWeekdaySchedule(scheduleId, scheduleId, userId, userId, status, daysMask, startHour, startMinute, endHour, \
+ endMinute) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID, "uuuuuuuuuu", scheduleId, scheduleId, userId, userId, \
+ status, daysMask, startHour, startMinute, endHour, endMinute);
+
+/** @brief Command description for ClearWeekdaySchedule
+ *
+ * Command: ClearWeekdaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterClearWeekdaySchedule(scheduleId, status, userId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID, "uuu", scheduleId, status, userId);
+
+/** @brief Command description for SetYeardaySchedule
+ *
+ * Command: SetYeardaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterSetYeardaySchedule(scheduleId, status, userId, localStartTime, localEndTime) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID, "uuuuu", scheduleId, status, userId, localStartTime, localEndTime);
+
+/** @brief Command description for GetYeardaySchedule
+ *
+ * Command: GetYeardaySchedule
+ * @param scheduleId INT8U
+ * @param scheduleId INT8U
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param status INT8U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterGetYeardaySchedule(scheduleId, scheduleId, userId, userId, status, localStartTime, localEndTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID, "uuuuuuu", scheduleId, scheduleId, userId, userId, status, \
+ localStartTime, localEndTime);
+
+/** @brief Command description for ClearYeardaySchedule
+ *
+ * Command: ClearYeardaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param userId INT16U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterClearYeardaySchedule(scheduleId, status, userId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID, "uuu", scheduleId, status, userId);
+
+/** @brief Command description for SetHolidaySchedule
+ *
+ * Command: SetHolidaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ * @param operatingModeDuringHoliday ENUM8
+ */
+#define emberAfFillCommandDoor \
+ LockClusterSetHolidaySchedule(scheduleId, status, localStartTime, localEndTime, operatingModeDuringHoliday) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID, "uuuuu", scheduleId, status, localStartTime, localEndTime, \
+ operatingModeDuringHoliday);
+
+/** @brief Command description for GetHolidaySchedule
+ *
+ * Command: GetHolidaySchedule
+ * @param scheduleId INT8U
+ * @param scheduleId INT8U
+ * @param status INT8U
+ * @param localStartTime INT32U
+ * @param localEndTime INT32U
+ * @param operatingModeDuringHoliday ENUM8
+ */
+#define emberAfFillCommandDoor \
+ LockClusterGetHolidaySchedule(scheduleId, scheduleId, status, localStartTime, localEndTime, operatingModeDuringHoliday) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID, "uuuuuu", scheduleId, scheduleId, status, localStartTime, \
+ localEndTime, operatingModeDuringHoliday);
+
+/** @brief Command description for ClearHolidaySchedule
+ *
+ * Command: ClearHolidaySchedule
+ * @param scheduleId INT8U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterClearHolidaySchedule(scheduleId, status) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID, "uu", scheduleId, status);
+
+/** @brief Command description for SetUserType
+ *
+ * Command: SetUserType
+ * @param userId INT16U
+ * @param status INT8U
+ * @param userType DoorLockUserType
+ */
+#define emberAfFillCommandDoor \
+ LockClusterSetUserType(userId, status, userType) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_USER_TYPE_COMMAND_ID, "uuu", userId, status, userType);
+
+/** @brief Command description for GetUserType
+ *
+ * Command: GetUserType
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param userType DoorLockUserType
+ */
+#define emberAfFillCommandDoor \
+ LockClusterGetUserType(userId, userId, userType) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_USER_TYPE_COMMAND_ID, "uuu", userId, userId, userType);
+
+/** @brief Command description for SetRfid
+ *
+ * Command: SetRfid
+ * @param userId INT16U
+ * @param status DoorLockSetPinOrIdStatus
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param id CHAR_STRING
+ */
+#define emberAfFillCommandDoor \
+ LockClusterSetRfid(userId, status, userStatus, userType, id) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_RFID_COMMAND_ID, "uuuuu", userId, status, userStatus, userType, id);
+
+/** @brief Command description for GetRfid
+ *
+ * Command: GetRfid
+ * @param userId INT16U
+ * @param userId INT16U
+ * @param userStatus DoorLockUserStatus
+ * @param userType DoorLockUserType
+ * @param rfid CHAR_STRING
+ */
+#define emberAfFillCommandDoor \
+ LockClusterGetRfid(userId, userId, userStatus, userType, rfid) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_RFID_COMMAND_ID, "uuuuu", userId, userId, userStatus, userType, rfid);
+
+/** @brief Command description for ClearRfid
+ *
+ * Command: ClearRfid
+ * @param userId INT16U
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterClearRfid(userId, status) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_RFID_COMMAND_ID, "uu", userId, status);
+
+/** @brief Command description for ClearAllRfids
+ *
+ * Command: ClearAllRfids
+ * @param status INT8U
+ */
+#define emberAfFillCommandDoor \
+ LockClusterClearAllRfids(status) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_ALL_RFIDS_COMMAND_ID, "u", status);
+
+/** @brief Command description for OperationEventNotification
+ *
+ * Command: OperationEventNotification
+ * @param source INT8U
+ * @param eventCode DoorLockOperationEventCode
+ * @param userId INT16U
+ * @param pin CHAR_STRING
+ * @param timeStamp INT32U
+ * @param data CHAR_STRING
+ */
+#define emberAfFillCommandDoor \
+ LockClusterOperationEventNotification(source, eventCode, userId, pin, timeStamp, data) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_OPERATION_EVENT_NOTIFICATION_COMMAND_ID, "uuuuuu", source, eventCode, userId, pin, timeStamp, data);
+
+/** @brief Command description for ProgrammingEventNotification
+ *
+ * Command: ProgrammingEventNotification
+ * @param source INT8U
+ * @param eventCode DoorLockProgrammingEventCode
+ * @param userId INT16U
+ * @param pin CHAR_STRING
+ * @param userType DoorLockUserType
+ * @param userStatus DoorLockUserStatus
+ * @param timeStamp INT32U
+ * @param data CHAR_STRING
+ */
+#define emberAfFillCommandDoor \
+ LockClusterProgrammingEventNotification(source, eventCode, userId, pin, userType, userStatus, timeStamp, data) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PROGRAMMING_EVENT_NOTIFICATION_COMMAND_ID, "uuuuuuuu", source, eventCode, userId, pin, \
+ userType, userStatus, timeStamp, data);
+
+/** @brief Command description for WindowCoveringUpOpen
+ *
+ * Command: WindowCoveringUpOpen
+ */
+#define emberAfFillCommandWindow \
+ CoveringClusterWindowCoveringUpOpen() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_WINDOW_COVERING_UP_OPEN_COMMAND_ID, "", );
+
+/** @brief Command description for WindowCoveringDownClose
+ *
+ * Command: WindowCoveringDownClose
+ */
+#define emberAfFillCommandWindow \
+ CoveringClusterWindowCoveringDownClose() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_WINDOW_COVERING_DOWN_CLOSE_COMMAND_ID, "", );
+
+/** @brief Command description for WindowCoveringStop
+ *
+ * Command: WindowCoveringStop
+ */
+#define emberAfFillCommandWindow \
+ CoveringClusterWindowCoveringStop() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_WINDOW_COVERING_STOP_COMMAND_ID, "", );
+
+/** @brief Command description for WindowCoveringGoToLiftValue
+ *
+ * Command: WindowCoveringGoToLiftValue
+ * @param liftValue INT16U
+ */
+#define emberAfFillCommandWindow \
+ CoveringClusterWindowCoveringGoToLiftValue(liftValue) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_WINDOW_COVERING_GO_TO_LIFT_VALUE_COMMAND_ID, "u", liftValue);
+
+/** @brief Command description for WindowCoveringGoToLiftPercentage
+ *
+ * Command: WindowCoveringGoToLiftPercentage
+ * @param percentageLiftValue INT8U
+ */
+#define emberAfFillCommandWindow \
+ CoveringClusterWindowCoveringGoToLiftPercentage(percentageLiftValue) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_WINDOW_COVERING_GO_TO_LIFT_PERCENTAGE_COMMAND_ID, "u", percentageLiftValue);
+
+/** @brief Command description for WindowCoveringGoToTiltValue
+ *
+ * Command: WindowCoveringGoToTiltValue
+ * @param tiltValue INT16U
+ */
+#define emberAfFillCommandWindow \
+ CoveringClusterWindowCoveringGoToTiltValue(tiltValue) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_WINDOW_COVERING_GO_TO_TILT_VALUE_COMMAND_ID, "u", tiltValue);
+
+/** @brief Command description for WindowCoveringGoToTiltPercentage
+ *
+ * Command: WindowCoveringGoToTiltPercentage
+ * @param percentageTiltValue INT8U
+ */
+#define emberAfFillCommandWindow \
+ CoveringClusterWindowCoveringGoToTiltPercentage(percentageTiltValue) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_WINDOW_COVERING_GO_TO_TILT_PERCENTAGE_COMMAND_ID, "u", percentageTiltValue);
+
+/** @brief Command description for BarrierControlGoToPercent
+ *
+ * Command: BarrierControlGoToPercent
+ * @param percentOpen INT8U
+ */
+#define emberAfFillCommandBarrier \
+ ControlClusterBarrierControlGoToPercent(percentOpen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID, "u", percentOpen);
+
+/** @brief Command description for BarrierControlStop
+ *
+ * Command: BarrierControlStop
+ */
+#define emberAfFillCommandBarrier \
+ ControlClusterBarrierControlStop() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_BARRIER_CONTROL_STOP_COMMAND_ID, "", );
+
+/** @brief Command description for SetpointRaiseLower
+ *
+ * Command: SetpointRaiseLower
+ * @param mode SetpointAdjustMode
+ * @param numberOfTransitionsForSequence ENUM8
+ * @param amount INT8S
+ * @param dayOfWeekForSequence DayOfWeek
+ * @param modeForSequence ModeForSequence
+ * @param payload INT8U []
+ * @param payloadLen int
+ */
+#define emberAfFillCommandThermostatClusterSetpointRaiseLower(mode, numberOfTransitionsForSequence, amount, dayOfWeekForSequence, \
+ modeForSequence, payload, payloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SETPOINT_RAISE_LOWER_COMMAND_ID, "uuuuub", mode, numberOfTransitionsForSequence, amount, \
+ dayOfWeekForSequence, modeForSequence, payload, payloadLen);
+
+/** @brief Command description for SetWeeklySchedule
+ *
+ * Command: SetWeeklySchedule
+ * @param numberOfTransitionsForSequence ENUM8
+ * @param timeOfDay INT16U
+ * @param dayOfWeekForSequence DayOfWeek
+ * @param relayStatus BITMAP16
+ * @param modeForSequence ModeForSequence
+ * @param localTemperature INT16S
+ * @param payload INT8U []
+ * @param payloadLen int
+ * @param humidityInPercentage INT8U
+ * @param setpoint INT16S
+ * @param unreadEntries INT16U
+ */
+#define emberAfFillCommandThermostatClusterSetWeeklySchedule(numberOfTransitionsForSequence, timeOfDay, dayOfWeekForSequence, \
+ relayStatus, modeForSequence, localTemperature, payload, payloadLen, \
+ humidityInPercentage, setpoint, unreadEntries) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_WEEKLY_SCHEDULE_COMMAND_ID, "uuuuuubuuu", numberOfTransitionsForSequence, timeOfDay, \
+ dayOfWeekForSequence, relayStatus, modeForSequence, localTemperature, payload, payloadLen, \
+ humidityInPercentage, setpoint, unreadEntries);
+
+/** @brief Command description for GetWeeklySchedule
+ *
+ * Command: GetWeeklySchedule
+ * @param daysToReturn DayOfWeek
+ * @param modeToReturn ModeForSequence
+ */
+#define emberAfFillCommandThermostatClusterGetWeeklySchedule(daysToReturn, modeToReturn) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_WEEKLY_SCHEDULE_COMMAND_ID, "uu", daysToReturn, modeToReturn);
+
+/** @brief Command description for ClearWeeklySchedule
+ *
+ * Command: ClearWeeklySchedule
+ */
+#define emberAfFillCommandThermostatClusterClearWeeklySchedule() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_WEEKLY_SCHEDULE_COMMAND_ID, "", );
+
+/** @brief Command description for GetRelayStatusLog
+ *
+ * Command: GetRelayStatusLog
+ */
+#define emberAfFillCommandThermostatClusterGetRelayStatusLog() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_RELAY_STATUS_LOG_COMMAND_ID, "", );
+
+/** @brief Command description for MoveToHue
+ *
+ * Command: MoveToHue
+ * @param hue INT8U
+ * @param direction HueDirection
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterMoveToHue(hue, direction, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_MOVE_TO_HUE_COMMAND_ID, "uuuuu", hue, direction, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveHue
+ *
+ * Command: MoveHue
+ * @param moveMode HueMoveMode
+ * @param rate INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterMoveHue(moveMode, rate, optionsMask, optionsOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_MOVE_HUE_COMMAND_ID, "uuuu", moveMode, rate, optionsMask, optionsOverride);
+
+/** @brief Command description for StepHue
+ *
+ * Command: StepHue
+ * @param stepMode HueStepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterStepHue(stepMode, stepSize, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_STEP_HUE_COMMAND_ID, "uuuuu", stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToSaturation
+ *
+ * Command: MoveToSaturation
+ * @param saturation INT8U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterMoveToSaturation(saturation, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_MOVE_TO_SATURATION_COMMAND_ID, "uuuu", saturation, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveSaturation
+ *
+ * Command: MoveSaturation
+ * @param moveMode SaturationMoveMode
+ * @param rate INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterMoveSaturation(moveMode, rate, optionsMask, optionsOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_MOVE_SATURATION_COMMAND_ID, "uuuu", moveMode, rate, optionsMask, optionsOverride);
+
+/** @brief Command description for StepSaturation
+ *
+ * Command: StepSaturation
+ * @param stepMode SaturationStepMode
+ * @param stepSize INT8U
+ * @param transitionTime INT8U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterStepSaturation(stepMode, stepSize, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_STEP_SATURATION_COMMAND_ID, "uuuuu", stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToHueAndSaturation
+ *
+ * Command: MoveToHueAndSaturation
+ * @param hue INT8U
+ * @param saturation INT8U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterMoveToHueAndSaturation(hue, saturation, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID, "uuuuu", hue, saturation, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToColor
+ *
+ * Command: MoveToColor
+ * @param colorX INT16U
+ * @param colorY INT16U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterMoveToColor(colorX, colorY, transitionTime, optionsMask, optionsOverride) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_MOVE_TO_COLOR_COMMAND_ID, "uuuuu", colorX, colorY, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveColor
+ *
+ * Command: MoveColor
+ * @param rateX INT16S
+ * @param rateY INT16S
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterMoveColor(rateX, rateY, optionsMask, optionsOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_MOVE_COLOR_COMMAND_ID, "uuuu", rateX, rateY, optionsMask, optionsOverride);
+
+/** @brief Command description for StepColor
+ *
+ * Command: StepColor
+ * @param stepX INT16S
+ * @param stepY INT16S
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterStepColor(stepX, stepY, transitionTime, optionsMask, optionsOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STEP_COLOR_COMMAND_ID, "uuuuu", stepX, stepY, transitionTime, optionsMask, optionsOverride);
+
+/** @brief Command description for MoveToColorTemperature
+ *
+ * Command: MoveToColorTemperature
+ * @param colorTemperature INT16U
+ * @param transitionTime INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterMoveToColorTemperature(colorTemperature, transitionTime, optionsMask, optionsOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID, "uuuu", colorTemperature, transitionTime, optionsMask, \
+ optionsOverride);
+
+/** @brief Command description for EnhancedMoveToHue
+ *
+ * Command: EnhancedMoveToHue
+ * @param enhancedHue INT16U
+ * @param direction HueDirection
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandColor \
+ ControlClusterEnhancedMoveToHue(enhancedHue, direction, transitionTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENHANCED_MOVE_TO_HUE_COMMAND_ID, "uuu", enhancedHue, direction, transitionTime);
+
+/** @brief Command description for EnhancedMoveHue
+ *
+ * Command: EnhancedMoveHue
+ * @param moveMode HueMoveMode
+ * @param rate INT16U
+ */
+#define emberAfFillCommandColor \
+ ControlClusterEnhancedMoveHue(moveMode, rate) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENHANCED_MOVE_HUE_COMMAND_ID, "uu", moveMode, rate);
+
+/** @brief Command description for EnhancedStepHue
+ *
+ * Command: EnhancedStepHue
+ * @param stepMode HueStepMode
+ * @param stepSize INT16U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandColor \
+ ControlClusterEnhancedStepHue(stepMode, stepSize, transitionTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENHANCED_STEP_HUE_COMMAND_ID, "uuu", stepMode, stepSize, transitionTime);
+
+/** @brief Command description for EnhancedMoveToHueAndSaturation
+ *
+ * Command: EnhancedMoveToHueAndSaturation
+ * @param enhancedHue INT16U
+ * @param saturation INT8U
+ * @param transitionTime INT16U
+ */
+#define emberAfFillCommandColor \
+ ControlClusterEnhancedMoveToHueAndSaturation(enhancedHue, saturation, transitionTime) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_ENHANCED_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID, "uuu", enhancedHue, saturation, transitionTime);
+
+/** @brief Command description for ColorLoopSet
+ *
+ * Command: ColorLoopSet
+ * @param updateFlags ColorLoopUpdateFlags
+ * @param action ColorLoopAction
+ * @param direction ColorLoopDirection
+ * @param time INT16U
+ * @param startHue INT16U
+ */
+#define emberAfFillCommandColor \
+ ControlClusterColorLoopSet(updateFlags, action, direction, time, startHue) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_COLOR_LOOP_SET_COMMAND_ID, "uuuuu", updateFlags, action, direction, time, startHue);
+
+/** @brief Command description for StopMoveStep
+ *
+ * Command: StopMoveStep
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterStopMoveStep(optionsMask, optionsOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STOP_MOVE_STEP_COMMAND_ID, "uu", optionsMask, optionsOverride);
+
+/** @brief Command description for MoveColorTemperature
+ *
+ * Command: MoveColorTemperature
+ * @param moveMode HueMoveMode
+ * @param rate INT16U
+ * @param colorTemperatureMinimum INT16U
+ * @param colorTemperatureMaximum INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterMoveColorTemperature(moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, \
+ optionsOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID, "uuuuuu", moveMode, rate, colorTemperatureMinimum, \
+ colorTemperatureMaximum, optionsMask, optionsOverride);
+
+/** @brief Command description for StepColorTemperature
+ *
+ * Command: StepColorTemperature
+ * @param stepMode HueStepMode
+ * @param stepSize INT16U
+ * @param transitionTime INT16U
+ * @param colorTemperatureMinimum INT16U
+ * @param colorTemperatureMaximum INT16U
+ * @param optionsMask BITMAP8
+ * @param optionsOverride BITMAP8
+ */
+#define emberAfFillCommandColor \
+ ControlClusterStepColorTemperature(stepMode, stepSize, transitionTime, colorTemperatureMinimum, colorTemperatureMaximum, \
+ optionsMask, optionsOverride) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID, "uuuuuuu", stepMode, stepSize, transitionTime, \
+ colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
+
+/** @brief Command description for ZoneEnrollResponse
+ *
+ * Command: ZoneEnrollResponse
+ * @param enrollResponseCode IasEnrollResponseCode
+ * @param zoneStatus IasZoneStatus
+ * @param zoneId INT8U
+ * @param extendedStatus BITMAP8
+ * @param zoneId INT8U
+ * @param delay INT16U
+ */
+#define emberAfFillCommandIAS \
+ ZoneClusterZoneEnrollResponse(enrollResponseCode, zoneStatus, zoneId, extendedStatus, zoneId, delay) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID, "uuuuuu", enrollResponseCode, zoneStatus, zoneId, \
+ extendedStatus, zoneId, delay);
+
+/** @brief Command description for InitiateNormalOperationMode
+ *
+ * Command: InitiateNormalOperationMode
+ * @param zoneType IasZoneType
+ * @param manufacturerCode INT16U
+ */
+#define emberAfFillCommandIAS \
+ ZoneClusterInitiateNormalOperationMode(zoneType, manufacturerCode) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_INITIATE_NORMAL_OPERATION_MODE_COMMAND_ID, "uu", zoneType, manufacturerCode);
+
+/** @brief Command description for InitiateNormalOperationModeResponse
+ *
+ * Command: InitiateNormalOperationModeResponse
+ * @param testModeDuration INT8U
+ * @param currentZoneSensitivityLevel INT8U
+ */
+#define emberAfFillCommandIAS \
+ ZoneClusterInitiateNormalOperationModeResponse(testModeDuration, currentZoneSensitivityLevel) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_INITIATE_NORMAL_OPERATION_MODE_RESPONSE_COMMAND_ID, "uu", testModeDuration, currentZoneSensitivityLevel);
+
+/** @brief Command description for InitiateTestModeResponse
+ *
+ * Command: InitiateTestModeResponse
+ */
+#define emberAfFillCommandIAS \
+ ZoneClusterInitiateTestModeResponse() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_INITIATE_TEST_MODE_RESPONSE_COMMAND_ID, "", );
+
+/** @brief Command description for Arm
+ *
+ * Command: Arm
+ * @param armMode IasAceArmMode
+ * @param armNotification IasAceArmNotification
+ * @param armDisarmCode CHAR_STRING
+ * @param zoneId INT8U
+ */
+#define emberAfFillCommandIAS \
+ ACEClusterArm(armMode, armNotification, armDisarmCode, zoneId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ARM_COMMAND_ID, "uuuu", armMode, armNotification, armDisarmCode, zoneId);
+
+/** @brief Command description for Bypass
+ *
+ * Command: Bypass
+ * @param numberOfZones INT8U
+ * @param section0 BITMAP16
+ * @param zoneIds INT8U []
+ * @param zoneIdsLen int
+ * @param section1 BITMAP16
+ * @param armDisarmCode CHAR_STRING
+ * @param section2 BITMAP16
+ * @param section3 BITMAP16
+ * @param section4 BITMAP16
+ * @param section5 BITMAP16
+ * @param section6 BITMAP16
+ * @param section7 BITMAP16
+ * @param section8 BITMAP16
+ * @param section9 BITMAP16
+ * @param section10 BITMAP16
+ * @param section11 BITMAP16
+ * @param section12 BITMAP16
+ * @param section13 BITMAP16
+ * @param section14 BITMAP16
+ * @param section15 BITMAP16
+ */
+#define emberAfFillCommandIAS \
+ ACEClusterBypass(numberOfZones, section0, zoneIds, zoneIdsLen, section1, armDisarmCode, section2, section3, section4, \
+ section5, section6, section7, section8, section9, section10, section11, section12, section13, section14, \
+ section15) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_BYPASS_COMMAND_ID, "uubuuuuuuuuuuuuuuuu", numberOfZones, section0, zoneIds, zoneIdsLen, \
+ section1, armDisarmCode, section2, section3, section4, section5, section6, section7, section8, \
+ section9, section10, section11, section12, section13, section14, section15);
+
+/** @brief Command description for Emergency
+ *
+ * Command: Emergency
+ * @param zoneId INT8U
+ * @param zoneType IasZoneType
+ * @param ieeeAddress IEEE_ADDRESS
+ * @param zoneLabel CHAR_STRING
+ */
+#define emberAfFillCommandIAS \
+ ACEClusterEmergency(zoneId, zoneType, ieeeAddress, zoneLabel) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_EMERGENCY_COMMAND_ID, "uuuu", zoneId, zoneType, ieeeAddress, zoneLabel);
+
+/** @brief Command description for Fire
+ *
+ * Command: Fire
+ * @param zoneId INT8U
+ * @param zoneStatus ENUM16
+ * @param audibleNotification IasAceAudibleNotification
+ * @param zoneLabel CHAR_STRING
+ */
+#define emberAfFillCommandIAS \
+ ACEClusterFire(zoneId, zoneStatus, audibleNotification, zoneLabel) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_FIRE_COMMAND_ID, "uuuu", zoneId, zoneStatus, audibleNotification, zoneLabel);
+
+/** @brief Command description for Panic
+ *
+ * Command: Panic
+ * @param panelStatus IasAcePanelStatus
+ * @param secondsRemaining INT8U
+ * @param audibleNotification IasAceAudibleNotification
+ * @param alarmStatus IasAceAlarmStatus
+ */
+#define emberAfFillCommandIAS \
+ ACEClusterPanic(panelStatus, secondsRemaining, audibleNotification, alarmStatus) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PANIC_COMMAND_ID, "uuuu", panelStatus, secondsRemaining, audibleNotification, alarmStatus);
+
+/** @brief Command description for GetZoneIdMap
+ *
+ * Command: GetZoneIdMap
+ * @param panelStatus IasAcePanelStatus
+ * @param secondsRemaining INT8U
+ * @param audibleNotification IasAceAudibleNotification
+ * @param alarmStatus IasAceAlarmStatus
+ */
+#define emberAfFillCommandIAS \
+ ACEClusterGetZoneIdMap(panelStatus, secondsRemaining, audibleNotification, alarmStatus) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_GET_ZONE_ID_MAP_COMMAND_ID, "uuuu", panelStatus, secondsRemaining, audibleNotification, alarmStatus);
+
+/** @brief Command description for GetZoneInformation
+ *
+ * Command: GetZoneInformation
+ * @param zoneId INT8U
+ * @param numberOfZones INT8U
+ * @param zoneIds INT8U []
+ * @param zoneIdsLen int
+ */
+#define emberAfFillCommandIAS \
+ ACEClusterGetZoneInformation(zoneId, numberOfZones, zoneIds, zoneIdsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_ZONE_INFORMATION_COMMAND_ID, "uub", zoneId, numberOfZones, zoneIds, zoneIdsLen);
+
+/** @brief Command description for GetPanelStatus
+ *
+ * Command: GetPanelStatus
+ * @param numberOfZones INT8U
+ * @param bypassResult IasAceBypassResult []
+ * @param bypassResultLen int
+ */
+#define emberAfFillCommandIAS \
+ ACEClusterGetPanelStatus(numberOfZones, bypassResult, bypassResultLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_PANEL_STATUS_COMMAND_ID, "ub", numberOfZones, bypassResult, bypassResultLen);
+
+/** @brief Command description for GetBypassedZoneList
+ *
+ * Command: GetBypassedZoneList
+ * @param zoneStatusComplete BOOLEAN
+ * @param numberOfZones INT8U
+ * @param zoneStatusResult IasAceZoneStatusResult []
+ * @param zoneStatusResultLen int
+ */
+#define emberAfFillCommandIAS \
+ ACEClusterGetBypassedZoneList(zoneStatusComplete, numberOfZones, zoneStatusResult, zoneStatusResultLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_BYPASSED_ZONE_LIST_COMMAND_ID, "uub", zoneStatusComplete, numberOfZones, \
+ zoneStatusResult, zoneStatusResultLen);
+
+/** @brief Command description for GetZoneStatus
+ *
+ * Command: GetZoneStatus
+ * @param startingZoneId INT8U
+ * @param maxNumberOfZoneIds INT8U
+ * @param zoneStatusMaskFlag BOOLEAN
+ * @param zoneStatusMask BITMAP16
+ */
+#define emberAfFillCommandIAS \
+ ACEClusterGetZoneStatus(startingZoneId, maxNumberOfZoneIds, zoneStatusMaskFlag, zoneStatusMask) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_GET_ZONE_STATUS_COMMAND_ID, "uuuu", startingZoneId, maxNumberOfZoneIds, zoneStatusMaskFlag, zoneStatusMask);
+
+/** @brief Command description for StartWarning
+ *
+ * Command: StartWarning
+ * @param warningInfo WarningInfo
+ * @param warningDuration INT16U
+ * @param strobeDutyCycle INT8U
+ * @param strobeLevel ENUM8
+ */
+#define emberAfFillCommandIAS \
+ WDClusterStartWarning(warningInfo, warningDuration, strobeDutyCycle, strobeLevel) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_START_WARNING_COMMAND_ID, "uuuu", warningInfo, warningDuration, strobeDutyCycle, strobeLevel);
+
+/** @brief Command description for Squawk
+ *
+ * Command: Squawk
+ * @param squawkInfo SquawkInfo
+ */
+#define emberAfFillCommandIAS \
+ WDClusterSquawk(squawkInfo) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SQUAWK_COMMAND_ID, "u", squawkInfo);
+
+/** @brief Command description for MatchProtocolAddress
+ *
+ * Command: MatchProtocolAddress
+ * @param protocolAddress OCTET_STRING
+ * @param deviceIeeeAddress IEEE_ADDRESS
+ * @param protocolAddress OCTET_STRING
+ */
+#define emberAfFillCommandGeneric \
+ TunnelClusterMatchProtocolAddress(protocolAddress, deviceIeeeAddress, protocolAddress) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_MATCH_PROTOCOL_ADDRESS_COMMAND_ID, "uuu", protocolAddress, deviceIeeeAddress, protocolAddress);
+
+/** @brief Command description for AdvertiseProtocolAddress
+ *
+ * Command: AdvertiseProtocolAddress
+ * @param protocolAddress OCTET_STRING
+ */
+#define emberAfFillCommandGeneric \
+ TunnelClusterAdvertiseProtocolAddress(protocolAddress) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADVERTISE_PROTOCOL_ADDRESS_COMMAND_ID, "u", protocolAddress);
+
+/** @brief Command description for TransferNpdu
+ *
+ * Command: TransferNpdu
+ * @param npdu DATA8 []
+ * @param npduLen int
+ */
+#define emberAfFillCommandBACnet \
+ Protocol TunnelClusterTransferNpdu(npdu, npduLen) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TRANSFER_NPDU_COMMAND_ID, "b", npdu, npduLen);
+
+/** @brief Command description for TransferAPDU
+ *
+ * Command: TransferAPDU
+ * @param apdu OCTET_STRING
+ */
+#define emberAfFillCommand11073 \
+ Protocol TunnelClusterTransferAPDU(apdu) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TRANSFER_APDU_COMMAND_ID, "u", apdu);
+
+/** @brief Command description for ConnectRequest
+ *
+ * Command: ConnectRequest
+ * @param connectControl 11073ConnectRequestConnectControl
+ * @param idleTimeout INT16U
+ * @param managerTarget IEEE_ADDRESS
+ * @param managerEndpoint INT8U
+ */
+#define emberAfFillCommand11073 \
+ Protocol TunnelClusterConnectRequest(connectControl, idleTimeout, managerTarget, managerEndpoint) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_CONNECT_REQUEST_COMMAND_ID, "uuuu", connectControl, idleTimeout, managerTarget, managerEndpoint);
+
+/** @brief Command description for DisconnectRequest
+ *
+ * Command: DisconnectRequest
+ * @param managerIEEEAddress IEEE_ADDRESS
+ */
+#define emberAfFillCommand11073 \
+ Protocol TunnelClusterDisconnectRequest(managerIEEEAddress) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISCONNECT_REQUEST_COMMAND_ID, "u", managerIEEEAddress);
+
+/** @brief Command description for ConnectStatusNotification
+ *
+ * Command: ConnectStatusNotification
+ * @param connectStatus 11073TunnelConnectionStatus
+ */
+#define emberAfFillCommand11073 \
+ Protocol TunnelClusterConnectStatusNotification(connectStatus) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONNECT_STATUS_NOTIFICATION_COMMAND_ID, "u", connectStatus);
+
+/** @brief Command description for TransferApdu
+ *
+ * Command: TransferApdu
+ * @param apdu OCTET_STRING
+ */
+#define emberAfFillCommandISO \
+ 7816 Protocol TunnelClusterTransferApdu(apdu) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TRANSFER_APDU_COMMAND_ID, "u", apdu);
+
+/** @brief Command description for InsertSmartCard
+ *
+ * Command: InsertSmartCard
+ */
+#define emberAfFillCommandISO \
+ 7816 Protocol TunnelClusterInsertSmartCard() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_INSERT_SMART_CARD_COMMAND_ID, "", );
+
+/** @brief Command description for ExtractSmartCard
+ *
+ * Command: ExtractSmartCard
+ */
+#define emberAfFillCommandISO \
+ 7816 Protocol TunnelClusterExtractSmartCard() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_EXTRACT_SMART_CARD_COMMAND_ID, "", );
+
+/** @brief Command description for PublishPrice
+ *
+ * Command: PublishPrice
+ * @param providerId INT32U
+ * @param commandOptions AmiCommandOptions
+ * @param rateLabel OCTET_STRING
+ * @param issuerEventId INT32U
+ * @param currentTime UTC_TIME
+ * @param unitOfMeasure AmiUnitOfMeasure
+ * @param currency INT16U
+ * @param priceTrailingDigitAndPriceTier PriceTrailingDigitAndPriceTier
+ * @param numberOfPriceTiersAndRegisterTier PriceNumberOfPriceTiersAndRegisterTier
+ * @param startTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param price INT32U
+ * @param priceRatio INT8U
+ * @param generationPrice INT32U
+ * @param generationPriceRatio INT8U
+ * @param alternateCostDelivered INT32U
+ * @param alternateCostUnit AlternateCostUnit
+ * @param alternateCostTrailingDigit AlternateCostTrailingDigit
+ * @param numberOfBlockThresholds INT8U
+ * @param priceControl PriceControlMask
+ * @param numberOfGenerationTiers INT8U
+ * @param generationTier GenerationTier
+ * @param extendedNumberOfPriceTiers ExtendedNumberOfPriceTiers
+ * @param extendedPriceTier ExtendedPriceTier
+ * @param extendedRegisterTier ExtendedRegisterTier
+ */
+#define emberAfFillCommandPriceClusterPublishPrice( \
+ providerId, commandOptions, rateLabel, issuerEventId, currentTime, unitOfMeasure, currency, priceTrailingDigitAndPriceTier, \
+ numberOfPriceTiersAndRegisterTier, startTime, durationInMinutes, price, priceRatio, generationPrice, generationPriceRatio, \
+ alternateCostDelivered, alternateCostUnit, alternateCostTrailingDigit, numberOfBlockThresholds, priceControl, \
+ numberOfGenerationTiers, generationTier, extendedNumberOfPriceTiers, extendedPriceTier, extendedRegisterTier) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_PRICE_COMMAND_ID, "uuuuuuuuuuuuuuuuuuuuuuuuu", providerId, commandOptions, rateLabel, \
+ issuerEventId, currentTime, unitOfMeasure, currency, priceTrailingDigitAndPriceTier, \
+ numberOfPriceTiersAndRegisterTier, startTime, durationInMinutes, price, priceRatio, generationPrice, \
+ generationPriceRatio, alternateCostDelivered, alternateCostUnit, alternateCostTrailingDigit, \
+ numberOfBlockThresholds, priceControl, numberOfGenerationTiers, generationTier, \
+ extendedNumberOfPriceTiers, extendedPriceTier, extendedRegisterTier);
+
+/** @brief Command description for PublishBlockPeriod
+ *
+ * Command: PublishBlockPeriod
+ * @param providerId INT32U
+ * @param startTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param numberOfEvents INT8U
+ * @param blockPeriodStartTime UTC_TIME
+ * @param blockPeriodDuration INT24U
+ * @param numberOfPriceTiersAndNumberOfBlockThresholds BITMAP8
+ * @param blockPeriodControl BlockPeriodControl
+ * @param blockPeriodDurationType BlockPeriodDurationType
+ * @param tariffType TariffType
+ * @param tariffResolutionPeriod TariffResolutionPeriod
+ */
+#define emberAfFillCommandPriceClusterPublishBlockPeriod( \
+ providerId, startTime, issuerEventId, numberOfEvents, blockPeriodStartTime, blockPeriodDuration, \
+ numberOfPriceTiersAndNumberOfBlockThresholds, blockPeriodControl, blockPeriodDurationType, tariffType, tariffResolutionPeriod) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_BLOCK_PERIOD_COMMAND_ID, "uuuuuuuuuuu", providerId, startTime, issuerEventId, \
+ numberOfEvents, blockPeriodStartTime, blockPeriodDuration, \
+ numberOfPriceTiersAndNumberOfBlockThresholds, blockPeriodControl, blockPeriodDurationType, \
+ tariffType, tariffResolutionPeriod);
+
+/** @brief Command description for PublishConversionFactor
+ *
+ * Command: PublishConversionFactor
+ * @param issuerEventId INT32U
+ * @param providerId INT32U
+ * @param startTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param conversionFactor INT32U
+ * @param priceAckTime UTC_TIME
+ * @param conversionFactorTrailingDigit ConversionFactorTrailingDigit
+ * @param control PriceControlMask
+ */
+#define emberAfFillCommandPriceClusterPublishConversionFactor( \
+ issuerEventId, providerId, startTime, issuerEventId, conversionFactor, priceAckTime, conversionFactorTrailingDigit, control) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_CONVERSION_FACTOR_COMMAND_ID, "uuuuuuuu", issuerEventId, providerId, startTime, \
+ issuerEventId, conversionFactor, priceAckTime, conversionFactorTrailingDigit, control);
+
+/** @brief Command description for PublishCalorificValue
+ *
+ * Command: PublishCalorificValue
+ * @param issuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param startTime UTC_TIME
+ * @param numberOfEvents INT8U
+ * @param calorificValue INT32U
+ * @param tariffType TariffType
+ * @param calorificValueUnit CalorificValueUnit
+ * @param calorificValueTrailingDigit CalorificValueTrailingDigit
+ */
+#define emberAfFillCommandPriceClusterPublishCalorificValue(issuerEventId, startTime, startTime, numberOfEvents, calorificValue, \
+ tariffType, calorificValueUnit, calorificValueTrailingDigit) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_CALORIFIC_VALUE_COMMAND_ID, "uuuuuuuu", issuerEventId, startTime, startTime, \
+ numberOfEvents, calorificValue, tariffType, calorificValueUnit, calorificValueTrailingDigit);
+
+/** @brief Command description for PublishTariffInformation
+ *
+ * Command: PublishTariffInformation
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param issuerTariffId INT32U
+ * @param numberOfCommands INT8U
+ * @param startTime UTC_TIME
+ * @param tariffTypeChargingScheme TariffTypeChargingScheme
+ * @param tariffLabel OCTET_STRING
+ * @param numberOfPriceTiersInUse INT8U
+ * @param numberOfBlockThresholdsInUse INT8U
+ * @param unitOfMeasure AmiUnitOfMeasure
+ * @param currency INT16U
+ * @param priceTrailingDigit PriceTrailingDigit
+ * @param standingCharge INT32U
+ * @param tierBlockMode TierBlockMode
+ * @param blockThresholdMultiplier INT24U
+ * @param blockThresholdDivisor INT24U
+ */
+#define emberAfFillCommandPriceClusterPublishTariffInformation( \
+ providerId, earliestStartTime, issuerEventId, minIssuerEventId, issuerTariffId, numberOfCommands, startTime, \
+ tariffTypeChargingScheme, tariffLabel, numberOfPriceTiersInUse, numberOfBlockThresholdsInUse, unitOfMeasure, currency, \
+ priceTrailingDigit, standingCharge, tierBlockMode, blockThresholdMultiplier, blockThresholdDivisor) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_TARIFF_INFORMATION_COMMAND_ID, "uuuuuuuuuuuuuuuuuu", providerId, earliestStartTime, \
+ issuerEventId, minIssuerEventId, issuerTariffId, numberOfCommands, startTime, \
+ tariffTypeChargingScheme, tariffLabel, numberOfPriceTiersInUse, numberOfBlockThresholdsInUse, \
+ unitOfMeasure, currency, priceTrailingDigit, standingCharge, tierBlockMode, \
+ blockThresholdMultiplier, blockThresholdDivisor);
+
+/** @brief Command description for PublishPriceMatrix
+ *
+ * Command: PublishPriceMatrix
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param issuerTariffId INT32U
+ * @param commandIndex INT8U
+ * @param numberOfCommands INT8U
+ * @param subPayloadControl PriceMatrixSubPayloadControl
+ * @param payload PriceMatrixSubPayload []
+ * @param payloadLen int
+ */
+#define emberAfFillCommandPriceClusterPublishPriceMatrix(providerId, earliestStartTime, issuerEventId, minIssuerEventId, \
+ startTime, numberOfCommands, issuerTariffId, commandIndex, \
+ numberOfCommands, subPayloadControl, payload, payloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_PRICE_MATRIX_COMMAND_ID, "uuuuuuuuuub", providerId, earliestStartTime, issuerEventId, \
+ minIssuerEventId, startTime, numberOfCommands, issuerTariffId, commandIndex, numberOfCommands, \
+ subPayloadControl, payload, payloadLen);
+
+/** @brief Command description for PublishBlockThresholds
+ *
+ * Command: PublishBlockThresholds
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param issuerTariffId INT32U
+ * @param tariffType TariffType
+ * @param commandIndex INT8U
+ * @param numberOfCommands INT8U
+ * @param subPayloadControl BlockThresholdSubPayloadControl
+ * @param payload BlockThresholdSubPayload []
+ * @param payloadLen int
+ */
+#define emberAfFillCommandPriceClusterPublishBlockThresholds( \
+ providerId, earliestStartTime, issuerEventId, minIssuerEventId, startTime, numberOfCommands, issuerTariffId, tariffType, \
+ commandIndex, numberOfCommands, subPayloadControl, payload, payloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_BLOCK_THRESHOLDS_COMMAND_ID, "uuuuuuuuuuub", providerId, earliestStartTime, \
+ issuerEventId, minIssuerEventId, startTime, numberOfCommands, issuerTariffId, tariffType, \
+ commandIndex, numberOfCommands, subPayloadControl, payload, payloadLen);
+
+/** @brief Command description for PublishCO2Value
+ *
+ * Command: PublishCO2Value
+ * @param providerId INT32U
+ * @param issuerTariffId INT32U
+ * @param issuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param tariffType TariffType
+ * @param cO2Value INT32U
+ * @param cO2ValueUnit CO2Unit
+ * @param cO2ValueTrailingDigit CO2TrailingDigit
+ */
+#define emberAfFillCommandPriceClusterPublishCO2Value(providerId, issuerTariffId, issuerEventId, startTime, tariffType, cO2Value, \
+ cO2ValueUnit, cO2ValueTrailingDigit) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_CO2_VALUE_COMMAND_ID, "uuuuuuuu", providerId, issuerTariffId, issuerEventId, startTime, \
+ tariffType, cO2Value, cO2ValueUnit, cO2ValueTrailingDigit);
+
+/** @brief Command description for PublishTierLabels
+ *
+ * Command: PublishTierLabels
+ * @param providerId INT32U
+ * @param issuerTariffId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerTariffId INT32U
+ * @param commandIndex INT8U
+ * @param numberOfCommands INT8U
+ * @param numberOfLabels INT8U
+ * @param tierLabelsPayload INT8U []
+ * @param tierLabelsPayloadLen int
+ */
+#define emberAfFillCommandPriceClusterPublishTierLabels(providerId, issuerTariffId, issuerEventId, issuerTariffId, commandIndex, \
+ numberOfCommands, numberOfLabels, tierLabelsPayload, tierLabelsPayloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_TIER_LABELS_COMMAND_ID, "uuuuuuub", providerId, issuerTariffId, issuerEventId, \
+ issuerTariffId, commandIndex, numberOfCommands, numberOfLabels, tierLabelsPayload, \
+ tierLabelsPayloadLen);
+
+/** @brief Command description for PublishBillingPeriod
+ *
+ * Command: PublishBillingPeriod
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param billingPeriodStartTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param billingPeriodDuration BillingPeriodDuration
+ * @param tariffType TariffType
+ * @param billingPeriodDurationType BillingPeriodDurationType
+ * @param tariffType TariffType
+ */
+#define emberAfFillCommandPriceClusterPublishBillingPeriod(providerId, earliestStartTime, issuerEventId, minIssuerEventId, \
+ billingPeriodStartTime, numberOfCommands, billingPeriodDuration, \
+ tariffType, billingPeriodDurationType, tariffType) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_BILLING_PERIOD_COMMAND_ID, "uuuuuuuuuu", providerId, earliestStartTime, issuerEventId, \
+ minIssuerEventId, billingPeriodStartTime, numberOfCommands, billingPeriodDuration, tariffType, \
+ billingPeriodDurationType, tariffType);
+
+/** @brief Command description for PublishConsolidatedBill
+ *
+ * Command: PublishConsolidatedBill
+ * @param providerId INT32U
+ * @param issuerTariffId INT32U
+ * @param issuerEventId INT32U
+ * @param billingPeriodStartTime UTC_TIME
+ * @param billingPeriodDuration BillingPeriodDuration
+ * @param billingPeriodDurationType BillingPeriodDurationType
+ * @param tariffType TariffType
+ * @param consolidatedBill INT32U
+ * @param currency INT16U
+ * @param billTrailingDigit BillTrailingDigit
+ */
+#define emberAfFillCommandPriceClusterPublishConsolidatedBill(providerId, issuerTariffId, issuerEventId, billingPeriodStartTime, \
+ billingPeriodDuration, billingPeriodDurationType, tariffType, \
+ consolidatedBill, currency, billTrailingDigit) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_CONSOLIDATED_BILL_COMMAND_ID, "uuuuuuuuuu", providerId, issuerTariffId, issuerEventId, \
+ billingPeriodStartTime, billingPeriodDuration, billingPeriodDurationType, tariffType, \
+ consolidatedBill, currency, billTrailingDigit);
+
+/** @brief Command description for PublishCppEvent
+ *
+ * Command: PublishCppEvent
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param durationInMinutes INT16U
+ * @param tariffType TariffType
+ * @param tariffType TariffType
+ * @param cppPriceTier CppPriceTier
+ * @param cppAuth PublishCppEventCppAuth
+ */
+#define emberAfFillCommandPriceClusterPublishCppEvent(providerId, earliestStartTime, issuerEventId, minIssuerEventId, startTime, \
+ numberOfCommands, durationInMinutes, tariffType, tariffType, cppPriceTier, \
+ cppAuth) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_CPP_EVENT_COMMAND_ID, "uuuuuuuuuuu", providerId, earliestStartTime, issuerEventId, \
+ minIssuerEventId, startTime, numberOfCommands, durationInMinutes, tariffType, tariffType, \
+ cppPriceTier, cppAuth);
+
+/** @brief Command description for PublishCreditPayment
+ *
+ * Command: PublishCreditPayment
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param creditPaymentDueDate UTC_TIME
+ * @param numberOfCommands INT8U
+ * @param creditPaymentOverDueAmount INT32U
+ * @param tariffType TariffType
+ * @param creditPaymentStatus CreditPaymentStatus
+ * @param creditPayment INT32U
+ * @param creditPaymentDate UTC_TIME
+ * @param creditPaymentRef OCTET_STRING
+ */
+#define emberAfFillCommandPriceClusterPublishCreditPayment( \
+ providerId, earliestStartTime, issuerEventId, minIssuerEventId, creditPaymentDueDate, numberOfCommands, \
+ creditPaymentOverDueAmount, tariffType, creditPaymentStatus, creditPayment, creditPaymentDate, creditPaymentRef) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_CREDIT_PAYMENT_COMMAND_ID, "uuuuuuuuuuuu", providerId, earliestStartTime, issuerEventId, \
+ minIssuerEventId, creditPaymentDueDate, numberOfCommands, creditPaymentOverDueAmount, tariffType, \
+ creditPaymentStatus, creditPayment, creditPaymentDate, creditPaymentRef);
+
+/** @brief Command description for PublishCurrencyConversion
+ *
+ * Command: PublishCurrencyConversion
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param cppAuth CppEventResponseCppAuth
+ * @param startTime UTC_TIME
+ * @param oldCurrency INT16U
+ * @param newCurrency INT16U
+ * @param conversionFactor INT32U
+ * @param conversionFactorTrailingDigit ConversionFactorTrailingDigit
+ * @param currencyChangeControlFlags CurrencyChangeControl
+ */
+#define emberAfFillCommandPriceClusterPublishCurrencyConversion(providerId, issuerEventId, issuerEventId, cppAuth, startTime, \
+ oldCurrency, newCurrency, conversionFactor, \
+ conversionFactorTrailingDigit, currencyChangeControlFlags) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_CURRENCY_CONVERSION_COMMAND_ID, "uuuuuuuuuu", providerId, issuerEventId, issuerEventId, \
+ cppAuth, startTime, oldCurrency, newCurrency, conversionFactor, conversionFactorTrailingDigit, \
+ currencyChangeControlFlags);
+
+/** @brief Command description for CancelTariff
+ *
+ * Command: CancelTariff
+ * @param providerId INT32U
+ * @param latestEndTime UTC_TIME
+ * @param issuerTariffId INT32U
+ * @param numberOfRecords INT8U
+ * @param tariffType TariffType
+ */
+#define emberAfFillCommandPriceClusterCancelTariff(providerId, latestEndTime, issuerTariffId, numberOfRecords, tariffType) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CANCEL_TARIFF_COMMAND_ID, "uuuuu", providerId, latestEndTime, issuerTariffId, numberOfRecords, \
+ tariffType);
+
+/** @brief Command description for GetCurrencyConversionCommand
+ *
+ * Command: GetCurrencyConversionCommand
+ */
+#define emberAfFillCommandPriceClusterGetCurrencyConversionCommand() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_CURRENCY_CONVERSION_COMMAND_COMMAND_ID, "", );
+
+/** @brief Command description for GetTariffCancellation
+ *
+ * Command: GetTariffCancellation
+ */
+#define emberAfFillCommandPriceClusterGetTariffCancellation() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_TARIFF_CANCELLATION_COMMAND_ID, "", );
+
+/** @brief Command description for LoadControlEvent
+ *
+ * Command: LoadControlEvent
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param deviceClass AmiDeviceClass
+ * @param eventStatus AmiEventStatus
+ * @param utilityEnrollmentGroup INT8U
+ * @param eventStatusTime UTC_TIME
+ * @param startTime UTC_TIME
+ * @param criticalityLevelApplied AmiCriticalityLevel
+ * @param durationInMinutes INT16U
+ * @param coolingTemperatureSetPointApplied INT16U
+ * @param criticalityLevel AmiCriticalityLevel
+ * @param heatingTemperatureSetPointApplied INT16U
+ * @param coolingTemperatureOffset INT8U
+ * @param averageLoadAdjustmentPercentageApplied INT8S
+ * @param heatingTemperatureOffset INT8U
+ * @param dutyCycleApplied INT8U
+ * @param coolingTemperatureSetPoint INT16S
+ * @param eventControl AmiEventControl
+ * @param heatingTemperatureSetPoint INT16S
+ * @param signatureType SignatureType
+ * @param averageLoadAdjustmentPercentage INT8S
+ * @param signature Signature
+ * @param dutyCycle INT8U
+ * @param eventControl AmiEventControl
+ */
+#define emberAfFillCommandDemand \
+ Response and Load ControlClusterLoadControlEvent( \
+ issuerEventId, issuerEventId, deviceClass, eventStatus, utilityEnrollmentGroup, eventStatusTime, startTime, \
+ criticalityLevelApplied, durationInMinutes, coolingTemperatureSetPointApplied, criticalityLevel, \
+ heatingTemperatureSetPointApplied, coolingTemperatureOffset, averageLoadAdjustmentPercentageApplied, \
+ heatingTemperatureOffset, dutyCycleApplied, coolingTemperatureSetPoint, eventControl, heatingTemperatureSetPoint, \
+ signatureType, averageLoadAdjustmentPercentage, signature, dutyCycle, eventControl) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_LOAD_CONTROL_EVENT_COMMAND_ID, "uuuuuuuuuuuuuuuuuuuuuuuu", issuerEventId, issuerEventId, \
+ deviceClass, eventStatus, utilityEnrollmentGroup, eventStatusTime, startTime, \
+ criticalityLevelApplied, durationInMinutes, coolingTemperatureSetPointApplied, criticalityLevel, \
+ heatingTemperatureSetPointApplied, coolingTemperatureOffset, \
+ averageLoadAdjustmentPercentageApplied, heatingTemperatureOffset, dutyCycleApplied, \
+ coolingTemperatureSetPoint, eventControl, heatingTemperatureSetPoint, signatureType, \
+ averageLoadAdjustmentPercentage, signature, dutyCycle, eventControl);
+
+/** @brief Command description for CancelLoadControlEvent
+ *
+ * Command: CancelLoadControlEvent
+ * @param issuerEventId INT32U
+ * @param startTime UTC_TIME
+ * @param deviceClass AmiDeviceClass
+ * @param numberOfEvents INT8U
+ * @param utilityEnrollmentGroup INT8U
+ * @param issuerEventId INT32U
+ * @param cancelControl AmiCancelControl
+ * @param effectiveTime UTC_TIME
+ */
+#define emberAfFillCommandDemand \
+ Response and Load ControlClusterCancelLoadControlEvent(issuerEventId, startTime, deviceClass, numberOfEvents, \
+ utilityEnrollmentGroup, issuerEventId, cancelControl, effectiveTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CANCEL_LOAD_CONTROL_EVENT_COMMAND_ID, "uuuuuuuu", issuerEventId, startTime, deviceClass, \
+ numberOfEvents, utilityEnrollmentGroup, issuerEventId, cancelControl, effectiveTime);
+
+/** @brief Command description for CancelAllLoadControlEvents
+ *
+ * Command: CancelAllLoadControlEvents
+ * @param cancelControl AmiCancelControl
+ */
+#define emberAfFillCommandDemand \
+ Response and Load ControlClusterCancelAllLoadControlEvents(cancelControl) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CANCEL_ALL_LOAD_CONTROL_EVENTS_COMMAND_ID, "u", cancelControl);
+
+/** @brief Command description for GetProfileResponse
+ *
+ * Command: GetProfileResponse
+ * @param endTime UTC_TIME
+ * @param intervalChannel AmiIntervalChannel
+ * @param status AmiGetProfileStatus
+ * @param endTime UTC_TIME
+ * @param profileIntervalPeriod AmiIntervalPeriod
+ * @param numberOfPeriods INT8U
+ * @param numberOfPeriodsDelivered INT8U
+ * @param intervals INT24U []
+ * @param intervalsLen int
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterGetProfileResponse(endTime, intervalChannel, status, endTime, profileIntervalPeriod, numberOfPeriods, \
+ numberOfPeriodsDelivered, intervals, intervalsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_PROFILE_RESPONSE_COMMAND_ID, "uuuuuuub", endTime, intervalChannel, status, endTime, \
+ profileIntervalPeriod, numberOfPeriods, numberOfPeriodsDelivered, intervals, intervalsLen);
+
+/** @brief Command description for RequestMirror
+ *
+ * Command: RequestMirror
+ * @param endpointId INT16U
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterRequestMirror(endpointId) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REQUEST_MIRROR_COMMAND_ID, "u", endpointId);
+
+/** @brief Command description for RemoveMirror
+ *
+ * Command: RemoveMirror
+ * @param endpointId INT16U
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterRemoveMirror(endpointId) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_MIRROR_COMMAND_ID, "u", endpointId);
+
+/** @brief Command description for RequestFastPollModeResponse
+ *
+ * Command: RequestFastPollModeResponse
+ * @param appliedUpdatePeriod INT8U
+ * @param fastPollUpdatePeriod INT8U
+ * @param fastPollModeEndtime UTC_TIME
+ * @param duration INT8U
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterRequestFastPollModeResponse(appliedUpdatePeriod, fastPollUpdatePeriod, fastPollModeEndtime, duration) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REQUEST_FAST_POLL_MODE_RESPONSE_COMMAND_ID, "uuuu", appliedUpdatePeriod, \
+ fastPollUpdatePeriod, fastPollModeEndtime, duration);
+
+/** @brief Command description for ScheduleSnapshotResponse
+ *
+ * Command: ScheduleSnapshotResponse
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param snapshotResponsePayload SnapshotResponsePayload []
+ * @param snapshotResponsePayloadLen int
+ * @param commandIndex INT8U
+ * @param commandCount INT8U
+ * @param snapshotSchedulePayload SnapshotSchedulePayload []
+ * @param snapshotSchedulePayloadLen int
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterScheduleSnapshotResponse(issuerEventId, issuerEventId, snapshotResponsePayload, snapshotResponsePayloadLen, \
+ commandIndex, commandCount, snapshotSchedulePayload, snapshotSchedulePayloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCHEDULE_SNAPSHOT_RESPONSE_COMMAND_ID, "uubuub", issuerEventId, issuerEventId, \
+ snapshotResponsePayload, snapshotResponsePayloadLen, commandIndex, commandCount, \
+ snapshotSchedulePayload, snapshotSchedulePayloadLen);
+
+/** @brief Command description for TakeSnapshotResponse
+ *
+ * Command: TakeSnapshotResponse
+ * @param snapshotId INT32U
+ * @param snapshotCause SnapshotCause
+ * @param snapshotConfirmation SnapshotConfirmation
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterTakeSnapshotResponse(snapshotId, snapshotCause, snapshotConfirmation) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TAKE_SNAPSHOT_RESPONSE_COMMAND_ID, "uuu", snapshotId, snapshotCause, snapshotConfirmation);
+
+/** @brief Command description for PublishSnapshot
+ *
+ * Command: PublishSnapshot
+ * @param snapshotId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param snapshotTime UTC_TIME
+ * @param latestEndTime UTC_TIME
+ * @param totalSnapshotsFound INT8U
+ * @param snapshotOffset INT8U
+ * @param commandIndex INT8U
+ * @param snapshotCause SnapshotCause
+ * @param totalCommands INT8U
+ * @param snapshotCause SnapshotCause
+ * @param snapshotPayloadType SnapshotPayloadType
+ * @param snapshotPayload INT8U []
+ * @param snapshotPayloadLen int
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterPublishSnapshot(snapshotId, earliestStartTime, snapshotTime, latestEndTime, totalSnapshotsFound, \
+ snapshotOffset, commandIndex, snapshotCause, totalCommands, snapshotCause, snapshotPayloadType, \
+ snapshotPayload, snapshotPayloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_SNAPSHOT_COMMAND_ID, "uuuuuuuuuuub", snapshotId, earliestStartTime, snapshotTime, \
+ latestEndTime, totalSnapshotsFound, snapshotOffset, commandIndex, snapshotCause, totalCommands, \
+ snapshotCause, snapshotPayloadType, snapshotPayload, snapshotPayloadLen);
+
+/** @brief Command description for GetSampledDataResponse
+ *
+ * Command: GetSampledDataResponse
+ * @param sampleId INT16U
+ * @param issuerEventId INT32U
+ * @param sampleStartTime UTC_TIME
+ * @param startSamplingTime UTC_TIME
+ * @param sampleType SampleType
+ * @param sampleType SampleType
+ * @param sampleRequestInterval INT16U
+ * @param sampleRequestInterval INT16U
+ * @param numberOfSamples INT16U
+ * @param maxNumberOfSamples INT16U
+ * @param samples INT24U []
+ * @param samplesLen int
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterGetSampledDataResponse(sampleId, issuerEventId, sampleStartTime, startSamplingTime, sampleType, sampleType, \
+ sampleRequestInterval, sampleRequestInterval, numberOfSamples, maxNumberOfSamples, \
+ samples, samplesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_SAMPLED_DATA_RESPONSE_COMMAND_ID, "uuuuuuuuuub", sampleId, issuerEventId, \
+ sampleStartTime, startSamplingTime, sampleType, sampleType, sampleRequestInterval, \
+ sampleRequestInterval, numberOfSamples, maxNumberOfSamples, samples, samplesLen);
+
+/** @brief Command description for ConfigureMirror
+ *
+ * Command: ConfigureMirror
+ * @param issuerEventId INT32U
+ * @param sampleId INT16U
+ * @param reportingInterval INT24U
+ * @param earliestSampleTime UTC_TIME
+ * @param mirrorNotificationReporting BOOLEAN
+ * @param sampleType SampleType
+ * @param notificationScheme INT8U
+ * @param numberOfSamples INT16U
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterConfigureMirror(issuerEventId, sampleId, reportingInterval, earliestSampleTime, mirrorNotificationReporting, \
+ sampleType, notificationScheme, numberOfSamples) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONFIGURE_MIRROR_COMMAND_ID, "uuuuuuuu", issuerEventId, sampleId, reportingInterval, \
+ earliestSampleTime, mirrorNotificationReporting, sampleType, notificationScheme, \
+ numberOfSamples);
+
+/** @brief Command description for ConfigureNotificationScheme
+ *
+ * Command: ConfigureNotificationScheme
+ * @param issuerEventId INT32U
+ * @param notificationScheme INT8U
+ * @param notificationScheme INT8U
+ * @param notificationFlags BITMAP32 []
+ * @param notificationFlagsLen int
+ * @param notificationFlagOrder BITMAP32
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterConfigureNotificationScheme(issuerEventId, notificationScheme, notificationScheme, notificationFlags, \
+ notificationFlagsLen, notificationFlagOrder) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONFIGURE_NOTIFICATION_SCHEME_COMMAND_ID, "uuubu", issuerEventId, notificationScheme, \
+ notificationScheme, notificationFlags, notificationFlagsLen, notificationFlagOrder);
+
+/** @brief Command description for ConfigureNotificationFlags
+ *
+ * Command: ConfigureNotificationFlags
+ * @param issuerEventId INT32U
+ * @param providerId INT32U
+ * @param notificationScheme INT8U
+ * @param issuerEventId INT32U
+ * @param notificationFlagAttributeId INT16U
+ * @param clusterId INT16U
+ * @param manufacturerCode INT16U
+ * @param numberOfCommands INT8U
+ * @param commandIds INT8U []
+ * @param commandIdsLen int
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterConfigureNotificationFlags(issuerEventId, providerId, notificationScheme, issuerEventId, \
+ notificationFlagAttributeId, clusterId, manufacturerCode, numberOfCommands, \
+ commandIds, commandIdsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONFIGURE_NOTIFICATION_FLAGS_COMMAND_ID, "uuuuuuuub", issuerEventId, providerId, \
+ notificationScheme, issuerEventId, notificationFlagAttributeId, clusterId, manufacturerCode, \
+ numberOfCommands, commandIds, commandIdsLen);
+
+/** @brief Command description for GetNotifiedMessage
+ *
+ * Command: GetNotifiedMessage
+ * @param notificationScheme INT8U
+ * @param providerId INT32U
+ * @param notificationFlagAttributeId INT16U
+ * @param issuerEventId INT32U
+ * @param notificationFlagsN BITMAP32
+ * @param requestDateTime UTC_TIME
+ * @param implementationDateTime UTC_TIME
+ * @param proposedSupplyStatus MeteringSupplyStatus
+ * @param supplyControlBits SupplyControlBits
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterGetNotifiedMessage(notificationScheme, providerId, notificationFlagAttributeId, issuerEventId, \
+ notificationFlagsN, requestDateTime, implementationDateTime, proposedSupplyStatus, \
+ supplyControlBits) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_NOTIFIED_MESSAGE_COMMAND_ID, "uuuuuuuuu", notificationScheme, providerId, \
+ notificationFlagAttributeId, issuerEventId, notificationFlagsN, requestDateTime, \
+ implementationDateTime, proposedSupplyStatus, supplyControlBits);
+
+/** @brief Command description for SupplyStatusResponse
+ *
+ * Command: SupplyStatusResponse
+ * @param providerId INT32U
+ * @param proposedSupplyStatus ProposedSupplyStatus
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param supplyStatus MeteringSupplyStatus
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterSupplyStatusResponse(providerId, proposedSupplyStatus, issuerEventId, implementationDateTime, supplyStatus) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SUPPLY_STATUS_RESPONSE_COMMAND_ID, "uuuuu", providerId, proposedSupplyStatus, issuerEventId, \
+ implementationDateTime, supplyStatus);
+
+/** @brief Command description for StartSamplingResponse
+ *
+ * Command: StartSamplingResponse
+ * @param sampleId INT16U
+ * @param issuerEventId INT32U
+ * @param supplyTamperState SupplyStatus
+ * @param supplyDepletionState SupplyStatus
+ * @param supplyUncontrolledFlowState SupplyStatus
+ * @param loadLimitSupplyState SupplyStatus
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterStartSamplingResponse(sampleId, issuerEventId, supplyTamperState, supplyDepletionState, \
+ supplyUncontrolledFlowState, loadLimitSupplyState) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_START_SAMPLING_RESPONSE_COMMAND_ID, "uuuuuu", sampleId, issuerEventId, supplyTamperState, \
+ supplyDepletionState, supplyUncontrolledFlowState, loadLimitSupplyState);
+
+/** @brief Command description for SetUncontrolledFlowThreshold
+ *
+ * Command: SetUncontrolledFlowThreshold
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param uncontrolledFlowThreshold INT16U
+ * @param unitOfMeasure AmiUnitOfMeasure
+ * @param multiplier INT16U
+ * @param divisor INT16U
+ * @param stabilisationPeriod INT8U
+ * @param measurementPeriod INT16U
+ */
+#define emberAfFillCommandSimple \
+ MeteringClusterSetUncontrolledFlowThreshold(providerId, issuerEventId, uncontrolledFlowThreshold, unitOfMeasure, multiplier, \
+ divisor, stabilisationPeriod, measurementPeriod) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_UNCONTROLLED_FLOW_THRESHOLD_COMMAND_ID, "uuuuuuuu", providerId, issuerEventId, \
+ uncontrolledFlowThreshold, unitOfMeasure, multiplier, divisor, stabilisationPeriod, \
+ measurementPeriod);
+
+/** @brief Command description for GetLastMessage
+ *
+ * Command: GetLastMessage
+ * @param messageId INT32U
+ * @param messageControl MessagingControlMask
+ * @param startTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param message CHAR_STRING
+ * @param optionalExtendedMessageControl MessagingExtendedControlMask
+ */
+#define emberAfFillCommandMessagingClusterGetLastMessage(messageId, messageControl, startTime, durationInMinutes, message, \
+ optionalExtendedMessageControl) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LAST_MESSAGE_COMMAND_ID, "uuuuuu", messageId, messageControl, startTime, durationInMinutes, \
+ message, optionalExtendedMessageControl);
+
+/** @brief Command description for CancelMessage
+ *
+ * Command: CancelMessage
+ * @param messageId INT32U
+ * @param messageId INT32U
+ * @param messageControl MessagingControlMask
+ * @param confirmationTime UTC_TIME
+ * @param messageConfirmationControl BITMAP8
+ * @param messageResponse OCTET_STRING
+ */
+#define emberAfFillCommandMessagingClusterCancelMessage(messageId, messageId, messageControl, confirmationTime, \
+ messageConfirmationControl, messageResponse) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CANCEL_MESSAGE_COMMAND_ID, "uuuuuu", messageId, messageId, messageControl, confirmationTime, \
+ messageConfirmationControl, messageResponse);
+
+/** @brief Command description for DisplayProtectedMessage
+ *
+ * Command: DisplayProtectedMessage
+ * @param messageId INT32U
+ * @param earliestImplementationTime UTC_TIME
+ * @param messageControl MessagingControlMask
+ * @param startTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param message CHAR_STRING
+ * @param optionalExtendedMessageControl MessagingExtendedControlMask
+ */
+#define emberAfFillCommandMessagingClusterDisplayProtectedMessage( \
+ messageId, earliestImplementationTime, messageControl, startTime, durationInMinutes, message, optionalExtendedMessageControl) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISPLAY_PROTECTED_MESSAGE_COMMAND_ID, "uuuuuuu", messageId, earliestImplementationTime, \
+ messageControl, startTime, durationInMinutes, message, optionalExtendedMessageControl);
+
+/** @brief Command description for CancelAllMessages
+ *
+ * Command: CancelAllMessages
+ * @param implementationDateTime UTC_TIME
+ */
+#define emberAfFillCommandMessagingClusterCancelAllMessages(implementationDateTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CANCEL_ALL_MESSAGES_COMMAND_ID, "u", implementationDateTime);
+
+/** @brief Command description for RequestTunnel
+ *
+ * Command: RequestTunnel
+ * @param protocolId INT8U
+ * @param tunnelId INT16U
+ * @param manufacturerCode INT16U
+ * @param tunnelStatus TunnelingTunnelStatus
+ * @param flowControlSupport BOOLEAN
+ * @param maximumIncomingTransferSize INT16U
+ * @param maximumIncomingTransferSize INT16U
+ */
+#define emberAfFillCommandTunnelingClusterRequestTunnel(protocolId, tunnelId, manufacturerCode, tunnelStatus, flowControlSupport, \
+ maximumIncomingTransferSize, maximumIncomingTransferSize) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REQUEST_TUNNEL_COMMAND_ID, "uuuuuuu", protocolId, tunnelId, manufacturerCode, tunnelStatus, \
+ flowControlSupport, maximumIncomingTransferSize, maximumIncomingTransferSize);
+
+/** @brief Command description for CloseTunnel
+ *
+ * Command: CloseTunnel
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param data INT8U []
+ * @param dataLen int
+ */
+#define emberAfFillCommandTunnelingClusterCloseTunnel(tunnelId, tunnelId, data, dataLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLOSE_TUNNEL_COMMAND_ID, "uub", tunnelId, tunnelId, data, dataLen);
+
+/** @brief Command description for TransferDataClientToServer
+ *
+ * Command: TransferDataClientToServer
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param data INT8U []
+ * @param dataLen int
+ * @param transferDataStatus TunnelingTransferDataStatus
+ */
+#define emberAfFillCommandTunnelingClusterTransferDataClientToServer(tunnelId, tunnelId, data, dataLen, transferDataStatus) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID, "uubu", tunnelId, tunnelId, data, dataLen, \
+ transferDataStatus);
+
+/** @brief Command description for TransferDataErrorClientToServer
+ *
+ * Command: TransferDataErrorClientToServer
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param transferDataStatus TunnelingTransferDataStatus
+ * @param numberOfBytesLeft INT16U
+ */
+#define emberAfFillCommandTunnelingClusterTransferDataErrorClientToServer(tunnelId, tunnelId, transferDataStatus, \
+ numberOfBytesLeft) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TRANSFER_DATA_ERROR_CLIENT_TO_SERVER_COMMAND_ID, "uuuu", tunnelId, tunnelId, transferDataStatus, \
+ numberOfBytesLeft);
+
+/** @brief Command description for AckTransferDataClientToServer
+ *
+ * Command: AckTransferDataClientToServer
+ * @param tunnelId INT16U
+ * @param tunnelId INT16U
+ * @param numberOfBytesLeft INT16U
+ * @param numberOfOctetsLeft INT16U
+ */
+#define emberAfFillCommandTunnelingClusterAckTransferDataClientToServer(tunnelId, tunnelId, numberOfBytesLeft, numberOfOctetsLeft) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ACK_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID, "uuuu", tunnelId, tunnelId, numberOfBytesLeft, \
+ numberOfOctetsLeft);
+
+/** @brief Command description for ReadyDataClientToServer
+ *
+ * Command: ReadyDataClientToServer
+ * @param tunnelId INT16U
+ * @param protocolListComplete BOOLEAN
+ * @param numberOfOctetsLeft INT16U
+ * @param protocolCount INT8U
+ * @param protocolList Protocol []
+ * @param protocolListLen int
+ */
+#define emberAfFillCommandTunnelingClusterReadyDataClientToServer(tunnelId, protocolListComplete, numberOfOctetsLeft, \
+ protocolCount, protocolList, protocolListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_READY_DATA_CLIENT_TO_SERVER_COMMAND_ID, "uuuub", tunnelId, protocolListComplete, \
+ numberOfOctetsLeft, protocolCount, protocolList, protocolListLen);
+
+/** @brief Command description for GetSupportedTunnelProtocols
+ *
+ * Command: GetSupportedTunnelProtocols
+ * @param protocolOffset INT8U
+ * @param tunnelId INT16U
+ */
+#define emberAfFillCommandTunnelingClusterGetSupportedTunnelProtocols(protocolOffset, tunnelId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_ID, "uu", protocolOffset, tunnelId);
+
+/** @brief Command description for SelectAvailableEmergencyCredit
+ *
+ * Command: SelectAvailableEmergencyCredit
+ * @param commandIssueDateTime UTC_TIME
+ * @param originatingDevice OriginatingDevice
+ * @param siteId OCTET_STRING
+ * @param meterSerialNumber OCTET_STRING
+ */
+#define emberAfFillCommandPrepaymentClusterSelectAvailableEmergencyCredit(commandIssueDateTime, originatingDevice, siteId, \
+ meterSerialNumber) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_COMMAND_ID, "uuuu", commandIssueDateTime, originatingDevice, \
+ siteId, meterSerialNumber);
+
+/** @brief Command description for PublishPrepaySnapshot
+ *
+ * Command: PublishPrepaySnapshot
+ * @param snapshotId INT32U
+ * @param snapshotTime UTC_TIME
+ * @param totalSnapshotsFound INT8U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param snapshotCause PrepaySnapshotPayloadCause
+ * @param snapshotPayloadType PrepaySnapshotPayloadType
+ * @param snapshotPayload INT8U []
+ * @param snapshotPayloadLen int
+ */
+#define emberAfFillCommandPrepaymentClusterPublishPrepaySnapshot(snapshotId, snapshotTime, totalSnapshotsFound, commandIndex, \
+ totalNumberOfCommands, snapshotCause, snapshotPayloadType, \
+ snapshotPayload, snapshotPayloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_PREPAY_SNAPSHOT_COMMAND_ID, "uuuuuuub", snapshotId, snapshotTime, totalSnapshotsFound, \
+ commandIndex, totalNumberOfCommands, snapshotCause, snapshotPayloadType, snapshotPayload, \
+ snapshotPayloadLen);
+
+/** @brief Command description for ChangeDebt
+ *
+ * Command: ChangeDebt
+ * @param issuerEventId INT32U
+ * @param friendlyCredit FriendlyCredit
+ * @param debtLabel OCTET_STRING
+ * @param friendlyCreditCalendarId INT32U
+ * @param debtAmount INT32U
+ * @param emergencyCreditLimit INT32U
+ * @param debtRecoveryMethod DebtRecoveryMethod
+ * @param emergencyCreditThreshold INT32U
+ * @param debtAmountType DebtAmountType
+ * @param debtRecoveryStartTime UTC_TIME
+ * @param debtRecoveryCollectionTime INT16U
+ * @param debtRecoveryFrequency DebtRecoveryFrequency
+ * @param debtRecoveryAmount INT32U
+ * @param debtRecoveryBalancePercentage INT16U
+ */
+#define emberAfFillCommandPrepaymentClusterChangeDebt( \
+ issuerEventId, friendlyCredit, debtLabel, friendlyCreditCalendarId, debtAmount, emergencyCreditLimit, debtRecoveryMethod, \
+ emergencyCreditThreshold, debtAmountType, debtRecoveryStartTime, debtRecoveryCollectionTime, debtRecoveryFrequency, \
+ debtRecoveryAmount, debtRecoveryBalancePercentage) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CHANGE_DEBT_COMMAND_ID, "uuuuuuuuuuuuuu", issuerEventId, friendlyCredit, debtLabel, \
+ friendlyCreditCalendarId, debtAmount, emergencyCreditLimit, debtRecoveryMethod, \
+ emergencyCreditThreshold, debtAmountType, debtRecoveryStartTime, debtRecoveryCollectionTime, \
+ debtRecoveryFrequency, debtRecoveryAmount, debtRecoveryBalancePercentage);
+
+/** @brief Command description for EmergencyCreditSetup
+ *
+ * Command: EmergencyCreditSetup
+ * @param issuerEventId INT32U
+ * @param resultType ResultType
+ * @param startTime UTC_TIME
+ * @param topUpValue INT32U
+ * @param emergencyCreditLimit INT32U
+ * @param sourceOfTopUp OriginatingDevice
+ * @param emergencyCreditThreshold INT32U
+ * @param creditRemaining INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterEmergencyCreditSetup(issuerEventId, resultType, startTime, topUpValue, \
+ emergencyCreditLimit, sourceOfTopUp, emergencyCreditThreshold, \
+ creditRemaining) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_EMERGENCY_CREDIT_SETUP_COMMAND_ID, "uuuuuuuu", issuerEventId, resultType, startTime, topUpValue, \
+ emergencyCreditLimit, sourceOfTopUp, emergencyCreditThreshold, creditRemaining);
+
+/** @brief Command description for ConsumerTopUp
+ *
+ * Command: ConsumerTopUp
+ * @param originatingDevice OriginatingDevice
+ * @param topUpCode OCTET_STRING
+ */
+#define emberAfFillCommandPrepaymentClusterConsumerTopUp(originatingDevice, topUpCode) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONSUMER_TOP_UP_COMMAND_ID, "uu", originatingDevice, topUpCode);
+
+/** @brief Command description for CreditAdjustment
+ *
+ * Command: CreditAdjustment
+ * @param issuerEventId INT32U
+ * @param commandIndex INT8U
+ * @param startTime UTC_TIME
+ * @param totalNumberOfCommands INT8U
+ * @param creditAdjustmentType CreditAdjustmentType
+ * @param topUpPayload TopUpPayload []
+ * @param topUpPayloadLen int
+ * @param creditAdjustmentValue INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterCreditAdjustment(issuerEventId, commandIndex, startTime, totalNumberOfCommands, \
+ creditAdjustmentType, topUpPayload, topUpPayloadLen, \
+ creditAdjustmentValue) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CREDIT_ADJUSTMENT_COMMAND_ID, "uuuuubu", issuerEventId, commandIndex, startTime, \
+ totalNumberOfCommands, creditAdjustmentType, topUpPayload, topUpPayloadLen, creditAdjustmentValue);
+
+/** @brief Command description for ChangePaymentMode
+ *
+ * Command: ChangePaymentMode
+ * @param providerId INT32U
+ * @param commandIndex INT8U
+ * @param issuerEventId INT32U
+ * @param totalNumberOfCommands INT8U
+ * @param implementationDateTime UTC_TIME
+ * @param debtPayload DebtPayload []
+ * @param debtPayloadLen int
+ * @param proposedPaymentControlConfiguration PaymentControlConfiguration
+ * @param cutOffValue INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterChangePaymentMode(providerId, commandIndex, issuerEventId, totalNumberOfCommands, \
+ implementationDateTime, debtPayload, debtPayloadLen, \
+ proposedPaymentControlConfiguration, cutOffValue) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CHANGE_PAYMENT_MODE_COMMAND_ID, "uuuuubuu", providerId, commandIndex, issuerEventId, \
+ totalNumberOfCommands, implementationDateTime, debtPayload, debtPayloadLen, \
+ proposedPaymentControlConfiguration, cutOffValue);
+
+/** @brief Command description for GetPrepaySnapshot
+ *
+ * Command: GetPrepaySnapshot
+ * @param earliestStartTime UTC_TIME
+ * @param latestEndTime UTC_TIME
+ * @param snapshotOffset INT8U
+ * @param snapshotCause PrepaySnapshotPayloadCause
+ */
+#define emberAfFillCommandPrepaymentClusterGetPrepaySnapshot(earliestStartTime, latestEndTime, snapshotOffset, snapshotCause) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_PREPAY_SNAPSHOT_COMMAND_ID, "uuuu", earliestStartTime, latestEndTime, snapshotOffset, \
+ snapshotCause);
+
+/** @brief Command description for GetTopUpLog
+ *
+ * Command: GetTopUpLog
+ * @param latestEndTime UTC_TIME
+ * @param numberOfRecords INT8U
+ */
+#define emberAfFillCommandPrepaymentClusterGetTopUpLog(latestEndTime, numberOfRecords) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_TOP_UP_LOG_COMMAND_ID, "uu", latestEndTime, numberOfRecords);
+
+/** @brief Command description for SetLowCreditWarningLevel
+ *
+ * Command: SetLowCreditWarningLevel
+ * @param lowCreditWarningLevel INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterSetLowCreditWarningLevel(lowCreditWarningLevel) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_LOW_CREDIT_WARNING_LEVEL_COMMAND_ID, "u", lowCreditWarningLevel);
+
+/** @brief Command description for GetDebtRepaymentLog
+ *
+ * Command: GetDebtRepaymentLog
+ * @param latestEndTime UTC_TIME
+ * @param numberOfDebts INT8U
+ * @param debtType RepaymentDebtType
+ */
+#define emberAfFillCommandPrepaymentClusterGetDebtRepaymentLog(latestEndTime, numberOfDebts, debtType) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_DEBT_REPAYMENT_LOG_COMMAND_ID, "uuu", latestEndTime, numberOfDebts, debtType);
+
+/** @brief Command description for SetMaximumCreditLimit
+ *
+ * Command: SetMaximumCreditLimit
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param maximumCreditLevel INT32U
+ * @param maximumCreditPerTopUp INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterSetMaximumCreditLimit(providerId, issuerEventId, implementationDateTime, \
+ maximumCreditLevel, maximumCreditPerTopUp) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_MAXIMUM_CREDIT_LIMIT_COMMAND_ID, "uuuuu", providerId, issuerEventId, implementationDateTime, \
+ maximumCreditLevel, maximumCreditPerTopUp);
+
+/** @brief Command description for SetOverallDebtCap
+ *
+ * Command: SetOverallDebtCap
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param overallDebtCap INT32U
+ */
+#define emberAfFillCommandPrepaymentClusterSetOverallDebtCap(providerId, issuerEventId, implementationDateTime, overallDebtCap) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_OVERALL_DEBT_CAP_COMMAND_ID, "uuuu", providerId, issuerEventId, implementationDateTime, \
+ overallDebtCap);
+
+/** @brief Command description for ReportEventStatus
+ *
+ * Command: ReportEventStatus
+ * @param issuerEventId INT32U
+ * @param issuerEventId INT32U
+ * @param eventStatus AmiEventStatus
+ * @param deviceClass AmiDeviceClass
+ * @param eventStatusTime UTC_TIME
+ * @param utilityEnrollmentGroup INT8U
+ * @param criticalityLevelApplied AmiCriticalityLevel
+ * @param actionRequired INT8U
+ * @param coolingTemperatureSetPointApplied INT16U
+ * @param heatingTemperatureSetPointApplied INT16U
+ * @param averageLoadAdjustmentPercentageApplied INT8S
+ * @param dutyCycleApplied INT8U
+ * @param eventControl AmiEventControl
+ */
+#define emberAfFillCommandEnergy \
+ ManagementClusterReportEventStatus(issuerEventId, issuerEventId, eventStatus, deviceClass, eventStatusTime, \
+ utilityEnrollmentGroup, criticalityLevelApplied, actionRequired, \
+ coolingTemperatureSetPointApplied, heatingTemperatureSetPointApplied, \
+ averageLoadAdjustmentPercentageApplied, dutyCycleApplied, eventControl) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REPORT_EVENT_STATUS_COMMAND_ID, "uuuuuuuuuuuuu", issuerEventId, issuerEventId, eventStatus, \
+ deviceClass, eventStatusTime, utilityEnrollmentGroup, criticalityLevelApplied, actionRequired, \
+ coolingTemperatureSetPointApplied, heatingTemperatureSetPointApplied, \
+ averageLoadAdjustmentPercentageApplied, dutyCycleApplied, eventControl);
+
+/** @brief Command description for PublishCalendar
+ *
+ * Command: PublishCalendar
+ * @param providerId INT32U
+ * @param earliestStartTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param minIssuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param numberOfCalendars INT8U
+ * @param startTime UTC_TIME
+ * @param calendarType CalendarType
+ * @param calendarType CalendarType
+ * @param providerId INT32U
+ * @param calendarTimeReference CalendarTimeReference
+ * @param calendarName OCTET_STRING
+ * @param numberOfSeasons INT8U
+ * @param numberOfWeekProfiles INT8U
+ * @param numberOfDayProfiles INT8U
+ */
+#define emberAfFillCommandCalendarClusterPublishCalendar( \
+ providerId, earliestStartTime, issuerEventId, minIssuerEventId, issuerCalendarId, numberOfCalendars, startTime, calendarType, \
+ calendarType, providerId, calendarTimeReference, calendarName, numberOfSeasons, numberOfWeekProfiles, numberOfDayProfiles) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_CALENDAR_COMMAND_ID, "uuuuuuuuuuuuuuu", providerId, earliestStartTime, issuerEventId, \
+ minIssuerEventId, issuerCalendarId, numberOfCalendars, startTime, calendarType, calendarType, \
+ providerId, calendarTimeReference, calendarName, numberOfSeasons, numberOfWeekProfiles, \
+ numberOfDayProfiles);
+
+/** @brief Command description for PublishDayProfile
+ *
+ * Command: PublishDayProfile
+ * @param providerId INT32U
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param issuerCalendarId INT32U
+ * @param startDayId INT8U
+ * @param dayId INT8U
+ * @param numberOfDays INT8U
+ * @param totalNumberOfScheduleEntries INT8U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param calendarType CalendarType
+ * @param dayScheduleEntries ScheduleEntry []
+ * @param dayScheduleEntriesLen int
+ */
+#define emberAfFillCommandCalendarClusterPublishDayProfile( \
+ providerId, providerId, issuerEventId, issuerCalendarId, issuerCalendarId, startDayId, dayId, numberOfDays, \
+ totalNumberOfScheduleEntries, commandIndex, totalNumberOfCommands, calendarType, dayScheduleEntries, dayScheduleEntriesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_DAY_PROFILE_COMMAND_ID, "uuuuuuuuuuuub", providerId, providerId, issuerEventId, \
+ issuerCalendarId, issuerCalendarId, startDayId, dayId, numberOfDays, totalNumberOfScheduleEntries, \
+ commandIndex, totalNumberOfCommands, calendarType, dayScheduleEntries, dayScheduleEntriesLen);
+
+/** @brief Command description for PublishWeekProfile
+ *
+ * Command: PublishWeekProfile
+ * @param providerId INT32U
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param issuerCalendarId INT32U
+ * @param startWeekId INT8U
+ * @param weekId INT8U
+ * @param numberOfWeeks INT8U
+ * @param dayIdRefMonday INT8U
+ * @param dayIdRefTuesday INT8U
+ * @param dayIdRefWednesday INT8U
+ * @param dayIdRefThursday INT8U
+ * @param dayIdRefFriday INT8U
+ * @param dayIdRefSaturday INT8U
+ * @param dayIdRefSunday INT8U
+ */
+#define emberAfFillCommandCalendarClusterPublishWeekProfile( \
+ providerId, providerId, issuerEventId, issuerCalendarId, issuerCalendarId, startWeekId, weekId, numberOfWeeks, dayIdRefMonday, \
+ dayIdRefTuesday, dayIdRefWednesday, dayIdRefThursday, dayIdRefFriday, dayIdRefSaturday, dayIdRefSunday) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_WEEK_PROFILE_COMMAND_ID, "uuuuuuuuuuuuuuu", providerId, providerId, issuerEventId, \
+ issuerCalendarId, issuerCalendarId, startWeekId, weekId, numberOfWeeks, dayIdRefMonday, \
+ dayIdRefTuesday, dayIdRefWednesday, dayIdRefThursday, dayIdRefFriday, dayIdRefSaturday, \
+ dayIdRefSunday);
+
+/** @brief Command description for PublishSeasons
+ *
+ * Command: PublishSeasons
+ * @param providerId INT32U
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param issuerCalendarId INT32U
+ * @param issuerCalendarId INT32U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param seasonEntries SeasonEntry []
+ * @param seasonEntriesLen int
+ */
+#define emberAfFillCommandCalendarClusterPublishSeasons(providerId, providerId, issuerEventId, issuerCalendarId, issuerCalendarId, \
+ commandIndex, totalNumberOfCommands, seasonEntries, seasonEntriesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_SEASONS_COMMAND_ID, "uuuuuuub", providerId, providerId, issuerEventId, issuerCalendarId, \
+ issuerCalendarId, commandIndex, totalNumberOfCommands, seasonEntries, seasonEntriesLen);
+
+/** @brief Command description for PublishSpecialDays
+ *
+ * Command: PublishSpecialDays
+ * @param providerId INT32U
+ * @param startTime UTC_TIME
+ * @param issuerEventId INT32U
+ * @param numberOfEvents INT8U
+ * @param issuerCalendarId INT32U
+ * @param calendarType CalendarType
+ * @param startTime UTC_TIME
+ * @param providerId INT32U
+ * @param calendarType CalendarType
+ * @param issuerCalendarId INT32U
+ * @param totalNumberOfSpecialDays INT8U
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param specialDayEntries SpecialDay []
+ * @param specialDayEntriesLen int
+ */
+#define emberAfFillCommandCalendarClusterPublishSpecialDays( \
+ providerId, startTime, issuerEventId, numberOfEvents, issuerCalendarId, calendarType, startTime, providerId, calendarType, \
+ issuerCalendarId, totalNumberOfSpecialDays, commandIndex, totalNumberOfCommands, specialDayEntries, specialDayEntriesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUBLISH_SPECIAL_DAYS_COMMAND_ID, "uuuuuuuuuuuuub", providerId, startTime, issuerEventId, \
+ numberOfEvents, issuerCalendarId, calendarType, startTime, providerId, calendarType, \
+ issuerCalendarId, totalNumberOfSpecialDays, commandIndex, totalNumberOfCommands, specialDayEntries, \
+ specialDayEntriesLen);
+
+/** @brief Command description for GetCalendarCancellation
+ *
+ * Command: GetCalendarCancellation
+ * @param providerId INT32U
+ * @param issuerCalendarId INT32U
+ * @param calendarType CalendarType
+ */
+#define emberAfFillCommandCalendarClusterGetCalendarCancellation(providerId, issuerCalendarId, calendarType) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_CALENDAR_CANCELLATION_COMMAND_ID, "uuu", providerId, issuerCalendarId, calendarType);
+
+/** @brief Command description for GetChangeOfTenancy
+ *
+ * Command: GetChangeOfTenancy
+ * @param providerId INT32U
+ * @param issuerEventId INT32U
+ * @param tariffType TariffType
+ * @param implementationDateTime UTC_TIME
+ * @param proposedTenancyChangeControl ProposedChangeControl
+ */
+#define emberAfFillCommandDevice \
+ ManagementClusterGetChangeOfTenancy(providerId, issuerEventId, tariffType, implementationDateTime, \
+ proposedTenancyChangeControl) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_CHANGE_OF_TENANCY_COMMAND_ID, "uuuuu", providerId, issuerEventId, tariffType, \
+ implementationDateTime, proposedTenancyChangeControl);
+
+/** @brief Command description for GetChangeOfSupplier
+ *
+ * Command: GetChangeOfSupplier
+ * @param currentProviderId INT32U
+ * @param issuerEventId INT32U
+ * @param tariffType TariffType
+ * @param proposedProviderId INT32U
+ * @param providerChangeImplementationTime UTC_TIME
+ * @param providerChangeControl ProposedChangeControl
+ * @param proposedProviderName OCTET_STRING
+ * @param proposedProviderContactDetails OCTET_STRING
+ */
+#define emberAfFillCommandDevice \
+ ManagementClusterGetChangeOfSupplier(currentProviderId, issuerEventId, tariffType, proposedProviderId, \
+ providerChangeImplementationTime, providerChangeControl, proposedProviderName, \
+ proposedProviderContactDetails) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_CHANGE_OF_SUPPLIER_COMMAND_ID, "uuuuuuuu", currentProviderId, issuerEventId, tariffType, \
+ proposedProviderId, providerChangeImplementationTime, providerChangeControl, \
+ proposedProviderName, proposedProviderContactDetails);
+
+/** @brief Command description for RequestNewPassword
+ *
+ * Command: RequestNewPassword
+ * @param passwordType PasswordType
+ * @param issuerEventId INT32U
+ * @param implementationDateTime UTC_TIME
+ * @param durationInMinutes INT16U
+ * @param passwordType PasswordType
+ * @param password OCTET_STRING
+ */
+#define emberAfFillCommandDevice \
+ ManagementClusterRequestNewPassword(passwordType, issuerEventId, implementationDateTime, durationInMinutes, passwordType, \
+ password) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REQUEST_NEW_PASSWORD_COMMAND_ID, "uuuuuu", passwordType, issuerEventId, \
+ implementationDateTime, durationInMinutes, passwordType, password);
+
+/** @brief Command description for GetSiteId
+ *
+ * Command: GetSiteId
+ * @param issuerEventId INT32U
+ * @param siteIdTime UTC_TIME
+ * @param providerId INT32U
+ * @param siteId OCTET_STRING
+ */
+#define emberAfFillCommandDevice \
+ ManagementClusterGetSiteId(issuerEventId, siteIdTime, providerId, siteId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_SITE_ID_COMMAND_ID, "uuuu", issuerEventId, siteIdTime, providerId, siteId);
+
+/** @brief Command description for ReportEventConfiguration
+ *
+ * Command: ReportEventConfiguration
+ * @param commandIndex INT8U
+ * @param issuerEventId INT32U
+ * @param totalCommands INT8U
+ * @param startDateTime UTC_TIME
+ * @param eventConfigurationPayload EventConfigurationPayload []
+ * @param eventConfigurationPayloadLen int
+ * @param eventConfiguration EventConfiguration
+ * @param configurationControl EventConfigurationControl
+ * @param eventConfigurationPayload INT8U []
+ * @param eventConfigurationPayloadLen int
+ */
+#define emberAfFillCommandDevice \
+ ManagementClusterReportEventConfiguration(commandIndex, issuerEventId, totalCommands, startDateTime, \
+ eventConfigurationPayload, eventConfigurationPayloadLen, eventConfiguration, \
+ configurationControl, eventConfigurationPayload, eventConfigurationPayloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REPORT_EVENT_CONFIGURATION_COMMAND_ID, "uuuubuub", commandIndex, issuerEventId, \
+ totalCommands, startDateTime, eventConfigurationPayload, eventConfigurationPayloadLen, \
+ eventConfiguration, configurationControl, eventConfigurationPayload, \
+ eventConfigurationPayloadLen);
+
+/** @brief Command description for GetCIN
+ *
+ * Command: GetCIN
+ * @param eventId INT16U
+ */
+#define emberAfFillCommandDevice \
+ ManagementClusterGetCIN(eventId) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_CIN_COMMAND_ID, "u", eventId);
+
+/** @brief Command description for UpdateCIN
+ *
+ * Command: UpdateCIN
+ * @param issuerEventId INT32U
+ * @param implementationTime UTC_TIME
+ * @param providerId INT32U
+ * @param customerIdNumber OCTET_STRING
+ */
+#define emberAfFillCommandDevice \
+ ManagementClusterUpdateCIN(issuerEventId, implementationTime, providerId, customerIdNumber) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_UPDATE_CIN_COMMAND_ID, "uuuu", issuerEventId, implementationTime, providerId, customerIdNumber);
+
+/** @brief Command description for GetEventLog
+ *
+ * Command: GetEventLog
+ * @param eventControlLogId EventControlLogId
+ * @param logId EventLogId
+ * @param eventId INT16U
+ * @param eventId INT16U
+ * @param startTime UTC_TIME
+ * @param eventTime UTC_TIME
+ * @param endTime UTC_TIME
+ * @param eventControl EventActionControl
+ * @param numberOfEvents INT8U
+ * @param eventData OCTET_STRING
+ * @param eventOffset INT16U
+ */
+#define emberAfFillCommandEventsClusterGetEventLog(eventControlLogId, logId, eventId, eventId, startTime, eventTime, endTime, \
+ eventControl, numberOfEvents, eventData, eventOffset) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_EVENT_LOG_COMMAND_ID, "uuuuuuuuuuu", eventControlLogId, logId, eventId, eventId, startTime, \
+ eventTime, endTime, eventControl, numberOfEvents, eventData, eventOffset);
+
+/** @brief Command description for ClearEventLogRequest
+ *
+ * Command: ClearEventLogRequest
+ * @param logId EventLogId
+ * @param totalNumberOfEvents INT16U
+ * @param commandIndex INT8U
+ * @param totalCommands INT8U
+ * @param logPayloadControl NumberOfEventsLogPayloadControl
+ * @param logPayload EventLogPayload []
+ * @param logPayloadLen int
+ */
+#define emberAfFillCommandEventsClusterClearEventLogRequest(logId, totalNumberOfEvents, commandIndex, totalCommands, \
+ logPayloadControl, logPayload, logPayloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_EVENT_LOG_REQUEST_COMMAND_ID, "uuuuub", logId, totalNumberOfEvents, commandIndex, \
+ totalCommands, logPayloadControl, logPayload, logPayloadLen);
+
+/** @brief Command description for ClearEventLogResponse
+ *
+ * Command: ClearEventLogResponse
+ * @param clearedEventsLogs ClearedEventsLogs
+ */
+#define emberAfFillCommandEventsClusterClearEventLogResponse(clearedEventsLogs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_EVENT_LOG_RESPONSE_COMMAND_ID, "u", clearedEventsLogs);
+
+/** @brief Command description for PairingResponse
+ *
+ * Command: PairingResponse
+ * @param pairingInformationVersion INT32U
+ * @param localPairingInformationVersion INT32U
+ * @param totalNumberOfDevices INT8U
+ * @param eui64OfRequestingDevice IEEE_ADDRESS
+ * @param commandIndex INT8U
+ * @param totalNumberOfCommands INT8U
+ * @param eui64s IEEE_ADDRESS []
+ * @param eui64sLen int
+ */
+#define emberAfFillCommandMDU \
+ PairingClusterPairingResponse(pairingInformationVersion, localPairingInformationVersion, totalNumberOfDevices, \
+ eui64OfRequestingDevice, commandIndex, totalNumberOfCommands, eui64s, eui64sLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PAIRING_RESPONSE_COMMAND_ID, "uuuuuub", pairingInformationVersion, \
+ localPairingInformationVersion, totalNumberOfDevices, eui64OfRequestingDevice, commandIndex, \
+ totalNumberOfCommands, eui64s, eui64sLen);
+
+/** @brief Command description for GetSuspendZclMessagesStatus
+ *
+ * Command: GetSuspendZclMessagesStatus
+ * @param period INT8U
+ */
+#define emberAfFillCommandSub \
+ -GHzClusterGetSuspendZclMessagesStatus(period) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_SUSPEND_ZCL_MESSAGES_STATUS_COMMAND_ID, "u", period);
+
+/** @brief Command description for InitiateKeyEstablishmentRequest
+ *
+ * Command: InitiateKeyEstablishmentRequest
+ * @param keyEstablishmentSuite BITMAP16
+ * @param requestedKeyEstablishmentSuite BITMAP16
+ * @param ephemeralDataGenerateTime INT8U
+ * @param ephemeralDataGenerateTime INT8U
+ * @param confirmKeyGenerateTime INT8U
+ * @param confirmKeyGenerateTime INT8U
+ * @param identity Identity
+ * @param identity Identity
+ */
+#define emberAfFillCommandKey \
+ EstablishmentClusterInitiateKeyEstablishmentRequest(keyEstablishmentSuite, requestedKeyEstablishmentSuite, \
+ ephemeralDataGenerateTime, ephemeralDataGenerateTime, \
+ confirmKeyGenerateTime, confirmKeyGenerateTime, identity, identity) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_INITIATE_KEY_ESTABLISHMENT_REQUEST_COMMAND_ID, "uuuuuuuu", keyEstablishmentSuite, \
+ requestedKeyEstablishmentSuite, ephemeralDataGenerateTime, ephemeralDataGenerateTime, \
+ confirmKeyGenerateTime, confirmKeyGenerateTime, identity, identity);
+
+/** @brief Command description for EphemeralDataRequest
+ *
+ * Command: EphemeralDataRequest
+ * @param ephemeralData EphemeralData
+ * @param ephemeralData EphemeralData
+ */
+#define emberAfFillCommandKey \
+ EstablishmentClusterEphemeralDataRequest(ephemeralData, ephemeralData) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_EPHEMERAL_DATA_REQUEST_COMMAND_ID, "uu", ephemeralData, ephemeralData);
+
+/** @brief Command description for ConfirmKeyDataRequest
+ *
+ * Command: ConfirmKeyDataRequest
+ * @param secureMessageAuthenticationCode Smac
+ * @param secureMessageAuthenticationCode Smac
+ */
+#define emberAfFillCommandKey \
+ EstablishmentClusterConfirmKeyDataRequest(secureMessageAuthenticationCode, secureMessageAuthenticationCode) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONFIRM_KEY_DATA_REQUEST_COMMAND_ID, "uu", secureMessageAuthenticationCode, \
+ secureMessageAuthenticationCode);
+
+/** @brief Command description for TerminateKeyEstablishment
+ *
+ * Command: TerminateKeyEstablishment
+ * @param statusCode AmiKeyEstablishmentStatus
+ * @param waitTime INT8U
+ * @param keyEstablishmentSuite BITMAP16
+ */
+#define emberAfFillCommandKey \
+ EstablishmentClusterTerminateKeyEstablishment(statusCode, waitTime, keyEstablishmentSuite) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TERMINATE_KEY_ESTABLISHMENT_COMMAND_ID, "uuu", statusCode, waitTime, keyEstablishmentSuite);
+
+/** @brief Command description for RequestInformation
+ *
+ * Command: RequestInformation
+ * @param inquiryId ENUM8
+ * @param number INT8U
+ * @param dataTypeId BITMAP8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ * @param requestInformationPayload INT8U []
+ * @param requestInformationPayloadLen int
+ */
+#define emberAfFillCommandInformationClusterRequestInformation(inquiryId, number, dataTypeId, buffer, bufferLen, \
+ requestInformationPayload, requestInformationPayloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REQUEST_INFORMATION_COMMAND_ID, "uuubb", inquiryId, number, dataTypeId, buffer, bufferLen, \
+ requestInformationPayload, requestInformationPayloadLen);
+
+/** @brief Command description for PushInformationResponse
+ *
+ * Command: PushInformationResponse
+ * @param notificationList Notification []
+ * @param notificationListLen int
+ * @param contents INT8U []
+ * @param contentsLen int
+ */
+#define emberAfFillCommandInformationClusterPushInformationResponse(notificationList, notificationListLen, contents, contentsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PUSH_INFORMATION_RESPONSE_COMMAND_ID, "bb", notificationList, notificationListLen, contents, \
+ contentsLen);
+
+/** @brief Command description for SendPreference
+ *
+ * Command: SendPreference
+ * @param preferenceType INT16U
+ * @param statusFeedbackList Status []
+ * @param statusFeedbackListLen int
+ * @param preferencePayload INT8U []
+ * @param preferencePayloadLen int
+ */
+#define emberAfFillCommandInformationClusterSendPreference(preferenceType, statusFeedbackList, statusFeedbackListLen, \
+ preferencePayload, preferencePayloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SEND_PREFERENCE_COMMAND_ID, "ubb", preferenceType, statusFeedbackList, statusFeedbackListLen, \
+ preferencePayload, preferencePayloadLen);
+
+/** @brief Command description for ServerRequestPreference
+ *
+ * Command: ServerRequestPreference
+ * @param statusFeedback Status
+ * @param preferenceType INT16U
+ * @param preferencePayload INT8U []
+ * @param preferencePayloadLen int
+ */
+#define emberAfFillCommandInformationClusterServerRequestPreference(statusFeedback, preferenceType, preferencePayload, \
+ preferencePayloadLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SERVER_REQUEST_PREFERENCE_COMMAND_ID, "uub", statusFeedback, preferenceType, preferencePayload, \
+ preferencePayloadLen);
+
+/** @brief Command description for Update
+ *
+ * Command: Update
+ * @param accessControl ENUM8
+ * @param statusFeedbackList Status []
+ * @param statusFeedbackListLen int
+ * @param option BITMAP8
+ * @param contents INT8U []
+ * @param contentsLen int
+ */
+#define emberAfFillCommandInformationClusterUpdate(accessControl, statusFeedbackList, statusFeedbackListLen, option, contents, \
+ contentsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_COMMAND_ID, "ubub", accessControl, statusFeedbackList, statusFeedbackListLen, option, \
+ contents, contentsLen);
+
+/** @brief Command description for Delete
+ *
+ * Command: Delete
+ * @param deletionOptions BITMAP8
+ * @param notificationList Notification []
+ * @param notificationListLen int
+ * @param contentIds INT16U []
+ * @param contentIdsLen int
+ */
+#define emberAfFillCommandInformationClusterDelete(deletionOptions, notificationList, notificationListLen, contentIds, \
+ contentIdsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DELETE_COMMAND_ID, "ubb", deletionOptions, notificationList, notificationListLen, contentIds, \
+ contentIdsLen);
+
+/** @brief Command description for ConfigureNodeDescription
+ *
+ * Command: ConfigureNodeDescription
+ * @param description CHAR_STRING
+ * @param notificationList Notification []
+ * @param notificationListLen int
+ */
+#define emberAfFillCommandInformationClusterConfigureNodeDescription(description, notificationList, notificationListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONFIGURE_NODE_DESCRIPTION_COMMAND_ID, "ub", description, notificationList, \
+ notificationListLen);
+
+/** @brief Command description for ConfigureDeliveryEnable
+ *
+ * Command: ConfigureDeliveryEnable
+ * @param enable BOOLEAN
+ */
+#define emberAfFillCommandInformationClusterConfigureDeliveryEnable(enable) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONFIGURE_DELIVERY_ENABLE_COMMAND_ID, "u", enable);
+
+/** @brief Command description for ConfigurePushInformationTimer
+ *
+ * Command: ConfigurePushInformationTimer
+ * @param timer INT32U
+ */
+#define emberAfFillCommandInformationClusterConfigurePushInformationTimer(timer) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONFIGURE_PUSH_INFORMATION_TIMER_COMMAND_ID, "u", timer);
+
+/** @brief Command description for ConfigureSetRootId
+ *
+ * Command: ConfigureSetRootId
+ * @param rootId INT16U
+ */
+#define emberAfFillCommandInformationClusterConfigureSetRootId(rootId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONFIGURE_SET_ROOT_ID_COMMAND_ID, "u", rootId);
+
+/** @brief Command description for ReadFileRequest
+ *
+ * Command: ReadFileRequest
+ * @param fileIndex INT16U
+ * @param writeOptions BITMAP8
+ * @param fileStartPositionAndRequestedOctetCount INT8U []
+ * @param fileStartPositionAndRequestedOctetCountLen int
+ * @param fileSize INT8U []
+ * @param fileSizeLen int
+ */
+#define emberAfFillCommandData \
+ SharingClusterReadFileRequest(fileIndex, writeOptions, fileStartPositionAndRequestedOctetCount, \
+ fileStartPositionAndRequestedOctetCountLen, fileSize, fileSizeLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_READ_FILE_REQUEST_COMMAND_ID, "uubb", fileIndex, writeOptions, \
+ fileStartPositionAndRequestedOctetCount, fileStartPositionAndRequestedOctetCountLen, fileSize, \
+ fileSizeLen);
+
+/** @brief Command description for ReadRecordRequest
+ *
+ * Command: ReadRecordRequest
+ * @param fileIndex INT16U
+ * @param fileIndex INT16U
+ * @param fileStartRecordAndRequestedRecordCount INT8U []
+ * @param fileStartRecordAndRequestedRecordCountLen int
+ * @param fileStartPosition INT32U
+ * @param octetCount INT32U
+ */
+#define emberAfFillCommandData \
+ SharingClusterReadRecordRequest(fileIndex, fileIndex, fileStartRecordAndRequestedRecordCount, \
+ fileStartRecordAndRequestedRecordCountLen, fileStartPosition, octetCount) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_READ_RECORD_REQUEST_COMMAND_ID, "uubuu", fileIndex, fileIndex, \
+ fileStartRecordAndRequestedRecordCount, fileStartRecordAndRequestedRecordCountLen, \
+ fileStartPosition, octetCount);
+
+/** @brief Command description for WriteFileResponse
+ *
+ * Command: WriteFileResponse
+ * @param status ENUM8
+ * @param fileIndex INT16U
+ * @param fileIndex INT8U []
+ * @param fileIndexLen int
+ * @param fileStartRecord INT16U
+ * @param recordCount INT16U
+ */
+#define emberAfFillCommandData \
+ SharingClusterWriteFileResponse(status, fileIndex, fileIndex, fileIndexLen, fileStartRecord, recordCount) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_WRITE_FILE_RESPONSE_COMMAND_ID, "uubuu", status, fileIndex, fileIndex, fileIndexLen, \
+ fileStartRecord, recordCount);
+
+/** @brief Command description for FileTransmission
+ *
+ * Command: FileTransmission
+ * @param transmitOptions BITMAP8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ */
+#define emberAfFillCommandData \
+ SharingClusterFileTransmission(transmitOptions, buffer, bufferLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_FILE_TRANSMISSION_COMMAND_ID, "ub", transmitOptions, buffer, bufferLen);
+
+/** @brief Command description for RecordTransmission
+ *
+ * Command: RecordTransmission
+ * @param transmitOptions BITMAP8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ */
+#define emberAfFillCommandData \
+ SharingClusterRecordTransmission(transmitOptions, buffer, bufferLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RECORD_TRANSMISSION_COMMAND_ID, "ub", transmitOptions, buffer, bufferLen);
+
+/** @brief Command description for SearchGame
+ *
+ * Command: SearchGame
+ * @param specificGame ENUM8
+ * @param gameId INT16U
+ * @param gameId INT16U
+ * @param gameMaster BOOLEAN
+ * @param listOfGame CHAR_STRING
+ */
+#define emberAfFillCommandGamingClusterSearchGame(specificGame, gameId, gameId, gameMaster, listOfGame) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SEARCH_GAME_COMMAND_ID, "uuuuu", specificGame, gameId, gameId, gameMaster, listOfGame);
+
+/** @brief Command description for JoinGame
+ *
+ * Command: JoinGame
+ * @param gameId INT16U
+ * @param commandId INT8U
+ * @param joinAsMaster BOOLEAN
+ * @param status BITMAP8
+ * @param nameOfGame CHAR_STRING
+ * @param message CHAR_STRING
+ */
+#define emberAfFillCommandGamingClusterJoinGame(gameId, commandId, joinAsMaster, status, nameOfGame, message) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_JOIN_GAME_COMMAND_ID, "uuuuuu", gameId, commandId, joinAsMaster, status, nameOfGame, message);
+
+/** @brief Command description for StartGame
+ *
+ * Command: StartGame
+ */
+#define emberAfFillCommandGamingClusterStartGame() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_START_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for PauseGame
+ *
+ * Command: PauseGame
+ */
+#define emberAfFillCommandGamingClusterPauseGame() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PAUSE_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for ResumeGame
+ *
+ * Command: ResumeGame
+ */
+#define emberAfFillCommandGamingClusterResumeGame() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RESUME_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for QuitGame
+ *
+ * Command: QuitGame
+ */
+#define emberAfFillCommandGamingClusterQuitGame() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_QUIT_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for EndGame
+ *
+ * Command: EndGame
+ */
+#define emberAfFillCommandGamingClusterEndGame() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_END_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for StartOver
+ *
+ * Command: StartOver
+ */
+#define emberAfFillCommandGamingClusterStartOver() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_START_OVER_COMMAND_ID, "", );
+
+/** @brief Command description for ActionControl
+ *
+ * Command: ActionControl
+ * @param actions BITMAP32
+ */
+#define emberAfFillCommandGamingClusterActionControl(actions) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ACTION_CONTROL_COMMAND_ID, "u", actions);
+
+/** @brief Command description for DownloadGame
+ *
+ * Command: DownloadGame
+ */
+#define emberAfFillCommandGamingClusterDownloadGame() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DOWNLOAD_GAME_COMMAND_ID, "", );
+
+/** @brief Command description for PathCreation
+ *
+ * Command: PathCreation
+ * @param originatorAddress DATA16
+ * @param originatorAddress DATA16
+ * @param destinationAddress DATA16
+ * @param destinationAddress DATA16
+ * @param dataRate INT8U
+ * @param dataRate INT8U
+ */
+#define emberAfFillCommandData \
+ Rate ControlClusterPathCreation(originatorAddress, originatorAddress, destinationAddress, destinationAddress, dataRate, \
+ dataRate) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PATH_CREATION_COMMAND_ID, "uuuuuu", originatorAddress, originatorAddress, \
+ destinationAddress, destinationAddress, dataRate, dataRate);
+
+/** @brief Command description for DataRateNotification
+ *
+ * Command: DataRateNotification
+ * @param originatorAddress DATA16
+ * @param destinationAddress DATA16
+ * @param dataRate INT8U
+ */
+#define emberAfFillCommandData \
+ Rate ControlClusterDataRateNotification(originatorAddress, destinationAddress, dataRate) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DATA_RATE_NOTIFICATION_COMMAND_ID, "uuu", originatorAddress, destinationAddress, dataRate);
+
+/** @brief Command description for PathDeletion
+ *
+ * Command: PathDeletion
+ * @param originatorAddress DATA16
+ * @param destinationAddress DATA16
+ */
+#define emberAfFillCommandData \
+ Rate ControlClusterPathDeletion(originatorAddress, destinationAddress) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PATH_DELETION_COMMAND_ID, "uu", originatorAddress, destinationAddress);
+
+/** @brief Command description for EstablishmentRequest
+ *
+ * Command: EstablishmentRequest
+ * @param flag BITMAP8
+ * @param ackNack ENUM8
+ * @param codecType ENUM8
+ * @param codecType ENUM8
+ * @param sampFreq ENUM8
+ * @param codecRate ENUM8
+ * @param serviceType ENUM8
+ * @param buffer INT8U []
+ * @param bufferLen int
+ */
+#define emberAfFillCommandVoice \
+ over ZigBeeClusterEstablishmentRequest(flag, ackNack, codecType, codecType, sampFreq, codecRate, serviceType, buffer, \
+ bufferLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ESTABLISHMENT_REQUEST_COMMAND_ID, "uuuuuuub", flag, ackNack, codecType, codecType, sampFreq, \
+ codecRate, serviceType, buffer, bufferLen);
+
+/** @brief Command description for VoiceTransmission
+ *
+ * Command: VoiceTransmission
+ * @param voiceData INT8U []
+ * @param voiceDataLen int
+ * @param sequenceNumber INT8U
+ * @param errorFlag ENUM8
+ */
+#define emberAfFillCommandVoice \
+ over ZigBeeClusterVoiceTransmission(voiceData, voiceDataLen, sequenceNumber, errorFlag) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_VOICE_TRANSMISSION_COMMAND_ID, "buu", voiceData, voiceDataLen, sequenceNumber, errorFlag);
+
+/** @brief Command description for VoiceTransmissionCompletion
+ *
+ * Command: VoiceTransmissionCompletion
+ * @param controlType ENUM8
+ */
+#define emberAfFillCommandVoice \
+ over ZigBeeClusterVoiceTransmissionCompletion(controlType) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_VOICE_TRANSMISSION_COMPLETION_COMMAND_ID, "u", controlType);
+
+/** @brief Command description for ControlResponse
+ *
+ * Command: ControlResponse
+ * @param ackNack ENUM8
+ */
+#define emberAfFillCommandVoice \
+ over ZigBeeClusterControlResponse(ackNack) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CONTROL_RESPONSE_COMMAND_ID, "u", ackNack);
+
+/** @brief Command description for JoinChatRequest
+ *
+ * Command: JoinChatRequest
+ * @param uid INT16U
+ * @param status ENUM8
+ * @param nickname CHAR_STRING
+ * @param cid INT16U
+ * @param cid INT16U
+ */
+#define emberAfFillCommandChattingClusterJoinChatRequest(uid, status, nickname, cid, cid) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_JOIN_CHAT_REQUEST_COMMAND_ID, "uuuuu", uid, status, nickname, cid, cid);
+
+/** @brief Command description for LeaveChatRequest
+ *
+ * Command: LeaveChatRequest
+ * @param cid INT16U
+ * @param status ENUM8
+ * @param uid INT16U
+ * @param cid INT16U
+ * @param chatParticipantList ChatParticipant []
+ * @param chatParticipantListLen int
+ */
+#define emberAfFillCommandChattingClusterLeaveChatRequest(cid, status, uid, cid, chatParticipantList, chatParticipantListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_LEAVE_CHAT_REQUEST_COMMAND_ID, "uuuub", cid, status, uid, cid, chatParticipantList, \
+ chatParticipantListLen);
+
+/** @brief Command description for SearchChatRequest
+ *
+ * Command: SearchChatRequest
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param nickname CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterSearchChatRequest(cid, uid, nickname) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SEARCH_CHAT_REQUEST_COMMAND_ID, "uuu", cid, uid, nickname);
+
+/** @brief Command description for SwitchChairmanResponse
+ *
+ * Command: SwitchChairmanResponse
+ * @param cid INT16U
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param uid INT16U
+ * @param nickname CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterSwitchChairmanResponse(cid, cid, uid, uid, nickname) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SWITCH_CHAIRMAN_RESPONSE_COMMAND_ID, "uuuuu", cid, cid, uid, uid, nickname);
+
+/** @brief Command description for StartChatRequest
+ *
+ * Command: StartChatRequest
+ * @param name CHAR_STRING
+ * @param options BITMAP8
+ * @param uid INT16U
+ * @param chatRoomList ChatRoom []
+ * @param chatRoomListLen int
+ * @param nickname CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterStartChatRequest(name, options, uid, chatRoomList, chatRoomListLen, nickname) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_START_CHAT_REQUEST_COMMAND_ID, "uuubu", name, options, uid, chatRoomList, chatRoomListLen, \
+ nickname);
+
+/** @brief Command description for ChatMessage
+ *
+ * Command: ChatMessage
+ * @param destinationUid INT16U
+ * @param cid INT16U
+ * @param sourceUid INT16U
+ * @param cid INT16U
+ * @param nickname CHAR_STRING
+ * @param message CHAR_STRING
+ */
+#define emberAfFillCommandChattingClusterChatMessage(destinationUid, cid, sourceUid, cid, nickname, message) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CHAT_MESSAGE_COMMAND_ID, "uuuuuu", destinationUid, cid, sourceUid, cid, nickname, message);
+
+/** @brief Command description for GetNodeInformationRequest
+ *
+ * Command: GetNodeInformationRequest
+ * @param cid INT16U
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param nodeInformationList NodeInformation []
+ * @param nodeInformationListLen int
+ */
+#define emberAfFillCommandChattingClusterGetNodeInformationRequest(cid, cid, uid, nodeInformationList, nodeInformationListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_NODE_INFORMATION_REQUEST_COMMAND_ID, "uuub", cid, cid, uid, nodeInformationList, \
+ nodeInformationListLen);
+
+/** @brief Command description for SwitchChairmanNotification
+ *
+ * Command: SwitchChairmanNotification
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param address DATA16
+ * @param endpoint INT8U
+ */
+#define emberAfFillCommandChattingClusterSwitchChairmanNotification(cid, uid, address, endpoint) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SWITCH_CHAIRMAN_NOTIFICATION_COMMAND_ID, "uuuu", cid, uid, address, endpoint);
+
+/** @brief Command description for GetNodeInformationResponse
+ *
+ * Command: GetNodeInformationResponse
+ * @param status ENUM8
+ * @param cid INT16U
+ * @param uid INT16U
+ * @param addressEndpointAndNickname INT8U []
+ * @param addressEndpointAndNicknameLen int
+ */
+#define emberAfFillCommandChattingClusterGetNodeInformationResponse(status, cid, uid, addressEndpointAndNickname, \
+ addressEndpointAndNicknameLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_NODE_INFORMATION_RESPONSE_COMMAND_ID, "uuub", status, cid, uid, addressEndpointAndNickname, \
+ addressEndpointAndNicknameLen);
+
+/** @brief Command description for BuyRequest
+ *
+ * Command: BuyRequest
+ * @param userId OCTET_STRING
+ * @param serialNumber OCTET_STRING
+ * @param userType INT16U
+ * @param currency INT32U
+ * @param serviceId INT16U
+ * @param priceTrailingDigit INT8U
+ * @param goodId OCTET_STRING
+ * @param price INT32U
+ * @param timestamp OCTET_STRING
+ * @param transId INT16U
+ * @param transStatus ENUM8
+ */
+#define emberAfFillCommandPaymentClusterBuyRequest(userId, serialNumber, userType, currency, serviceId, priceTrailingDigit, \
+ goodId, price, timestamp, transId, transStatus) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_BUY_REQUEST_COMMAND_ID, "uuuuuuuuuuu", userId, serialNumber, userType, currency, serviceId, \
+ priceTrailingDigit, goodId, price, timestamp, transId, transStatus);
+
+/** @brief Command description for AcceptPayment
+ *
+ * Command: AcceptPayment
+ * @param userId OCTET_STRING
+ * @param serialNumber OCTET_STRING
+ * @param userType INT16U
+ * @param currency INT32U
+ * @param serviceId INT16U
+ * @param priceTrailingDigit INT8U
+ * @param goodId OCTET_STRING
+ * @param price INT32U
+ * @param timestamp OCTET_STRING
+ */
+#define emberAfFillCommandPaymentClusterAcceptPayment(userId, serialNumber, userType, currency, serviceId, priceTrailingDigit, \
+ goodId, price, timestamp) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ACCEPT_PAYMENT_COMMAND_ID, "uuuuuuuuu", userId, serialNumber, userType, currency, serviceId, \
+ priceTrailingDigit, goodId, price, timestamp);
+
+/** @brief Command description for PaymentConfirm
+ *
+ * Command: PaymentConfirm
+ * @param serialNumber OCTET_STRING
+ * @param serialNumber OCTET_STRING
+ * @param transId INT16U
+ * @param status ENUM8
+ * @param transStatus ENUM8
+ */
+#define emberAfFillCommandPaymentClusterPaymentConfirm(serialNumber, serialNumber, transId, status, transStatus) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_PAYMENT_CONFIRM_COMMAND_ID, "uuuuu", serialNumber, serialNumber, transId, status, transStatus);
+
+/** @brief Command description for Subscribe
+ *
+ * Command: Subscribe
+ * @param userId OCTET_STRING
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterSubscribe(userId, userId, serviceId, serviceId, serviceProviderId, serviceProviderId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SUBSCRIBE_COMMAND_ID, "uuuuuu", userId, userId, serviceId, serviceId, serviceProviderId, \
+ serviceProviderId);
+
+/** @brief Command description for Unsubscribe
+ *
+ * Command: Unsubscribe
+ * @param userId OCTET_STRING
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ * @param serviceProviderId INT16U
+ * @param timestamp OCTET_STRING
+ * @param duration INT16U
+ */
+#define emberAfFillCommandBillingClusterUnsubscribe(userId, userId, serviceId, serviceId, serviceProviderId, serviceProviderId, \
+ timestamp, duration) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UNSUBSCRIBE_COMMAND_ID, "uuuuuuuu", userId, userId, serviceId, serviceId, serviceProviderId, \
+ serviceProviderId, timestamp, duration);
+
+/** @brief Command description for StartBillingSession
+ *
+ * Command: StartBillingSession
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterStartBillingSession(userId, serviceId, serviceProviderId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_START_BILLING_SESSION_COMMAND_ID, "uuu", userId, serviceId, serviceProviderId);
+
+/** @brief Command description for StopBillingSession
+ *
+ * Command: StopBillingSession
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterStopBillingSession(userId, serviceId, serviceProviderId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STOP_BILLING_SESSION_COMMAND_ID, "uuu", userId, serviceId, serviceProviderId);
+
+/** @brief Command description for BillStatusNotification
+ *
+ * Command: BillStatusNotification
+ * @param userId OCTET_STRING
+ * @param status ENUM8
+ */
+#define emberAfFillCommandBillingClusterBillStatusNotification(userId, status) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_BILL_STATUS_NOTIFICATION_COMMAND_ID, "uu", userId, status);
+
+/** @brief Command description for SessionKeepAlive
+ *
+ * Command: SessionKeepAlive
+ * @param userId OCTET_STRING
+ * @param serviceId INT16U
+ * @param serviceProviderId INT16U
+ */
+#define emberAfFillCommandBillingClusterSessionKeepAlive(userId, serviceId, serviceProviderId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SESSION_KEEP_ALIVE_COMMAND_ID, "uuu", userId, serviceId, serviceProviderId);
+
+/** @brief Command description for GetAlerts
+ *
+ * Command: GetAlerts
+ * @param alertsCount AlertCount
+ * @param alertStructures AlertStructure []
+ * @param alertStructuresLen int
+ */
+#define emberAfFillCommandAppliance \
+ Events and AlertClusterGetAlerts(alertsCount, alertStructures, alertStructuresLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_ALERTS_COMMAND_ID, "ub", alertsCount, alertStructures, alertStructuresLen);
+
+/** @brief Command description for AlertsNotification
+ *
+ * Command: AlertsNotification
+ * @param alertsCount AlertCount
+ * @param alertStructures AlertStructure []
+ * @param alertStructuresLen int
+ */
+#define emberAfFillCommandAppliance \
+ Events and AlertClusterAlertsNotification(alertsCount, alertStructures, alertStructuresLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ALERTS_NOTIFICATION_COMMAND_ID, "ub", alertsCount, alertStructures, alertStructuresLen);
+
+/** @brief Command description for EventsNotification
+ *
+ * Command: EventsNotification
+ * @param eventHeader INT8U
+ * @param eventId EventIdentification
+ */
+#define emberAfFillCommandAppliance \
+ Events and AlertClusterEventsNotification(eventHeader, eventId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_EVENTS_NOTIFICATION_COMMAND_ID, "uu", eventHeader, eventId);
+
+/** @brief Command description for LogNotification
+ *
+ * Command: LogNotification
+ * @param timeStamp TIME_OF_DAY
+ * @param logId INT32U
+ * @param logId INT32U
+ * @param logLength INT32U
+ * @param logPayload INT8U []
+ * @param logPayloadLen int
+ */
+#define emberAfFillCommandAppliance \
+ StatisticsClusterLogNotification(timeStamp, logId, logId, logLength, logPayload, logPayloadLen) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_LOG_NOTIFICATION_COMMAND_ID, "uuuub", timeStamp, logId, logId, logLength, logPayload, logPayloadLen);
+
+/** @brief Command description for LogQueueRequest
+ *
+ * Command: LogQueueRequest
+ * @param timeStamp TIME_OF_DAY
+ * @param logId INT32U
+ * @param logLength INT32U
+ * @param logPayload INT8U []
+ * @param logPayloadLen int
+ */
+#define emberAfFillCommandAppliance \
+ StatisticsClusterLogQueueRequest(timeStamp, logId, logLength, logPayload, logPayloadLen) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_LOG_QUEUE_REQUEST_COMMAND_ID, "uuub", timeStamp, logId, logLength, logPayload, logPayloadLen);
+
+/** @brief Command description for LogQueueResponse
+ *
+ * Command: LogQueueResponse
+ * @param logQueueSize INT8U
+ * @param logIds INT32U []
+ * @param logIdsLen int
+ */
+#define emberAfFillCommandAppliance \
+ StatisticsClusterLogQueueResponse(logQueueSize, logIds, logIdsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_LOG_QUEUE_RESPONSE_COMMAND_ID, "ub", logQueueSize, logIds, logIdsLen);
+
+/** @brief Command description for StatisticsAvailable
+ *
+ * Command: StatisticsAvailable
+ * @param logQueueSize INT8U
+ * @param logIds INT32U []
+ * @param logIdsLen int
+ */
+#define emberAfFillCommandAppliance \
+ StatisticsClusterStatisticsAvailable(logQueueSize, logIds, logIdsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STATISTICS_AVAILABLE_COMMAND_ID, "ub", logQueueSize, logIds, logIdsLen);
+
+/** @brief Command description for GetProfileInfoCommand
+ *
+ * Command: GetProfileInfoCommand
+ * @param profileCount INT8U
+ * @param profileIntervalPeriod ENUM8
+ * @param maxNumberOfIntervals INT8U
+ * @param listOfAttributes INT16U []
+ * @param listOfAttributesLen int
+ */
+#define emberAfFillCommandElectrical \
+ MeasurementClusterGetProfileInfoCommand(profileCount, profileIntervalPeriod, maxNumberOfIntervals, listOfAttributes, \
+ listOfAttributesLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_PROFILE_INFO_COMMAND_COMMAND_ID, "uuub", profileCount, profileIntervalPeriod, \
+ maxNumberOfIntervals, listOfAttributes, listOfAttributesLen);
+
+/** @brief Command description for GetMeasurementProfileResponseCommand
+ *
+ * Command: GetMeasurementProfileResponseCommand
+ * @param startTime INT32U
+ * @param attributeId INT16U
+ * @param status ENUM8
+ * @param startTime INT32U
+ * @param profileIntervalPeriod ENUM8
+ * @param numberOfIntervals ENUM8
+ * @param numberOfIntervalsDelivered INT8U
+ * @param attributeId INT16U
+ * @param intervals INT8U []
+ * @param intervalsLen int
+ */
+#define emberAfFillCommandElectrical \
+ MeasurementClusterGetMeasurementProfileResponseCommand(startTime, attributeId, status, startTime, profileIntervalPeriod, \
+ numberOfIntervals, numberOfIntervalsDelivered, attributeId, intervals, \
+ intervalsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_MEASUREMENT_PROFILE_RESPONSE_COMMAND_COMMAND_ID, "uuuuuuuub", startTime, attributeId, \
+ status, startTime, profileIntervalPeriod, numberOfIntervals, numberOfIntervalsDelivered, \
+ attributeId, intervals, intervalsLen);
+
+/** @brief Command description for ScanRequest
+ *
+ * Command: ScanRequest
+ * @param transaction INT32U
+ * @param zigbeeInformation ZigbeeInformation
+ * @param zllInformation ZllInformation
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterScanRequest(transaction, zigbeeInformation, zllInformation) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_REQUEST_COMMAND_ID, "uuu", transaction, zigbeeInformation, zllInformation);
+
+/** @brief Command description for ScanResponse
+ *
+ * Command: ScanResponse
+ * @param transaction INT32U
+ * @param rssiCorrection INT8U
+ * @param zigbeeInformation ZigbeeInformation
+ * @param zllInformation ZllInformation
+ * @param keyBitmask KeyBitmask
+ * @param responseId INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param numberOfSubDevices INT8U
+ * @param totalGroupIds INT8U
+ * @param endpointId INT8U
+ * @param profileId INT16U
+ * @param deviceId INT16U
+ * @param version INT8U
+ * @param groupIdCount INT8U
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterScanResponse(transaction, rssiCorrection, zigbeeInformation, zllInformation, keyBitmask, responseId, \
+ extendedPanId, networkUpdateId, logicalChannel, panId, networkAddress, numberOfSubDevices, \
+ totalGroupIds, endpointId, profileId, deviceId, version, groupIdCount) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_RESPONSE_COMMAND_ID, "uuuuuuuuuuuuuuuuuu", transaction, rssiCorrection, \
+ zigbeeInformation, zllInformation, keyBitmask, responseId, extendedPanId, networkUpdateId, \
+ logicalChannel, panId, networkAddress, numberOfSubDevices, totalGroupIds, endpointId, profileId, \
+ deviceId, version, groupIdCount);
+
+/** @brief Command description for DeviceInformationRequest
+ *
+ * Command: DeviceInformationRequest
+ * @param transaction INT32U
+ * @param startIndex INT8U
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterDeviceInformationRequest(transaction, startIndex) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DEVICE_INFORMATION_REQUEST_COMMAND_ID, "uu", transaction, startIndex);
+
+/** @brief Command description for DeviceInformationResponse
+ *
+ * Command: DeviceInformationResponse
+ * @param transaction INT32U
+ * @param numberOfSubDevices INT8U
+ * @param startIndex INT8U
+ * @param deviceInformationRecordCount INT8U
+ * @param deviceInformationRecordList DeviceInformationRecord []
+ * @param deviceInformationRecordListLen int
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterDeviceInformationResponse(transaction, numberOfSubDevices, startIndex, deviceInformationRecordCount, \
+ deviceInformationRecordList, deviceInformationRecordListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DEVICE_INFORMATION_RESPONSE_COMMAND_ID, "uuuub", transaction, numberOfSubDevices, \
+ startIndex, deviceInformationRecordCount, deviceInformationRecordList, \
+ deviceInformationRecordListLen);
+
+/** @brief Command description for IdentifyRequest
+ *
+ * Command: IdentifyRequest
+ * @param transaction INT32U
+ * @param identifyDuration INT16U
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterIdentifyRequest(transaction, identifyDuration) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_IDENTIFY_REQUEST_COMMAND_ID, "uu", transaction, identifyDuration);
+
+/** @brief Command description for ResetToFactoryNewRequest
+ *
+ * Command: ResetToFactoryNewRequest
+ * @param transaction INT32U
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterResetToFactoryNewRequest(transaction) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RESET_TO_FACTORY_NEW_REQUEST_COMMAND_ID, "u", transaction);
+
+/** @brief Command description for NetworkStartRequest
+ *
+ * Command: NetworkStartRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param keyIndex KeyIndex
+ * @param encryptedNetworkKey SECURITY_KEY
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param groupIdentifiersBegin INT16U
+ * @param groupIdentifiersEnd INT16U
+ * @param freeNetworkAddressRangeBegin INT16U
+ * @param freeNetworkAddressRangeEnd INT16U
+ * @param freeGroupIdentifierRangeBegin INT16U
+ * @param freeGroupIdentifierRangeEnd INT16U
+ * @param initiatorIeeeAddress IEEE_ADDRESS
+ * @param initiatorNetworkAddress INT16U
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterNetworkStartRequest( \
+ transaction, extendedPanId, keyIndex, encryptedNetworkKey, logicalChannel, panId, networkAddress, groupIdentifiersBegin, \
+ groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd, freeGroupIdentifierRangeBegin, \
+ freeGroupIdentifierRangeEnd, initiatorIeeeAddress, initiatorNetworkAddress) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_NETWORK_START_REQUEST_COMMAND_ID, "uuuuuuuuuuuuuuu", transaction, extendedPanId, keyIndex, \
+ encryptedNetworkKey, logicalChannel, panId, networkAddress, groupIdentifiersBegin, \
+ groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd, \
+ freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd, initiatorIeeeAddress, \
+ initiatorNetworkAddress);
+
+/** @brief Command description for NetworkStartResponse
+ *
+ * Command: NetworkStartResponse
+ * @param transaction INT32U
+ * @param status ZllStatus
+ * @param extendedPanId IEEE_ADDRESS
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterNetworkStartResponse(transaction, status, extendedPanId, networkUpdateId, logicalChannel, panId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_NETWORK_START_RESPONSE_COMMAND_ID, "uuuuuu", transaction, status, extendedPanId, \
+ networkUpdateId, logicalChannel, panId);
+
+/** @brief Command description for NetworkJoinRouterRequest
+ *
+ * Command: NetworkJoinRouterRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param keyIndex KeyIndex
+ * @param encryptedNetworkKey SECURITY_KEY
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param groupIdentifiersBegin INT16U
+ * @param groupIdentifiersEnd INT16U
+ * @param freeNetworkAddressRangeBegin INT16U
+ * @param freeNetworkAddressRangeEnd INT16U
+ * @param freeGroupIdentifierRangeBegin INT16U
+ * @param freeGroupIdentifierRangeEnd INT16U
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterNetworkJoinRouterRequest(transaction, extendedPanId, keyIndex, encryptedNetworkKey, networkUpdateId, \
+ logicalChannel, panId, networkAddress, groupIdentifiersBegin, \
+ groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd, \
+ freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_NETWORK_JOIN_ROUTER_REQUEST_COMMAND_ID, "uuuuuuuuuuuuuu", transaction, extendedPanId, \
+ keyIndex, encryptedNetworkKey, networkUpdateId, logicalChannel, panId, networkAddress, \
+ groupIdentifiersBegin, groupIdentifiersEnd, freeNetworkAddressRangeBegin, \
+ freeNetworkAddressRangeEnd, freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd);
+
+/** @brief Command description for NetworkJoinRouterResponse
+ *
+ * Command: NetworkJoinRouterResponse
+ * @param transaction INT32U
+ * @param status ZllStatus
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterNetworkJoinRouterResponse(transaction, status) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_NETWORK_JOIN_ROUTER_RESPONSE_COMMAND_ID, "uu", transaction, status);
+
+/** @brief Command description for NetworkJoinEndDeviceRequest
+ *
+ * Command: NetworkJoinEndDeviceRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param keyIndex KeyIndex
+ * @param encryptedNetworkKey SECURITY_KEY
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ * @param groupIdentifiersBegin INT16U
+ * @param groupIdentifiersEnd INT16U
+ * @param freeNetworkAddressRangeBegin INT16U
+ * @param freeNetworkAddressRangeEnd INT16U
+ * @param freeGroupIdentifierRangeBegin INT16U
+ * @param freeGroupIdentifierRangeEnd INT16U
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterNetworkJoinEndDeviceRequest(transaction, extendedPanId, keyIndex, encryptedNetworkKey, networkUpdateId, \
+ logicalChannel, panId, networkAddress, groupIdentifiersBegin, \
+ groupIdentifiersEnd, freeNetworkAddressRangeBegin, freeNetworkAddressRangeEnd, \
+ freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_NETWORK_JOIN_END_DEVICE_REQUEST_COMMAND_ID, "uuuuuuuuuuuuuu", transaction, extendedPanId, \
+ keyIndex, encryptedNetworkKey, networkUpdateId, logicalChannel, panId, networkAddress, \
+ groupIdentifiersBegin, groupIdentifiersEnd, freeNetworkAddressRangeBegin, \
+ freeNetworkAddressRangeEnd, freeGroupIdentifierRangeBegin, freeGroupIdentifierRangeEnd);
+
+/** @brief Command description for NetworkJoinEndDeviceResponse
+ *
+ * Command: NetworkJoinEndDeviceResponse
+ * @param transaction INT32U
+ * @param status ZllStatus
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterNetworkJoinEndDeviceResponse(transaction, status) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_NETWORK_JOIN_END_DEVICE_RESPONSE_COMMAND_ID, "uu", transaction, status);
+
+/** @brief Command description for NetworkUpdateRequest
+ *
+ * Command: NetworkUpdateRequest
+ * @param transaction INT32U
+ * @param extendedPanId IEEE_ADDRESS
+ * @param networkUpdateId INT8U
+ * @param logicalChannel INT8U
+ * @param panId INT16U
+ * @param networkAddress INT16U
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterNetworkUpdateRequest(transaction, extendedPanId, networkUpdateId, logicalChannel, panId, networkAddress) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_NETWORK_UPDATE_REQUEST_COMMAND_ID, "uuuuuu", transaction, extendedPanId, networkUpdateId, \
+ logicalChannel, panId, networkAddress);
+
+/** @brief Command description for EndpointInformation
+ *
+ * Command: EndpointInformation
+ * @param ieeeAddress IEEE_ADDRESS
+ * @param networkAddress INT16U
+ * @param endpointId INT8U
+ * @param profileId INT16U
+ * @param deviceId INT16U
+ * @param version INT8U
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterEndpointInformation(ieeeAddress, networkAddress, endpointId, profileId, deviceId, version) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENDPOINT_INFORMATION_COMMAND_ID, "uuuuuu", ieeeAddress, networkAddress, endpointId, \
+ profileId, deviceId, version);
+
+/** @brief Command description for GetGroupIdentifiersRequest
+ *
+ * Command: GetGroupIdentifiersRequest
+ * @param startIndex INT8U
+ * @param total INT8U
+ * @param startIndex INT8U
+ * @param count INT8U
+ * @param groupInformationRecordList GroupInformationRecord []
+ * @param groupInformationRecordListLen int
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterGetGroupIdentifiersRequest(startIndex, total, startIndex, count, groupInformationRecordList, \
+ groupInformationRecordListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_GROUP_IDENTIFIERS_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count, \
+ groupInformationRecordList, groupInformationRecordListLen);
+
+/** @brief Command description for GetEndpointListRequest
+ *
+ * Command: GetEndpointListRequest
+ * @param startIndex INT8U
+ * @param total INT8U
+ * @param startIndex INT8U
+ * @param count INT8U
+ * @param endpointInformationRecordList EndpointInformationRecord []
+ * @param endpointInformationRecordListLen int
+ */
+#define emberAfFillCommandZLL \
+ CommissioningClusterGetEndpointListRequest(startIndex, total, startIndex, count, endpointInformationRecordList, \
+ endpointInformationRecordListLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count, \
+ endpointInformationRecordList, endpointInformationRecordListLen);
+
+/** @brief Command description for CommandOne
+ *
+ * Command: CommandOne
+ * @param argOne INT8U
+ * @param argOne INT8U
+ */
+#define emberAfFillCommandSample \
+ Mfg Specific ClusterClusterCommandOne(argOne, argOne) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_COMMAND_ONE_COMMAND_ID, "uu", argOne, argOne);
+
+/** @brief Command description for SetToken
+ *
+ * Command: SetToken
+ * @param token INT16U
+ * @param token INT16U
+ * @param data OCTET_STRING
+ * @param data OCTET_STRING
+ */
+#define emberAfFillCommandConfiguration \
+ ClusterClusterSetToken(token, token, data, data) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_TOKEN_COMMAND_ID, "uuuu", token, token, data, data);
+
+/** @brief Command description for LockTokens
+ *
+ * Command: LockTokens
+ */
+#define emberAfFillCommandConfiguration \
+ ClusterClusterLockTokens() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_LOCK_TOKENS_COMMAND_ID, "", );
+
+/** @brief Command description for ReadTokens
+ *
+ * Command: ReadTokens
+ * @param token INT16U
+ */
+#define emberAfFillCommandConfiguration \
+ ClusterClusterReadTokens(token) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_READ_TOKENS_COMMAND_ID, "u", token);
+
+/** @brief Command description for UnlockTokens
+ *
+ * Command: UnlockTokens
+ * @param data OCTET_STRING
+ */
+#define emberAfFillCommandConfiguration \
+ ClusterClusterUnlockTokens(data) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UNLOCK_TOKENS_COMMAND_ID, "u", data);
+
+/** @brief Command description for stream
+ *
+ * Command: stream
+ * @param channel INT8U
+ * @param power INT8S
+ * @param time INT16U
+ */
+#define emberAfFillCommandMFGLIB \
+ ClusterClusterstream(channel, power, time) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_STREAM_COMMAND_ID, "uuu", channel, power, time);
+
+/** @brief Command description for tone
+ *
+ * Command: tone
+ * @param channel INT8U
+ * @param power INT8S
+ * @param time INT16U
+ */
+#define emberAfFillCommandMFGLIB \
+ ClusterClustertone(channel, power, time) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TONE_COMMAND_ID, "uuu", channel, power, time);
+
+/** @brief Command description for rxMode
+ *
+ * Command: rxMode
+ * @param channel INT8U
+ * @param power INT8S
+ * @param time INT16U
+ */
+#define emberAfFillCommandMFGLIB \
+ ClusterClusterrxMode(channel, power, time) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_RX_MODE_COMMAND_ID, "uuu", channel, power, time);
+
+/** @brief Command description for EnableApsLinkKeyAuthorization
+ *
+ * Command: EnableApsLinkKeyAuthorization
+ * @param numberExemptClusters INT8U
+ * @param clusterId CLUSTER_ID
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ * @param apsLinkKeyAuthStatus BOOLEAN
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterEnableApsLinkKeyAuthorization(numberExemptClusters, clusterId, clusterId, clusterIdLen, \
+ apsLinkKeyAuthStatus) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID, "uubu", numberExemptClusters, clusterId, \
+ clusterId, clusterIdLen, apsLinkKeyAuthStatus);
+
+/** @brief Command description for DisableApsLinkKeyAuthorization
+ *
+ * Command: DisableApsLinkKeyAuthorization
+ * @param numberExemptClusters INT8U
+ * @param powerNotificationReason WwahPowerNotificationReason
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ * @param manufacturerId INT16U
+ * @param manufacturerReasonLength INT8U
+ * @param manufacturerReason INT8U []
+ * @param manufacturerReasonLen int
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDisableApsLinkKeyAuthorization(numberExemptClusters, powerNotificationReason, clusterId, \
+ clusterIdLen, manufacturerId, manufacturerReasonLength, \
+ manufacturerReason, manufacturerReasonLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID, "uubuub", numberExemptClusters, \
+ powerNotificationReason, clusterId, clusterIdLen, manufacturerId, manufacturerReasonLength, \
+ manufacturerReason, manufacturerReasonLen);
+
+/** @brief Command description for ApsLinkKeyAuthorizationQuery
+ *
+ * Command: ApsLinkKeyAuthorizationQuery
+ * @param clusterId CLUSTER_ID
+ * @param powerNotificationReason WwahPowerNotificationReason
+ * @param manufacturerId INT16U
+ * @param manufacturerReasonLength INT8U
+ * @param manufacturerReason INT8U []
+ * @param manufacturerReasonLen int
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterApsLinkKeyAuthorizationQuery(clusterId, powerNotificationReason, manufacturerId, \
+ manufacturerReasonLength, manufacturerReason, manufacturerReasonLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_APS_LINK_KEY_AUTHORIZATION_QUERY_COMMAND_ID, "uuuub", clusterId, powerNotificationReason, \
+ manufacturerId, manufacturerReasonLength, manufacturerReason, manufacturerReasonLen);
+
+/** @brief Command description for RequestNewApsLinkKey
+ *
+ * Command: RequestNewApsLinkKey
+ * @param deviceEui64 IEEE_ADDRESS
+ * @param deviceShort INT16U
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterRequestNewApsLinkKey(deviceEui64, deviceShort) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REQUEST_NEW_APS_LINK_KEY_COMMAND_ID, "uu", deviceEui64, deviceShort);
+
+/** @brief Command description for EnableWwahAppEventRetryAlgorithm
+ *
+ * Command: EnableWwahAppEventRetryAlgorithm
+ * @param firstBackoffTimeSeconds INT8U
+ * @param numberExemptClusters INT8U
+ * @param backoffSeqCommonRatio INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ * @param maxBackoffTimeSeconds INT32U
+ * @param maxRedeliveryAttempts INT8U
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterEnableWwahAppEventRetryAlgorithm( \
+ firstBackoffTimeSeconds, numberExemptClusters, backoffSeqCommonRatio, clusterId, clusterIdLen, maxBackoffTimeSeconds, \
+ maxRedeliveryAttempts) emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID, "uuubuu", \
+ firstBackoffTimeSeconds, numberExemptClusters, backoffSeqCommonRatio, \
+ clusterId, clusterIdLen, maxBackoffTimeSeconds, maxRedeliveryAttempts);
+
+/** @brief Command description for DisableWwahAppEventRetryAlgorithm
+ *
+ * Command: DisableWwahAppEventRetryAlgorithm
+ * @param currentPowerMode INT32U
+ * @param availablePowerSources INT32U
+ * @param currentPowerSource INT32U
+ * @param currentPowerSourceLevel INT32U
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDisableWwahAppEventRetryAlgorithm(currentPowerMode, availablePowerSources, currentPowerSource, \
+ currentPowerSourceLevel) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID, "uuuu", currentPowerMode, \
+ availablePowerSources, currentPowerSource, currentPowerSourceLevel);
+
+/** @brief Command description for RequestTime
+ *
+ * Command: RequestTime
+ * @param debugReportId INT8U
+ * @param debugReportSize INT32U
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterRequestTime(debugReportId, debugReportSize) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REQUEST_TIME_COMMAND_ID, "uu", debugReportId, debugReportSize);
+
+/** @brief Command description for EnableWwahRejoinAlgorithm
+ *
+ * Command: EnableWwahRejoinAlgorithm
+ * @param fastRejoinTimeoutSeconds INT16U
+ * @param debugReportId INT8U
+ * @param durationBetweenRejoinsSeconds INT16U
+ * @param debugReportData INT8U []
+ * @param debugReportDataLen int
+ * @param fastRejoinFirstBackoffSeconds INT16U
+ * @param maxBackoffTimeSeconds INT16U
+ * @param maxBackoffIterations INT16U
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterEnableWwahRejoinAlgorithm(fastRejoinTimeoutSeconds, debugReportId, durationBetweenRejoinsSeconds, \
+ debugReportData, debugReportDataLen, fastRejoinFirstBackoffSeconds, \
+ maxBackoffTimeSeconds, maxBackoffIterations) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID, "uuubuuu", fastRejoinTimeoutSeconds, debugReportId, \
+ durationBetweenRejoinsSeconds, debugReportData, debugReportDataLen, \
+ fastRejoinFirstBackoffSeconds, maxBackoffTimeSeconds, maxBackoffIterations);
+
+/** @brief Command description for DisableWwahRejoinAlgorithm
+ *
+ * Command: DisableWwahRejoinAlgorithm
+ * @param numberOfClusters INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDisableWwahRejoinAlgorithm(numberOfClusters, clusterId, clusterIdLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID, "ub", numberOfClusters, clusterId, clusterIdLen);
+
+/** @brief Command description for SetIasZoneEnrollmentMethod
+ *
+ * Command: SetIasZoneEnrollmentMethod
+ * @param enrollmentMode WwahIasZoneEnrollmentMode
+ * @param numberOfBeacons INT8U
+ * @param beacon WwahBeaconSurvey []
+ * @param beaconLen int
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterSetIasZoneEnrollmentMethod(enrollmentMode, numberOfBeacons, beacon, beaconLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_IAS_ZONE_ENROLLMENT_METHOD_COMMAND_ID, "uub", enrollmentMode, numberOfBeacons, beacon, \
+ beaconLen);
+
+/** @brief Command description for ClearBindingTable
+ *
+ * Command: ClearBindingTable
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterClearBindingTable() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_CLEAR_BINDING_TABLE_COMMAND_ID, "", );
+
+/** @brief Command description for EnablePeriodicRouterCheckIns
+ *
+ * Command: EnablePeriodicRouterCheckIns
+ * @param checkInInterval INT16U
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterEnablePeriodicRouterCheckIns(checkInInterval) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID, "u", checkInInterval);
+
+/** @brief Command description for DisablePeriodicRouterCheckIns
+ *
+ * Command: DisablePeriodicRouterCheckIns
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDisablePeriodicRouterCheckIns() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID, "", );
+
+/** @brief Command description for SetMacPollFailureWaitTime
+ *
+ * Command: SetMacPollFailureWaitTime
+ * @param waitTime INT8U
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterSetMacPollFailureWaitTime(waitTime) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_MAC_POLL_FAILURE_WAIT_TIME_COMMAND_ID, "u", waitTime);
+
+/** @brief Command description for SetPendingNetworkUpdate
+ *
+ * Command: SetPendingNetworkUpdate
+ * @param channel INT8U
+ * @param panId INT16U
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterSetPendingNetworkUpdate(channel, panId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SET_PENDING_NETWORK_UPDATE_COMMAND_ID, "uu", channel, panId);
+
+/** @brief Command description for RequireApsAcksOnUnicasts
+ *
+ * Command: RequireApsAcksOnUnicasts
+ * @param numberExemptClusters INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterRequireApsAcksOnUnicasts(numberExemptClusters, clusterId, clusterIdLen) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_REQUIRE_APS_ACKS_ON_UNICASTS_COMMAND_ID, "ub", numberExemptClusters, clusterId, clusterIdLen);
+
+/** @brief Command description for RemoveApsAcksOnUnicastsRequirement
+ *
+ * Command: RemoveApsAcksOnUnicastsRequirement
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterRemoveApsAcksOnUnicastsRequirement() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_APS_ACKS_ON_UNICASTS_REQUIREMENT_COMMAND_ID, "", );
+
+/** @brief Command description for ApsAckRequirementQuery
+ *
+ * Command: ApsAckRequirementQuery
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterApsAckRequirementQuery() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_APS_ACK_REQUIREMENT_QUERY_COMMAND_ID, "", );
+
+/** @brief Command description for DebugReportQuery
+ *
+ * Command: DebugReportQuery
+ * @param debugReportId INT8U
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDebugReportQuery(debugReportId) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DEBUG_REPORT_QUERY_COMMAND_ID, "u", debugReportId);
+
+/** @brief Command description for SurveyBeacons
+ *
+ * Command: SurveyBeacons
+ * @param standardBeacons BOOLEAN
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterSurveyBeacons(standardBeacons) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SURVEY_BEACONS_COMMAND_ID, "u", standardBeacons);
+
+/** @brief Command description for DisableOtaDowngrades
+ *
+ * Command: DisableOtaDowngrades
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDisableOtaDowngrades() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_OTA_DOWNGRADES_COMMAND_ID, "", );
+
+/** @brief Command description for DisableMgmtLeaveWithoutRejoin
+ *
+ * Command: DisableMgmtLeaveWithoutRejoin
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDisableMgmtLeaveWithoutRejoin() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_MGMT_LEAVE_WITHOUT_REJOIN_COMMAND_ID, "", );
+
+/** @brief Command description for DisableTouchlinkInterpanMessageSupport
+ *
+ * Command: DisableTouchlinkInterpanMessageSupport
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDisableTouchlinkInterpanMessageSupport() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_TOUCHLINK_INTERPAN_MESSAGE_SUPPORT_COMMAND_ID, "", );
+
+/** @brief Command description for EnableWwahParentClassification
+ *
+ * Command: EnableWwahParentClassification
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterEnableWwahParentClassification() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID, "", );
+
+/** @brief Command description for DisableWwahParentClassification
+ *
+ * Command: DisableWwahParentClassification
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDisableWwahParentClassification() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID, "", );
+
+/** @brief Command description for EnableTcSecurityOnNtwkKeyRotation
+ *
+ * Command: EnableTcSecurityOnNtwkKeyRotation
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterEnableTcSecurityOnNtwkKeyRotation() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_TC_SECURITY_ON_NTWK_KEY_ROTATION_COMMAND_ID, "", );
+
+/** @brief Command description for EnableWwahBadParentRecovery
+ *
+ * Command: EnableWwahBadParentRecovery
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterEnableWwahBadParentRecovery() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID, "", );
+
+/** @brief Command description for DisableWwahBadParentRecovery
+ *
+ * Command: DisableWwahBadParentRecovery
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDisableWwahBadParentRecovery() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID, "", );
+
+/** @brief Command description for EnableConfigurationMode
+ *
+ * Command: EnableConfigurationMode
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterEnableConfigurationMode() emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_CONFIGURATION_MODE_COMMAND_ID, "", );
+
+/** @brief Command description for DisableConfigurationMode
+ *
+ * Command: DisableConfigurationMode
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterDisableConfigurationMode() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_CONFIGURATION_MODE_COMMAND_ID, "", );
+
+/** @brief Command description for UseTrustCenterForClusterServer
+ *
+ * Command: UseTrustCenterForClusterServer
+ * @param numberOfClusters INT8U
+ * @param clusterId CLUSTER_ID []
+ * @param clusterIdLen int
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterUseTrustCenterForClusterServer(numberOfClusters, clusterId, clusterIdLen) emberAfFillExternalBuffer( \
+ mask, \
+ \
+ ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_COMMAND_ID, "ub", numberOfClusters, clusterId, clusterIdLen);
+
+/** @brief Command description for TrustCenterForClusterServerQuery
+ *
+ * Command: TrustCenterForClusterServerQuery
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterTrustCenterForClusterServerQuery() \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_COMMAND_ID, "", );
+
+/** @brief Command description for UseTrustCenterForClusterServerResponse
+ *
+ * Command: UseTrustCenterForClusterServerResponse
+ * @param status Status
+ * @param clusterStatusLength INT8U
+ * @param clusterStatus WwahClusterStatusToUseTC []
+ * @param clusterStatusLen int
+ */
+#define emberAfFillCommandSL \
+ Works With All HubsClusterUseTrustCenterForClusterServerResponse(status, clusterStatusLength, clusterStatus, clusterStatusLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_RESPONSE_COMMAND_ID, "uub", status, clusterStatusLength, \
+ clusterStatus, clusterStatusLen);
diff --git a/examples/all-clusters-app/all-clusters-common/gen/cluster-id.h b/examples/all-clusters-app/all-clusters-common/gen/cluster-id.h
new file mode 100644
index 00000000000000..c341b079be401d
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/cluster-id.h
@@ -0,0 +1,347 @@
+
+/*
+ *
+ * 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.
+ */
+
+// Prevent multiple inclusion
+#pragma once
+
+// Definitions for cluster: Basic
+#define ZCL_BASIC_CLUSTER_ID (0x0000)
+
+// Definitions for cluster: Power Configuration
+#define ZCL_POWER_CONFIG_CLUSTER_ID (0x0001)
+
+// Definitions for cluster: Device Temperature Configuration
+#define ZCL_DEVICE_TEMP_CLUSTER_ID (0x0002)
+
+// Definitions for cluster: Identify
+#define ZCL_IDENTIFY_CLUSTER_ID (0x0003)
+
+// Definitions for cluster: Groups
+#define ZCL_GROUPS_CLUSTER_ID (0x0004)
+
+// Definitions for cluster: Scenes
+#define ZCL_SCENES_CLUSTER_ID (0x0005)
+
+// Definitions for cluster: On/off
+#define ZCL_ON_OFF_CLUSTER_ID (0x0006)
+
+// Definitions for cluster: On/off Switch Configuration
+#define ZCL_ON_OFF_SWITCH_CONFIG_CLUSTER_ID (0x0007)
+
+// Definitions for cluster: Level Control
+#define ZCL_LEVEL_CONTROL_CLUSTER_ID (0x0008)
+
+// Definitions for cluster: Alarms
+#define ZCL_ALARM_CLUSTER_ID (0x0009)
+
+// Definitions for cluster: Time
+#define ZCL_TIME_CLUSTER_ID (0x000A)
+
+// Definitions for cluster: RSSI Location
+#define ZCL_RSSI_LOCATION_CLUSTER_ID (0x000B)
+
+// Definitions for cluster: Binary Input (Basic)
+#define ZCL_BINARY_INPUT_BASIC_CLUSTER_ID (0x000F)
+
+// Definitions for cluster: Commissioning
+#define ZCL_COMMISSIONING_CLUSTER_ID (0x0015)
+
+// Definitions for cluster: Partition
+#define ZCL_PARTITION_CLUSTER_ID (0x0016)
+
+// Definitions for cluster: Over the Air Bootloading
+#define ZCL_OTA_BOOTLOAD_CLUSTER_ID (0x0019)
+
+// Definitions for cluster: Power Profile
+#define ZCL_POWER_PROFILE_CLUSTER_ID (0x001A)
+
+// Definitions for cluster: Appliance Control
+#define ZCL_APPLIANCE_CONTROL_CLUSTER_ID (0x001B)
+
+// Definitions for cluster: Poll Control
+#define ZCL_POLL_CONTROL_CLUSTER_ID (0x0020)
+
+// Definitions for cluster: Green Power
+#define ZCL_GREEN_POWER_CLUSTER_ID (0x0021)
+
+// Definitions for cluster: Keep-Alive
+#define ZCL_KEEPALIVE_CLUSTER_ID (0x0025)
+
+// Definitions for cluster: Shade Configuration
+#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
+
+// Definitions for cluster: Door Lock
+#define ZCL_DOOR_LOCK_CLUSTER_ID (0x0101)
+
+// Definitions for cluster: Window Covering
+#define ZCL_WINDOW_COVERING_CLUSTER_ID (0x0102)
+
+// Definitions for cluster: Barrier Control
+#define ZCL_BARRIER_CONTROL_CLUSTER_ID (0x0103)
+
+// Definitions for cluster: Pump Configuration and Control
+#define ZCL_PUMP_CONFIG_CONTROL_CLUSTER_ID (0x0200)
+
+// Definitions for cluster: Thermostat
+#define ZCL_THERMOSTAT_CLUSTER_ID (0x0201)
+
+// Definitions for cluster: Fan Control
+#define ZCL_FAN_CONTROL_CLUSTER_ID (0x0202)
+
+// Definitions for cluster: Dehumidification Control
+#define ZCL_DEHUMID_CONTROL_CLUSTER_ID (0x0203)
+
+// Definitions for cluster: Thermostat User Interface Configuration
+#define ZCL_THERMOSTAT_UI_CONFIG_CLUSTER_ID (0x0204)
+
+// Definitions for cluster: Color Control
+#define ZCL_COLOR_CONTROL_CLUSTER_ID (0x0300)
+
+// Definitions for cluster: Ballast Configuration
+#define ZCL_BALLAST_CONFIGURATION_CLUSTER_ID (0x0301)
+
+// Definitions for cluster: Illuminance Measurement
+#define ZCL_ILLUM_MEASUREMENT_CLUSTER_ID (0x0400)
+
+// Definitions for cluster: Illuminance Level Sensing
+#define ZCL_ILLUM_LEVEL_SENSING_CLUSTER_ID (0x0401)
+
+// Definitions for cluster: Temperature Measurement
+#define ZCL_TEMP_MEASUREMENT_CLUSTER_ID (0x0402)
+
+// Definitions for cluster: Pressure Measurement
+#define ZCL_PRESSURE_MEASUREMENT_CLUSTER_ID (0x0403)
+
+// Definitions for cluster: Flow Measurement
+#define ZCL_FLOW_MEASUREMENT_CLUSTER_ID (0x0404)
+
+// Definitions for cluster: Relative Humidity Measurement
+#define ZCL_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_ID (0x0405)
+
+// Definitions for cluster: Occupancy Sensing
+#define ZCL_OCCUPANCY_SENSING_CLUSTER_ID (0x0406)
+
+// Definitions for cluster: Carbon Monoxide Concentration Measurement
+#define ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040C)
+
+// Definitions for cluster: Carbon Dioxide Concentration Measurement
+#define ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040D)
+
+// Definitions for cluster: Ethylene Concentration Measurement
+#define ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040E)
+
+// Definitions for cluster: Ethylene Oxide Concentration Measurement
+#define ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x040F)
+
+// Definitions for cluster: Hydrogen Concentration Measurement
+#define ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0410)
+
+// Definitions for cluster: Hydrogen Sulphide Concentration Measurement
+#define ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0411)
+
+// Definitions for cluster: Nitric Oxide Concentration Measurement
+#define ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0412)
+
+// Definitions for cluster: Nitrogen Dioxide Concentration Measurement
+#define ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0413)
+
+// Definitions for cluster: Oxygen Concentration Measurement
+#define ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0414)
+
+// Definitions for cluster: Ozone Concentration Measurement
+#define ZCL_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0415)
+
+// Definitions for cluster: Sulfur Dioxide Concentration Measurement
+#define ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0416)
+
+// Definitions for cluster: Dissolved Oxygen Concentration Measurement
+#define ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0417)
+
+// Definitions for cluster: Bromate Concentration Measurement
+#define ZCL_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0418)
+
+// Definitions for cluster: Chloramines Concentration Measurement
+#define ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0419)
+
+// Definitions for cluster: Chlorine Concentration Measurement
+#define ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041A)
+
+// Definitions for cluster: Fecal coliform and E. Coli Concentration Measurement
+#define ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041B)
+
+// Definitions for cluster: Fluoride Concentration Measurement
+#define ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041C)
+
+// Definitions for cluster: Haloacetic Acids Concentration Measurement
+#define ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041D)
+
+// Definitions for cluster: Total Trihalomethanes Concentration Measurement
+#define ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041E)
+
+// Definitions for cluster: Total Coliform Bacteria Concentration Measurement
+#define ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x041F)
+
+// Definitions for cluster: Turbidity Concentration Measurement
+#define ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0420)
+
+// Definitions for cluster: Copper Concentration Measurement
+#define ZCL_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0421)
+
+// Definitions for cluster: Lead Concentration Measurement
+#define ZCL_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0422)
+
+// Definitions for cluster: Manganese Concentration Measurement
+#define ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0423)
+
+// Definitions for cluster: Sulfate Concentration Measurement
+#define ZCL_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0424)
+
+// Definitions for cluster: Bromodichloromethane Concentration Measurement
+#define ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0425)
+
+// Definitions for cluster: Bromoform Concentration Measurement
+#define ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0426)
+
+// Definitions for cluster: Chlorodibromomethane Concentration Measurement
+#define ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0427)
+
+// Definitions for cluster: Chloroform Concentration Measurement
+#define ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0428)
+
+// Definitions for cluster: Sodium Concentration Measurement
+#define ZCL_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_ID (0x0429)
+
+// Definitions for cluster: IAS Zone
+#define ZCL_IAS_ZONE_CLUSTER_ID (0x0500)
+
+// Definitions for cluster: IAS ACE
+#define ZCL_IAS_ACE_CLUSTER_ID (0x0501)
+
+// Definitions for cluster: IAS WD
+#define ZCL_IAS_WD_CLUSTER_ID (0x0502)
+
+// Definitions for cluster: Generic Tunnel
+#define ZCL_GENERIC_TUNNEL_CLUSTER_ID (0x0600)
+
+// Definitions for cluster: BACnet Protocol Tunnel
+#define ZCL_BACNET_PROTOCOL_TUNNEL_CLUSTER_ID (0x0601)
+
+// Definitions for cluster: 11073 Protocol Tunnel
+#define ZCL_11073_PROTOCOL_TUNNEL_CLUSTER_ID (0x0614)
+
+// Definitions for cluster: ISO 7816 Protocol Tunnel
+#define ZCL_ISO7816_PROTOCOL_TUNNEL_CLUSTER_ID (0x0615)
+
+// Definitions for cluster: Price
+#define ZCL_PRICE_CLUSTER_ID (0x0700)
+
+// Definitions for cluster: Demand Response and Load Control
+#define ZCL_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_ID (0x0701)
+
+// Definitions for cluster: Simple Metering
+#define ZCL_SIMPLE_METERING_CLUSTER_ID (0x0702)
+
+// Definitions for cluster: Messaging
+#define ZCL_MESSAGING_CLUSTER_ID (0x0703)
+
+// Definitions for cluster: Tunneling
+#define ZCL_TUNNELING_CLUSTER_ID (0x0704)
+
+// Definitions for cluster: Prepayment
+#define ZCL_PREPAYMENT_CLUSTER_ID (0x0705)
+
+// Definitions for cluster: Energy Management
+#define ZCL_ENERGY_MANAGEMENT_CLUSTER_ID (0x0706)
+
+// Definitions for cluster: Calendar
+#define ZCL_CALENDAR_CLUSTER_ID (0x0707)
+
+// Definitions for cluster: Device Management
+#define ZCL_DEVICE_MANAGEMENT_CLUSTER_ID (0x0708)
+
+// Definitions for cluster: Events
+#define ZCL_EVENTS_CLUSTER_ID (0x0709)
+
+// Definitions for cluster: MDU Pairing
+#define ZCL_MDU_PAIRING_CLUSTER_ID (0x070A)
+
+// Definitions for cluster: Sub-GHz
+#define ZCL_SUB_GHZ_CLUSTER_ID (0x070B)
+
+// Definitions for cluster: Key Establishment
+#define ZCL_KEY_ESTABLISHMENT_CLUSTER_ID (0x0800)
+
+// Definitions for cluster: Information
+#define ZCL_INFORMATION_CLUSTER_ID (0x0900)
+
+// Definitions for cluster: Data Sharing
+#define ZCL_DATA_SHARING_CLUSTER_ID (0x0901)
+
+// Definitions for cluster: Gaming
+#define ZCL_GAMING_CLUSTER_ID (0x0902)
+
+// Definitions for cluster: Data Rate Control
+#define ZCL_DATA_RATE_CONTROL_CLUSTER_ID (0x0903)
+
+// Definitions for cluster: Voice over ZigBee
+#define ZCL_VOICE_OVER_ZIGBEE_CLUSTER_ID (0x0904)
+
+// Definitions for cluster: Chatting
+#define ZCL_CHATTING_CLUSTER_ID (0x0905)
+
+// Definitions for cluster: Payment
+#define ZCL_PAYMENT_CLUSTER_ID (0x0A01)
+
+// Definitions for cluster: Billing
+#define ZCL_BILLING_CLUSTER_ID (0x0A02)
+
+// Definitions for cluster: Appliance Identification
+#define ZCL_APPLIANCE_IDENTIFICATION_CLUSTER_ID (0x0B00)
+
+// Definitions for cluster: Meter Identification
+#define ZCL_METER_IDENTIFICATION_CLUSTER_ID (0x0B01)
+
+// Definitions for cluster: Appliance Events and Alert
+#define ZCL_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_ID (0x0B02)
+
+// Definitions for cluster: Appliance Statistics
+#define ZCL_APPLIANCE_STATISTICS_CLUSTER_ID (0x0B03)
+
+// Definitions for cluster: Electrical Measurement
+#define ZCL_ELECTRICAL_MEASUREMENT_CLUSTER_ID (0x0B04)
+
+// Definitions for cluster: Diagnostics
+#define ZCL_DIAGNOSTICS_CLUSTER_ID (0x0B05)
+
+// Definitions for cluster: ZLL Commissioning
+#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
+
+// Definitions for cluster: Sample Mfg Specific Cluster
+#define ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_ID (0xFC00)
+
+// Definitions for cluster: Sample Mfg Specific Cluster 2
+#define ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_2_ID (0xFC00)
+
+// Definitions for cluster: Configuration Cluster
+#define ZCL_OTA_CONFIGURATION_CLUSTER_ID (0xFC01)
+
+// Definitions for cluster: MFGLIB Cluster
+#define ZCL_MFGLIB_CLUSTER_ID (0xFC02)
+
+// Definitions for cluster: SL Works With All Hubs
+#define ZCL_SL_WWAH_CLUSTER_ID (0xFC57)
diff --git a/examples/all-clusters-app/all-clusters-common/gen/command-id.h b/examples/all-clusters-app/all-clusters-common/gen/command-id.h
new file mode 100644
index 00000000000000..940258f4527aa5
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/command-id.h
@@ -0,0 +1,747 @@
+
+/*
+ *
+ * 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.
+ */
+
+// Prevent multiple inclusion
+#pragma once
+
+// Global, non-cluster-specific commands
+#define ZCL_READ_ATTRIBUTES_COMMAND_ID (0x00)
+#define ZCL_READ_ATTRIBUTES_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_WRITE_ATTRIBUTES_COMMAND_ID (0x02)
+#define ZCL_WRITE_ATTRIBUTES_UNDIVIDED_COMMAND_ID (0x03)
+#define ZCL_WRITE_ATTRIBUTES_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_WRITE_ATTRIBUTES_NO_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_CONFIGURE_REPORTING_COMMAND_ID (0x06)
+#define ZCL_CONFIGURE_REPORTING_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_READ_REPORTING_CONFIGURATION_COMMAND_ID (0x08)
+#define ZCL_READ_REPORTING_CONFIGURATION_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REPORT_ATTRIBUTES_COMMAND_ID (0x0A)
+#define ZCL_DEFAULT_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID (0x0C)
+#define ZCL_DISCOVER_ATTRIBUTES_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_READ_ATTRIBUTES_STRUCTURED_COMMAND_ID (0x0E)
+#define ZCL_WRITE_ATTRIBUTES_STRUCTURED_COMMAND_ID (0x0F)
+#define ZCL_WRITE_ATTRIBUTES_STRUCTURED_RESPONSE_COMMAND_ID (0x10)
+#define ZCL_DISCOVER_COMMANDS_RECEIVED_COMMAND_ID (0x11)
+#define ZCL_DISCOVER_COMMANDS_RECEIVED_RESPONSE_COMMAND_ID (0x12)
+#define ZCL_DISCOVER_COMMANDS_GENERATED_COMMAND_ID (0x13)
+#define ZCL_DISCOVER_COMMANDS_GENERATED_RESPONSE_COMMAND_ID (0x14)
+#define ZCL_DISCOVER_ATTRIBUTES_EXTENDED_COMMAND_ID (0x15)
+#define ZCL_DISCOVER_ATTRIBUTES_EXTENDED_RESPONSE_COMMAND_ID (0x16)
+
+// Commands for cluster: Basic
+#define ZCL_RESET_TO_FACTORY_DEFAULTS_COMMAND_ID (0x00)
+
+// Commands for cluster: Identify
+#define ZCL_IDENTIFY_COMMAND_ID (0x00)
+#define ZCL_IDENTIFY_QUERY_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_IDENTIFY_QUERY_COMMAND_ID (0x01)
+#define ZCL_EZ_MODE_INVOKE_COMMAND_ID (0x02)
+#define ZCL_UPDATE_COMMISSION_STATE_COMMAND_ID (0x03)
+#define ZCL_TRIGGER_EFFECT_COMMAND_ID (0x40)
+
+// Commands for cluster: Groups
+#define ZCL_ADD_GROUP_COMMAND_ID (0x00)
+#define ZCL_ADD_GROUP_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_VIEW_GROUP_COMMAND_ID (0x01)
+#define ZCL_VIEW_GROUP_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID (0x02)
+#define ZCL_GET_GROUP_MEMBERSHIP_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_REMOVE_GROUP_COMMAND_ID (0x03)
+#define ZCL_REMOVE_GROUP_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_REMOVE_ALL_GROUPS_COMMAND_ID (0x04)
+#define ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID (0x05)
+
+// Commands for cluster: Scenes
+#define ZCL_ADD_SCENE_COMMAND_ID (0x00)
+#define ZCL_ADD_SCENE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_VIEW_SCENE_COMMAND_ID (0x01)
+#define ZCL_VIEW_SCENE_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_REMOVE_SCENE_COMMAND_ID (0x02)
+#define ZCL_REMOVE_SCENE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_REMOVE_ALL_SCENES_COMMAND_ID (0x03)
+#define ZCL_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_STORE_SCENE_COMMAND_ID (0x04)
+#define ZCL_STORE_SCENE_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_RECALL_SCENE_COMMAND_ID (0x05)
+#define ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID (0x06)
+#define ZCL_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_ENHANCED_ADD_SCENE_COMMAND_ID (0x40)
+#define ZCL_ENHANCED_ADD_SCENE_RESPONSE_COMMAND_ID (0x40)
+#define ZCL_ENHANCED_VIEW_SCENE_COMMAND_ID (0x41)
+#define ZCL_ENHANCED_VIEW_SCENE_RESPONSE_COMMAND_ID (0x41)
+#define ZCL_COPY_SCENE_COMMAND_ID (0x42)
+#define ZCL_COPY_SCENE_RESPONSE_COMMAND_ID (0x42)
+
+// Commands for cluster: On/off
+#define ZCL_OFF_COMMAND_ID (0x00)
+#define ZCL_SAMPLE_MFG_SPECIFIC_OFF_WITH_TRANSITION_COMMAND_ID (0x00)
+#define ZCL_ON_COMMAND_ID (0x01)
+#define ZCL_SAMPLE_MFG_SPECIFIC_ON_WITH_TRANSITION_COMMAND_ID (0x01)
+#define ZCL_SAMPLE_MFG_SPECIFIC_ON_WITH_TRANSITION2_COMMAND_ID (0x01)
+#define ZCL_TOGGLE_COMMAND_ID (0x02)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TOGGLE_WITH_TRANSITION_COMMAND_ID (0x02)
+#define ZCL_SAMPLE_MFG_SPECIFIC_TOGGLE_WITH_TRANSITION2_COMMAND_ID (0x02)
+#define ZCL_OFF_WITH_EFFECT_COMMAND_ID (0x40)
+#define ZCL_ON_WITH_RECALL_GLOBAL_SCENE_COMMAND_ID (0x41)
+#define ZCL_ON_WITH_TIMED_OFF_COMMAND_ID (0x42)
+
+// Commands for cluster: Level Control
+#define ZCL_MOVE_TO_LEVEL_COMMAND_ID (0x00)
+#define ZCL_MOVE_COMMAND_ID (0x01)
+#define ZCL_STEP_COMMAND_ID (0x02)
+#define ZCL_STOP_COMMAND_ID (0x03)
+#define ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID (0x04)
+#define ZCL_MOVE_WITH_ON_OFF_COMMAND_ID (0x05)
+#define ZCL_STEP_WITH_ON_OFF_COMMAND_ID (0x06)
+#define ZCL_STOP_WITH_ON_OFF_COMMAND_ID (0x07)
+
+// Commands for cluster: Alarms
+#define ZCL_RESET_ALARM_COMMAND_ID (0x00)
+#define ZCL_ALARM_COMMAND_ID (0x00)
+#define ZCL_RESET_ALL_ALARMS_COMMAND_ID (0x01)
+#define ZCL_GET_ALARM_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_ALARM_COMMAND_ID (0x02)
+#define ZCL_RESET_ALARM_LOG_COMMAND_ID (0x03)
+
+// Commands for cluster: RSSI Location
+#define ZCL_SET_ABSOLUTE_LOCATION_COMMAND_ID (0x00)
+#define ZCL_DEVICE_CONFIGURATION_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_SET_DEVICE_CONFIGURATION_COMMAND_ID (0x01)
+#define ZCL_LOCATION_DATA_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_DEVICE_CONFIGURATION_COMMAND_ID (0x02)
+#define ZCL_LOCATION_DATA_NOTIFICATION_COMMAND_ID (0x02)
+#define ZCL_GET_LOCATION_DATA_COMMAND_ID (0x03)
+#define ZCL_COMPACT_LOCATION_DATA_NOTIFICATION_COMMAND_ID (0x03)
+#define ZCL_RSSI_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_RSSI_PING_COMMAND_ID (0x04)
+#define ZCL_SEND_PINGS_COMMAND_ID (0x05)
+#define ZCL_RSSI_REQUEST_COMMAND_ID (0x05)
+#define ZCL_ANCHOR_NODE_ANNOUNCE_COMMAND_ID (0x06)
+#define ZCL_REPORT_RSSI_MEASUREMENTS_COMMAND_ID (0x06)
+#define ZCL_REQUEST_OWN_LOCATION_COMMAND_ID (0x07)
+
+// Commands for cluster: Commissioning
+#define ZCL_RESTART_DEVICE_COMMAND_ID (0x00)
+#define ZCL_RESTART_DEVICE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_SAVE_STARTUP_PARAMETERS_COMMAND_ID (0x01)
+#define ZCL_SAVE_STARTUP_PARAMETERS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_RESTORE_STARTUP_PARAMETERS_COMMAND_ID (0x02)
+#define ZCL_RESTORE_STARTUP_PARAMETERS_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_RESET_STARTUP_PARAMETERS_COMMAND_ID (0x03)
+#define ZCL_RESET_STARTUP_PARAMETERS_RESPONSE_COMMAND_ID (0x03)
+
+// Commands for cluster: Partition
+#define ZCL_TRANSFER_PARTITIONED_FRAME_COMMAND_ID (0x00)
+#define ZCL_MULTIPLE_ACK_COMMAND_ID (0x00)
+#define ZCL_READ_HANDSHAKE_PARAM_COMMAND_ID (0x01)
+#define ZCL_READ_HANDSHAKE_PARAM_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_WRITE_HANDSHAKE_PARAM_COMMAND_ID (0x02)
+
+// Commands for cluster: Over the Air Bootloading
+#define ZCL_IMAGE_NOTIFY_COMMAND_ID (0x00)
+#define ZCL_QUERY_NEXT_IMAGE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_QUERY_NEXT_IMAGE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_IMAGE_BLOCK_REQUEST_COMMAND_ID (0x03)
+#define ZCL_IMAGE_PAGE_REQUEST_COMMAND_ID (0x04)
+#define ZCL_IMAGE_BLOCK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_UPGRADE_END_REQUEST_COMMAND_ID (0x06)
+#define ZCL_UPGRADE_END_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_QUERY_SPECIFIC_FILE_REQUEST_COMMAND_ID (0x08)
+#define ZCL_QUERY_SPECIFIC_FILE_RESPONSE_COMMAND_ID (0x09)
+
+// Commands for cluster: Power Profile
+#define ZCL_POWER_PROFILE_REQUEST_COMMAND_ID (0x00)
+#define ZCL_POWER_PROFILE_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_POWER_PROFILE_STATE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_POWER_PROFILE_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_GET_POWER_PROFILE_PRICE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_POWER_PROFILE_STATE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_GET_OVERALL_SCHEDULE_PRICE_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_GET_POWER_PROFILE_PRICE_COMMAND_ID (0x03)
+#define ZCL_ENERGY_PHASES_SCHEDULE_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_POWER_PROFILES_STATE_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_ENERGY_PHASES_SCHEDULE_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_OVERALL_SCHEDULE_PRICE_COMMAND_ID (0x05)
+#define ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_REQUEST_COMMAND_ID (0x06)
+#define ZCL_ENERGY_PHASES_SCHEDULE_REQUEST_COMMAND_ID (0x06)
+#define ZCL_ENERGY_PHASES_SCHEDULE_STATE_REQUEST_COMMAND_ID (0x07)
+#define ZCL_ENERGY_PHASES_SCHEDULE_STATE_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_ENERGY_PHASES_SCHEDULE_STATE_NOTIFICATION_COMMAND_ID (0x08)
+#define ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_NOTIFICATION_COMMAND_ID (0x09)
+#define ZCL_POWER_PROFILE_SCHEDULE_CONSTRAINTS_RESPONSE_COMMAND_ID (0x0A)
+#define ZCL_GET_POWER_PROFILE_PRICE_EXTENDED_COMMAND_ID (0x0B)
+
+// Commands for cluster: Appliance Control
+#define ZCL_EXECUTION_OF_A_COMMAND_COMMAND_ID (0x00)
+#define ZCL_SIGNAL_STATE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_SIGNAL_STATE_COMMAND_ID (0x01)
+#define ZCL_SIGNAL_STATE_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_WRITE_FUNCTIONS_COMMAND_ID (0x02)
+#define ZCL_OVERLOAD_PAUSE_RESUME_COMMAND_ID (0x03)
+#define ZCL_OVERLOAD_PAUSE_COMMAND_ID (0x04)
+#define ZCL_OVERLOAD_WARNING_COMMAND_ID (0x05)
+
+// Commands for cluster: Poll Control
+#define ZCL_CHECK_IN_COMMAND_ID (0x00)
+#define ZCL_CHECK_IN_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_FAST_POLL_STOP_COMMAND_ID (0x01)
+#define ZCL_SET_LONG_POLL_INTERVAL_COMMAND_ID (0x02)
+#define ZCL_SET_SHORT_POLL_INTERVAL_COMMAND_ID (0x03)
+
+// Commands for cluster: Green Power
+#define ZCL_GP_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_GP_NOTIFICATION_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_GP_PAIRING_SEARCH_COMMAND_ID (0x01)
+#define ZCL_GP_PAIRING_COMMAND_ID (0x01)
+#define ZCL_GP_PROXY_COMMISSIONING_MODE_COMMAND_ID (0x02)
+#define ZCL_GP_TUNNELING_STOP_COMMAND_ID (0x03)
+#define ZCL_GP_COMMISSIONING_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_GP_SINK_COMMISSIONING_MODE_COMMAND_ID (0x05)
+#define ZCL_GP_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_GP_TRANSLATION_TABLE_UPDATE_COMMAND_ID (0x07)
+#define ZCL_GP_TRANSLATION_TABLE_REQUEST_COMMAND_ID (0x08)
+#define ZCL_GP_TRANSLATION_TABLE_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_GP_PAIRING_CONFIGURATION_COMMAND_ID (0x09)
+#define ZCL_GP_SINK_TABLE_REQUEST_COMMAND_ID (0x0A)
+#define ZCL_GP_SINK_TABLE_RESPONSE_COMMAND_ID (0x0A)
+#define ZCL_GP_PROXY_TABLE_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_GP_PROXY_TABLE_REQUEST_COMMAND_ID (0x0B)
+
+// Commands for cluster: Door Lock
+#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
+#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_UNLOCK_DOOR_COMMAND_ID (0x01)
+#define ZCL_UNLOCK_DOOR_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_TOGGLE_COMMAND_ID (0x02)
+#define ZCL_TOGGLE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID (0x03)
+#define ZCL_UNLOCK_WITH_TIMEOUT_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_GET_LOG_RECORD_COMMAND_ID (0x04)
+#define ZCL_GET_LOG_RECORD_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_SET_PIN_COMMAND_ID (0x05)
+#define ZCL_SET_PIN_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_PIN_COMMAND_ID (0x06)
+#define ZCL_GET_PIN_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_CLEAR_PIN_COMMAND_ID (0x07)
+#define ZCL_CLEAR_PIN_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_CLEAR_ALL_PINS_COMMAND_ID (0x08)
+#define ZCL_CLEAR_ALL_PINS_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_SET_USER_STATUS_COMMAND_ID (0x09)
+#define ZCL_SET_USER_STATUS_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_GET_USER_STATUS_COMMAND_ID (0x0A)
+#define ZCL_GET_USER_STATUS_RESPONSE_COMMAND_ID (0x0A)
+#define ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID (0x0B)
+#define ZCL_SET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID (0x0C)
+#define ZCL_GET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0C)
+#define ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID (0x0D)
+#define ZCL_CLEAR_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID (0x0E)
+#define ZCL_SET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0E)
+#define ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID (0x0F)
+#define ZCL_GET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID (0x10)
+#define ZCL_CLEAR_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x10)
+#define ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID (0x11)
+#define ZCL_SET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x11)
+#define ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID (0x12)
+#define ZCL_GET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x12)
+#define ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID (0x13)
+#define ZCL_CLEAR_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID (0x13)
+#define ZCL_SET_USER_TYPE_COMMAND_ID (0x14)
+#define ZCL_SET_USER_TYPE_RESPONSE_COMMAND_ID (0x14)
+#define ZCL_GET_USER_TYPE_COMMAND_ID (0x15)
+#define ZCL_GET_USER_TYPE_RESPONSE_COMMAND_ID (0x15)
+#define ZCL_SET_RFID_COMMAND_ID (0x16)
+#define ZCL_SET_RFID_RESPONSE_COMMAND_ID (0x16)
+#define ZCL_GET_RFID_COMMAND_ID (0x17)
+#define ZCL_GET_RFID_RESPONSE_COMMAND_ID (0x17)
+#define ZCL_CLEAR_RFID_COMMAND_ID (0x18)
+#define ZCL_CLEAR_RFID_RESPONSE_COMMAND_ID (0x18)
+#define ZCL_CLEAR_ALL_RFIDS_COMMAND_ID (0x19)
+#define ZCL_CLEAR_ALL_RFIDS_RESPONSE_COMMAND_ID (0x19)
+#define ZCL_OPERATION_EVENT_NOTIFICATION_COMMAND_ID (0x20)
+#define ZCL_PROGRAMMING_EVENT_NOTIFICATION_COMMAND_ID (0x21)
+
+// Commands for cluster: Window Covering
+#define ZCL_WINDOW_COVERING_UP_OPEN_COMMAND_ID (0x00)
+#define ZCL_WINDOW_COVERING_DOWN_CLOSE_COMMAND_ID (0x01)
+#define ZCL_WINDOW_COVERING_STOP_COMMAND_ID (0x02)
+#define ZCL_WINDOW_COVERING_GO_TO_LIFT_VALUE_COMMAND_ID (0x04)
+#define ZCL_WINDOW_COVERING_GO_TO_LIFT_PERCENTAGE_COMMAND_ID (0x05)
+#define ZCL_WINDOW_COVERING_GO_TO_TILT_VALUE_COMMAND_ID (0x07)
+#define ZCL_WINDOW_COVERING_GO_TO_TILT_PERCENTAGE_COMMAND_ID (0x08)
+
+// Commands for cluster: Barrier Control
+#define ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID (0x00)
+#define ZCL_BARRIER_CONTROL_STOP_COMMAND_ID (0x01)
+
+// Commands for cluster: Thermostat
+#define ZCL_SETPOINT_RAISE_LOWER_COMMAND_ID (0x00)
+#define ZCL_CURRENT_WEEKLY_SCHEDULE_COMMAND_ID (0x00)
+#define ZCL_SET_WEEKLY_SCHEDULE_COMMAND_ID (0x01)
+#define ZCL_RELAY_STATUS_LOG_COMMAND_ID (0x01)
+#define ZCL_GET_WEEKLY_SCHEDULE_COMMAND_ID (0x02)
+#define ZCL_CLEAR_WEEKLY_SCHEDULE_COMMAND_ID (0x03)
+#define ZCL_GET_RELAY_STATUS_LOG_COMMAND_ID (0x04)
+
+// Commands for cluster: Color Control
+#define ZCL_MOVE_TO_HUE_COMMAND_ID (0x00)
+#define ZCL_MOVE_HUE_COMMAND_ID (0x01)
+#define ZCL_STEP_HUE_COMMAND_ID (0x02)
+#define ZCL_MOVE_TO_SATURATION_COMMAND_ID (0x03)
+#define ZCL_MOVE_SATURATION_COMMAND_ID (0x04)
+#define ZCL_STEP_SATURATION_COMMAND_ID (0x05)
+#define ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID (0x06)
+#define ZCL_MOVE_TO_COLOR_COMMAND_ID (0x07)
+#define ZCL_MOVE_COLOR_COMMAND_ID (0x08)
+#define ZCL_STEP_COLOR_COMMAND_ID (0x09)
+#define ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID (0x0A)
+#define ZCL_ENHANCED_MOVE_TO_HUE_COMMAND_ID (0x40)
+#define ZCL_ENHANCED_MOVE_HUE_COMMAND_ID (0x41)
+#define ZCL_ENHANCED_STEP_HUE_COMMAND_ID (0x42)
+#define ZCL_ENHANCED_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID (0x43)
+#define ZCL_COLOR_LOOP_SET_COMMAND_ID (0x44)
+#define ZCL_STOP_MOVE_STEP_COMMAND_ID (0x47)
+#define ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID (0x4B)
+#define ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID (0x4C)
+
+// Commands for cluster: IAS Zone
+#define ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_ZONE_STATUS_CHANGE_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_INITIATE_NORMAL_OPERATION_MODE_COMMAND_ID (0x01)
+#define ZCL_ZONE_ENROLL_REQUEST_COMMAND_ID (0x01)
+#define ZCL_INITIATE_TEST_MODE_COMMAND_ID (0x02)
+#define ZCL_INITIATE_NORMAL_OPERATION_MODE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_INITIATE_TEST_MODE_RESPONSE_COMMAND_ID (0x03)
+
+// Commands for cluster: IAS ACE
+#define ZCL_ARM_COMMAND_ID (0x00)
+#define ZCL_ARM_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_BYPASS_COMMAND_ID (0x01)
+#define ZCL_GET_ZONE_ID_MAP_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_EMERGENCY_COMMAND_ID (0x02)
+#define ZCL_GET_ZONE_INFORMATION_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_FIRE_COMMAND_ID (0x03)
+#define ZCL_ZONE_STATUS_CHANGED_COMMAND_ID (0x03)
+#define ZCL_PANIC_COMMAND_ID (0x04)
+#define ZCL_PANEL_STATUS_CHANGED_COMMAND_ID (0x04)
+#define ZCL_GET_ZONE_ID_MAP_COMMAND_ID (0x05)
+#define ZCL_GET_PANEL_STATUS_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_ZONE_INFORMATION_COMMAND_ID (0x06)
+#define ZCL_SET_BYPASSED_ZONE_LIST_COMMAND_ID (0x06)
+#define ZCL_GET_PANEL_STATUS_COMMAND_ID (0x07)
+#define ZCL_BYPASS_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_GET_BYPASSED_ZONE_LIST_COMMAND_ID (0x08)
+#define ZCL_GET_ZONE_STATUS_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_GET_ZONE_STATUS_COMMAND_ID (0x09)
+
+// Commands for cluster: IAS WD
+#define ZCL_START_WARNING_COMMAND_ID (0x00)
+#define ZCL_SQUAWK_COMMAND_ID (0x01)
+
+// Commands for cluster: Generic Tunnel
+#define ZCL_MATCH_PROTOCOL_ADDRESS_COMMAND_ID (0x00)
+#define ZCL_MATCH_PROTOCOL_ADDRESS_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_ADVERTISE_PROTOCOL_ADDRESS_COMMAND_ID (0x01)
+
+// Commands for cluster: BACnet Protocol Tunnel
+#define ZCL_TRANSFER_NPDU_COMMAND_ID (0x00)
+
+// Commands for cluster: 11073 Protocol Tunnel
+#define ZCL_TRANSFER_APDU_COMMAND_ID (0x00)
+#define ZCL_CONNECT_REQUEST_COMMAND_ID (0x01)
+#define ZCL_DISCONNECT_REQUEST_COMMAND_ID (0x02)
+#define ZCL_CONNECT_STATUS_NOTIFICATION_COMMAND_ID (0x03)
+
+// Commands for cluster: ISO 7816 Protocol Tunnel
+#define ZCL_TRANSFER_APDU_COMMAND_ID (0x00)
+#define ZCL_INSERT_SMART_CARD_COMMAND_ID (0x01)
+#define ZCL_EXTRACT_SMART_CARD_COMMAND_ID (0x02)
+
+// Commands for cluster: Price
+#define ZCL_PUBLISH_PRICE_COMMAND_ID (0x00)
+#define ZCL_GET_CURRENT_PRICE_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_BLOCK_PERIOD_COMMAND_ID (0x01)
+#define ZCL_GET_SCHEDULED_PRICES_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_CONVERSION_FACTOR_COMMAND_ID (0x02)
+#define ZCL_PRICE_ACKNOWLEDGEMENT_COMMAND_ID (0x02)
+#define ZCL_PUBLISH_CALORIFIC_VALUE_COMMAND_ID (0x03)
+#define ZCL_GET_BLOCK_PERIODS_COMMAND_ID (0x03)
+#define ZCL_PUBLISH_TARIFF_INFORMATION_COMMAND_ID (0x04)
+#define ZCL_GET_CONVERSION_FACTOR_COMMAND_ID (0x04)
+#define ZCL_PUBLISH_PRICE_MATRIX_COMMAND_ID (0x05)
+#define ZCL_GET_CALORIFIC_VALUE_COMMAND_ID (0x05)
+#define ZCL_PUBLISH_BLOCK_THRESHOLDS_COMMAND_ID (0x06)
+#define ZCL_GET_TARIFF_INFORMATION_COMMAND_ID (0x06)
+#define ZCL_PUBLISH_CO2_VALUE_COMMAND_ID (0x07)
+#define ZCL_GET_PRICE_MATRIX_COMMAND_ID (0x07)
+#define ZCL_PUBLISH_TIER_LABELS_COMMAND_ID (0x08)
+#define ZCL_GET_BLOCK_THRESHOLDS_COMMAND_ID (0x08)
+#define ZCL_PUBLISH_BILLING_PERIOD_COMMAND_ID (0x09)
+#define ZCL_GET_CO2_VALUE_COMMAND_ID (0x09)
+#define ZCL_PUBLISH_CONSOLIDATED_BILL_COMMAND_ID (0x0A)
+#define ZCL_GET_TIER_LABELS_COMMAND_ID (0x0A)
+#define ZCL_PUBLISH_CPP_EVENT_COMMAND_ID (0x0B)
+#define ZCL_GET_BILLING_PERIOD_COMMAND_ID (0x0B)
+#define ZCL_PUBLISH_CREDIT_PAYMENT_COMMAND_ID (0x0C)
+#define ZCL_GET_CONSOLIDATED_BILL_COMMAND_ID (0x0C)
+#define ZCL_PUBLISH_CURRENCY_CONVERSION_COMMAND_ID (0x0D)
+#define ZCL_CPP_EVENT_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_CANCEL_TARIFF_COMMAND_ID (0x0E)
+#define ZCL_GET_CREDIT_PAYMENT_COMMAND_ID (0x0E)
+#define ZCL_GET_CURRENCY_CONVERSION_COMMAND_COMMAND_ID (0x0F)
+#define ZCL_GET_TARIFF_CANCELLATION_COMMAND_ID (0x10)
+
+// Commands for cluster: Demand Response and Load Control
+#define ZCL_LOAD_CONTROL_EVENT_COMMAND_ID (0x00)
+#define ZCL_REPORT_EVENT_STATUS_COMMAND_ID (0x00)
+#define ZCL_CANCEL_LOAD_CONTROL_EVENT_COMMAND_ID (0x01)
+#define ZCL_GET_SCHEDULED_EVENTS_COMMAND_ID (0x01)
+#define ZCL_CANCEL_ALL_LOAD_CONTROL_EVENTS_COMMAND_ID (0x02)
+
+// Commands for cluster: Simple Metering
+#define ZCL_GET_PROFILE_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_GET_PROFILE_COMMAND_ID (0x00)
+#define ZCL_REQUEST_MIRROR_COMMAND_ID (0x01)
+#define ZCL_REQUEST_MIRROR_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_REMOVE_MIRROR_COMMAND_ID (0x02)
+#define ZCL_MIRROR_REMOVED_COMMAND_ID (0x02)
+#define ZCL_REQUEST_FAST_POLL_MODE_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_REQUEST_FAST_POLL_MODE_COMMAND_ID (0x03)
+#define ZCL_SCHEDULE_SNAPSHOT_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_SCHEDULE_SNAPSHOT_COMMAND_ID (0x04)
+#define ZCL_TAKE_SNAPSHOT_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_TAKE_SNAPSHOT_COMMAND_ID (0x05)
+#define ZCL_PUBLISH_SNAPSHOT_COMMAND_ID (0x06)
+#define ZCL_GET_SNAPSHOT_COMMAND_ID (0x06)
+#define ZCL_GET_SAMPLED_DATA_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_START_SAMPLING_COMMAND_ID (0x07)
+#define ZCL_CONFIGURE_MIRROR_COMMAND_ID (0x08)
+#define ZCL_GET_SAMPLED_DATA_COMMAND_ID (0x08)
+#define ZCL_CONFIGURE_NOTIFICATION_SCHEME_COMMAND_ID (0x09)
+#define ZCL_MIRROR_REPORT_ATTRIBUTE_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_CONFIGURE_NOTIFICATION_FLAGS_COMMAND_ID (0x0A)
+#define ZCL_RESET_LOAD_LIMIT_COUNTER_COMMAND_ID (0x0A)
+#define ZCL_GET_NOTIFIED_MESSAGE_COMMAND_ID (0x0B)
+#define ZCL_CHANGE_SUPPLY_COMMAND_ID (0x0B)
+#define ZCL_SUPPLY_STATUS_RESPONSE_COMMAND_ID (0x0C)
+#define ZCL_LOCAL_CHANGE_SUPPLY_COMMAND_ID (0x0C)
+#define ZCL_START_SAMPLING_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_SET_SUPPLY_STATUS_COMMAND_ID (0x0D)
+#define ZCL_SET_UNCONTROLLED_FLOW_THRESHOLD_COMMAND_ID (0x0E)
+
+// Commands for cluster: Messaging
+#define ZCL_DISPLAY_MESSAGE_COMMAND_ID (0x00)
+#define ZCL_GET_LAST_MESSAGE_COMMAND_ID (0x00)
+#define ZCL_CANCEL_MESSAGE_COMMAND_ID (0x01)
+#define ZCL_MESSAGE_CONFIRMATION_COMMAND_ID (0x01)
+#define ZCL_DISPLAY_PROTECTED_MESSAGE_COMMAND_ID (0x02)
+#define ZCL_GET_MESSAGE_CANCELLATION_COMMAND_ID (0x02)
+#define ZCL_CANCEL_ALL_MESSAGES_COMMAND_ID (0x03)
+
+// Commands for cluster: Tunneling
+#define ZCL_REQUEST_TUNNEL_COMMAND_ID (0x00)
+#define ZCL_REQUEST_TUNNEL_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_CLOSE_TUNNEL_COMMAND_ID (0x01)
+#define ZCL_TRANSFER_DATA_SERVER_TO_CLIENT_COMMAND_ID (0x01)
+#define ZCL_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID (0x02)
+#define ZCL_TRANSFER_DATA_ERROR_SERVER_TO_CLIENT_COMMAND_ID (0x02)
+#define ZCL_TRANSFER_DATA_ERROR_CLIENT_TO_SERVER_COMMAND_ID (0x03)
+#define ZCL_ACK_TRANSFER_DATA_SERVER_TO_CLIENT_COMMAND_ID (0x03)
+#define ZCL_ACK_TRANSFER_DATA_CLIENT_TO_SERVER_COMMAND_ID (0x04)
+#define ZCL_READY_DATA_SERVER_TO_CLIENT_COMMAND_ID (0x04)
+#define ZCL_READY_DATA_CLIENT_TO_SERVER_COMMAND_ID (0x05)
+#define ZCL_SUPPORTED_TUNNEL_PROTOCOLS_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_GET_SUPPORTED_TUNNEL_PROTOCOLS_COMMAND_ID (0x06)
+#define ZCL_TUNNEL_CLOSURE_NOTIFICATION_COMMAND_ID (0x06)
+
+// Commands for cluster: Prepayment
+#define ZCL_SELECT_AVAILABLE_EMERGENCY_CREDIT_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_PREPAY_SNAPSHOT_COMMAND_ID (0x01)
+#define ZCL_CHANGE_DEBT_COMMAND_ID (0x02)
+#define ZCL_CHANGE_PAYMENT_MODE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_EMERGENCY_CREDIT_SETUP_COMMAND_ID (0x03)
+#define ZCL_CONSUMER_TOP_UP_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_CONSUMER_TOP_UP_COMMAND_ID (0x04)
+#define ZCL_CREDIT_ADJUSTMENT_COMMAND_ID (0x05)
+#define ZCL_PUBLISH_TOP_UP_LOG_COMMAND_ID (0x05)
+#define ZCL_CHANGE_PAYMENT_MODE_COMMAND_ID (0x06)
+#define ZCL_PUBLISH_DEBT_LOG_COMMAND_ID (0x06)
+#define ZCL_GET_PREPAY_SNAPSHOT_COMMAND_ID (0x07)
+#define ZCL_GET_TOP_UP_LOG_COMMAND_ID (0x08)
+#define ZCL_SET_LOW_CREDIT_WARNING_LEVEL_COMMAND_ID (0x09)
+#define ZCL_GET_DEBT_REPAYMENT_LOG_COMMAND_ID (0x0A)
+#define ZCL_SET_MAXIMUM_CREDIT_LIMIT_COMMAND_ID (0x0B)
+#define ZCL_SET_OVERALL_DEBT_CAP_COMMAND_ID (0x0C)
+
+// Commands for cluster: Energy Management
+#define ZCL_REPORT_EVENT_STATUS_COMMAND_ID (0x00)
+#define ZCL_MANAGE_EVENT_COMMAND_ID (0x00)
+
+// Commands for cluster: Calendar
+#define ZCL_PUBLISH_CALENDAR_COMMAND_ID (0x00)
+#define ZCL_GET_CALENDAR_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_DAY_PROFILE_COMMAND_ID (0x01)
+#define ZCL_GET_DAY_PROFILES_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_WEEK_PROFILE_COMMAND_ID (0x02)
+#define ZCL_GET_WEEK_PROFILES_COMMAND_ID (0x02)
+#define ZCL_PUBLISH_SEASONS_COMMAND_ID (0x03)
+#define ZCL_GET_SEASONS_COMMAND_ID (0x03)
+#define ZCL_PUBLISH_SPECIAL_DAYS_COMMAND_ID (0x04)
+#define ZCL_GET_SPECIAL_DAYS_COMMAND_ID (0x04)
+#define ZCL_CANCEL_CALENDAR_COMMAND_ID (0x05)
+#define ZCL_GET_CALENDAR_CANCELLATION_COMMAND_ID (0x05)
+
+// Commands for cluster: Device Management
+#define ZCL_GET_CHANGE_OF_TENANCY_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_CHANGE_OF_TENANCY_COMMAND_ID (0x00)
+#define ZCL_GET_CHANGE_OF_SUPPLIER_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_CHANGE_OF_SUPPLIER_COMMAND_ID (0x01)
+#define ZCL_REQUEST_NEW_PASSWORD_COMMAND_ID (0x02)
+#define ZCL_REQUEST_NEW_PASSWORD_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_GET_SITE_ID_COMMAND_ID (0x03)
+#define ZCL_UPDATE_SITE_ID_COMMAND_ID (0x03)
+#define ZCL_REPORT_EVENT_CONFIGURATION_COMMAND_ID (0x04)
+#define ZCL_SET_EVENT_CONFIGURATION_COMMAND_ID (0x04)
+#define ZCL_GET_CIN_COMMAND_ID (0x05)
+#define ZCL_GET_EVENT_CONFIGURATION_COMMAND_ID (0x05)
+#define ZCL_UPDATE_CIN_COMMAND_ID (0x06)
+
+// Commands for cluster: Events
+#define ZCL_GET_EVENT_LOG_COMMAND_ID (0x00)
+#define ZCL_PUBLISH_EVENT_COMMAND_ID (0x00)
+#define ZCL_CLEAR_EVENT_LOG_REQUEST_COMMAND_ID (0x01)
+#define ZCL_PUBLISH_EVENT_LOG_COMMAND_ID (0x01)
+#define ZCL_CLEAR_EVENT_LOG_RESPONSE_COMMAND_ID (0x02)
+
+// Commands for cluster: MDU Pairing
+#define ZCL_PAIRING_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_PAIRING_REQUEST_COMMAND_ID (0x00)
+
+// Commands for cluster: Sub-GHz
+#define ZCL_SUSPEND_ZCL_MESSAGES_COMMAND_ID (0x00)
+#define ZCL_GET_SUSPEND_ZCL_MESSAGES_STATUS_COMMAND_ID (0x00)
+
+// Commands for cluster: Key Establishment
+#define ZCL_INITIATE_KEY_ESTABLISHMENT_REQUEST_COMMAND_ID (0x00)
+#define ZCL_INITIATE_KEY_ESTABLISHMENT_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_EPHEMERAL_DATA_REQUEST_COMMAND_ID (0x01)
+#define ZCL_EPHEMERAL_DATA_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_CONFIRM_KEY_DATA_REQUEST_COMMAND_ID (0x02)
+#define ZCL_CONFIRM_KEY_DATA_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_TERMINATE_KEY_ESTABLISHMENT_COMMAND_ID (0x03)
+
+// Commands for cluster: Information
+#define ZCL_REQUEST_INFORMATION_COMMAND_ID (0x00)
+#define ZCL_REQUEST_INFORMATION_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_PUSH_INFORMATION_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_PUSH_INFORMATION_COMMAND_ID (0x01)
+#define ZCL_SEND_PREFERENCE_COMMAND_ID (0x02)
+#define ZCL_SEND_PREFERENCE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_REQUEST_PREFERENCE_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_SERVER_REQUEST_PREFERENCE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_COMMAND_ID (0x04)
+#define ZCL_REQUEST_PREFERENCE_CONFIRMATION_COMMAND_ID (0x04)
+#define ZCL_DELETE_COMMAND_ID (0x05)
+#define ZCL_UPDATE_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_CONFIGURE_NODE_DESCRIPTION_COMMAND_ID (0x06)
+#define ZCL_DELETE_RESPONSE_COMMAND_ID (0x06)
+#define ZCL_CONFIGURE_DELIVERY_ENABLE_COMMAND_ID (0x07)
+#define ZCL_CONFIGURE_PUSH_INFORMATION_TIMER_COMMAND_ID (0x08)
+#define ZCL_CONFIGURE_SET_ROOT_ID_COMMAND_ID (0x09)
+
+// Commands for cluster: Data Sharing
+#define ZCL_READ_FILE_REQUEST_COMMAND_ID (0x00)
+#define ZCL_WRITE_FILE_REQUEST_COMMAND_ID (0x00)
+#define ZCL_READ_RECORD_REQUEST_COMMAND_ID (0x01)
+#define ZCL_MODIFY_FILE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_WRITE_FILE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_MODIFY_RECORD_REQUEST_COMMAND_ID (0x02)
+#define ZCL_FILE_TRANSMISSION_COMMAND_ID (0x03)
+#define ZCL_RECORD_TRANSMISSION_COMMAND_ID (0x04)
+
+// Commands for cluster: Gaming
+#define ZCL_SEARCH_GAME_COMMAND_ID (0x00)
+#define ZCL_GAME_ANNOUNCEMENT_COMMAND_ID (0x00)
+#define ZCL_JOIN_GAME_COMMAND_ID (0x01)
+#define ZCL_GENERAL_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_START_GAME_COMMAND_ID (0x02)
+#define ZCL_PAUSE_GAME_COMMAND_ID (0x03)
+#define ZCL_RESUME_GAME_COMMAND_ID (0x04)
+#define ZCL_QUIT_GAME_COMMAND_ID (0x05)
+#define ZCL_END_GAME_COMMAND_ID (0x06)
+#define ZCL_START_OVER_COMMAND_ID (0x07)
+#define ZCL_ACTION_CONTROL_COMMAND_ID (0x08)
+#define ZCL_DOWNLOAD_GAME_COMMAND_ID (0x09)
+
+// Commands for cluster: Data Rate Control
+#define ZCL_PATH_CREATION_COMMAND_ID (0x00)
+#define ZCL_DATA_RATE_CONTROL_COMMAND_ID (0x00)
+#define ZCL_DATA_RATE_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_PATH_DELETION_COMMAND_ID (0x02)
+
+// Commands for cluster: Voice over ZigBee
+#define ZCL_ESTABLISHMENT_REQUEST_COMMAND_ID (0x00)
+#define ZCL_ESTABLISHMENT_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_VOICE_TRANSMISSION_COMMAND_ID (0x01)
+#define ZCL_VOICE_TRANSMISSION_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_VOICE_TRANSMISSION_COMPLETION_COMMAND_ID (0x02)
+#define ZCL_CONTROL_COMMAND_ID (0x02)
+#define ZCL_CONTROL_RESPONSE_COMMAND_ID (0x03)
+
+// Commands for cluster: Chatting
+#define ZCL_JOIN_CHAT_REQUEST_COMMAND_ID (0x00)
+#define ZCL_START_CHAT_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_LEAVE_CHAT_REQUEST_COMMAND_ID (0x01)
+#define ZCL_JOIN_CHAT_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_SEARCH_CHAT_REQUEST_COMMAND_ID (0x02)
+#define ZCL_USER_LEFT_COMMAND_ID (0x02)
+#define ZCL_SWITCH_CHAIRMAN_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_USER_JOINED_COMMAND_ID (0x03)
+#define ZCL_START_CHAT_REQUEST_COMMAND_ID (0x04)
+#define ZCL_SEARCH_CHAT_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_CHAT_MESSAGE_COMMAND_ID (0x05)
+#define ZCL_SWITCH_CHAIRMAN_REQUEST_COMMAND_ID (0x05)
+#define ZCL_GET_NODE_INFORMATION_REQUEST_COMMAND_ID (0x06)
+#define ZCL_SWITCH_CHAIRMAN_CONFIRM_COMMAND_ID (0x06)
+#define ZCL_SWITCH_CHAIRMAN_NOTIFICATION_COMMAND_ID (0x07)
+#define ZCL_GET_NODE_INFORMATION_RESPONSE_COMMAND_ID (0x08)
+
+// Commands for cluster: Payment
+#define ZCL_BUY_REQUEST_COMMAND_ID (0x00)
+#define ZCL_BUY_CONFIRM_COMMAND_ID (0x00)
+#define ZCL_ACCEPT_PAYMENT_COMMAND_ID (0x01)
+#define ZCL_RECEIPT_DELIVERY_COMMAND_ID (0x01)
+#define ZCL_PAYMENT_CONFIRM_COMMAND_ID (0x02)
+#define ZCL_TRANSACTION_END_COMMAND_ID (0x02)
+
+// Commands for cluster: Billing
+#define ZCL_SUBSCRIBE_COMMAND_ID (0x00)
+#define ZCL_CHECK_BILL_STATUS_COMMAND_ID (0x00)
+#define ZCL_UNSUBSCRIBE_COMMAND_ID (0x01)
+#define ZCL_SEND_BILL_RECORD_COMMAND_ID (0x01)
+#define ZCL_START_BILLING_SESSION_COMMAND_ID (0x02)
+#define ZCL_STOP_BILLING_SESSION_COMMAND_ID (0x03)
+#define ZCL_BILL_STATUS_NOTIFICATION_COMMAND_ID (0x04)
+#define ZCL_SESSION_KEEP_ALIVE_COMMAND_ID (0x05)
+
+// Commands for cluster: Appliance Events and Alert
+#define ZCL_GET_ALERTS_COMMAND_ID (0x00)
+#define ZCL_GET_ALERTS_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_ALERTS_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_EVENTS_NOTIFICATION_COMMAND_ID (0x02)
+
+// Commands for cluster: Appliance Statistics
+#define ZCL_LOG_NOTIFICATION_COMMAND_ID (0x00)
+#define ZCL_LOG_REQUEST_COMMAND_ID (0x00)
+#define ZCL_LOG_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_LOG_QUEUE_REQUEST_COMMAND_ID (0x01)
+#define ZCL_LOG_QUEUE_RESPONSE_COMMAND_ID (0x02)
+#define ZCL_STATISTICS_AVAILABLE_COMMAND_ID (0x03)
+
+// Commands for cluster: Electrical Measurement
+#define ZCL_GET_PROFILE_INFO_RESPONSE_COMMAND_COMMAND_ID (0x00)
+#define ZCL_GET_PROFILE_INFO_COMMAND_COMMAND_ID (0x00)
+#define ZCL_GET_MEASUREMENT_PROFILE_RESPONSE_COMMAND_COMMAND_ID (0x01)
+#define ZCL_GET_MEASUREMENT_PROFILE_COMMAND_COMMAND_ID (0x01)
+
+// Commands for cluster: ZLL Commissioning
+#define ZCL_SCAN_REQUEST_COMMAND_ID (0x00)
+#define ZCL_SCAN_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_DEVICE_INFORMATION_REQUEST_COMMAND_ID (0x02)
+#define ZCL_DEVICE_INFORMATION_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_IDENTIFY_REQUEST_COMMAND_ID (0x06)
+#define ZCL_RESET_TO_FACTORY_NEW_REQUEST_COMMAND_ID (0x07)
+#define ZCL_NETWORK_START_REQUEST_COMMAND_ID (0x10)
+#define ZCL_NETWORK_START_RESPONSE_COMMAND_ID (0x11)
+#define ZCL_NETWORK_JOIN_ROUTER_REQUEST_COMMAND_ID (0x12)
+#define ZCL_NETWORK_JOIN_ROUTER_RESPONSE_COMMAND_ID (0x13)
+#define ZCL_NETWORK_JOIN_END_DEVICE_REQUEST_COMMAND_ID (0x14)
+#define ZCL_NETWORK_JOIN_END_DEVICE_RESPONSE_COMMAND_ID (0x15)
+#define ZCL_NETWORK_UPDATE_REQUEST_COMMAND_ID (0x16)
+#define ZCL_ENDPOINT_INFORMATION_COMMAND_ID (0x40)
+#define ZCL_GET_GROUP_IDENTIFIERS_REQUEST_COMMAND_ID (0x41)
+#define ZCL_GET_GROUP_IDENTIFIERS_RESPONSE_COMMAND_ID (0x41)
+#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
+#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
+
+// Commands for cluster: Sample Mfg Specific Cluster
+#define ZCL_COMMAND_ONE_COMMAND_ID (0x00)
+
+// Commands for cluster: Sample Mfg Specific Cluster 2
+#define ZCL_COMMAND_TWO_COMMAND_ID (0x00)
+
+// Commands for cluster: Configuration Cluster
+#define ZCL_SET_TOKEN_COMMAND_ID (0x00)
+#define ZCL_RETURN_TOKEN_COMMAND_ID (0x00)
+#define ZCL_LOCK_TOKENS_COMMAND_ID (0x01)
+#define ZCL_READ_TOKENS_COMMAND_ID (0x02)
+#define ZCL_UNLOCK_TOKENS_COMMAND_ID (0x03)
+
+// Commands for cluster: MFGLIB Cluster
+#define ZCL_STREAM_COMMAND_ID (0x00)
+#define ZCL_TONE_COMMAND_ID (0x01)
+#define ZCL_RX_MODE_COMMAND_ID (0x02)
+
+// Commands for cluster: SL Works With All Hubs
+#define ZCL_ENABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID (0x00)
+#define ZCL_APS_LINK_KEY_AUTHORIZATION_QUERY_RESPONSE_COMMAND_ID (0x00)
+#define ZCL_DISABLE_APS_LINK_KEY_AUTHORIZATION_COMMAND_ID (0x01)
+#define ZCL_POWERING_OFF_NOTIFICATION_COMMAND_ID (0x01)
+#define ZCL_APS_LINK_KEY_AUTHORIZATION_QUERY_COMMAND_ID (0x02)
+#define ZCL_POWERING_ON_NOTIFICATION_COMMAND_ID (0x02)
+#define ZCL_REQUEST_NEW_APS_LINK_KEY_COMMAND_ID (0x03)
+#define ZCL_SHORT_ADDRESS_CHANGE_COMMAND_ID (0x03)
+#define ZCL_ENABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID (0x04)
+#define ZCL_APS_ACK_ENABLEMENT_QUERY_RESPONSE_COMMAND_ID (0x04)
+#define ZCL_DISABLE_WWAH_APP_EVENT_RETRY_ALGORITHM_COMMAND_ID (0x05)
+#define ZCL_POWER_DESCRIPTOR_CHANGE_COMMAND_ID (0x05)
+#define ZCL_REQUEST_TIME_COMMAND_ID (0x06)
+#define ZCL_NEW_DEBUG_REPORT_NOTIFICATION_COMMAND_ID (0x06)
+#define ZCL_ENABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID (0x07)
+#define ZCL_DEBUG_REPORT_QUERY_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_DISABLE_WWAH_REJOIN_ALGORITHM_COMMAND_ID (0x08)
+#define ZCL_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_RESPONSE_COMMAND_ID (0x08)
+#define ZCL_SET_IAS_ZONE_ENROLLMENT_METHOD_COMMAND_ID (0x09)
+#define ZCL_SURVEY_BEACONS_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_CLEAR_BINDING_TABLE_COMMAND_ID (0x0A)
+#define ZCL_ENABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID (0x0B)
+#define ZCL_DISABLE_PERIODIC_ROUTER_CHECK_INS_COMMAND_ID (0x0C)
+#define ZCL_SET_MAC_POLL_FAILURE_WAIT_TIME_COMMAND_ID (0x0D)
+#define ZCL_SET_PENDING_NETWORK_UPDATE_COMMAND_ID (0x0E)
+#define ZCL_REQUIRE_APS_ACKS_ON_UNICASTS_COMMAND_ID (0x0F)
+#define ZCL_REMOVE_APS_ACKS_ON_UNICASTS_REQUIREMENT_COMMAND_ID (0x10)
+#define ZCL_APS_ACK_REQUIREMENT_QUERY_COMMAND_ID (0x11)
+#define ZCL_DEBUG_REPORT_QUERY_COMMAND_ID (0x12)
+#define ZCL_SURVEY_BEACONS_COMMAND_ID (0x13)
+#define ZCL_DISABLE_OTA_DOWNGRADES_COMMAND_ID (0x14)
+#define ZCL_DISABLE_MGMT_LEAVE_WITHOUT_REJOIN_COMMAND_ID (0x15)
+#define ZCL_DISABLE_TOUCHLINK_INTERPAN_MESSAGE_SUPPORT_COMMAND_ID (0x16)
+#define ZCL_ENABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID (0x17)
+#define ZCL_DISABLE_WWAH_PARENT_CLASSIFICATION_COMMAND_ID (0x18)
+#define ZCL_ENABLE_TC_SECURITY_ON_NTWK_KEY_ROTATION_COMMAND_ID (0x19)
+#define ZCL_ENABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID (0x1A)
+#define ZCL_DISABLE_WWAH_BAD_PARENT_RECOVERY_COMMAND_ID (0x1B)
+#define ZCL_ENABLE_CONFIGURATION_MODE_COMMAND_ID (0x1C)
+#define ZCL_DISABLE_CONFIGURATION_MODE_COMMAND_ID (0x1D)
+#define ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_COMMAND_ID (0x1E)
+#define ZCL_TRUST_CENTER_FOR_CLUSTER_SERVER_QUERY_COMMAND_ID (0x1F)
+#define ZCL_USE_TRUST_CENTER_FOR_CLUSTER_SERVER_RESPONSE_COMMAND_ID (0x9E)
diff --git a/examples/wifi-echo/server/esp32/main/gen/endpoint_config.h b/examples/all-clusters-app/all-clusters-common/gen/endpoint_config.h
similarity index 96%
rename from examples/wifi-echo/server/esp32/main/gen/endpoint_config.h
rename to examples/all-clusters-app/all-clusters-common/gen/endpoint_config.h
index 53373679816ff0..8cef47f152fda4 100644
--- a/examples/wifi-echo/server/esp32/main/gen/endpoint_config.h
+++ b/examples/all-clusters-app/all-clusters-common/gen/endpoint_config.h
@@ -197,17 +197,14 @@
{ \
0xFFFD, ZCL_INT16U_ATTRIBUTE_TYPE, 2, (0x00), { (uint8_t *) 0x0001 } \
}, /* 83 / Temperature Measurement / cluster revision*/ \
- { \
- 0xFFFD, ZCL_INT16U_ATTRIBUTE_TYPE, 2, (ATTRIBUTE_MASK_CLIENT), { (uint8_t *) 0x0001 } \
- }, /* 84 / IAS Zone / cluster revision*/ \
- { 0x0000, ZCL_ENUM8_ATTRIBUTE_TYPE, 1, (0x00), { (uint8_t *) 0x00 } }, /* 85 / IAS Zone / zone state*/ \
- { 0x0001, ZCL_ENUM16_ATTRIBUTE_TYPE, 2, (0x00), { (uint8_t *) 0x0000 } }, /* 86 / IAS Zone / zone type*/ \
- { 0x0002, ZCL_BITMAP16_ATTRIBUTE_TYPE, 2, (0x00), { (uint8_t *) 0x0000 } }, /* 87 / IAS Zone / zone status*/ \
+ { 0x0000, ZCL_ENUM8_ATTRIBUTE_TYPE, 1, (0x00), { (uint8_t *) 0x00 } }, /* 84 / IAS Zone / zone state*/ \
+ { 0x0001, ZCL_ENUM16_ATTRIBUTE_TYPE, 2, (0x00), { (uint8_t *) 0x0000 } }, /* 85 / IAS Zone / zone type*/ \
+ { 0x0002, ZCL_BITMAP16_ATTRIBUTE_TYPE, 2, (0x00), { (uint8_t *) 0x0000 } }, /* 86 / IAS Zone / zone status*/ \
{ \
0x0010, ZCL_IEEE_ADDRESS_ATTRIBUTE_TYPE, 8, (ATTRIBUTE_MASK_WRITABLE), { NULL } \
- }, /* 88 / IAS Zone / IAS CIE address*/ \
- { 0x0011, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (0x00), { (uint8_t *) 0xFF } }, /* 89 / IAS Zone / Zone ID*/ \
- { 0xFFFD, ZCL_INT16U_ATTRIBUTE_TYPE, 2, (0x00), { (uint8_t *) 0x0001 } }, /* 90 / IAS Zone / cluster revision*/ \
+ }, /* 87 / IAS Zone / IAS CIE address*/ \
+ { 0x0011, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (0x00), { (uint8_t *) 0xFF } }, /* 88 / IAS Zone / Zone ID*/ \
+ { 0xFFFD, ZCL_INT16U_ATTRIBUTE_TYPE, 2, (0x00), { (uint8_t *) 0x0001 } }, /* 89 / IAS Zone / cluster revision*/ \
}
// Cluster function static arrays
@@ -228,8 +225,6 @@
EmberAfGenericClusterFunction) emberAfDoorLockClusterServerAttributeChangedCallback }; \
const EmberAfGenericClusterFunction emberAfFuncArrayColorControlClusterServer[] = { ( \
EmberAfGenericClusterFunction) emberAfColorControlClusterServerInitCallback }; \
- const EmberAfGenericClusterFunction emberAfFuncArrayIasZoneClusterClient[] = { ( \
- EmberAfGenericClusterFunction) emberAfIasZoneClusterClientInitCallback }; \
const EmberAfGenericClusterFunction emberAfFuncArrayIasZoneClusterServer[] = { \
(EmberAfGenericClusterFunction) emberAfIasZoneClusterServerInitCallback, \
(EmberAfGenericClusterFunction) emberAfIasZoneClusterServerMessageSentCallback, \
@@ -316,13 +311,9 @@
{ \
0x0402, (EmberAfAttributeMetadata *) &(generatedAttributes[80]), 4, 8, (CLUSTER_MASK_SERVER), NULL, \
}, \
- { \
- 0x0500, (EmberAfAttributeMetadata *) &(generatedAttributes[84]), 1, \
- 2, (CLUSTER_MASK_CLIENT | CLUSTER_MASK_INIT_FUNCTION), emberAfFuncArrayIasZoneClusterClient, \
- }, \
{ \
0x0500, \
- (EmberAfAttributeMetadata *) &(generatedAttributes[85]), \
+ (EmberAfAttributeMetadata *) &(generatedAttributes[84]), \
6, \
16, \
(CLUSTER_MASK_SERVER | CLUSTER_MASK_INIT_FUNCTION | CLUSTER_MASK_MESSAGE_SENT_FUNCTION | \
@@ -338,7 +329,7 @@
// Endpoint types
#define GENERATED_ENDPOINT_TYPES \
{ \
- { (EmberAfCluster *) &(generatedClusters[0]), 24, 149 }, { (EmberAfCluster *) &(generatedClusters[24]), 1, 3 }, \
+ { (EmberAfCluster *) &(generatedClusters[0]), 23, 147 }, { (EmberAfCluster *) &(generatedClusters[23]), 1, 3 }, \
}
// Cluster manufacturer codes
@@ -365,7 +356,7 @@
#define ATTRIBUTE_SINGLETONS_SIZE (6)
// Total size of attribute storage
-#define ATTRIBUTE_MAX_SIZE 152
+#define ATTRIBUTE_MAX_SIZE 150
// Array of endpoints that are supported
#define FIXED_ENDPOINT_ARRAY \
@@ -425,13 +416,6 @@
emberAfPluginTemperatureMeasurementServerStackStatusCallback(status); \
emberAfPluginIasZoneServerStackStatusCallback(status);
-#define EMBER_AF_GENERATED_PLUGIN_ZDO_MESSAGE_RECEIVED_FUNCTION_DECLARATIONS \
- void emberAfPluginIasZoneClientZdoMessageReceivedCallback(EmberNodeId sender, EmberApsFrame * apsFrame, uint8_t * message, \
- uint16_t length);
-
-#define EMBER_AF_GENERATED_PLUGIN_ZDO_MESSAGE_RECEIVED_FUNCTION_CALLS \
- emberAfPluginIasZoneClientZdoMessageReceivedCallback(sender, apsFrame, message, length);
-
// Generated data for the command discovery
#define GENERATED_COMMANDS \
{ \
@@ -589,10 +573,9 @@
{ 0x0300, 0x47, COMMAND_MASK_OUTGOING_CLIENT | COMMAND_MASK_INCOMING_SERVER }, /* Color Control / StopMoveStep */ \
{ 0x0300, 0x4B, COMMAND_MASK_INCOMING_SERVER }, /* Color Control / MoveColorTemperature */ \
{ 0x0300, 0x4C, COMMAND_MASK_INCOMING_SERVER }, /* Color Control / StepColorTemperature */ \
- { 0x0500, 0x00, COMMAND_MASK_OUTGOING_CLIENT | COMMAND_MASK_INCOMING_SERVER }, /* IAS Zone / ZoneEnrollResponse */ \
- { 0x0500, 0x00, \
- COMMAND_MASK_OUTGOING_SERVER | COMMAND_MASK_INCOMING_CLIENT }, /* IAS Zone / ZoneStatusChangeNotification */ \
- { 0x0500, 0x01, COMMAND_MASK_OUTGOING_SERVER | COMMAND_MASK_INCOMING_CLIENT }, /* IAS Zone / ZoneEnrollRequest */ \
+ { 0x0500, 0x00, COMMAND_MASK_OUTGOING_SERVER }, /* IAS Zone / ZoneStatusChangeNotification */ \
+ { 0x0500, 0x00, COMMAND_MASK_INCOMING_SERVER }, /* IAS Zone / ZoneEnrollResponse */ \
+ { 0x0500, 0x01, COMMAND_MASK_OUTGOING_SERVER }, /* IAS Zone / ZoneEnrollRequest */ \
{ 0x0800, 0x00, COMMAND_MASK_INCOMING_CLIENT }, /* Key Establishment / InitiateKeyEstablishmentResponse */ \
{ 0x0800, 0x00, COMMAND_MASK_INCOMING_SERVER }, /* Key Establishment / InitiateKeyEstablishmentRequest */ \
{ 0x0800, 0x01, COMMAND_MASK_INCOMING_CLIENT }, /* Key Establishment / EphemeralDataResponse */ \
diff --git a/examples/wifi-echo/server/esp32/main/gen/enums.h b/examples/all-clusters-app/all-clusters-common/gen/enums.h
similarity index 79%
rename from examples/wifi-echo/server/esp32/main/gen/enums.h
rename to examples/all-clusters-app/all-clusters-common/gen/enums.h
index c1881b3732b9e3..07c2881e641e97 100644
--- a/examples/wifi-echo/server/esp32/main/gen/enums.h
+++ b/examples/all-clusters-app/all-clusters-common/gen/enums.h
@@ -1,4 +1,5 @@
-/**
+
+/*
*
* Copyright (c) 2020 Project CHIP Authors
*
@@ -15,43 +16,18 @@
* limitations under the License.
*/
-/**
- *
- * Copyright (c) 2020 Silicon Labs
- *
- * 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.
- */
-// This file is generated by Simplicity Studio. Please do not edit manually.
-//
-//
-
-// Enclosing macro to prevent multiple inclusion
-#ifndef SILABS_EMBER_AF_ENUMS
-#define SILABS_EMBER_AF_ENUMS
-
-/**
- * @addtogroup enums Application Framework Enums Reference
- * This header provides Application Framework enum definitions.
- * @{
- */
-/** @name Enums */
-// @{
+// Prevent multiple inclusion
+#pragma once
+// ZCL enums
+
+// Enum for 11073ConnectRequestConnectControl
typedef enum
{
EMBER_ZCL_11073_CONNECT_REQUEST_CONNECT_CONTROL_PREEMPTIBLE = 0x01,
} EmberAf11073ConnectRequestConnectControl;
+// Enum for 11073TunnelConnectionStatus
typedef enum
{
EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_DISCONNECTED = 0x00,
@@ -61,11 +37,13 @@ typedef enum
EMBER_ZCL_11073_TUNNEL_CONNECTION_STATUS_ALREADY_CONNECTED = 0x04,
} EmberAf11073TunnelConnectionStatus;
+// Enum for AlertCountType
typedef enum
{
EMBER_ZCL_ALERT_COUNT_TYPE_UNSTRUCTURED = 0x00,
} EmberAfAlertCountType;
+// Enum for AlertStructureCategory
typedef enum
{
EMBER_ZCL_ALERT_STRUCTURE_CATEGORY_WARNING = 0x0100,
@@ -73,17 +51,20 @@ typedef enum
EMBER_ZCL_ALERT_STRUCTURE_CATEGORY_FAILURE = 0x0300,
} EmberAfAlertStructureCategory;
+// Enum for AlertStructurePresenceRecovery
typedef enum
{
EMBER_ZCL_ALERT_STRUCTURE_PRESENCE_RECOVERY_RECOVERY = 0x0000,
EMBER_ZCL_ALERT_STRUCTURE_PRESENCE_RECOVERY_PRESENCE = 0x1000,
} EmberAfAlertStructurePresenceRecovery;
+// Enum for AlternateCostUnit
typedef enum
{
EMBER_ZCL_ALTERNATE_COST_UNIT_KG_OF_CO2_PER_UNIT_OF_MEASURE = 0x02,
} EmberAfAlternateCostUnit;
+// Enum for AmiCriticalityLevel
typedef enum
{
EMBER_ZCL_AMI_CRITICALITY_LEVEL_RESERVED = 0x00,
@@ -104,6 +85,7 @@ typedef enum
EMBER_ZCL_AMI_CRITICALITY_LEVEL_UTILITY_DEFINED6 = 0x0F,
} EmberAfAmiCriticalityLevel;
+// Enum for AmiEventStatus
typedef enum
{
EMBER_ZCL_AMI_EVENT_STATUS_LOAD_CONTROL_EVENT_COMMAND_RX = 0x01,
@@ -125,6 +107,7 @@ typedef enum
EMBER_ZCL_AMI_EVENT_STATUS_LOAD_CONTROL_EVENT_COMMAND_REJECTED = 0xFE,
} EmberAfAmiEventStatus;
+// Enum for AmiGetProfileStatus
typedef enum
{
EMBER_ZCL_AMI_GET_PROFILE_STATUS_SUCCESS = 0x00,
@@ -135,12 +118,14 @@ typedef enum
EMBER_ZCL_AMI_GET_PROFILE_STATUS_NO_INTERVALS_AVAILABLE_FOR_THE_REQUESTED_TIME = 0x05,
} EmberAfAmiGetProfileStatus;
+// Enum for AmiIntervalChannel
typedef enum
{
EMBER_ZCL_AMI_INTERVAL_CHANNEL_CONSUMPTION_DELIVERED = 0x00,
EMBER_ZCL_AMI_INTERVAL_CHANNEL_CONSUMPTION_RECEIVED = 0x01,
} EmberAfAmiIntervalChannel;
+// Enum for AmiIntervalPeriod
typedef enum
{
EMBER_ZCL_AMI_INTERVAL_PERIOD_DAILY = 0x00,
@@ -153,6 +138,7 @@ typedef enum
EMBER_ZCL_AMI_INTERVAL_PERIOD_MINUTES2P5 = 0x07,
} EmberAfAmiIntervalPeriod;
+// Enum for AmiKeyEstablishmentStatus
typedef enum
{
EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_SUCCESS = 0x00,
@@ -164,17 +150,19 @@ typedef enum
EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_INVALID_KEY_USAGE = 0x06,
} EmberAfAmiKeyEstablishmentStatus;
+// Enum for AmiRegistrationState
typedef enum
{
- EMBER_ZCL_AMI_REGISTRATION_STATE_UNREGISTERED = 0x00,
- EMBER_ZCL_AMI_REGISTRATION_STATE_JOINING_NETWORK = 0x01,
- EMBER_ZCL_AMI_REGISTRATION_STATE_JOINED_NETWORK = 0x02,
- EMBER_ZCL_AMI_REGISTRATION_STATE_SUBMITTED_REGISTRATION_REQUEST = 0x03,
- EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTRATION_REJECTED = 0x04,
- EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTERED = 0x05,
- EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTERATION_NOT_POSSIBLE = 0x06,
+ EMBER_ZCL_AMI_REGISTRATION_STATE_UNREGISTERED = 0x0,
+ EMBER_ZCL_AMI_REGISTRATION_STATE_JOINING_NETWORK = 0x1,
+ EMBER_ZCL_AMI_REGISTRATION_STATE_JOINED_NETWORK = 0x2,
+ EMBER_ZCL_AMI_REGISTRATION_STATE_SUBMITTED_REGISTRATION_REQUEST = 0x3,
+ EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTRATION_REJECTED = 0x4,
+ EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTERED = 0x5,
+ EMBER_ZCL_AMI_REGISTRATION_STATE_REGISTERATION_NOT_POSSIBLE = 0x6,
} EmberAfAmiRegistrationState;
+// Enum for AmiUnitOfMeasure
typedef enum
{
EMBER_ZCL_AMI_UNIT_OF_MEASURE_KILO_WATT_HOURS = 0x00,
@@ -207,12 +195,14 @@ typedef enum
EMBER_ZCL_AMI_UNIT_OF_MEASURE_K_VAR_OR_K_VAR_HOURS_BCD = 0x8D,
} EmberAfAmiUnitOfMeasure;
+// Enum for AnonymousDataState
typedef enum
{
- EMBER_ZCL_ANONYMOUS_DATA_STATE_NO_SOURCE_FOUND = 0x00,
- EMBER_ZCL_ANONYMOUS_DATA_STATE_SOURCE_FOUND = 0x01,
+ EMBER_ZCL_ANONYMOUS_DATA_STATE_NO_SOURCE_FOUND = 0x0,
+ EMBER_ZCL_ANONYMOUS_DATA_STATE_SOURCE_FOUND = 0x1,
} EmberAfAnonymousDataState;
+// Enum for ApplianceStatus
typedef enum
{
EMBER_ZCL_APPLIANCE_STATUS_OFF = 0x01,
@@ -232,12 +222,14 @@ typedef enum
EMBER_ZCL_APPLIANCE_STATUS_SUPERHEATING = 0x0F,
} EmberAfApplianceStatus;
+// Enum for AttributeReportingStatus
typedef enum
{
EMBER_ZCL_ATTRIBUTE_REPORTING_STATUS_PENDING = 0x00,
EMBER_ZCL_ATTRIBUTE_REPORTING_STATUS_ATTRIBUTE_REPORTING_COMPLETE = 0x01,
} EmberAfAttributeReportingStatus;
+// Enum for AttributeWritePermission
typedef enum
{
EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_DENY_WRITE = 0x00,
@@ -249,13 +241,15 @@ typedef enum
EMBER_ZCL_ATTRIBUTE_WRITE_PERMISSION_INVALID_DATA_TYPE = 0x8D,
} EmberAfAttributeWritePermission;
+// Enum for BarrierControlBarrierPosition
typedef enum
{
- EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_CLOSED = 0x00,
- EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_OPEN = 0x64,
+ EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_CLOSED = 0,
+ EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_OPEN = 100,
EMBER_ZCL_BARRIER_CONTROL_BARRIER_POSITION_UNKNOWN = 0xFF,
} EmberAfBarrierControlBarrierPosition;
+// Enum for BarrierControlMovingState
typedef enum
{
EMBER_ZCL_BARRIER_CONTROL_MOVING_STATE_STOPPED = 0x00,
@@ -263,18 +257,20 @@ typedef enum
EMBER_ZCL_BARRIER_CONTROL_MOVING_STATE_OPENING = 0x02,
} EmberAfBarrierControlMovingState;
+// Enum for BatterySize
typedef enum
{
- EMBER_ZCL_BATTERY_SIZE_NO_BATTERY = 0x00,
- EMBER_ZCL_BATTERY_SIZE_BUILT_IN = 0x01,
- EMBER_ZCL_BATTERY_SIZE_OTHER = 0x02,
- EMBER_ZCL_BATTERY_SIZE_AA = 0x03,
- EMBER_ZCL_BATTERY_SIZE_AAA = 0x04,
- EMBER_ZCL_BATTERY_SIZE_C = 0x05,
- EMBER_ZCL_BATTERY_SIZE_D = 0x06,
- EMBER_ZCL_BATTERY_SIZE_UNKNOWN = 0xFF,
+ EMBER_ZCL_BATTERY_SIZE_NO_BATTERY = 0x0,
+ EMBER_ZCL_BATTERY_SIZE_BUILT_IN = 0x1,
+ EMBER_ZCL_BATTERY_SIZE_OTHER = 0x2,
+ EMBER_ZCL_BATTERY_SIZE_AA = 0x3,
+ EMBER_ZCL_BATTERY_SIZE_AAA = 0x4,
+ EMBER_ZCL_BATTERY_SIZE_C = 0x5,
+ EMBER_ZCL_BATTERY_SIZE_D = 0x6,
+ EMBER_ZCL_BATTERY_SIZE_UNKNOWN = 0xff,
} EmberAfBatterySize;
+// Enum for BillingPeriodDurationUnits
typedef enum
{
EMBER_ZCL_BILLING_PERIOD_DURATION_UNITS_MINUTES = 0x000000,
@@ -283,6 +279,7 @@ typedef enum
EMBER_ZCL_BILLING_PERIOD_DURATION_UNITS_MONTHS = 0xC00000,
} EmberAfBillingPeriodDurationUnits;
+// Enum for Block
typedef enum
{
EMBER_ZCL_BLOCK_NO_BLOCKS_IN_USE = 0x00,
@@ -304,6 +301,7 @@ typedef enum
EMBER_ZCL_BLOCK_BLOCK16 = 0x10,
} EmberAfBlock;
+// Enum for BlockPeriodDurationTypeControl
typedef enum
{
EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_CONTROL_START_OF_TIMEBASE = 0x00,
@@ -311,6 +309,7 @@ typedef enum
EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_CONTROL_NOT_SPECIFIED = 0x20,
} EmberAfBlockPeriodDurationTypeControl;
+// Enum for BlockPeriodDurationTypeTimebase
typedef enum
{
EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_MINUTES = 0x00,
@@ -319,13 +318,15 @@ typedef enum
EMBER_ZCL_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_MONTHS = 0x03,
} EmberAfBlockPeriodDurationTypeTimebase;
+// Enum for CO2Unit
typedef enum
{
- EMBER_ZCL_C_O2_UNIT_KILOGRAM_PER_KILOWATT_HOUR = 0x01,
- EMBER_ZCL_C_O2_UNIT_KILOGRAM_PER_GALLON_OF_GASOLINE = 0x02,
- EMBER_ZCL_C_O2_UNIT_KILOGRAM_PER_THERM_OF_NATURAL_GAS = 0x03,
+ EMBER_ZCL_CO2_UNIT_KILOGRAM_PER_KILOWATT_HOUR = 0x01,
+ EMBER_ZCL_CO2_UNIT_KILOGRAM_PER_GALLON_OF_GASOLINE = 0x02,
+ EMBER_ZCL_CO2_UNIT_KILOGRAM_PER_THERM_OF_NATURAL_GAS = 0x03,
} EmberAfCO2Unit;
+// Enum for CalendarTimeReference
typedef enum
{
EMBER_ZCL_CALENDAR_TIME_REFERENCE_UTC_TIME = 0x00,
@@ -333,6 +334,7 @@ typedef enum
EMBER_ZCL_CALENDAR_TIME_REFERENCE_LOCAL_TIME = 0x02,
} EmberAfCalendarTimeReference;
+// Enum for CalendarType
typedef enum
{
EMBER_ZCL_CALENDAR_TYPE_DELIVERED_CALENDAR = 0x00,
@@ -342,23 +344,27 @@ typedef enum
EMBER_ZCL_CALENDAR_TYPE_AUXILLIARY_LOAD_SWITCH_CALENDAR = 0x04,
} EmberAfCalendarType;
+// Enum for CalorificValueUnit
typedef enum
{
EMBER_ZCL_CALORIFIC_VALUE_UNIT_MEGAJOULE_PER_CUBIC_METER = 0x01,
EMBER_ZCL_CALORIFIC_VALUE_UNIT_MEGAJOULE_PER_KILOGRAM = 0x02,
} EmberAfCalorificValueUnit;
+// Enum for CecedSpecificationVersion
typedef enum
{
EMBER_ZCL_CECED_SPECIFICATION_VERSION_COMPLIANT_WITH_V10_NOT_CERTIFIED = 0x10,
EMBER_ZCL_CECED_SPECIFICATION_VERSION_COMPLIANT_WITH_V10_CERTIFIED = 0x1A,
} EmberAfCecedSpecificationVersion;
+// Enum for ColorControlOptions
typedef enum
{
- EMBER_ZCL_COLOR_CONTROL_OPTIONS_EXECUTE_IF_OFF = 0x01,
+ EMBER_ZCL_COLOR_CONTROL_OPTIONS_EXECUTE_IF_OFF = 0x1,
} EmberAfColorControlOptions;
+// Enum for ColorLoopAction
typedef enum
{
EMBER_ZCL_COLOR_LOOP_ACTION_DEACTIVATE = 0x00,
@@ -366,12 +372,14 @@ typedef enum
EMBER_ZCL_COLOR_LOOP_ACTION_ACTIVATE_FROM_ENHANCED_CURRENT_HUE = 0x02,
} EmberAfColorLoopAction;
+// Enum for ColorLoopDirection
typedef enum
{
EMBER_ZCL_COLOR_LOOP_DIRECTION_DECREMENT_HUE = 0x00,
EMBER_ZCL_COLOR_LOOP_DIRECTION_INCREMENT_HUE = 0x01,
} EmberAfColorLoopDirection;
+// Enum for ColorMode
typedef enum
{
EMBER_ZCL_COLOR_MODE_CURRENT_HUE_AND_CURRENT_SATURATION = 0x00,
@@ -379,6 +387,7 @@ typedef enum
EMBER_ZCL_COLOR_MODE_COLOR_TEMPERATURE = 0x02,
} EmberAfColorMode;
+// Enum for CommandIdentification
typedef enum
{
EMBER_ZCL_COMMAND_IDENTIFICATION_START = 0x01,
@@ -394,6 +403,7 @@ typedef enum
EMBER_ZCL_COMMAND_IDENTIFICATION_DISABLE_ENERGY_CONTROL = 0x0B,
} EmberAfCommandIdentification;
+// Enum for CommissioningStartupControl
typedef enum
{
EMBER_ZCL_COMMISSIONING_STARTUP_CONTROL_NO_ACTION = 0x00,
@@ -402,6 +412,7 @@ typedef enum
EMBER_ZCL_COMMISSIONING_STARTUP_CONTROL_START_FROM_SCRATCH = 0x03,
} EmberAfCommissioningStartupControl;
+// Enum for CommodityType
typedef enum
{
EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_METERING = 0x00,
@@ -422,24 +433,28 @@ typedef enum
EMBER_ZCL_COMMODITY_TYPE_ELECTRIC_METERING_ELEMENT3 = 0x0F,
} EmberAfCommodityType;
+// Enum for CppEventResponseCppAuth
typedef enum
{
EMBER_ZCL_CPP_EVENT_RESPONSE_CPP_AUTH_ACCEPTED = 0x01,
EMBER_ZCL_CPP_EVENT_RESPONSE_CPP_AUTH_REJECTED = 0x02,
} EmberAfCppEventResponseCppAuth;
+// Enum for CppPriceTier
typedef enum
{
EMBER_ZCL_CPP_PRICE_TIER_CPP1 = 0x00,
EMBER_ZCL_CPP_PRICE_TIER_CPP2 = 0x01,
} EmberAfCppPriceTier;
+// Enum for CreditAdjustmentType
typedef enum
{
EMBER_ZCL_CREDIT_ADJUSTMENT_TYPE_CREDIT_INCREMENTAL = 0x00,
EMBER_ZCL_CREDIT_ADJUSTMENT_TYPE_CREDIT_ABSOLUTE = 0x01,
} EmberAfCreditAdjustmentType;
+// Enum for CreditPaymentStatus
typedef enum
{
EMBER_ZCL_CREDIT_PAYMENT_STATUS_PENDING = 0x00,
@@ -449,6 +464,7 @@ typedef enum
EMBER_ZCL_CREDIT_PAYMENT_STATUS_3_PAYMENTS_OVERDUE = 0x04,
} EmberAfCreditPaymentStatus;
+// Enum for DataQualityId
typedef enum
{
EMBER_ZCL_DATA_QUALITY_ID_ALL_DATA_CERTIFIED = 0x0000,
@@ -457,6 +473,7 @@ typedef enum
EMBER_ZCL_DATA_QUALITY_ID_NOT_CERTIFIED_DATA = 0x0003,
} EmberAfDataQualityId;
+// Enum for DebtAmountType
typedef enum
{
EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE1_ABSOLUTE = 0x00,
@@ -467,6 +484,7 @@ typedef enum
EMBER_ZCL_DEBT_AMOUNT_TYPE_TYPE3_INCREMENTAL = 0x05,
} EmberAfDebtAmountType;
+// Enum for DebtRecoveryFrequency
typedef enum
{
EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_HOUR = 0x00,
@@ -476,6 +494,7 @@ typedef enum
EMBER_ZCL_DEBT_RECOVERY_FREQUENCY_PER_QUARTER = 0x04,
} EmberAfDebtRecoveryFrequency;
+// Enum for DebtRecoveryMethod
typedef enum
{
EMBER_ZCL_DEBT_RECOVERY_METHOD_TIME_BASED = 0x00,
@@ -483,23 +502,27 @@ typedef enum
EMBER_ZCL_DEBT_RECOVERY_METHOD_CATCH_UP_BASED = 0x02,
} EmberAfDebtRecoveryMethod;
+// Enum for DehumidifcationLockout
typedef enum
{
- EMBER_ZCL_DEHUMIDIFCATION_LOCKOUT_NOT_ALLOWED = 0x00,
- EMBER_ZCL_DEHUMIDIFCATION_LOCKOUT_ALLOWED = 0x01,
+ EMBER_ZCL_DEHUMIDIFCATION_LOCKOUT_NOT_ALLOWED = 0x0,
+ EMBER_ZCL_DEHUMIDIFCATION_LOCKOUT_ALLOWED = 0x1,
} EmberAfDehumidifcationLockout;
+// Enum for DeviceInformationRecordSort
typedef enum
{
EMBER_ZCL_DEVICE_INFORMATION_RECORD_SORT_NOT_SORTED = 0x00,
EMBER_ZCL_DEVICE_INFORMATION_RECORD_SORT_TOP_OF_THE_LIST = 0x01,
} EmberAfDeviceInformationRecordSort;
+// Enum for DeviceStatus2Structure
typedef enum
{
EMBER_ZCL_DEVICE_STATUS2_STRUCTURE_IRIS_SYMPTOM_CODE = 0x20,
} EmberAfDeviceStatus2Structure;
+// Enum for DoorLockEventSource
typedef enum
{
EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_KEYPAD = 0x00,
@@ -509,6 +532,7 @@ typedef enum
EMBER_ZCL_DOOR_LOCK_EVENT_SOURCE_INDETERMINATE = 0xFF,
} EmberAfDoorLockEventSource;
+// Enum for DoorLockEventType
typedef enum
{
EMBER_ZCL_DOOR_LOCK_EVENT_TYPE_OPERATION = 0x00,
@@ -516,6 +540,7 @@ typedef enum
EMBER_ZCL_DOOR_LOCK_EVENT_TYPE_ALARM = 0x02,
} EmberAfDoorLockEventType;
+// Enum for DoorLockOperatingMode
typedef enum
{
EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_NORMAL_MODE = 0x00,
@@ -523,9 +548,10 @@ typedef enum
EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_PRIVACY_MODE = 0x02,
EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_NO_RF_LOCK_OR_UNLOCK = 0x03,
EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_LOCAL_PROGRAMMING_MODE = 0x04,
- EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_PASSAGE_MODE = 0x05,
+ EMBER_ZCL_DOOR_LOCK_OPERATING_MODE_PASSAGE_MODE______ = 0x05,
} EmberAfDoorLockOperatingMode;
+// Enum for DoorLockOperationEventCode
typedef enum
{
EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_UNKNOWN_OR_MFG_SPECIFIC = 0x00,
@@ -545,6 +571,7 @@ typedef enum
EMBER_ZCL_DOOR_LOCK_OPERATION_EVENT_CODE_MANUAL_UNLOCK = 0x0E,
} EmberAfDoorLockOperationEventCode;
+// Enum for DoorLockProgrammingEventCode
typedef enum
{
EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_UNKNOWN_OR_MFG_SPECIFIC = 0x00,
@@ -556,12 +583,14 @@ typedef enum
EMBER_ZCL_DOOR_LOCK_PROGRAMMING_EVENT_CODE_ID_DELETED = 0x06,
} EmberAfDoorLockProgrammingEventCode;
+// Enum for DoorLockSecurityLevel
typedef enum
{
EMBER_ZCL_DOOR_LOCK_SECURITY_LEVEL_NETWORK_SECURITY = 0x00,
EMBER_ZCL_DOOR_LOCK_SECURITY_LEVEL_APS_SECURITY = 0x01,
} EmberAfDoorLockSecurityLevel;
+// Enum for DoorLockSetPinOrIdStatus
typedef enum
{
EMBER_ZCL_DOOR_LOCK_SET_PIN_OR_ID_STATUS_SUCCESS = 0x00,
@@ -570,6 +599,7 @@ typedef enum
EMBER_ZCL_DOOR_LOCK_SET_PIN_OR_ID_STATUS_DUPLICATE_CODE_ERROR = 0x03,
} EmberAfDoorLockSetPinOrIdStatus;
+// Enum for DoorLockSoundVolume
typedef enum
{
EMBER_ZCL_DOOR_LOCK_SOUND_VOLUME_SILENT = 0x00,
@@ -577,6 +607,7 @@ typedef enum
EMBER_ZCL_DOOR_LOCK_SOUND_VOLUME_HIGH = 0x02,
} EmberAfDoorLockSoundVolume;
+// Enum for DoorLockState
typedef enum
{
EMBER_ZCL_DOOR_LOCK_STATE_NOT_FULLY_LOCKED = 0x00,
@@ -584,6 +615,7 @@ typedef enum
EMBER_ZCL_DOOR_LOCK_STATE_UNLOCKED = 0x02,
} EmberAfDoorLockState;
+// Enum for DoorLockType
typedef enum
{
EMBER_ZCL_DOOR_LOCK_TYPE_DEAD_BOLT = 0x00,
@@ -598,6 +630,7 @@ typedef enum
EMBER_ZCL_DOOR_LOCK_TYPE_OTHER = 0x09,
} EmberAfDoorLockType;
+// Enum for DoorLockUserStatus
typedef enum
{
EMBER_ZCL_DOOR_LOCK_USER_STATUS_AVAILABLE = 0x00,
@@ -606,15 +639,18 @@ typedef enum
EMBER_ZCL_DOOR_LOCK_USER_STATUS_NOT_SUPPORTED = 0xFF,
} EmberAfDoorLockUserStatus;
+// Enum for DoorLockUserType
typedef enum
{
- EMBER_ZCL_DOOR_LOCK_USER_TYPE_UNRESTRICTED = 0x00,
- EMBER_ZCL_DOOR_LOCK_USER_TYPE_ONE_TIME_USER = 0x01,
- EMBER_ZCL_DOOR_LOCK_USER_TYPE_USER_WITH_SCHEDULE = 0x02,
- EMBER_ZCL_DOOR_LOCK_USER_TYPE_MASTER_USER = 0x03,
- EMBER_ZCL_DOOR_LOCK_USER_TYPE_NOT_SUPPORTED = 0xFF,
+ EMBER_ZCL_DOOR_LOCK_USER_TYPE_UNRESTRICTED = 0x00,
+ EMBER_ZCL_DOOR_LOCK_USER_TYPE_YEAR_DAY_SCHEDULE_USER = 0x01,
+ EMBER_ZCL_DOOR_LOCK_USER_TYPE_WEEK_DAY_SCHEDULE_USER = 0x02,
+ EMBER_ZCL_DOOR_LOCK_USER_TYPE_MASTER_USER = 0x03,
+ EMBER_ZCL_DOOR_LOCK_USER_TYPE_NON_ACCESS_USER = 0x04,
+ EMBER_ZCL_DOOR_LOCK_USER_TYPE_NOT_SUPPORTED = 0xFF,
} EmberAfDoorLockUserType;
+// Enum for DoorState
typedef enum
{
EMBER_ZCL_DOOR_STATE_OPEN = 0x00,
@@ -624,6 +660,7 @@ typedef enum
EMBER_ZCL_DOOR_STATE_ERROR_UNSPECIFIED = 0x04,
} EmberAfDoorState;
+// Enum for ElectricityAlarmGroups
typedef enum
{
EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_LOW_VOLTAGE_L1 = 0x10,
@@ -648,12 +685,13 @@ typedef enum
EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_UNDER_VOLTAGE = 0x23,
EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_OVER_VOLTAGE = 0x24,
EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_NORMAL_VOLTAGE = 0x25,
- EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_P_F_BELOW_THRESHOLD = 0x26,
- EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_P_F_ABOVE_THRESHOLD = 0x27,
+ EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_PF_BELOW_THRESHOLD = 0x26,
+ EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_PF_ABOVE_THRESHOLD = 0x27,
EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_TERMINAL_COVER_REMOVED = 0x28,
EMBER_ZCL_ELECTRICITY_ALARM_GROUPS_TERMINAL_COVER_CLOSED = 0x29,
} EmberAfElectricityAlarmGroups;
+// Enum for EnhancedColorMode
typedef enum
{
EMBER_ZCL_ENHANCED_COLOR_MODE_CURRENT_HUE_AND_CURRENT_SATURATION = 0x00,
@@ -662,6 +700,7 @@ typedef enum
EMBER_ZCL_ENHANCED_COLOR_MODE_ENHANCED_CURRENT_HUE_AND_CURRENT_SATURATION = 0x03,
} EmberAfEnhancedColorMode;
+// Enum for EventConfigurationControl
typedef enum
{
EMBER_ZCL_EVENT_CONFIGURATION_CONTROL_APPLY_BY_LIST = 0x00,
@@ -670,6 +709,7 @@ typedef enum
EMBER_ZCL_EVENT_CONFIGURATION_CONTROL_APPLY_BY_CONFIGURATION_MATCH = 0x03,
} EmberAfEventConfigurationControl;
+// Enum for EventConfigurationLogAction
typedef enum
{
EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_DO_NOT_LOG = 0x00,
@@ -680,12 +720,14 @@ typedef enum
EMBER_ZCL_EVENT_CONFIGURATION_LOG_ACTION_LOG_AS_NETWORK_EVENT = 0x05,
} EmberAfEventConfigurationLogAction;
+// Enum for EventControl
typedef enum
{
EMBER_ZCL_EVENT_CONTROL_RETRIEVE_MINIMAL_INFORMATION = 0x00,
EMBER_ZCL_EVENT_CONTROL_RETRIEVE_FULL_INFORMATION = 0x10,
} EmberAfEventControl;
+// Enum for EventId
typedef enum
{
EMBER_ZCL_EVENT_ID_METER_COVER_REMOVED = 0x00,
@@ -751,6 +793,8 @@ typedef enum
EMBER_ZCL_EVENT_ID_BATTERY_COVER_REMOVED = 0xA2,
EMBER_ZCL_EVENT_ID_BATTERY_COVER_CLOSED = 0xA3,
EMBER_ZCL_EVENT_ID_EXCESS_FLOW = 0xA4,
+ EMBER_ZCL_EVENT_ID_CREDIT_OK = 0xC0,
+ EMBER_ZCL_EVENT_ID_LOW_CREDIT = 0xC1,
EMBER_ZCL_EVENT_ID_EMERGENCY_CREDIT_IN_USE = 0xC0,
EMBER_ZCL_EVENT_ID_EMERGENCY_CREDIT_EXHAUSTED = 0xC1,
EMBER_ZCL_EVENT_ID_ZERO_CREDIT_EC_NOT_SELECTED = 0xC2,
@@ -769,6 +813,7 @@ typedef enum
EMBER_ZCL_EVENT_ID_MANUFACTURER_SPECIFIC_I = 0xE8,
} EmberAfEventId;
+// Enum for EventIdentification
typedef enum
{
EMBER_ZCL_EVENT_IDENTIFICATION_END_OF_CYCLE = 0x01,
@@ -778,6 +823,7 @@ typedef enum
EMBER_ZCL_EVENT_IDENTIFICATION_WRONG_DATA = 0x07,
} EmberAfEventIdentification;
+// Enum for EventLogId
typedef enum
{
EMBER_ZCL_EVENT_LOG_ID_ALL_LOGS = 0x00,
@@ -790,12 +836,14 @@ typedef enum
EMBER_ZCL_EVENT_LOG_ID_GBCS_SECURITY_EVENT_LOG = 0x07,
} EmberAfEventLogId;
+// Enum for EventLogPayloadControl
typedef enum
{
EMBER_ZCL_EVENT_LOG_PAYLOAD_CONTROL_EVENTS_DO_NOT_CROSS_FRAME_BOUNDARY = 0x00,
EMBER_ZCL_EVENT_LOG_PAYLOAD_CONTROL_EVENT_CROSSES_FRAME_BOUNDARY = 0x01,
} EmberAfEventLogPayloadControl;
+// Enum for ExtendedGenericAlarmGroups
typedef enum
{
EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_MEASUREMENT_SYSTEM_ERROR = 0x70,
@@ -839,6 +887,7 @@ typedef enum
EMBER_ZCL_EXTENDED_GENERIC_ALARM_GROUPS_EXTENDED_METER_ALARM_STATUS_REGISTER_CHANGED = 0x96,
} EmberAfExtendedGenericAlarmGroups;
+// Enum for ExtendedNumberOfPriceTiers
typedef enum
{
EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_REFER_TO_NUMBER_OF_PRICE_TIERS_FIELD = 0x00,
@@ -877,6 +926,7 @@ typedef enum
EMBER_ZCL_EXTENDED_NUMBER_OF_PRICE_TIERS_NUMBER_OF_PRICE_TIERS48 = 0x21,
} EmberAfExtendedNumberOfPriceTiers;
+// Enum for ExtendedPriceTier
typedef enum
{
EMBER_ZCL_EXTENDED_PRICE_TIER_REFER_TO_PRICE_TIER_FIELD = 0x00,
@@ -915,6 +965,7 @@ typedef enum
EMBER_ZCL_EXTENDED_PRICE_TIER_TIER48_PRICE_LABEL = 0x21,
} EmberAfExtendedPriceTier;
+// Enum for ExtendedRegisterTier
typedef enum
{
EMBER_ZCL_EXTENDED_REGISTER_TIER_REFER_TO_REGISTER_TIER_FIELD = 0x00,
@@ -953,32 +1004,36 @@ typedef enum
EMBER_ZCL_EXTENDED_REGISTER_TIER_CURRENT_TIER48_SUMMATION_DELIVERED_ATTRIBUTE = 0x21,
} EmberAfExtendedRegisterTier;
+// Enum for EzModeCommissioningClusterType
typedef enum
{
EMBER_ZCL_EZ_MODE_COMMISSIONING_CLUSTER_TYPE_SERVER = 0x00,
EMBER_ZCL_EZ_MODE_COMMISSIONING_CLUSTER_TYPE_CLIENT = 0x01,
} EmberAfEzModeCommissioningClusterType;
+// Enum for FanMode
typedef enum
{
- EMBER_ZCL_FAN_MODE_OFF = 0x00,
- EMBER_ZCL_FAN_MODE_LOW = 0x01,
- EMBER_ZCL_FAN_MODE_MEDIUM = 0x02,
- EMBER_ZCL_FAN_MODE_HIGH = 0x03,
- EMBER_ZCL_FAN_MODE_ON = 0x04,
- EMBER_ZCL_FAN_MODE_AUTO = 0x05,
- EMBER_ZCL_FAN_MODE_SMART = 0x06,
+ EMBER_ZCL_FAN_MODE_OFF = 0x0,
+ EMBER_ZCL_FAN_MODE_LOW = 0x1,
+ EMBER_ZCL_FAN_MODE_MEDIUM = 0x2,
+ EMBER_ZCL_FAN_MODE_HIGH = 0x3,
+ EMBER_ZCL_FAN_MODE_ON = 0x4,
+ EMBER_ZCL_FAN_MODE_AUTO = 0x5,
+ EMBER_ZCL_FAN_MODE_SMART = 0x6,
} EmberAfFanMode;
+// Enum for FanModeSequence
typedef enum
{
- EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_MED_HIGH = 0x00,
- EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_HIGH = 0x01,
- EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_MED_HIGH_AUTO = 0x02,
- EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_HIGH_AUTO = 0x03,
- EMBER_ZCL_FAN_MODE_SEQUENCE_ON_AUTO = 0x04,
+ EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_MED_HIGH = 0x0,
+ EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_HIGH = 0x1,
+ EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_MED_HIGH_AUTO = 0x2,
+ EMBER_ZCL_FAN_MODE_SEQUENCE_LOW_HIGH_AUTO = 0x3,
+ EMBER_ZCL_FAN_MODE_SEQUENCE_ON_AUTO = 0x4,
} EmberAfFanModeSequence;
+// Enum for GasSpecificAlarmGroups
typedef enum
{
EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_TILT_TAMPER = 0x60,
@@ -988,6 +1043,7 @@ typedef enum
EMBER_ZCL_GAS_SPECIFIC_ALARM_GROUPS_TILT_TAMPER_ENDED = 0x64,
} EmberAfGasSpecificAlarmGroups;
+// Enum for GenerationTier
typedef enum
{
EMBER_ZCL_GENERATION_TIER_CURRENT_TIER1_SUMMATION_RECEIVED_ATTRIBUTE = 0x01,
@@ -1040,6 +1096,7 @@ typedef enum
EMBER_ZCL_GENERATION_TIER_CURRENT_TIER48_SUMMATION_RECEIVED_ATTRIBUTE = 0x30,
} EmberAfGenerationTier;
+// Enum for GenericAlarmGroups
typedef enum
{
EMBER_ZCL_GENERIC_ALARM_GROUPS_CHECK_METER = 0x00,
@@ -1053,22 +1110,25 @@ typedef enum
EMBER_ZCL_GENERIC_ALARM_GROUPS_NO_STRONG_MAGNETIC_FIELD = 0x0B,
EMBER_ZCL_GENERIC_ALARM_GROUPS_BATTERY_FAILURE = 0x0C,
EMBER_ZCL_GENERIC_ALARM_GROUPS_PROGRAM_MEMORY_ERROR = 0x0D,
- EMBER_ZCL_GENERIC_ALARM_GROUPS_R_A_M_ERROR = 0x0E,
- EMBER_ZCL_GENERIC_ALARM_GROUPS_N_V_MEMORY_ERROR = 0x0F,
+ EMBER_ZCL_GENERIC_ALARM_GROUPS_RAM_ERROR = 0x0E,
+ EMBER_ZCL_GENERIC_ALARM_GROUPS_NV_MEMORY_ERROR = 0x0F,
} EmberAfGenericAlarmGroups;
+// Enum for GenericAlarmGroupsElectricity
typedef enum
{
EMBER_ZCL_GENERIC_ALARM_GROUPS_ELECTRICITY_POWER_FAILURE = 0x03,
EMBER_ZCL_GENERIC_ALARM_GROUPS_ELECTRICITY_POWER_QUALITY = 0x04,
} EmberAfGenericAlarmGroupsElectricity;
+// Enum for GenericAlarmGroupsGas
typedef enum
{
EMBER_ZCL_GENERIC_ALARM_GROUPS_GAS_LOW_PRESSURE = 0x04,
EMBER_ZCL_GENERIC_ALARM_GROUPS_GAS_REVERSE_FLOW = 0x07,
} EmberAfGenericAlarmGroupsGas;
+// Enum for GenericAlarmGroupsHeatCooling
typedef enum
{
EMBER_ZCL_GENERIC_ALARM_GROUPS_HEAT_COOLING_TEMPERATURE_SENSOR = 0x03,
@@ -1076,6 +1136,7 @@ typedef enum
EMBER_ZCL_GENERIC_ALARM_GROUPS_HEAT_COOLING_FLOW_SENSOR = 0x07,
} EmberAfGenericAlarmGroupsHeatCooling;
+// Enum for GenericAlarmGroupsWater
typedef enum
{
EMBER_ZCL_GENERIC_ALARM_GROUPS_WATER_WATER_PIPE_EMPTY = 0x03,
@@ -1083,11 +1144,13 @@ typedef enum
EMBER_ZCL_GENERIC_ALARM_GROUPS_WATER_WATER_REVERSE_FLOW = 0x07,
} EmberAfGenericAlarmGroupsWater;
+// Enum for GenericDeviceClass
typedef enum
{
EMBER_ZCL_GENERIC_DEVICE_CLASS_LIGHTING = 0x00,
} EmberAfGenericDeviceClass;
+// Enum for GenericDeviceType
typedef enum
{
EMBER_ZCL_GENERIC_DEVICE_TYPE_INCANDESCENT = 0x00,
@@ -1113,6 +1176,7 @@ typedef enum
EMBER_ZCL_GENERIC_DEVICE_TYPE_UNSPECIFIED = 0xFF,
} EmberAfGenericDeviceType;
+// Enum for GenericFlowPressureAlarmGroups
typedef enum
{
EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_BURST_DETECT = 0x30,
@@ -1125,14 +1189,27 @@ typedef enum
EMBER_ZCL_GENERIC_FLOW_PRESSURE_ALARM_GROUPS_PIPE_EMPTY = 0x37,
} EmberAfGenericFlowPressureAlarmGroups;
-typedef enum
-{
- EMBER_ZCL_GP_DEVICE_ID_GP_SIMPLE_GENERICE_TWO_STATE_SWITCH = 0x00,
- EMBER_ZCL_GP_DEVICE_ID_GP_ON_OFF_SWITCH = 0x08,
- EMBER_ZCL_GP_DEVICE_ID_GP_LEVEL_CONTROL_SWITCH = 0x10,
- EMBER_ZCL_GP_DEVICE_ID_GP_INDOOR_ENVIRONMENT_SNESOR = 0x18,
+// Enum for GpDeviceId
+typedef enum
+{
+ EMBER_ZCL_GP_DEVICE_ID_GP_SIMPLE_GENERIC_ONE_STATE_SWITCH = 0x00,
+ EMBER_ZCL_GP_DEVICE_ID_GP_SIMPLE_GENERIC_TWO_STATE_SWITCH = 0x00,
+ EMBER_ZCL_GP_DEVICE_ID_GP_ON_OFF_SWITCH = 0x08,
+ EMBER_ZCL_GP_DEVICE_ID_GP_LEVEL_CONTROL_SWITCH = 0x10,
+ EMBER_ZCL_GP_DEVICE_ID_GP_SIMPLE_SENSOR = 0x18,
+ EMBER_ZCL_GP_DEVICE_ID_GP_ADVANCED_GENERIC_ONE_STATE_SWITCH = 0x18,
+ EMBER_ZCL_GP_DEVICE_ID_GP_ADVANCED_GENERIC_TWO_STATE_SWITCH = 0x18,
+ EMBER_ZCL_GP_DEVICE_ID_GP_COLOR_DIMMER_SWITCH = 0x18,
+ EMBER_ZCL_GP_DEVICE_ID_GP_LIGHT_SENSOR = 0x18,
+ EMBER_ZCL_GP_DEVICE_ID_GP_OCCPANCY_SENSOR = 0x18,
+ EMBER_ZCL_GP_DEVICE_ID_GP_DOOR_LOCK_CONTROLLER = 0x18,
+ EMBER_ZCL_GP_DEVICE_ID_GP_TEMPERATURE_SENSOR = 0x18,
+ EMBER_ZCL_GP_DEVICE_ID_GP_PRESSURE_SENSOR = 0x18,
+ EMBER_ZCL_GP_DEVICE_ID_GP_FLOW_SENSOR = 0x18,
+ EMBER_ZCL_GP_DEVICE_ID_GP_INDOOR_ENVIRONMENT_SNESOR = 0x18,
} EmberAfGpDeviceId;
+// Enum for GpGpdf
typedef enum
{
EMBER_ZCL_GP_GPDF_IDENTIFY = 0x00,
@@ -1228,6 +1305,7 @@ typedef enum
EMBER_ZCL_GP_GPDF_ZCL_TUNNELING = 0xF6,
} EmberAfGpGpdf;
+// Enum for GpPairingConfigurationAction
typedef enum
{
EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_NO_ACTION = 0x00,
@@ -1238,14 +1316,16 @@ typedef enum
EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_APPLICATION_DESCRIPTION = 0x05,
} EmberAfGpPairingConfigurationAction;
+// Enum for GpPairingConfigurationOptionCommunicationMode
typedef enum
{
EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_UNICAST_FORWARDING = 0x00,
- EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_D_GROUP_I_D = 0x08,
+ EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_D_GROUP_ID = 0x08,
EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_GROUPCAST_FORWARDING_TO_PRE_COMMISSIONED = 0x10,
EMBER_ZCL_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_UNICAST_FORWARDING_LIGHTWEIGHT = 0x18,
} EmberAfGpPairingConfigurationOptionCommunicationMode;
+// Enum for GpPairingOptionsCommunicationMode
typedef enum
{
EMBER_ZCL_GP_PAIRING_OPTIONS_COMMUNICATION_MODE_FULL_UNICAST_FORWARDING = 0x00,
@@ -1254,18 +1334,21 @@ typedef enum
EMBER_ZCL_GP_PAIRING_OPTIONS_COMMUNICATION_MODE_UNICAST_FORWARDING_BY_PROX_SUPPORT = 0x11,
} EmberAfGpPairingOptionsCommunicationMode;
+// Enum for GpProxyTableRequestOptionsRequestType
typedef enum
{
EMBER_ZCL_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_BY_GPD_ID = 0x00,
EMBER_ZCL_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_BY_INDEX = 0x01,
} EmberAfGpProxyTableRequestOptionsRequestType;
+// Enum for GpProxyTableResponseStatus
typedef enum
{
EMBER_ZCL_GP_PROXY_TABLE_RESPONSE_STATUS_SUCCESS = 0x00,
EMBER_ZCL_GP_PROXY_TABLE_RESPONSE_STATUS_NOT_FOUND = 0x8B,
} EmberAfGpProxyTableResponseStatus;
+// Enum for GpSecurityKeyType
typedef enum
{
EMBER_ZCL_GP_SECURITY_KEY_TYPE_NONE = 0x00,
@@ -1276,24 +1359,28 @@ typedef enum
EMBER_ZCL_GP_SECURITY_KEY_TYPE_DERIVED_INDIVIDUAL_GPD_KEY = 0x07,
} EmberAfGpSecurityKeyType;
+// Enum for GpSinkTableRequestOptions
typedef enum
{
EMBER_ZCL_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TABLE_ENTRIES_BY_GPD_ID = 0x00,
EMBER_ZCL_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TABLE_ENTRIES_BY_INDEX = 0x01,
} EmberAfGpSinkTableRequestOptions;
+// Enum for GpSinkTableResponseStatus
typedef enum
{
EMBER_ZCL_GP_SINK_TABLE_RESPONSE_STATUS_SUCCESS = 0x00,
EMBER_ZCL_GP_SINK_TABLE_RESPONSE_STATUS_NOT_FOUND = 0x8B,
} EmberAfGpSinkTableResponseStatus;
+// Enum for GpTranslationTableResponseStatus
typedef enum
{
EMBER_ZCL_GP_TRANSLATION_TABLE_RESPONSE_STATUS_SUCCESS = 0x00,
EMBER_ZCL_GP_TRANSLATION_TABLE_RESPONSE_STATUS_NOT_FOUND = 0x8B,
} EmberAfGpTranslationTableResponseStatus;
+// Enum for GpTranslationTableUpdateAction
typedef enum
{
EMBER_ZCL_GP_TRANSLATION_TABLE_UPDATE_ACTION_ADD_TRANSLATION_TABLE_ENTRY = 0x00,
@@ -1302,79 +1389,89 @@ typedef enum
EMBER_ZCL_GP_TRANSLATION_TABLE_UPDATE_ACTION_RESERVED = 0x18,
} EmberAfGpTranslationTableUpdateAction;
+// Enum for HeatAndCoolingSpecificAlarmGroups
typedef enum
{
EMBER_ZCL_HEAT_AND_COOLING_SPECIFIC_ALARM_GROUPS_INLET_TEMPERATURE_SENSOR_FAULT = 0x50,
EMBER_ZCL_HEAT_AND_COOLING_SPECIFIC_ALARM_GROUPS_OUTLET_TEMPERATURE_SENSOR_FAULT = 0x51,
} EmberAfHeatAndCoolingSpecificAlarmGroups;
+// Enum for HueDirection
typedef enum
{
- EMBER_ZCL_HUE_DIRECTION_SHORTEST_DISTANCE = 0x00,
- EMBER_ZCL_HUE_DIRECTION_LONGEST_DISTANCE = 0x01,
- EMBER_ZCL_HUE_DIRECTION_UP = 0x02,
- EMBER_ZCL_HUE_DIRECTION_DOWN = 0x03,
+ EMBER_ZCL_HUE_DIRECTION_SHORTEST_DISTANCE = 0x0,
+ EMBER_ZCL_HUE_DIRECTION_LONGEST_DISTANCE = 0x1,
+ EMBER_ZCL_HUE_DIRECTION_UP = 0x2,
+ EMBER_ZCL_HUE_DIRECTION_DOWN = 0x3,
} EmberAfHueDirection;
+// Enum for HueMoveMode
typedef enum
{
- EMBER_ZCL_HUE_MOVE_MODE_STOP = 0x00,
- EMBER_ZCL_HUE_MOVE_MODE_UP = 0x01,
- EMBER_ZCL_HUE_MOVE_MODE_DOWN = 0x03,
+ EMBER_ZCL_HUE_MOVE_MODE_STOP = 0x0,
+ EMBER_ZCL_HUE_MOVE_MODE_UP = 0x1,
+ EMBER_ZCL_HUE_MOVE_MODE_DOWN = 0x3,
} EmberAfHueMoveMode;
+// Enum for HueStepMode
typedef enum
{
- EMBER_ZCL_HUE_STEP_MODE_UP = 0x01,
- EMBER_ZCL_HUE_STEP_MODE_DOWN = 0x03,
+ EMBER_ZCL_HUE_STEP_MODE_UP = 0x1,
+ EMBER_ZCL_HUE_STEP_MODE_DOWN = 0x3,
} EmberAfHueStepMode;
+// Enum for IasAceAlarmStatus
typedef enum
{
- EMBER_ZCL_IAS_ACE_ALARM_STATUS_NO_ALARM = 0x00,
- EMBER_ZCL_IAS_ACE_ALARM_STATUS_BURGLAR = 0x01,
- EMBER_ZCL_IAS_ACE_ALARM_STATUS_FIRE = 0x02,
- EMBER_ZCL_IAS_ACE_ALARM_STATUS_EMERGENCY = 0x03,
- EMBER_ZCL_IAS_ACE_ALARM_STATUS_POLICE_PANIC = 0x04,
- EMBER_ZCL_IAS_ACE_ALARM_STATUS_FIRE_PANIC = 0x05,
- EMBER_ZCL_IAS_ACE_ALARM_STATUS_EMERGENCY_PANIC = 0x06,
+ EMBER_ZCL_IAS_ACE_ALARM_STATUS_NO_ALARM = 0x0,
+ EMBER_ZCL_IAS_ACE_ALARM_STATUS_BURGLAR = 0x1,
+ EMBER_ZCL_IAS_ACE_ALARM_STATUS_FIRE = 0x2,
+ EMBER_ZCL_IAS_ACE_ALARM_STATUS_EMERGENCY = 0x3,
+ EMBER_ZCL_IAS_ACE_ALARM_STATUS_POLICE_PANIC = 0x4,
+ EMBER_ZCL_IAS_ACE_ALARM_STATUS_FIRE_PANIC = 0x5,
+ EMBER_ZCL_IAS_ACE_ALARM_STATUS_EMERGENCY_PANIC = 0x6,
} EmberAfIasAceAlarmStatus;
+// Enum for IasAceArmMode
typedef enum
{
- EMBER_ZCL_IAS_ACE_ARM_MODE_DISARM = 0x00,
- EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_DAY_HOME_ZONES_ONLY = 0x01,
- EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_NIGHT_SLEEP_ZONES_ONLY = 0x02,
- EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_ALL_ZONES = 0x03,
+ EMBER_ZCL_IAS_ACE_ARM_MODE_DISARM = 0x0,
+ EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_DAY_HOME_ZONES_ONLY = 0x1,
+ EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_NIGHT_SLEEP_ZONES_ONLY = 0x2,
+ EMBER_ZCL_IAS_ACE_ARM_MODE_ARM_ALL_ZONES = 0x3,
} EmberAfIasAceArmMode;
+// Enum for IasAceArmNotification
typedef enum
{
- EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALL_ZONES_DISARMED = 0x00,
- EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ONLY_DAY_HOME_ZONES_ARMED = 0x01,
- EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ONLY_NIGHT_SLEEP_ZONES_ARMED = 0x02,
- EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALL_ZONES_ARMED = 0x03,
+ EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALL_ZONES_DISARMED = 0x0,
+ EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ONLY_DAY_HOME_ZONES_ARMED = 0x1,
+ EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ONLY_NIGHT_SLEEP_ZONES_ARMED = 0x2,
+ EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALL_ZONES_ARMED = 0x3,
EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_INVALID_ARM_DISARM_CODE = 0x04,
EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_NOT_READY_TO_ARM = 0x05,
EMBER_ZCL_IAS_ACE_ARM_NOTIFICATION_ALREADY_DISARMED = 0x06,
} EmberAfIasAceArmNotification;
+// Enum for IasAceAudibleNotification
typedef enum
{
- EMBER_ZCL_IAS_ACE_AUDIBLE_NOTIFICATION_MUTE = 0x00,
- EMBER_ZCL_IAS_ACE_AUDIBLE_NOTIFICATION_DEFAULT_SOUND = 0x01,
+ EMBER_ZCL_IAS_ACE_AUDIBLE_NOTIFICATION_MUTE = 0x0,
+ EMBER_ZCL_IAS_ACE_AUDIBLE_NOTIFICATION_DEFAULT_SOUND = 0x1,
} EmberAfIasAceAudibleNotification;
+// Enum for IasAceBypassResult
typedef enum
{
- EMBER_ZCL_IAS_ACE_BYPASS_RESULT_ZONE_BYPASSED = 0x00,
- EMBER_ZCL_IAS_ACE_BYPASS_RESULT_ZONE_NOT_BYPASSED = 0x01,
- EMBER_ZCL_IAS_ACE_BYPASS_RESULT_NOT_ALLOWED = 0x02,
- EMBER_ZCL_IAS_ACE_BYPASS_RESULT_INVALID_ZONE_ID = 0x03,
- EMBER_ZCL_IAS_ACE_BYPASS_RESULT_UNKNOWN_ZONE_ID = 0x04,
- EMBER_ZCL_IAS_ACE_BYPASS_RESULT_INVALID_ARM_DISARM_CODE = 0x05,
+ EMBER_ZCL_IAS_ACE_BYPASS_RESULT_ZONE_BYPASSED = 0x0,
+ EMBER_ZCL_IAS_ACE_BYPASS_RESULT_ZONE_NOT_BYPASSED = 0x1,
+ EMBER_ZCL_IAS_ACE_BYPASS_RESULT_NOT_ALLOWED = 0x2,
+ EMBER_ZCL_IAS_ACE_BYPASS_RESULT_INVALID_ZONE_ID = 0x3,
+ EMBER_ZCL_IAS_ACE_BYPASS_RESULT_UNKNOWN_ZONE_ID = 0x4,
+ EMBER_ZCL_IAS_ACE_BYPASS_RESULT_INVALID_ARM_DISARM_CODE = 0x5,
} EmberAfIasAceBypassResult;
+// Enum for IasAcePanelStatus
typedef enum
{
EMBER_ZCL_IAS_ACE_PANEL_STATUS_PANEL_DISARMED = 0x00,
@@ -1390,40 +1487,44 @@ typedef enum
EMBER_ZCL_IAS_ACE_PANEL_STATUS_ARMING_AWAY = 0x0A,
} EmberAfIasAcePanelStatus;
+// Enum for IasEnrollResponseCode
typedef enum
{
- EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_SUCCESS = 0x00,
- EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_NOT_SUPPORTED = 0x01,
- EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_NO_ENROLL_PERMIT = 0x02,
- EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_TOO_MANY_ZONES = 0x03,
+ EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_SUCCESS = 0x0,
+ EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_NOT_SUPPORTED = 0x1,
+ EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_NO_ENROLL_PERMIT = 0x2,
+ EMBER_ZCL_IAS_ENROLL_RESPONSE_CODE_TOO_MANY_ZONES = 0x3,
} EmberAfIasEnrollResponseCode;
+// Enum for IasZoneState
typedef enum
{
- EMBER_ZCL_IAS_ZONE_STATE_NOT_ENROLLED = 0x00,
- EMBER_ZCL_IAS_ZONE_STATE_ENROLLED = 0x01,
+ EMBER_ZCL_IAS_ZONE_STATE_NOT_ENROLLED = 0x0,
+ EMBER_ZCL_IAS_ZONE_STATE_ENROLLED = 0x1,
} EmberAfIasZoneState;
-typedef enum
-{
- EMBER_ZCL_IAS_ZONE_TYPE_STANDARD_CIE = 0x0000,
- EMBER_ZCL_IAS_ZONE_TYPE_MOTION_SENSOR = 0x000D,
- EMBER_ZCL_IAS_ZONE_TYPE_CONTACT_SWITCH = 0x0015,
- EMBER_ZCL_IAS_ZONE_TYPE_FIRE_SENSOR = 0x0028,
- EMBER_ZCL_IAS_ZONE_TYPE_WATER_SENSOR = 0x002A,
- EMBER_ZCL_IAS_ZONE_TYPE_GAS_SENSOR = 0x002B,
- EMBER_ZCL_IAS_ZONE_TYPE_PERSONAL_EMERGENCY_DEVICE = 0x002C,
- EMBER_ZCL_IAS_ZONE_TYPE_VIBRATION_MOVEMENT_SENSOR = 0x002D,
- EMBER_ZCL_IAS_ZONE_TYPE_REMOTE_CONTROL = 0x010F,
- EMBER_ZCL_IAS_ZONE_TYPE_KEY_FOB = 0x0115,
- EMBER_ZCL_IAS_ZONE_TYPE_KEYPAD = 0x021D,
- EMBER_ZCL_IAS_ZONE_TYPE_STANDARD_WARNING_DEVICE = 0x0225,
- EMBER_ZCL_IAS_ZONE_TYPE_GLASS_BREAK_SENSOR = 0x0226,
- EMBER_ZCL_IAS_ZONE_TYPE_CARBON_MONOXIDE_SENSOR = 0x0227,
+// Enum for IasZoneType
+typedef enum
+{
+ EMBER_ZCL_IAS_ZONE_TYPE_STANDARD_CIE = 0x0,
+ EMBER_ZCL_IAS_ZONE_TYPE_MOTION_SENSOR = 0xd,
+ EMBER_ZCL_IAS_ZONE_TYPE_CONTACT_SWITCH = 0x15,
+ EMBER_ZCL_IAS_ZONE_TYPE_FIRE_SENSOR = 0x28,
+ EMBER_ZCL_IAS_ZONE_TYPE_WATER_SENSOR = 0x2a,
+ EMBER_ZCL_IAS_ZONE_TYPE_GAS_SENSOR = 0x2b,
+ EMBER_ZCL_IAS_ZONE_TYPE_PERSONAL_EMERGENCY_DEVICE = 0x2c,
+ EMBER_ZCL_IAS_ZONE_TYPE_VIBRATION_MOVEMENT_SENSOR = 0x2d,
+ EMBER_ZCL_IAS_ZONE_TYPE_REMOTE_CONTROL = 0x10f,
+ EMBER_ZCL_IAS_ZONE_TYPE_KEY_FOB = 0x115,
+ EMBER_ZCL_IAS_ZONE_TYPE_KEYPAD = 0x21d,
+ EMBER_ZCL_IAS_ZONE_TYPE_STANDARD_WARNING_DEVICE = 0x225,
+ EMBER_ZCL_IAS_ZONE_TYPE_GLASS_BREAK_SENSOR = 0x226,
+ EMBER_ZCL_IAS_ZONE_TYPE_CARBON_MONOXIDE_SENSOR = 0x227,
EMBER_ZCL_IAS_ZONE_TYPE_SECURITY_REPEATER = 0x0229,
EMBER_ZCL_IAS_ZONE_TYPE_INVALID_ZONE_TYPE = 0xFFFF,
} EmberAfIasZoneType;
+// Enum for IdentifyEffectIdentifier
typedef enum
{
EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK = 0x00,
@@ -1434,11 +1535,13 @@ typedef enum
EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_STOP_EFFECT = 0xFF,
} EmberAfIdentifyEffectIdentifier;
+// Enum for IdentifyEffectVariant
typedef enum
{
EMBER_ZCL_IDENTIFY_EFFECT_VARIANT_DEFAULT = 0x00,
} EmberAfIdentifyEffectVariant;
+// Enum for KeyIndex
typedef enum
{
EMBER_ZCL_KEY_INDEX_DEVELOPMENT = 0x00,
@@ -1446,37 +1549,42 @@ typedef enum
EMBER_ZCL_KEY_INDEX_CERTIFICATION = 0x0F,
} EmberAfKeyIndex;
+// Enum for KeypadLockout
typedef enum
{
- EMBER_ZCL_KEYPAD_LOCKOUT_NO_LOCKOUT = 0x00,
- EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_ONE_LOCKOUT = 0x01,
- EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_TWO_LOCKOUT = 0x02,
- EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_THREE_LOCKOUT = 0x03,
- EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_FOUR_LOCKOUT = 0x04,
- EMBER_ZCL_KEYPAD_LOCKOUT_LEVELFIVE_LOCKOUT = 0x05,
+ EMBER_ZCL_KEYPAD_LOCKOUT_NO_LOCKOUT = 0x0,
+ EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_ONE_LOCKOUT = 0x1,
+ EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_TWO_LOCKOUT = 0x2,
+ EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_THREE_LOCKOUT = 0x3,
+ EMBER_ZCL_KEYPAD_LOCKOUT_LEVEL_FOUR_LOCKOUT = 0x4,
+ EMBER_ZCL_KEYPAD_LOCKOUT_LEVELFIVE_LOCKOUT = 0x5,
} EmberAfKeypadLockout;
+// Enum for LevelControlOptions
typedef enum
{
- EMBER_ZCL_LEVEL_CONTROL_OPTIONS_EXECUTE_IF_OFF = 0x01,
+ EMBER_ZCL_LEVEL_CONTROL_OPTIONS_EXECUTE_IF_OFF = 0x1,
EMBER_ZCL_LEVEL_CONTROL_OPTIONS_COUPLE_COLOR_TEMP_TO_LEVEL = 0x02,
} EmberAfLevelControlOptions;
+// Enum for LevelStatus
typedef enum
{
- EMBER_ZCL_LEVEL_STATUS_ON_TARGET = 0x00,
- EMBER_ZCL_LEVEL_STATUS_BELOW_TARGET = 0x01,
- EMBER_ZCL_LEVEL_STATUS_ABOVE_TARGET = 0x02,
+ EMBER_ZCL_LEVEL_STATUS_ON_TARGET = 0x0,
+ EMBER_ZCL_LEVEL_STATUS_BELOW_TARGET = 0x1,
+ EMBER_ZCL_LEVEL_STATUS_ABOVE_TARGET = 0x2,
} EmberAfLevelStatus;
+// Enum for LocationMethod
typedef enum
{
- EMBER_ZCL_LOCATION_METHOD_LATERATION = 0x00,
- EMBER_ZCL_LOCATION_METHOD_SIGNPOSTING = 0x01,
- EMBER_ZCL_LOCATION_METHOD_RF_FINGERPRINTING = 0x02,
- EMBER_ZCL_LOCATION_METHOD_OUT_OF_BAND = 0x03,
+ EMBER_ZCL_LOCATION_METHOD_LATERATION = 0x0,
+ EMBER_ZCL_LOCATION_METHOD_SIGNPOSTING = 0x1,
+ EMBER_ZCL_LOCATION_METHOD_RF_FINGERPRINTING = 0x2,
+ EMBER_ZCL_LOCATION_METHOD_OUT_OF_BAND = 0x3,
} EmberAfLocationMethod;
+// Enum for ManufacturerSpecificAlarmGroups
typedef enum
{
EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_A = 0xB0,
@@ -1490,24 +1598,28 @@ typedef enum
EMBER_ZCL_MANUFACTURER_SPECIFIC_ALARM_GROUPS_MANUFACTURER_SPECIFIC_I = 0xB8,
} EmberAfManufacturerSpecificAlarmGroups;
+// Enum for MeasurementLightSensorType
typedef enum
{
- EMBER_ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_PHOTODIODE = 0x00,
- EMBER_ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_CMOS = 0x01,
+ EMBER_ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_PHOTODIODE = 0x0,
+ EMBER_ZCL_MEASUREMENT_LIGHT_SENSOR_TYPE_CMOS = 0x1,
} EmberAfMeasurementLightSensorType;
+// Enum for MessagingControlConfirmation
typedef enum
{
EMBER_ZCL_MESSAGING_CONTROL_CONFIRMATION_NOT_REQUIRED = 0x00,
EMBER_ZCL_MESSAGING_CONTROL_CONFIRMATION_REQUIRED = 0x80,
} EmberAfMessagingControlConfirmation;
+// Enum for MessagingControlEnhancedConfirmation
typedef enum
{
EMBER_ZCL_MESSAGING_CONTROL_ENHANCED_CONFIRMATION_NOT_REQUIRED = 0x00,
EMBER_ZCL_MESSAGING_CONTROL_ENHANCED_CONFIRMATION_REQUIRED = 0x20,
} EmberAfMessagingControlEnhancedConfirmation;
+// Enum for MessagingControlImportance
typedef enum
{
EMBER_ZCL_MESSAGING_CONTROL_IMPORTANCE_LOW = 0x00,
@@ -1516,6 +1628,7 @@ typedef enum
EMBER_ZCL_MESSAGING_CONTROL_IMPORTANCE_CRITICAL = 0x0C,
} EmberAfMessagingControlImportance;
+// Enum for MessagingControlTransmission
typedef enum
{
EMBER_ZCL_MESSAGING_CONTROL_TRANSMISSION_NORMAL = 0x00,
@@ -1524,6 +1637,7 @@ typedef enum
EMBER_ZCL_MESSAGING_CONTROL_TRANSMISSION_RESERVED = 0x03,
} EmberAfMessagingControlTransmission;
+// Enum for MeterDeviceType
typedef enum
{
EMBER_ZCL_METER_DEVICE_TYPE_ELECTRIC_METER = 0x00,
@@ -1542,6 +1656,7 @@ typedef enum
EMBER_ZCL_METER_DEVICE_TYPE_UNDEFINED_MIRROR_METER = 0xFE,
} EmberAfMeterDeviceType;
+// Enum for MeterTypeId
typedef enum
{
EMBER_ZCL_METER_TYPE_ID_UTILITY_PRIMARY_METER = 0x0000,
@@ -1553,6 +1668,7 @@ typedef enum
EMBER_ZCL_METER_TYPE_ID_GENERIC_METER = 0x0110,
} EmberAfMeterTypeId;
+// Enum for MeteringAlarmCode
typedef enum
{
EMBER_ZCL_METERING_ALARM_CODE_CHECK_METER = 0x00,
@@ -1569,8 +1685,8 @@ typedef enum
EMBER_ZCL_METERING_ALARM_CODE_NO_STRONG_MAGNETIC_FIELD = 0x0B,
EMBER_ZCL_METERING_ALARM_CODE_BATTERY_FAILURE = 0x0C,
EMBER_ZCL_METERING_ALARM_CODE_PROGRAM_MEMORY_ERROR = 0x0D,
- EMBER_ZCL_METERING_ALARM_CODE_R_A_M_ERROR = 0x0E,
- EMBER_ZCL_METERING_ALARM_CODE_N_V_MEMORY_ERROR = 0x0F,
+ EMBER_ZCL_METERING_ALARM_CODE_RAM_ERROR = 0x0E,
+ EMBER_ZCL_METERING_ALARM_CODE_NV_MEMORY_ERROR = 0x0F,
EMBER_ZCL_METERING_ALARM_CODE_LOW_VOLTAGE_L1 = 0x10,
EMBER_ZCL_METERING_ALARM_CODE_HIGH_VOLTAGE_L1 = 0x11,
EMBER_ZCL_METERING_ALARM_CODE_LOW_VOLTAGE_L2 = 0x12,
@@ -1593,8 +1709,8 @@ typedef enum
EMBER_ZCL_METERING_ALARM_CODE_UNDER_VOLTAGE = 0x23,
EMBER_ZCL_METERING_ALARM_CODE_OVER_VOLTAGE = 0x24,
EMBER_ZCL_METERING_ALARM_CODE_NORMAL_VOLTAGE = 0x25,
- EMBER_ZCL_METERING_ALARM_CODE_P_F_BELOW_THRESHOLD = 0x26,
- EMBER_ZCL_METERING_ALARM_CODE_P_F_ABOVE_THRESHOLD = 0x27,
+ EMBER_ZCL_METERING_ALARM_CODE_PF_BELOW_THRESHOLD = 0x26,
+ EMBER_ZCL_METERING_ALARM_CODE_PF_ABOVE_THRESHOLD = 0x27,
EMBER_ZCL_METERING_ALARM_CODE_TERMINAL_COVER_REMOVED = 0x28,
EMBER_ZCL_METERING_ALARM_CODE_TERMINAL_COVER_CLOSED = 0x29,
EMBER_ZCL_METERING_ALARM_CODE_BURST_DETECT = 0x30,
@@ -1662,6 +1778,7 @@ typedef enum
EMBER_ZCL_METERING_ALARM_CODE_MANUFACTURER_SPECIFIC_I = 0xB8,
} EmberAfMeteringAlarmCode;
+// Enum for MeteringBlockEnumerations
typedef enum
{
EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_NO_BLOCKS_IN_USE = 0x00,
@@ -1683,6 +1800,7 @@ typedef enum
EMBER_ZCL_METERING_BLOCK_ENUMERATIONS_BLOCK16 = 0x10,
} EmberAfMeteringBlockEnumerations;
+// Enum for MeteringConsumptionStatus
typedef enum
{
EMBER_ZCL_METERING_CONSUMPTION_STATUS_LOW_ENERGY_USAGE = 0x00,
@@ -1690,6 +1808,7 @@ typedef enum
EMBER_ZCL_METERING_CONSUMPTION_STATUS_HIGH_ENERGY_USAGE = 0x02,
} EmberAfMeteringConsumptionStatus;
+// Enum for MeteringDeviceType
typedef enum
{
EMBER_ZCL_METERING_DEVICE_TYPE_ELECTRIC_METERING = 0x00,
@@ -1727,6 +1846,7 @@ typedef enum
EMBER_ZCL_METERING_DEVICE_TYPE_UNDEFINED_MIRROR_METER = 0xFE,
} EmberAfMeteringDeviceType;
+// Enum for MeteringSupplyStatus
typedef enum
{
EMBER_ZCL_METERING_SUPPLY_STATUS_SUPPLY_OFF = 0x00,
@@ -1734,6 +1854,7 @@ typedef enum
EMBER_ZCL_METERING_SUPPLY_STATUS_SUPPLY_ON = 0x02,
} EmberAfMeteringSupplyStatus;
+// Enum for MeteringTemperatureUnitOfMeasure
typedef enum
{
EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_KELVIN = 0x00,
@@ -1744,12 +1865,14 @@ typedef enum
EMBER_ZCL_METERING_TEMPERATURE_UNIT_OF_MEASURE_FAHRENHEIT_BCD = 0x82,
} EmberAfMeteringTemperatureUnitOfMeasure;
+// Enum for MoveMode
typedef enum
{
- EMBER_ZCL_MOVE_MODE_UP = 0x00,
- EMBER_ZCL_MOVE_MODE_DOWN = 0x01,
+ EMBER_ZCL_MOVE_MODE_UP = 0x0,
+ EMBER_ZCL_MOVE_MODE_DOWN = 0x1,
} EmberAfMoveMode;
+// Enum for NotificationScheme
typedef enum
{
EMBER_ZCL_NOTIFICATION_SCHEME_NO_NOTIFICATION_SCHEME_DEFINED = 0x00,
@@ -1757,14 +1880,16 @@ typedef enum
EMBER_ZCL_NOTIFICATION_SCHEME_PREDEFINED_NOTIFICATION_SCHEME_B = 0x02,
} EmberAfNotificationScheme;
+// Enum for OccupancySensorType
typedef enum
{
- EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PIR = 0x00,
- EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_ULTRASONIC = 0x01,
- EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PIR_AND_ULTRASONIC = 0x02,
- EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PHYSICAL_CONTACT = 0x03,
+ EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PIR = 0x0,
+ EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_ULTRASONIC = 0x1,
+ EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PIR_AND_ULTRASONIC = 0x2,
+ EMBER_ZCL_OCCUPANCY_SENSOR_TYPE_PHYSICAL_CONTACT = 0x3,
} EmberAfOccupancySensorType;
+// Enum for OnOffDelayedAllOffEffectVariant
typedef enum
{
EMBER_ZCL_ON_OFF_DELAYED_ALL_OFF_EFFECT_VARIANT_FADE_TO_OFF_IN_0P8_SECONDS = 0x00,
@@ -1772,23 +1897,27 @@ typedef enum
EMBER_ZCL_ON_OFF_DELAYED_ALL_OFF_EFFECT_VARIANT_50_PERCENT_DIM_DOWN_IN_0P8_SECONDS_THEN_FADE_TO_OFF_IN_12_SECONDS = 0x02,
} EmberAfOnOffDelayedAllOffEffectVariant;
+// Enum for OnOffDyingLightEffectVariant
typedef enum
{
EMBER_ZCL_ON_OFF_DYING_LIGHT_EFFECT_VARIANT_20_PERCENTER_DIM_UP_IN_0P5_SECONDS_THEN_FADE_TO_OFF_IN_1_SECOND = 0x00,
} EmberAfOnOffDyingLightEffectVariant;
+// Enum for OnOffEffectIdentifier
typedef enum
{
EMBER_ZCL_ON_OFF_EFFECT_IDENTIFIER_DELAYED_ALL_OFF = 0x00,
EMBER_ZCL_ON_OFF_EFFECT_IDENTIFIER_DYING_LIGHT = 0x01,
} EmberAfOnOffEffectIdentifier;
+// Enum for OperatingMode
typedef enum
{
- EMBER_ZCL_OPERATING_MODE_NORMAL = 0x00,
- EMBER_ZCL_OPERATING_MODE_CONFIGURE = 0x01,
+ EMBER_ZCL_OPERATING_MODE_NORMAL = 0x0,
+ EMBER_ZCL_OPERATING_MODE_CONFIGURE = 0x1,
} EmberAfOperatingMode;
+// Enum for OriginatingDevice
typedef enum
{
EMBER_ZCL_ORIGINATING_DEVICE_ENERGY_SERVICE_INTERFACE = 0x00,
@@ -1796,6 +1925,7 @@ typedef enum
EMBER_ZCL_ORIGINATING_DEVICE_IN_HOME_DISPLAY_DEVICE = 0x02,
} EmberAfOriginatingDevice;
+// Enum for PasswordType
typedef enum
{
EMBER_ZCL_PASSWORD_TYPE_PASSWORD1_SERVICE_MENU_ACCESS = 0x01,
@@ -1804,6 +1934,7 @@ typedef enum
EMBER_ZCL_PASSWORD_TYPE_PASSWORD4 = 0x04,
} EmberAfPasswordType;
+// Enum for PaymentDiscountDuration
typedef enum
{
EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_CURRENT_BILLING_PERIOD = 0x00,
@@ -1813,14 +1944,16 @@ typedef enum
EMBER_ZCL_PAYMENT_DISCOUNT_DURATION_ONE_YEAR = 0x04,
} EmberAfPaymentDiscountDuration;
+// Enum for PhysicalEnvironment
typedef enum
{
- EMBER_ZCL_PHYSICAL_ENVIRONMENT_UNSPECIFIED = 0x00,
- EMBER_ZCL_PHYSICAL_ENVIRONMENT_FIRST_PROFILE_SPECIFIED_VALUE = 0x01,
- EMBER_ZCL_PHYSICAL_ENVIRONMENT_LAST_PROFILE_SPECIFIED_VALUE = 0x7F,
- EMBER_ZCL_PHYSICAL_ENVIRONMENT_UNKNOWN = 0xFF,
+ EMBER_ZCL_PHYSICAL_ENVIRONMENT_UNSPECIFIED = 0x0,
+ EMBER_ZCL_PHYSICAL_ENVIRONMENT_FIRST_PROFILE_SPECIFIED_VALUE = 0x1,
+ EMBER_ZCL_PHYSICAL_ENVIRONMENT_LAST_PROFILE_SPECIFIED_VALUE = 0x7f,
+ EMBER_ZCL_PHYSICAL_ENVIRONMENT_UNKNOWN = 0xff,
} EmberAfPhysicalEnvironment;
+// Enum for PowerProfileState
typedef enum
{
EMBER_ZCL_POWER_PROFILE_STATE_POWER_PROFILE_WAITING_TO_START = 0x01,
@@ -1834,18 +1967,20 @@ typedef enum
EMBER_ZCL_POWER_PROFILE_STATE_POWER_PROFILE_SCHEDULED = 0x09,
} EmberAfPowerProfileState;
+// Enum for PowerSource
typedef enum
{
- EMBER_ZCL_POWER_SOURCE_UNKNOWN = 0x00,
- EMBER_ZCL_POWER_SOURCE_SINGLE_PHASE_MAINS = 0x01,
- EMBER_ZCL_POWER_SOURCE_THREE_PHASE_MAINS = 0x02,
- EMBER_ZCL_POWER_SOURCE_BATTERY = 0x03,
- EMBER_ZCL_POWER_SOURCE_DC_SOURCE = 0x04,
- EMBER_ZCL_POWER_SOURCE_EMERGENCY_MAINS_CONSTANT_POWER = 0x05,
- EMBER_ZCL_POWER_SOURCE_EMERGENCY_MAINS_TRANSFER_SWITCH = 0x06,
+ EMBER_ZCL_POWER_SOURCE_UNKNOWN = 0x0,
+ EMBER_ZCL_POWER_SOURCE_SINGLE_PHASE_MAINS = 0x1,
+ EMBER_ZCL_POWER_SOURCE_THREE_PHASE_MAINS = 0x2,
+ EMBER_ZCL_POWER_SOURCE_BATTERY = 0x3,
+ EMBER_ZCL_POWER_SOURCE_DC_SOURCE = 0x4,
+ EMBER_ZCL_POWER_SOURCE_EMERGENCY_MAINS_CONSTANT_POWER = 0x5,
+ EMBER_ZCL_POWER_SOURCE_EMERGENCY_MAINS_TRANSFER_SWITCH = 0x6,
EMBER_ZCL_POWER_SOURCE_BATTERY_BACKUP = 0x80,
} EmberAfPowerSource;
+// Enum for PrePayGenericAlarmGroup
typedef enum
{
EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_LOW_CREDIT = 0x00,
@@ -1857,6 +1992,7 @@ typedef enum
EMBER_ZCL_PRE_PAY_GENERIC_ALARM_GROUP_EVENT_LOG_CLEARED = 0x06,
} EmberAfPrePayGenericAlarmGroup;
+// Enum for PrepayEventAlarmGroup
typedef enum
{
EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_PHYSICAL_ATTACK_ON_THE_PREPAY_METER = 0x20,
@@ -1881,12 +2017,14 @@ typedef enum
EMBER_ZCL_PREPAY_EVENT_ALARM_GROUP_MODE_DEFAULT = 0x43,
} EmberAfPrepayEventAlarmGroup;
+// Enum for PrepaySnapshotPayloadType
typedef enum
{
EMBER_ZCL_PREPAY_SNAPSHOT_PAYLOAD_TYPE_DEBT_CREDIT_STATUS = 0x00,
EMBER_ZCL_PREPAY_SNAPSHOT_PAYLOAD_TYPE_NOT_USED = 0xFF,
} EmberAfPrepaySnapshotPayloadType;
+// Enum for PrepaySwitchAlarmGroup
typedef enum
{
EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_SUPPLY_ON = 0x10,
@@ -1898,32 +2036,36 @@ typedef enum
EMBER_ZCL_PREPAY_SWITCH_ALARM_GROUP_REMOTE_DISCONNECTED = 0x16,
} EmberAfPrepaySwitchAlarmGroup;
+// Enum for PriceControlAcknowledgement
typedef enum
{
EMBER_ZCL_PRICE_CONTROL_ACKNOWLEDGEMENT_NOT_REQUIRED = 0x00,
EMBER_ZCL_PRICE_CONTROL_ACKNOWLEDGEMENT_REQUIRED = 0x01,
} EmberAfPriceControlAcknowledgement;
-typedef enum
-{
- EMBER_ZCL_PRICE_TIER_NO_TIER_RELATED = 0x00,
- EMBER_ZCL_PRICE_TIER_TIER1_PRICE_LABEL = 0x01,
- EMBER_ZCL_PRICE_TIER_TIER2_PRICE_LABEL = 0x02,
- EMBER_ZCL_PRICE_TIER_TIER3_PRICE_LABEL = 0x03,
- EMBER_ZCL_PRICE_TIER_TIER4_PRICE_LABEL = 0x04,
- EMBER_ZCL_PRICE_TIER_TIER5_PRICE_LABEL = 0x05,
- EMBER_ZCL_PRICE_TIER_TIER6_PRICE_LABEL = 0x06,
- EMBER_ZCL_PRICE_TIER_TIER7_PRICE_LABEL = 0x07,
- EMBER_ZCL_PRICE_TIER_TIER8_PRICE_LABEL = 0x08,
- EMBER_ZCL_PRICE_TIER_TIER9_PRICE_LABEL = 0x09,
- EMBER_ZCL_PRICE_TIER_TIER10_PRICE_LABEL = 0x0A,
- EMBER_ZCL_PRICE_TIER_TIER11_PRICE_LABEL = 0x0B,
- EMBER_ZCL_PRICE_TIER_TIER12_PRICE_LABEL = 0x0C,
- EMBER_ZCL_PRICE_TIER_TIER13_PRICE_LABEL = 0x0D,
- EMBER_ZCL_PRICE_TIER_TIER14_PRICE_LABEL = 0x0E,
- EMBER_ZCL_PRICE_TIER_TIER15_PRICE_LABEL = 0x0F,
+// Enum for PriceTier
+typedef enum
+{
+ EMBER_ZCL_PRICE_TIER_NO_TIER_RELATED = 0x00,
+ EMBER_ZCL_PRICE_TIER_TIER1_PRICE_LABEL = 0x01,
+ EMBER_ZCL_PRICE_TIER_TIER2_PRICE_LABEL = 0x02,
+ EMBER_ZCL_PRICE_TIER_TIER3_PRICE_LABEL = 0x03,
+ EMBER_ZCL_PRICE_TIER_TIER4_PRICE_LABEL = 0x04,
+ EMBER_ZCL_PRICE_TIER_TIER5_PRICE_LABEL = 0x05,
+ EMBER_ZCL_PRICE_TIER_TIER6_PRICE_LABEL = 0x06,
+ EMBER_ZCL_PRICE_TIER_TIER7_PRICE_LABEL = 0x07,
+ EMBER_ZCL_PRICE_TIER_TIER8_PRICE_LABEL = 0x08,
+ EMBER_ZCL_PRICE_TIER_TIER9_PRICE_LABEL = 0x09,
+ EMBER_ZCL_PRICE_TIER_TIER10_PRICE_LABEL = 0x0A,
+ EMBER_ZCL_PRICE_TIER_TIER11_PRICE_LABEL = 0x0B,
+ EMBER_ZCL_PRICE_TIER_TIER12_PRICE_LABEL = 0x0C,
+ EMBER_ZCL_PRICE_TIER_TIER13_PRICE_LABEL = 0x0D,
+ EMBER_ZCL_PRICE_TIER_TIER14_PRICE_LABEL = 0x0E,
+ EMBER_ZCL_PRICE_TIER_REFER_TO_EXTENDED_PRICE_TIER_FIELD = 0x0F,
+ EMBER_ZCL_PRICE_TIER_TIER15_PRICE_LABEL = 0x0F,
} EmberAfPriceTier;
+// Enum for ProductCode
typedef enum
{
EMBER_ZCL_PRODUCT_CODE_MANUFACTURER_DEFINED = 0x00,
@@ -1933,6 +2075,7 @@ typedef enum
EMBER_ZCL_PRODUCT_CODE_STOCK_KEEPING_UNIT = 0x04,
} EmberAfProductCode;
+// Enum for ProductTypeId
typedef enum
{
EMBER_ZCL_PRODUCT_TYPE_ID_WHITE_GOODS = 0x0000,
@@ -1947,6 +2090,7 @@ typedef enum
EMBER_ZCL_PRODUCT_TYPE_ID_REFRIGERATOR_FREEZER = 0x6601,
} EmberAfProductTypeId;
+// Enum for ProposedSupplyStatus
typedef enum
{
EMBER_ZCL_PROPOSED_SUPPLY_STATUS_RESERVED = 0x00,
@@ -1954,6 +2098,7 @@ typedef enum
EMBER_ZCL_PROPOSED_SUPPLY_STATUS_SUPPLY_ON = 0x02,
} EmberAfProposedSupplyStatus;
+// Enum for PublishCppEventCppAuth
typedef enum
{
EMBER_ZCL_PUBLISH_CPP_EVENT_CPP_AUTH_PENDING = 0x00,
@@ -1962,24 +2107,27 @@ typedef enum
EMBER_ZCL_PUBLISH_CPP_EVENT_CPP_AUTH_FORCED = 0x03,
} EmberAfPublishCppEventCppAuth;
+// Enum for PumpControlMode
typedef enum
{
- EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_SPEED = 0x00,
- EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_PRESSURE = 0x01,
- EMBER_ZCL_PUMP_CONTROL_MODE_PROPORTIONAL_PRESSURE = 0x02,
- EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_FLOW = 0x03,
- EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_TEMPERATURE = 0x05,
- EMBER_ZCL_PUMP_CONTROL_MODE_AUTOMATIC = 0x07,
+ EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_SPEED = 0x0,
+ EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_PRESSURE = 0x1,
+ EMBER_ZCL_PUMP_CONTROL_MODE_PROPORTIONAL_PRESSURE = 0x2,
+ EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_FLOW = 0x3,
+ EMBER_ZCL_PUMP_CONTROL_MODE_CONSTANT_TEMPERATURE = 0x5,
+ EMBER_ZCL_PUMP_CONTROL_MODE_AUTOMATIC = 0x7,
} EmberAfPumpControlMode;
+// Enum for PumpOperationMode
typedef enum
{
- EMBER_ZCL_PUMP_OPERATION_MODE_NORMAL = 0x00,
- EMBER_ZCL_PUMP_OPERATION_MODE_MINIMUM = 0x01,
- EMBER_ZCL_PUMP_OPERATION_MODE_MAXIMUM = 0x02,
- EMBER_ZCL_PUMP_OPERATION_MODE_LOCAL = 0x03,
+ EMBER_ZCL_PUMP_OPERATION_MODE_NORMAL = 0x0,
+ EMBER_ZCL_PUMP_OPERATION_MODE_MINIMUM = 0x1,
+ EMBER_ZCL_PUMP_OPERATION_MODE_MAXIMUM = 0x2,
+ EMBER_ZCL_PUMP_OPERATION_MODE_LOCAL = 0x3,
} EmberAfPumpOperationMode;
+// Enum for PushHistoricalMeteringData
typedef enum
{
EMBER_ZCL_PUSH_HISTORICAL_METERING_DATA_DAY = 0x0040,
@@ -1988,6 +2136,7 @@ typedef enum
EMBER_ZCL_PUSH_HISTORICAL_METERING_DATA_YEAR = 0x01C0,
} EmberAfPushHistoricalMeteringData;
+// Enum for PushHistoricalPaymentData
typedef enum
{
EMBER_ZCL_PUSH_HISTORICAL_PAYMENT_DATA_DAY = 0x0200,
@@ -1996,6 +2145,7 @@ typedef enum
EMBER_ZCL_PUSH_HISTORICAL_PAYMENT_DATA_YEAR = 0x0E00,
} EmberAfPushHistoricalPaymentData;
+// Enum for RegisterTier
typedef enum
{
EMBER_ZCL_REGISTER_TIER_NO_TIER_RELATED = 0x00,
@@ -2013,21 +2163,25 @@ typedef enum
EMBER_ZCL_REGISTER_TIER_CURRENT_TIER12_SUMMATION_DELIVERED_ATTRIBUTE = 0x0C,
EMBER_ZCL_REGISTER_TIER_CURRENT_TIER13_SUMMATION_DELIVERED_ATTRIBUTE = 0x0D,
EMBER_ZCL_REGISTER_TIER_CURRENT_TIER14_SUMMATION_DELIVERED_ATTRIBUTE = 0x0E,
+ EMBER_ZCL_REGISTER_TIER_REFER_TO_EXTENDED_REGISTER_TIER_FIELD = 0x0F,
EMBER_ZCL_REGISTER_TIER_CURRENT_TIER15_SUMMATION_DELIVERED_ATTRIBUTE = 0x0F,
} EmberAfRegisterTier;
+// Enum for RelativeHumidityDisplay
typedef enum
{
- EMBER_ZCL_RELATIVE_HUMIDITY_DISPLAY_NOT_DISPLAYED = 0x00,
- EMBER_ZCL_RELATIVE_HUMIDITY_DISPLAY_DISPLAYED = 0x01,
+ EMBER_ZCL_RELATIVE_HUMIDITY_DISPLAY_NOT_DISPLAYED = 0x0,
+ EMBER_ZCL_RELATIVE_HUMIDITY_DISPLAY_DISPLAYED = 0x1,
} EmberAfRelativeHumidityDisplay;
+// Enum for RelativeHumidityMode
typedef enum
{
- EMBER_ZCL_RELATIVE_HUMIDITY_MODE_MEASURE_LOCALLY = 0x00,
- EMBER_ZCL_RELATIVE_HUMIDITY_MODE_UPDATED_OVER_THE_NETWORK = 0x01,
+ EMBER_ZCL_RELATIVE_HUMIDITY_MODE_MEASURE_LOCALLY = 0x0,
+ EMBER_ZCL_RELATIVE_HUMIDITY_MODE_UPDATED_OVER_THE_NETWORK = 0x1,
} EmberAfRelativeHumidityMode;
+// Enum for RemoteEnableFlags
typedef enum
{
EMBER_ZCL_REMOTE_ENABLE_FLAGS_DISABLED = 0x00,
@@ -2036,6 +2190,7 @@ typedef enum
EMBER_ZCL_REMOTE_ENABLE_FLAGS_ENABLED_REMOTE_AND_ENERGY_CONTROL = 0x01,
} EmberAfRemoteEnableFlags;
+// Enum for RepaymentDebtType
typedef enum
{
EMBER_ZCL_REPAYMENT_DEBT_TYPE_DEBT1 = 0x00,
@@ -2044,12 +2199,14 @@ typedef enum
EMBER_ZCL_REPAYMENT_DEBT_TYPE_ALL_DEBTS = 0xFF,
} EmberAfRepaymentDebtType;
+// Enum for ReportingDirection
typedef enum
{
EMBER_ZCL_REPORTING_DIRECTION_REPORTED = 0x00,
EMBER_ZCL_REPORTING_DIRECTION_RECEIVED = 0x01,
} EmberAfReportingDirection;
+// Enum for ResultType
typedef enum
{
EMBER_ZCL_RESULT_TYPE_ACCEPTED = 0x00,
@@ -2064,49 +2221,57 @@ typedef enum
EMBER_ZCL_RESULT_TYPE_ACCEPTED_SUPPLY_ARMED = 0x12,
} EmberAfResultType;
+// Enum for SampleType
typedef enum
{
EMBER_ZCL_SAMPLE_TYPE_CONSUMPTION_DELIVERED = 0x00,
} EmberAfSampleType;
+// Enum for SaturationMoveMode
typedef enum
{
- EMBER_ZCL_SATURATION_MOVE_MODE_STOP = 0x00,
- EMBER_ZCL_SATURATION_MOVE_MODE_UP = 0x01,
- EMBER_ZCL_SATURATION_MOVE_MODE_DOWN = 0x03,
+ EMBER_ZCL_SATURATION_MOVE_MODE_STOP = 0x0,
+ EMBER_ZCL_SATURATION_MOVE_MODE_UP = 0x1,
+ EMBER_ZCL_SATURATION_MOVE_MODE_DOWN = 0x3,
} EmberAfSaturationMoveMode;
+// Enum for SaturationStepMode
typedef enum
{
- EMBER_ZCL_SATURATION_STEP_MODE_UP = 0x01,
- EMBER_ZCL_SATURATION_STEP_MODE_DOWN = 0x03,
+ EMBER_ZCL_SATURATION_STEP_MODE_UP = 0x1,
+ EMBER_ZCL_SATURATION_STEP_MODE_DOWN = 0x3,
} EmberAfSaturationStepMode;
+// Enum for SensingLightSensorType
typedef enum
{
- EMBER_ZCL_SENSING_LIGHT_SENSOR_TYPE_PHOTODIODE = 0x00,
- EMBER_ZCL_SENSING_LIGHT_SENSOR_TYPE_CMOS = 0x01,
+ EMBER_ZCL_SENSING_LIGHT_SENSOR_TYPE_PHOTODIODE = 0x0,
+ EMBER_ZCL_SENSING_LIGHT_SENSOR_TYPE_CMOS = 0x1,
} EmberAfSensingLightSensorType;
+// Enum for SetpointAdjustMode
typedef enum
{
- EMBER_ZCL_SETPOINT_ADJUST_MODE_HEAT_SETPOINT = 0x00,
- EMBER_ZCL_SETPOINT_ADJUST_MODE_COOL_SETPOINT = 0x01,
- EMBER_ZCL_SETPOINT_ADJUST_MODE_HEAT_AND_COOL_SETPOINTS = 0x02,
+ EMBER_ZCL_SETPOINT_ADJUST_MODE_HEAT_SETPOINT = 0x0,
+ EMBER_ZCL_SETPOINT_ADJUST_MODE_COOL_SETPOINT = 0x1,
+ EMBER_ZCL_SETPOINT_ADJUST_MODE_HEAT_AND_COOL_SETPOINTS = 0x2,
} EmberAfSetpointAdjustMode;
+// Enum for SignatureType
typedef enum
{
EMBER_ZCL_SIGNATURE_TYPE_RESERVED = 0x00,
EMBER_ZCL_SIGNATURE_TYPE_ECDSA = 0x01,
} EmberAfSignatureType;
+// Enum for SnapshotConfirmation
typedef enum
{
EMBER_ZCL_SNAPSHOT_CONFIRMATION_ACCEPTED = 0x00,
EMBER_ZCL_SNAPSHOT_CONFIRMATION_SNAPSHOT_CAUSE_NOT_SUPPORTED = 0x01,
} EmberAfSnapshotConfirmation;
+// Enum for SnapshotPayloadType
typedef enum
{
EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFORMATION_SET_DELIVERED_REGISTERS = 0x00,
@@ -2120,6 +2285,7 @@ typedef enum
EMBER_ZCL_SNAPSHOT_PAYLOAD_TYPE_DATA_UNAVAILABLE = 0x80,
} EmberAfSnapshotPayloadType;
+// Enum for SnapshotScheduleConfirmation
typedef enum
{
EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ACCEPTED = 0x00,
@@ -2130,25 +2296,30 @@ typedef enum
EMBER_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_INSUFFICIENT_SPACE_FOR_SNAPSHOT_SCHEDULE = 0x05,
} EmberAfSnapshotScheduleConfirmation;
+// Enum for SquawkLevel
typedef enum
{
- EMBER_ZCL_SQUAWK_LEVEL_LOW_LEVEL = 0x00,
- EMBER_ZCL_SQUAWK_LEVEL_MEDIUM_LEVEL = 0x01,
- EMBER_ZCL_SQUAWK_LEVEL_VERY_HIGH_LEVEL = 0x02,
+ EMBER_ZCL_SQUAWK_LEVEL_LOW_LEVEL = 0x0,
+ EMBER_ZCL_SQUAWK_LEVEL_MEDIUM_LEVEL = 0x1,
+ EMBER_ZCL_SQUAWK_LEVEL_HIGH_LEVEL = 0x2,
+ EMBER_ZCL_SQUAWK_LEVEL_VERY_HIGH_LEVEL = 0x2,
} EmberAfSquawkLevel;
+// Enum for SquawkMode
typedef enum
{
- EMBER_ZCL_SQUAWK_MODE_SYSTEM_IS_ARMED = 0x00,
- EMBER_ZCL_SQUAWK_MODE_SYSTEM_IS_DISARMED = 0x01,
+ EMBER_ZCL_SQUAWK_MODE_SYSTEM_IS_ARMED = 0x0,
+ EMBER_ZCL_SQUAWK_MODE_SYSTEM_IS_DISARMED = 0x1,
} EmberAfSquawkMode;
+// Enum for SquawkStobe
typedef enum
{
- EMBER_ZCL_SQUAWK_STOBE_NO_STROBE = 0x00,
- EMBER_ZCL_SQUAWK_STOBE_USE_STROBE = 0x01,
+ EMBER_ZCL_SQUAWK_STOBE_NO_STROBE = 0x0,
+ EMBER_ZCL_SQUAWK_STOBE_USE_STROBE = 0x1,
} EmberAfSquawkStobe;
+// Enum for StartOfWeek
typedef enum
{
EMBER_ZCL_START_OF_WEEK_SUNDAY = 0x00,
@@ -2160,6 +2331,7 @@ typedef enum
EMBER_ZCL_START_OF_WEEK_SATURDAY = 0x06,
} EmberAfStartOfWeek;
+// Enum for StartUpOnOffValue
typedef enum
{
EMBER_ZCL_START_UP_ON_OFF_VALUE_SET_TO_OFF = 0x00,
@@ -2168,55 +2340,52 @@ typedef enum
EMBER_ZCL_START_UP_ON_OFF_VALUE_SET_TO_PREVIOUS = 0xFF,
} EmberAfStartUpOnOffValue;
-typedef enum
-{
- EMBER_ZCL_STATUS_SUCCESS = 0x00,
- EMBER_ZCL_STATUS_FAILURE = 0x01,
- EMBER_ZCL_STATUS_REQUEST_DENIED = 0x70,
- EMBER_ZCL_STATUS_MULTIPLE_REQUEST_NOT_ALLOWED = 0x71,
- EMBER_ZCL_STATUS_INDICATION_REDIRECTION_TO_AP = 0x72,
- EMBER_ZCL_STATUS_PREFERENCE_DENIED = 0x73,
- EMBER_ZCL_STATUS_PREFERENCE_IGNORED = 0x74,
- EMBER_ZCL_STATUS_NOT_AUTHORIZED = 0x7E,
- EMBER_ZCL_STATUS_RESERVED_FIELD_NOT_ZERO = 0x7F,
- EMBER_ZCL_STATUS_MALFORMED_COMMAND = 0x80,
- EMBER_ZCL_STATUS_UNSUP_CLUSTER_COMMAND = 0x81,
- EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND = 0x82,
- EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND = 0x83,
- EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND = 0x84,
- EMBER_ZCL_STATUS_INVALID_FIELD = 0x85,
- EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE = 0x86,
- EMBER_ZCL_STATUS_INVALID_VALUE = 0x87,
- EMBER_ZCL_STATUS_READ_ONLY = 0x88,
- EMBER_ZCL_STATUS_INSUFFICIENT_SPACE = 0x89,
- EMBER_ZCL_STATUS_DUPLICATE_EXISTS = 0x8A,
- EMBER_ZCL_STATUS_NOT_FOUND = 0x8B,
- EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE = 0x8C,
- EMBER_ZCL_STATUS_INVALID_DATA_TYPE = 0x8D,
- EMBER_ZCL_STATUS_INVALID_SELECTOR = 0x8E,
- EMBER_ZCL_STATUS_WRITE_ONLY = 0x8F,
- EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE = 0x90,
- EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND = 0x91,
- EMBER_ZCL_STATUS_INCONSISTENT = 0x92,
- EMBER_ZCL_STATUS_ACTION_DENIED = 0x93,
- EMBER_ZCL_STATUS_TIMEOUT = 0x94,
- EMBER_ZCL_STATUS_ABORT = 0x95,
- EMBER_ZCL_STATUS_INVALID_IMAGE = 0x96,
- EMBER_ZCL_STATUS_WAIT_FOR_DATA = 0x97,
- EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE = 0x98,
- EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE = 0x99,
- EMBER_ZCL_STATUS_HARDWARE_FAILURE = 0xC0,
- EMBER_ZCL_STATUS_SOFTWARE_FAILURE = 0xC1,
- EMBER_ZCL_STATUS_CALIBRATION_ERROR = 0xC2,
- EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER = 0xC3,
+// Enum for Status
+typedef enum
+{
+ EMBER_ZCL_STATUS_SUCCESS = 0x00,
+ EMBER_ZCL_STATUS_FAILURE = 0x01,
+ EMBER_ZCL_STATUS_NOT_AUTHORIZED = 0x7E,
+ EMBER_ZCL_STATUS_MALFORMED_COMMAND = 0x80,
+ EMBER_ZCL_STATUS_UNSUP_COMMAND = 0x81,
+ EMBER_ZCL_STATUS_UNSUP_GENERAL_COMMAND = 0x82,
+ EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND = 0x83,
+ EMBER_ZCL_STATUS_UNSUP_MANUF_GENERAL_COMMAND = 0x84,
+ EMBER_ZCL_STATUS_INVALID_FIELD = 0x85,
+ EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE = 0x86,
+ EMBER_ZCL_STATUS_INVALID_VALUE = 0x87,
+ EMBER_ZCL_STATUS_READ_ONLY = 0x88,
+ EMBER_ZCL_STATUS_INSUFFICIENT_SPACE = 0x89,
+ EMBER_ZCL_STATUS_DUPLICATE_EXISTS = 0x8A,
+ EMBER_ZCL_STATUS_NOT_FOUND = 0x8B,
+ EMBER_ZCL_STATUS_UNREPORTABLE_ATTRIBUTE = 0x8C,
+ EMBER_ZCL_STATUS_INVALID_DATA_TYPE = 0x8D,
+ EMBER_ZCL_STATUS_INVALID_SELECTOR = 0x8E,
+ EMBER_ZCL_STATUS_WRITE_ONLY = 0x8F,
+ EMBER_ZCL_STATUS_INCONSISTENT_STARTUP_STATE = 0x90,
+ EMBER_ZCL_STATUS_DEFINED_OUT_OF_BAND = 0x91,
+ EMBER_ZCL_STATUS_ACTION_DENIED = 0x93,
+ EMBER_ZCL_STATUS_TIMEOUT = 0x94,
+ EMBER_ZCL_STATUS_ABORT = 0x95,
+ EMBER_ZCL_STATUS_INVALID_IMAGE = 0x96,
+ EMBER_ZCL_STATUS_WAIT_FOR_DATA = 0x97,
+ EMBER_ZCL_STATUS_NO_IMAGE_AVAILABLE = 0x98,
+ EMBER_ZCL_STATUS_REQUIRE_MORE_IMAGE = 0x99,
+ EMBER_ZCL_STATUS_NOTIFICATION_PENDING = 0x9A,
+ EMBER_ZCL_STATUS_HARDWARE_FAILURE = 0xC0,
+ EMBER_ZCL_STATUS_SOFTWARE_FAILURE = 0xC1,
+ EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER = 0xC3,
+ EMBER_ZCL_STATUS_LIMIT_REACHED = 0xC4,
} EmberAfStatus;
+// Enum for StepMode
typedef enum
{
- EMBER_ZCL_STEP_MODE_UP = 0x00,
- EMBER_ZCL_STEP_MODE_DOWN = 0x01,
+ EMBER_ZCL_STEP_MODE_UP = 0x0,
+ EMBER_ZCL_STEP_MODE_DOWN = 0x1,
} EmberAfStepMode;
+// Enum for SupplyStatus
typedef enum
{
EMBER_ZCL_SUPPLY_STATUS_SUPPLY_OFF = 0x00,
@@ -2225,13 +2394,15 @@ typedef enum
EMBER_ZCL_SUPPLY_STATUS_SUPPLY_UNCHANGED = 0x03,
} EmberAfSupplyStatus;
+// Enum for SwitchActions
typedef enum
{
- EMBER_ZCL_SWITCH_ACTIONS_ON = 0x00,
- EMBER_ZCL_SWITCH_ACTIONS_OFF = 0x01,
- EMBER_ZCL_SWITCH_ACTIONS_TOGGLE = 0x02,
+ EMBER_ZCL_SWITCH_ACTIONS_ON = 0x0,
+ EMBER_ZCL_SWITCH_ACTIONS_OFF = 0x1,
+ EMBER_ZCL_SWITCH_ACTIONS_TOGGLE = 0x2,
} EmberAfSwitchActions;
+// Enum for SwitchType
typedef enum
{
EMBER_ZCL_SWITCH_TYPE_TOGGLE = 0x00,
@@ -2239,6 +2410,7 @@ typedef enum
EMBER_ZCL_SWITCH_TYPE_MULTI_FUNCTION = 0x02,
} EmberAfSwitchType;
+// Enum for TariffChargingScheme
typedef enum
{
EMBER_ZCL_TARIFF_CHARGING_SCHEME_TOU_TARIFF = 0x00,
@@ -2247,6 +2419,7 @@ typedef enum
EMBER_ZCL_TARIFF_CHARGING_SCHEME_BLOCK_TOU_TARIFF_WITH_INDIVIDUAL_THRESHOLDS_PER_TIER = 0x30,
} EmberAfTariffChargingScheme;
+// Enum for TariffResolutionPeriod
typedef enum
{
EMBER_ZCL_TARIFF_RESOLUTION_PERIOD_NOT_DEFINED = 0x00,
@@ -2254,6 +2427,7 @@ typedef enum
EMBER_ZCL_TARIFF_RESOLUTION_PERIOD_ONE_DAY = 0x02,
} EmberAfTariffResolutionPeriod;
+// Enum for TariffType
typedef enum
{
EMBER_ZCL_TARIFF_TYPE_DELIVERED_TARIFF = 0x00,
@@ -2261,28 +2435,32 @@ typedef enum
EMBER_ZCL_TARIFF_TYPE_DELIVERED_AND_RECEIVED_TARIFF = 0x02,
} EmberAfTariffType;
+// Enum for TemperatureDisplayMode
typedef enum
{
- EMBER_ZCL_TEMPERATURE_DISPLAY_MODE_CELSIUS = 0x00,
- EMBER_ZCL_TEMPERATURE_DISPLAY_MODE_FAHRENHEIT = 0x01,
+ EMBER_ZCL_TEMPERATURE_DISPLAY_MODE_CELSIUS = 0x0,
+ EMBER_ZCL_TEMPERATURE_DISPLAY_MODE_FAHRENHEIT = 0x1,
} EmberAfTemperatureDisplayMode;
+// Enum for TemperatureSetpointHold
typedef enum
{
EMBER_ZCL_TEMPERATURE_SETPOINT_HOLD_SETPOINT_HOLD_OFF = 0x00,
EMBER_ZCL_TEMPERATURE_SETPOINT_HOLD_SETPOINT_HOLD_ON = 0x01,
} EmberAfTemperatureSetpointHold;
+// Enum for ThermostatControlSequence
typedef enum
{
- EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_ONLY = 0x00,
- EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_WITH_REHEAT = 0x01,
- EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_HEATING_ONLY = 0x02,
- EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_HEATING_WITH_REHEAT = 0x03,
- EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_AND_HEATING = 0x04,
- EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_AND_HEATING_WITH_REHEAT = 0x05,
+ EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_ONLY = 0x0,
+ EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_WITH_REHEAT = 0x1,
+ EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_HEATING_ONLY = 0x2,
+ EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_HEATING_WITH_REHEAT = 0x3,
+ EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_AND_HEATING = 0x4,
+ EMBER_ZCL_THERMOSTAT_CONTROL_SEQUENCE_COOLING_AND_HEATING_WITH_REHEAT = 0x5,
} EmberAfThermostatControlSequence;
+// Enum for ThermostatRunningMode
typedef enum
{
EMBER_ZCL_THERMOSTAT_RUNNING_MODE_OFF = 0x00,
@@ -2290,17 +2468,19 @@ typedef enum
EMBER_ZCL_THERMOSTAT_RUNNING_MODE_HEAT = 0x04,
} EmberAfThermostatRunningMode;
+// Enum for ThermostatSystemMode
typedef enum
{
- EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_OFF = 0x00,
- EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_AUTO = 0x01,
- EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_COOL = 0x03,
- EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_HEAT = 0x04,
- EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_EMERGENCY_HEATING = 0x05,
- EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_PRECOOLING = 0x06,
- EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_FAN_ONLY = 0x07,
+ EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_OFF = 0x0,
+ EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_AUTO = 0x1,
+ EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_COOL = 0x3,
+ EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_HEAT = 0x4,
+ EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_EMERGENCY_HEATING = 0x5,
+ EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_PRECOOLING = 0x6,
+ EMBER_ZCL_THERMOSTAT_SYSTEM_MODE_FAN_ONLY = 0x7,
} EmberAfThermostatSystemMode;
+// Enum for TierBlockMode
typedef enum
{
EMBER_ZCL_TIER_BLOCK_MODE_ACTIVE_BLOCK = 0x00,
@@ -2309,12 +2489,14 @@ typedef enum
EMBER_ZCL_TIER_BLOCK_MODE_NOT_USED = 0xFF,
} EmberAfTierBlockMode;
+// Enum for TimeEncoding
typedef enum
{
EMBER_ZCL_TIME_ENCODING_RELATIVE = 0x00,
EMBER_ZCL_TIME_ENCODING_ABSOLUTE = 0x40,
} EmberAfTimeEncoding;
+// Enum for TunnelingProtocolId
typedef enum
{
EMBER_ZCL_TUNNELING_PROTOCOL_ID_DLMS_COSEM = 0x00,
@@ -2324,9 +2506,12 @@ typedef enum
EMBER_ZCL_TUNNELING_PROTOCOL_ID_SML = 0x04,
EMBER_ZCL_TUNNELING_PROTOCOL_ID_CLIMATE_TALK = 0x05,
EMBER_ZCL_TUNNELING_PROTOCOL_ID_GB_HRGP = 0x06,
+ EMBER_ZCL_TUNNELING_PROTOCOL_ID_IP_V4 = 0x07,
+ EMBER_ZCL_TUNNELING_PROTOCOL_ID_IP_V6 = 0x08,
EMBER_ZCL_TUNNELING_PROTOCOL_ID_TEST = 0xC7,
} EmberAfTunnelingProtocolId;
+// Enum for TunnelingTransferDataStatus
typedef enum
{
EMBER_ZCL_TUNNELING_TRANSFER_DATA_STATUS_NO_SUCH_TUNNEL = 0x00,
@@ -2334,6 +2519,7 @@ typedef enum
EMBER_ZCL_TUNNELING_TRANSFER_DATA_STATUS_DATA_OVERFLOW = 0x02,
} EmberAfTunnelingTransferDataStatus;
+// Enum for TunnelingTunnelStatus
typedef enum
{
EMBER_ZCL_TUNNELING_TUNNEL_STATUS_SUCCESS = 0x00,
@@ -2343,12 +2529,14 @@ typedef enum
EMBER_ZCL_TUNNELING_TUNNEL_STATUS_FLOW_CONTROL_NOT_SUPPORTED = 0x04,
} EmberAfTunnelingTunnelStatus;
+// Enum for WanStatus
typedef enum
{
EMBER_ZCL_WAN_STATUS_CONNECTION_TO_WAN_IS_NOT_AVAILABLE = 0x00,
EMBER_ZCL_WAN_STATUS_CONNECTION_TO_WAN_IS_AVAILABLE = 0x01,
} EmberAfWanStatus;
+// Enum for WarningEvent
typedef enum
{
EMBER_ZCL_WARNING_EVENT_WARNING1_OVERALL_POWER_ABOVE_AVAILABLE_POWER_LEVEL = 0x00,
@@ -2358,23 +2546,26 @@ typedef enum
EMBER_ZCL_WARNING_EVENT_WARNING5_OVERALL_POWER_WILL_BE_POTENTIALLY_ABOVE_AVAILABLE_POWER_LEVEL_IF_THE_APPLIANCE_STARTS = 0x04,
} EmberAfWarningEvent;
+// Enum for WarningMode
typedef enum
{
- EMBER_ZCL_WARNING_MODE_STOP = 0x00,
- EMBER_ZCL_WARNING_MODE_BURGLAR = 0x01,
- EMBER_ZCL_WARNING_MODE_FIRE = 0x02,
- EMBER_ZCL_WARNING_MODE_EMERGENCY = 0x03,
- EMBER_ZCL_WARNING_MODE_POLICE_PANIC = 0x04,
- EMBER_ZCL_WARNING_MODE_FIRE_PANIC = 0x05,
- EMBER_ZCL_WARNING_MODE_EMERGENCY_PANIC = 0x06,
+ EMBER_ZCL_WARNING_MODE_STOP = 0x0,
+ EMBER_ZCL_WARNING_MODE_BURGLAR = 0x1,
+ EMBER_ZCL_WARNING_MODE_FIRE = 0x2,
+ EMBER_ZCL_WARNING_MODE_EMERGENCY = 0x3,
+ EMBER_ZCL_WARNING_MODE_POLICE_PANIC = 0x4,
+ EMBER_ZCL_WARNING_MODE_FIRE_PANIC = 0x5,
+ EMBER_ZCL_WARNING_MODE_EMERGENCY_PANIC = 0x6,
} EmberAfWarningMode;
+// Enum for WarningStobe
typedef enum
{
- EMBER_ZCL_WARNING_STOBE_NO_STROBE = 0x00,
- EMBER_ZCL_WARNING_STOBE_USE_STROBE = 0x01,
+ EMBER_ZCL_WARNING_STOBE_NO_STROBE = 0x0,
+ EMBER_ZCL_WARNING_STOBE_USE_STROBE = 0x1,
} EmberAfWarningStobe;
+// Enum for WwahIasZoneEnrollmentMode
typedef enum
{
EMBER_ZCL_WWAH_IAS_ZONE_ENROLLMENT_MODE_TRIP_TO_PAIR = 0x00,
@@ -2382,6 +2573,7 @@ typedef enum
EMBER_ZCL_WWAH_IAS_ZONE_ENROLLMENT_MODE_REQUEST = 0x02,
} EmberAfWwahIasZoneEnrollmentMode;
+// Enum for WwahPowerNotificationReason
typedef enum
{
EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_UNKNOWN = 0x00,
@@ -2398,6 +2590,7 @@ typedef enum
EMBER_ZCL_WWAH_POWER_NOTIFICATION_REASON_BOOTLOAD_FAILURE = 0x0B,
} EmberAfWwahPowerNotificationReason;
+// Enum for ZigbeeInformationLogicalType
typedef enum
{
EMBER_ZCL_ZIGBEE_INFORMATION_LOGICAL_TYPE_COORDINATOR = 0x00,
@@ -2405,308 +2598,35 @@ typedef enum
EMBER_ZCL_ZIGBEE_INFORMATION_LOGICAL_TYPE_END_DEVICE = 0x02,
} EmberAfZigbeeInformationLogicalType;
+// Enum for ZllStatus
typedef enum
{
EMBER_ZCL_ZLL_STATUS_SUCCESS = 0x00,
EMBER_ZCL_ZLL_STATUS_FAILURE = 0x01,
} EmberAfZllStatus;
-#define EMBER_AF_SHADE_CLOSURE_STATUS_OPERATIONAL (0x01)
-#define EMBER_AF_SHADE_CLOSURE_STATUS_ADJUSTING (0x02)
-#define EMBER_AF_SHADE_CLOSURE_STATUS_ADJUSTING_OFFSET (1)
-#define EMBER_AF_SHADE_CLOSURE_STATUS_OPENING (0x04)
-#define EMBER_AF_SHADE_CLOSURE_STATUS_OPENING_OFFSET (2)
-#define EMBER_AF_SHADE_CLOSURE_STATUS_MOTOR_OPENING (0x08)
-#define EMBER_AF_SHADE_CLOSURE_STATUS_MOTOR_OPENING_OFFSET (3)
-#define EMBER_AF_ALARM_MASK_GENERAL_HW_FAULT (0x01)
-#define EMBER_AF_ALARM_MASK_GENERAL_SW_FAULT (0x02)
+#define EMBER_AF_ALARM_MASK_GENERAL_HW_FAULT (0x1)
+#define EMBER_AF_ALARM_MASK_GENERAL_HW_FAULT_OFFSET (0)
+#define EMBER_AF_ALARM_MASK_GENERAL_SW_FAULT (0x2)
#define EMBER_AF_ALARM_MASK_GENERAL_SW_FAULT_OFFSET (1)
-#define EMBER_AF_RESTART_OPTIONS_START_MODE1 (0x01)
-#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE2 (0x02)
-#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE2_OFFSET (1)
-#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE3 (0x04)
-#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE3_OFFSET (2)
-#define EMBER_AF_RESTART_OPTIONS_IMMEDIATE (0x08)
-#define EMBER_AF_RESTART_OPTIONS_IMMEDIATE_OFFSET (3)
-#define EMBER_AF_RESET_OPTIONS_RESET_CURRENT (0x01)
-#define EMBER_AF_RESET_OPTIONS_RESET_ALL (0x02)
-#define EMBER_AF_RESET_OPTIONS_RESET_ALL_OFFSET (1)
-#define EMBER_AF_RESET_OPTIONS_ERASE_INDEX (0x04)
-#define EMBER_AF_RESET_OPTIONS_ERASE_INDEX_OFFSET (2)
-#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_LOW (0x01)
-#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_HIGH (0x02)
-#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_HIGH_OFFSET (1)
-#define EMBER_AF_MAINS_ALARM_MASK_MAINS_POWER_SUPPLY_LOST (0x04)
-#define EMBER_AF_MAINS_ALARM_MASK_MAINS_POWER_SUPPLY_LOST_OFFSET (2)
-#define EMBER_AF_BATTERY_ALARM_MASK_VOLTAGE_TOO_LOW (0x01)
-#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_LOW (0x01)
-#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_HIGH (0x02)
-#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_HIGH_OFFSET (1)
-#define EMBER_AF_TIME_STATUS_MASK_MASTER_CLOCK (0x01)
-#define EMBER_AF_TIME_STATUS_MASK_SYNCHRONIZED (0x02)
-#define EMBER_AF_TIME_STATUS_MASK_SYNCHRONIZED_OFFSET (1)
-#define EMBER_AF_TIME_STATUS_MASK_MASTER_ZONE_DST (0x04)
-#define EMBER_AF_TIME_STATUS_MASK_MASTER_ZONE_DST_OFFSET (2)
-#define EMBER_AF_TIME_STATUS_MASK_SUPERSEDING (0x08)
-#define EMBER_AF_TIME_STATUS_MASK_SUPERSEDING_OFFSET (3)
-#define EMBER_AF_LOCATION_TYPE_ABSOLUTE (0x01)
-#define EMBER_AF_LOCATION_TYPE2_D (0x02)
-#define EMBER_AF_LOCATION_TYPE2_D_OFFSET (1)
-#define EMBER_AF_LOCATION_TYPE_COORDINATE_SYSTEM (0x0C)
-#define EMBER_AF_LOCATION_TYPE_COORDINATE_SYSTEM_OFFSET (2)
-#define EMBER_AF_GET_LOCATION_DATA_FLAGS_ABSOLUTE_ONLY (0x01)
-#define EMBER_AF_GET_LOCATION_DATA_FLAGS_RECALCULATE (0x02)
-#define EMBER_AF_GET_LOCATION_DATA_FLAGS_RECALCULATE_OFFSET (1)
-#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST (0x04)
-#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_OFFSET (2)
-#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_RESPONSE (0x08)
-#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_RESPONSE_OFFSET (3)
-#define EMBER_AF_GET_LOCATION_DATA_FLAGS_COMPACT_RESPONSE (0x10)
-#define EMBER_AF_GET_LOCATION_DATA_FLAGS_COMPACT_RESPONSE_OFFSET (4)
-#define EMBER_AF_PUMP_STATUS_DEVICE_FAULT (0x0001)
-#define EMBER_AF_PUMP_STATUS_SUPPLYFAULT (0x0002)
-#define EMBER_AF_PUMP_STATUS_SUPPLYFAULT_OFFSET (1)
-#define EMBER_AF_PUMP_STATUS_SPEED_LOW (0x0004)
-#define EMBER_AF_PUMP_STATUS_SPEED_LOW_OFFSET (2)
-#define EMBER_AF_PUMP_STATUS_SPEED_HIGH (0x0008)
-#define EMBER_AF_PUMP_STATUS_SPEED_HIGH_OFFSET (3)
-#define EMBER_AF_PUMP_STATUS_LOCAL_OVERRIDE (0x0010)
-#define EMBER_AF_PUMP_STATUS_LOCAL_OVERRIDE_OFFSET (4)
-#define EMBER_AF_PUMP_STATUS_RUNNING (0x0020)
-#define EMBER_AF_PUMP_STATUS_RUNNING_OFFSET (5)
-#define EMBER_AF_PUMP_STATUS_REMOTE_PRESSURE (0x0040)
-#define EMBER_AF_PUMP_STATUS_REMOTE_PRESSURE_OFFSET (6)
-#define EMBER_AF_PUMP_STATUS_REMOTE_FLOW (0x0080)
-#define EMBER_AF_PUMP_STATUS_REMOTE_FLOW_OFFSET (7)
-#define EMBER_AF_PUMP_STATUS_REMOTE_TEMPERATURE (0x0100)
-#define EMBER_AF_PUMP_STATUS_REMOTE_TEMPERATURE_OFFSET (8)
-#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_LOW (0x0001)
-#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_HIGH (0x0002)
-#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_HIGH_OFFSET (1)
-#define EMBER_AF_PUMP_ALARM_MASK_POWER_MISSING_PHASE (0x0004)
-#define EMBER_AF_PUMP_ALARM_MASK_POWER_MISSING_PHASE_OFFSET (2)
-#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_LOW (0x0008)
-#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_LOW_OFFSET (3)
-#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_HIGH (0x0010)
-#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_HIGH_OFFSET (4)
-#define EMBER_AF_PUMP_ALARM_MASK_DRY_RUNNING (0x0020)
-#define EMBER_AF_PUMP_ALARM_MASK_DRY_RUNNING_OFFSET (5)
-#define EMBER_AF_PUMP_ALARM_MASK_MOTOR_TEMPERATURE_TOO_HIGH (0x0040)
-#define EMBER_AF_PUMP_ALARM_MASK_MOTOR_TEMPERATURE_TOO_HIGH_OFFSET (6)
-#define EMBER_AF_PUMP_ALARM_MASK_PUMP_MOTOR_HAS_FATAL_FAILURE (0x0080)
-#define EMBER_AF_PUMP_ALARM_MASK_PUMP_MOTOR_HAS_FATAL_FAILURE_OFFSET (7)
-#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_TEMPERATURE_TOO_HIGH (0x0100)
-#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_TEMPERATURE_TOO_HIGH_OFFSET (8)
-#define EMBER_AF_PUMP_ALARM_MASK_PUMP_BLOCKED (0x0200)
-#define EMBER_AF_PUMP_ALARM_MASK_PUMP_BLOCKED_OFFSET (9)
-#define EMBER_AF_PUMP_ALARM_MASK_SENSOR_FAILURE (0x0400)
-#define EMBER_AF_PUMP_ALARM_MASK_SENSOR_FAILURE_OFFSET (10)
-#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_NON_FATAL_FAILURE (0x0800)
-#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_NON_FATAL_FAILURE_OFFSET (11)
-#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_FATAL_FAILURE (0x1000)
-#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_FATAL_FAILURE_OFFSET (12)
-#define EMBER_AF_PUMP_ALARM_MASK_GENERAL_FAULT (0x2000)
-#define EMBER_AF_PUMP_ALARM_MASK_GENERAL_FAULT_OFFSET (13)
-#define EMBER_AF_THERMOSTAT_OCCUPANCY_OCCUPIED (0x01)
-#define EMBER_AF_THERMOSTAT_SENSING_LOCAL_TEMP_SENSED_REMOTELY (0x01)
-#define EMBER_AF_THERMOSTAT_SENSING_OUTDOOR_TEMP_SENSED_REMOTELY (0x02)
-#define EMBER_AF_THERMOSTAT_SENSING_OUTDOOR_TEMP_SENSED_REMOTELY_OFFSET (1)
-#define EMBER_AF_THERMOSTAT_SENSING_OCCUPANCY_SENSED_REMOTELY (0x04)
-#define EMBER_AF_THERMOSTAT_SENSING_OCCUPANCY_SENSED_REMOTELY_OFFSET (2)
-#define EMBER_AF_THERMOSTAT_ALARM_MASK_INITIALIZATION_FAILURE (0x01)
-#define EMBER_AF_THERMOSTAT_ALARM_MASK_HARDWARE_FAILURE (0x02)
-#define EMBER_AF_THERMOSTAT_ALARM_MASK_HARDWARE_FAILURE_OFFSET (1)
-#define EMBER_AF_THERMOSTAT_ALARM_MASK_SELFCALIBRATION_FAILURE (0x04)
-#define EMBER_AF_THERMOSTAT_ALARM_MASK_SELFCALIBRATION_FAILURE_OFFSET (2)
-#define EMBER_AF_BALLAST_STATUS_NON_OPERATIONAL (0x01)
-#define EMBER_AF_BALLAST_STATUS_LAMP_NOT_IN_SOCKET (0x02)
-#define EMBER_AF_BALLAST_STATUS_LAMP_NOT_IN_SOCKET_OFFSET (1)
-#define EMBER_AF_LAMP_ALARM_MODE_LAMP_BURN_HOURS (0x01)
-#define EMBER_AF_OCCUPANCY_OCCUPIED (0x01)
-#define EMBER_AF_IAS_ZONE_STATUS_ALARM1 (0x0001)
-#define EMBER_AF_IAS_ZONE_STATUS_ALARM2 (0x0002)
-#define EMBER_AF_IAS_ZONE_STATUS_ALARM2_OFFSET (1)
-#define EMBER_AF_IAS_ZONE_STATUS_TAMPER (0x0004)
-#define EMBER_AF_IAS_ZONE_STATUS_TAMPER_OFFSET (2)
-#define EMBER_AF_IAS_ZONE_STATUS_BATTERY (0x0008)
-#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_OFFSET (3)
-#define EMBER_AF_IAS_ZONE_STATUS_SUPERVISION_REPORTS (0x0010)
-#define EMBER_AF_IAS_ZONE_STATUS_SUPERVISION_REPORTS_OFFSET (4)
-#define EMBER_AF_IAS_ZONE_STATUS_RESTORE_REPORTS (0x0020)
-#define EMBER_AF_IAS_ZONE_STATUS_RESTORE_REPORTS_OFFSET (5)
-#define EMBER_AF_IAS_ZONE_STATUS_TROUBLE (0x0040)
-#define EMBER_AF_IAS_ZONE_STATUS_TROUBLE_OFFSET (6)
-#define EMBER_AF_IAS_ZONE_STATUS_A_C (0x0080)
-#define EMBER_AF_IAS_ZONE_STATUS_A_C_OFFSET (7)
-#define EMBER_AF_IAS_ZONE_STATUS_TEST (0x0100)
-#define EMBER_AF_IAS_ZONE_STATUS_TEST_OFFSET (8)
-#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_DEFECT (0x0200)
-#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_DEFECT_OFFSET (9)
-#define EMBER_AF_WARNING_INFO_MODE (0xF0)
-#define EMBER_AF_WARNING_INFO_MODE_OFFSET (4)
-#define EMBER_AF_WARNING_INFO_STROBE (0x0C)
-#define EMBER_AF_WARNING_INFO_STROBE_OFFSET (2)
-#define EMBER_AF_WARNING_INFO_SIREN_LEVEL (0x03)
-#define EMBER_AF_SQUAWK_INFO_MODE (0xF0)
-#define EMBER_AF_SQUAWK_INFO_MODE_OFFSET (4)
-#define EMBER_AF_SQUAWK_INFO_STROBE (0x08)
-#define EMBER_AF_SQUAWK_INFO_STROBE_OFFSET (3)
-#define EMBER_AF_SQUAWK_INFO_LEVEL (0x03)
-#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PIR (0x01)
-#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_ULTRASONIC (0x02)
-#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_ULTRASONIC_OFFSET (1)
-#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PHYSICAL_CONTACT (0x04)
-#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PHYSICAL_CONTACT_OFFSET (2)
-#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_RIGHT_OF_THE_DECIMAL_POINT (0x07)
-#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_LEFT_OF_THE_DECIMAL_POINT (0x78)
-#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_LEFT_OF_THE_DECIMAL_POINT_OFFSET (3)
-#define EMBER_AF_ENERGY_FORMATTING_SUPPRESS_LEADING_ZEROS (0x80)
-#define EMBER_AF_ENERGY_FORMATTING_SUPPRESS_LEADING_ZEROS_OFFSET (7)
-#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_REMOTE_ENABLE_FLAGS (0x0F)
-#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_DEVICE_STATUS2_STRUCTURE (0xF0)
-#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_DEVICE_STATUS2_STRUCTURE_OFFSET (4)
-#define EMBER_AF_START_TIME_MINUTES (0x003F)
-#define EMBER_AF_START_TIME_TIME_ENCODING (0x00C0)
-#define EMBER_AF_START_TIME_TIME_ENCODING_OFFSET (6)
-#define EMBER_AF_START_TIME_HOURS (0xFF00)
-#define EMBER_AF_START_TIME_HOURS_OFFSET (8)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SUNDAY (0x01)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_MONDAY (0x02)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_MONDAY_OFFSET (1)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_TUESDAY (0x04)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_TUESDAY_OFFSET (2)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_WEDNESDAY (0x08)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_WEDNESDAY_OFFSET (3)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_THURSDAY (0x10)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_THURSDAY_OFFSET (4)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_FRIDAY (0x20)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_FRIDAY_OFFSET (5)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SATURDAY (0x40)
-#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SATURDAY_OFFSET (6)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_STATE_ON (0x0001)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_STATE_ON (0x0002)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_STATE_ON_OFFSET (1)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_STATE_ON (0x0004)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_STATE_ON_OFFSET (2)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_SECOND_STAGE_STATE_ON (0x0008)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_SECOND_STAGE_STATE_ON_OFFSET (3)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_SECOND_STAGE_STATE_ON (0x0010)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_SECOND_STAGE_STATE_ON_OFFSET (4)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_SECOND_STAGE_STATE_ON (0x0020)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_SECOND_STAGE_STATE_ON_OFFSET (5)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_THIRD_STAGE_STATE_ON (0x0040)
-#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_THIRD_STAGE_STATE_ON_OFFSET (6)
-#define EMBER_AF_DAY_OF_WEEK_SUNDAY (0x01)
-#define EMBER_AF_DAY_OF_WEEK_MONDAY (0x02)
-#define EMBER_AF_DAY_OF_WEEK_MONDAY_OFFSET (1)
-#define EMBER_AF_DAY_OF_WEEK_TUESDAY (0x04)
-#define EMBER_AF_DAY_OF_WEEK_TUESDAY_OFFSET (2)
-#define EMBER_AF_DAY_OF_WEEK_WEDNESDAY (0x08)
-#define EMBER_AF_DAY_OF_WEEK_WEDNESDAY_OFFSET (3)
-#define EMBER_AF_DAY_OF_WEEK_THURSDAY (0x10)
-#define EMBER_AF_DAY_OF_WEEK_THURSDAY_OFFSET (4)
-#define EMBER_AF_DAY_OF_WEEK_FRIDAY (0x20)
-#define EMBER_AF_DAY_OF_WEEK_FRIDAY_OFFSET (5)
-#define EMBER_AF_DAY_OF_WEEK_SATURDAY (0x40)
-#define EMBER_AF_DAY_OF_WEEK_SATURDAY_OFFSET (6)
-#define EMBER_AF_DAY_OF_WEEK_AWAY_OR_VACATION (0x80)
-#define EMBER_AF_DAY_OF_WEEK_AWAY_OR_VACATION_OFFSET (7)
-#define EMBER_AF_MODE_FOR_SEQUENCE_HEAT_SETPOINT_FIELD_PRESENT (0x01)
-#define EMBER_AF_MODE_FOR_SEQUENCE_COOL_SETPOINT_FIELD_PRESENT (0x02)
-#define EMBER_AF_MODE_FOR_SEQUENCE_COOL_SETPOINT_FIELD_PRESENT_OFFSET (1)
+#define EMBER_AF_ALERT_COUNT_NUMBER_OF_ALERTS (0x0F)
+#define EMBER_AF_ALERT_COUNT_NUMBER_OF_ALERTS_OFFSET (0)
+#define EMBER_AF_ALERT_COUNT_TYPE_OF_ALERT (0xF0)
+#define EMBER_AF_ALERT_COUNT_TYPE_OF_ALERT_OFFSET (4)
#define EMBER_AF_ALERT_STRUCTURE_ALERT_ID (0x0000FF)
+#define EMBER_AF_ALERT_STRUCTURE_ALERT_ID_OFFSET (0)
#define EMBER_AF_ALERT_STRUCTURE_CATEGORY (0x000F00)
#define EMBER_AF_ALERT_STRUCTURE_CATEGORY_OFFSET (8)
#define EMBER_AF_ALERT_STRUCTURE_PRESENCE_RECOVERY (0x003000)
#define EMBER_AF_ALERT_STRUCTURE_PRESENCE_RECOVERY_OFFSET (12)
-#define EMBER_AF_ALERT_COUNT_NUMBER_OF_ALERTS (0x0F)
-#define EMBER_AF_ALERT_COUNT_TYPE_OF_ALERT (0xF0)
-#define EMBER_AF_ALERT_COUNT_TYPE_OF_ALERT_OFFSET (4)
-#define EMBER_AF_BARRIER_CONTROL_CAPABILITIES_PARTIAL_BARRIER (0x01)
-#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_REMOTE_LOCKOUT (0x0001)
-#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_TEMPER_DETECTED (0x0002)
-#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_TEMPER_DETECTED_OFFSET (1)
-#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_FAILED_COMMUNICATION (0x0004)
-#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_FAILED_COMMUNICATION_OFFSET (2)
-#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_POSITION_FAILURE (0x0008)
-#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_POSITION_FAILURE_OFFSET (3)
-#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE (0x0F)
-#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_CONTROL (0xF0)
-#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_CONTROL_OFFSET (4)
-#define EMBER_AF_CONVERSION_FACTOR_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
-#define EMBER_AF_CONVERSION_FACTOR_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
-#define EMBER_AF_CALORIFIC_VALUE_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
-#define EMBER_AF_CALORIFIC_VALUE_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
-#define EMBER_AF_PRICE_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
-#define EMBER_AF_PRICE_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
-#define EMBER_AF_C_O2_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
-#define EMBER_AF_C_O2_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
-#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_PRICE_TIER (0x0F)
-#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_TRAILING_DIGIT (0xF0)
-#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_TRAILING_DIGIT_OFFSET (4)
-#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_REGISTER_TIER (0x0F)
-#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_NUMBER_OF_PRICE_TIERS (0xF0)
-#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_NUMBER_OF_PRICE_TIERS_OFFSET (4)
#define EMBER_AF_ALTERNATE_COST_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
#define EMBER_AF_ALTERNATE_COST_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
-#define EMBER_AF_PRICE_CONTROL_MASK_PRICE_ACKNOWLEDGEMENT_REQUIRED (0x01)
-#define EMBER_AF_PRICE_CONTROL_MASK_TOTAL_TIERS_EXCEEDS15 (0x02)
-#define EMBER_AF_PRICE_CONTROL_MASK_TOTAL_TIERS_EXCEEDS15_OFFSET (1)
-#define EMBER_AF_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT_REQUIREMENT (0x01)
-#define EMBER_AF_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK (0x02)
-#define EMBER_AF_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK_OFFSET (1)
-#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_TYPE (0x0F)
-#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_CHARGING_SCHEME (0xF0)
-#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_CHARGING_SCHEME_OFFSET (4)
-#define EMBER_AF_PRICE_MATRIX_SUB_PAYLOAD_CONTROL_TOU_BASED (0x01)
-#define EMBER_AF_BLOCK_THRESHOLD_SUB_PAYLOAD_CONTROL_APPLY_TO_ALL_TOU_TIERS_OR_WHEN_BLOCK_ONLY_CHARGING (0x01)
-#define EMBER_AF_BILLING_PERIOD_DURATION_DURATION (0x3FFFFF)
-#define EMBER_AF_BILLING_PERIOD_DURATION_UNITS (0xC00000)
-#define EMBER_AF_BILLING_PERIOD_DURATION_UNITS_OFFSET (22)
-#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_TIMEBASE (0x0F)
-#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_CONTROL (0xF0)
-#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_CONTROL_OFFSET (4)
-#define EMBER_AF_BILL_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
-#define EMBER_AF_BILL_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
-#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_BILLING_INFO (0x00000001)
-#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_BILLING_INFO_USING_NEW_CURRENCY (0x00000002)
-#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_BILLING_INFO_USING_NEW_CURRENCY_OFFSET (1)
-#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_OLD_CONSUMPTION_DATA (0x00000004)
-#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_OLD_CONSUMPTION_DATA_OFFSET (2)
-#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_OLD_CONSUMPTION_DATA_USING_NEW_CURRENCY (0x00000008)
-#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_OLD_CONSUMPTION_DATA_USING_NEW_CURRENCY_OFFSET (3)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER1 (0x0002)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER1_OFFSET (1)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER2 (0x0004)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER2_OFFSET (2)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER3 (0x0008)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER3_OFFSET (3)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER4 (0x0010)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER4_OFFSET (4)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER5 (0x0020)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER5_OFFSET (5)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER6 (0x0040)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER6_OFFSET (6)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER7 (0x0080)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER7_OFFSET (7)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER8 (0x0100)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER8_OFFSET (8)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER9 (0x0200)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER9_OFFSET (9)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER10 (0x0400)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER10_OFFSET (10)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER11 (0x0800)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER11_OFFSET (11)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER12 (0x1000)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER12_OFFSET (12)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER13 (0x2000)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER13_OFFSET (13)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER14 (0x4000)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER14_OFFSET (14)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER15 (0x8000)
-#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER15_OFFSET (15)
+#define EMBER_AF_AMI_CANCEL_CONTROL_TERMINATE_WITH_RANDOMIZATION (0x01)
+#define EMBER_AF_AMI_CANCEL_CONTROL_TERMINATE_WITH_RANDOMIZATION_OFFSET (0)
#define EMBER_AF_AMI_COMMAND_OPTIONS_REQUEST_RX_ON_WHEN_IDLE (0x01)
+#define EMBER_AF_AMI_COMMAND_OPTIONS_REQUEST_RX_ON_WHEN_IDLE_OFFSET (0)
#define EMBER_AF_AMI_DEVICE_CLASS_HVAC_COMPRESSOR_OR_FURNACE (0x0001)
+#define EMBER_AF_AMI_DEVICE_CLASS_HVAC_COMPRESSOR_OR_FURNACE_OFFSET (0)
#define EMBER_AF_AMI_DEVICE_CLASS_STRIP_HEAT_BASEBOARD_HEAT (0x0002)
#define EMBER_AF_AMI_DEVICE_CLASS_STRIP_HEAT_BASEBOARD_HEAT_OFFSET (1)
#define EMBER_AF_AMI_DEVICE_CLASS_WATER_HEATER (0x0004)
@@ -2730,10 +2650,11 @@ typedef enum
#define EMBER_AF_AMI_DEVICE_CLASS_GENERATION_SYSTEMS (0x0800)
#define EMBER_AF_AMI_DEVICE_CLASS_GENERATION_SYSTEMS_OFFSET (11)
#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_START_TIME (0x01)
+#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_START_TIME_OFFSET (0)
#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_END_TIME (0x02)
#define EMBER_AF_AMI_EVENT_CONTROL_RANDOMIZED_END_TIME_OFFSET (1)
-#define EMBER_AF_AMI_CANCEL_CONTROL_TERMINATE_WITH_RANDOMIZATION (0x01)
#define EMBER_AF_AMI_METER_STATUS_CHECK_METER (0x01)
+#define EMBER_AF_AMI_METER_STATUS_CHECK_METER_OFFSET (0)
#define EMBER_AF_AMI_METER_STATUS_LOW_BATTERY (0x02)
#define EMBER_AF_AMI_METER_STATUS_LOW_BATTERY_OFFSET (1)
#define EMBER_AF_AMI_METER_STATUS_TAMPER_DETECT (0x04)
@@ -2748,324 +2669,8 @@ typedef enum
#define EMBER_AF_AMI_METER_STATUS_SERVICE_DISCONNECT_OPEN_OFFSET (6)
#define EMBER_AF_AMI_METER_STATUS_RESERVED (0x80)
#define EMBER_AF_AMI_METER_STATUS_RESERVED_OFFSET (7)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_CHECK_METER (0x01)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_LOW_BATTERY (0x02)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_LOW_BATTERY_OFFSET (1)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_TAMPER_DETECT (0x04)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_TAMPER_DETECT_OFFSET (2)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_FAILURE (0x08)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_FAILURE_OFFSET (3)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_QUALITY (0x10)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_QUALITY_OFFSET (4)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_LEAK_DETECT (0x20)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_LEAK_DETECT_OFFSET (5)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_SERVICE_DISCONNECT_OPEN (0x40)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_SERVICE_DISCONNECT_OPEN_OFFSET (6)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_RESERVED (0x80)
-#define EMBER_AF_METERING_STATUS_ELECTRICITY_RESERVED_OFFSET (7)
-#define EMBER_AF_METERING_STATUS_GAS_CHECK_METER (0x01)
-#define EMBER_AF_METERING_STATUS_GAS_LOW_BATTERY (0x02)
-#define EMBER_AF_METERING_STATUS_GAS_LOW_BATTERY_OFFSET (1)
-#define EMBER_AF_METERING_STATUS_GAS_TAMPER_DETECT (0x04)
-#define EMBER_AF_METERING_STATUS_GAS_TAMPER_DETECT_OFFSET (2)
-#define EMBER_AF_METERING_STATUS_GAS_NOT_DEFINED (0x08)
-#define EMBER_AF_METERING_STATUS_GAS_NOT_DEFINED_OFFSET (3)
-#define EMBER_AF_METERING_STATUS_GAS_LOW_PRESSURE (0x10)
-#define EMBER_AF_METERING_STATUS_GAS_LOW_PRESSURE_OFFSET (4)
-#define EMBER_AF_METERING_STATUS_GAS_LEAK_DETECT (0x20)
-#define EMBER_AF_METERING_STATUS_GAS_LEAK_DETECT_OFFSET (5)
-#define EMBER_AF_METERING_STATUS_GAS_SERVICE_DISCONNECT (0x40)
-#define EMBER_AF_METERING_STATUS_GAS_SERVICE_DISCONNECT_OFFSET (6)
-#define EMBER_AF_METERING_STATUS_GAS_REVERSE_FLOW (0x80)
-#define EMBER_AF_METERING_STATUS_GAS_REVERSE_FLOW_OFFSET (7)
-#define EMBER_AF_METERING_STATUS_WATER_CHECK_METER (0x01)
-#define EMBER_AF_METERING_STATUS_WATER_LOW_BATTERY (0x02)
-#define EMBER_AF_METERING_STATUS_WATER_LOW_BATTERY_OFFSET (1)
-#define EMBER_AF_METERING_STATUS_WATER_TAMPER_DETECT (0x04)
-#define EMBER_AF_METERING_STATUS_WATER_TAMPER_DETECT_OFFSET (2)
-#define EMBER_AF_METERING_STATUS_WATER_PIPE_EMPTY (0x08)
-#define EMBER_AF_METERING_STATUS_WATER_PIPE_EMPTY_OFFSET (3)
-#define EMBER_AF_METERING_STATUS_WATER_LOW_PRESSURE (0x10)
-#define EMBER_AF_METERING_STATUS_WATER_LOW_PRESSURE_OFFSET (4)
-#define EMBER_AF_METERING_STATUS_WATER_LEAK_DETECT (0x20)
-#define EMBER_AF_METERING_STATUS_WATER_LEAK_DETECT_OFFSET (5)
-#define EMBER_AF_METERING_STATUS_WATER_SERVICE_DISCONNECT (0x40)
-#define EMBER_AF_METERING_STATUS_WATER_SERVICE_DISCONNECT_OFFSET (6)
-#define EMBER_AF_METERING_STATUS_WATER_REVERSE_FLOW (0x80)
-#define EMBER_AF_METERING_STATUS_WATER_REVERSE_FLOW_OFFSET (7)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_CHECK_METER (0x01)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LOW_BATTERY (0x02)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LOW_BATTERY_OFFSET (1)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TAMPER_DETECT (0x04)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TAMPER_DETECT_OFFSET (2)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TEMPERATURE_SENSOR (0x08)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TEMPERATURE_SENSOR_OFFSET (3)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_BURST_DETECT (0x10)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_BURST_DETECT_OFFSET (4)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LEAK_DETECT (0x20)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LEAK_DETECT_OFFSET (5)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_SERVICE_DISCONNECT (0x40)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_SERVICE_DISCONNECT_OFFSET (6)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_FLOW_SENSOR (0x80)
-#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_FLOW_SENSOR_OFFSET (7)
-#define EMBER_AF_METERING_EXTENDED_STATUS_METER_COVER_REMOVED (0x0000000000000001)
-#define EMBER_AF_METERING_EXTENDED_STATUS_STRONG_MAGNETIC_FIELD_DETECTED (0x0000000000000002)
-#define EMBER_AF_METERING_EXTENDED_STATUS_STRONG_MAGNETIC_FIELD_DETECTED_OFFSET (1)
-#define EMBER_AF_METERING_EXTENDED_STATUS_BATTERY_FAILURE (0x0000000000000004)
-#define EMBER_AF_METERING_EXTENDED_STATUS_BATTERY_FAILURE_OFFSET (2)
-#define EMBER_AF_METERING_EXTENDED_STATUS_PROGRAM_MEMORY_ERROR (0x0000000000000008)
-#define EMBER_AF_METERING_EXTENDED_STATUS_PROGRAM_MEMORY_ERROR_OFFSET (3)
-#define EMBER_AF_METERING_EXTENDED_STATUS_RAM_ERROR (0x0000000000000010)
-#define EMBER_AF_METERING_EXTENDED_STATUS_RAM_ERROR_OFFSET (4)
-#define EMBER_AF_METERING_EXTENDED_STATUS_NV_MEMORY_ERROR (0x0000000000000020)
-#define EMBER_AF_METERING_EXTENDED_STATUS_NV_MEMORY_ERROR_OFFSET (5)
-#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SYSTEM_ERROR (0x0000000000000040)
-#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SYSTEM_ERROR_OFFSET (6)
-#define EMBER_AF_METERING_EXTENDED_STATUS_WATCHDOG_ERROR (0x0000000000000080)
-#define EMBER_AF_METERING_EXTENDED_STATUS_WATCHDOG_ERROR_OFFSET (7)
-#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_DISCONNECT_FAILURE (0x0000000000000100)
-#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_DISCONNECT_FAILURE_OFFSET (8)
-#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_CONNECT_FAILURE (0x0000000000000200)
-#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_CONNECT_FAILURE_OFFSET (9)
-#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SW_CHANGED_TAMPERED (0x0000000000000400)
-#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SW_CHANGED_TAMPERED_OFFSET (10)
-#define EMBER_AF_METERING_EXTENDED_STATUS_CLOCK_INVALID (0x0000000000000800)
-#define EMBER_AF_METERING_EXTENDED_STATUS_CLOCK_INVALID_OFFSET (11)
-#define EMBER_AF_METERING_EXTENDED_STATUS_TEMPERATURE_EXCEEDED (0x0000000000001000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_TEMPERATURE_EXCEEDED_OFFSET (12)
-#define EMBER_AF_METERING_EXTENDED_STATUS_MOISTURE_DETECTED (0x0000000000002000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_MOISTURE_DETECTED_OFFSET (13)
-#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_BATTERY_COVER_REMOVED (0x0000000001000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_BATTERY_COVER_REMOVED_OFFSET (24)
-#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_TILT_TAMPER (0x0000000002000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_TILT_TAMPER_OFFSET (25)
-#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_EXCESS_FLOW (0x0000000004000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_EXCESS_FLOW_OFFSET (26)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_LIMIT_THRESHOLD_EXCEEDED (0x0000000008000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_LIMIT_THRESHOLD_EXCEEDED_OFFSET (27)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_UNDER_VOLTAGE (0x0000000010000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_UNDER_VOLTAGE_OFFSET (28)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_OVER_VOLTAGE (0x0000000020000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_OVER_VOLTAGE_OFFSET (29)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_POWER (0x0000000040000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_POWER_OFFSET (30)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_VOLTAGE \
- (0x0000000080000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_VOLTAGE_OFFSET (31)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_REMOTE_LOAD_CONTROL \
- (0x00000000C0000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_REMOTE_LOAD_CONTROL_OFFSET (30)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_BY_OTHER_REMOTE_COMMAND \
- (0x0000000100000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_BY_OTHER_REMOTE_COMMAND_OFFSET (32)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_SHORT_CIRCUIT \
- (0x0000000140000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_SHORT_CIRCUIT_OFFSET \
- (30)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_OTHER \
- (0x0000000180000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_OTHER_OFFSET (31)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_BI_DIRECTIONAL_OPERATION (0x0000000400000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_BI_DIRECTIONAL_OPERATION_OFFSET (34)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_ACTIVE_POWER_RECEIVED (0x0000000800000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_ACTIVE_POWER_RECEIVED_OFFSET (35)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_MODE_OF_OPERATION (0x0000001000000000)
-#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_MODE_OF_OPERATION_OFFSET (36)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_OTA_FIRMWARE (0x00000001)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CBKE_UPDATE_REQUEST (0x00000002)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CBKE_UPDATE_REQUEST_OFFSET (1)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TIME_SYNC (0x00000004)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TIME_SYNC_OFFSET (2)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_HAN (0x00000010)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_HAN_OFFSET (4)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_WAN (0x00000020)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_WAN_OFFSET (5)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET (0x000001C0)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET_OFFSET (6)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET (0x00000E00)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET_OFFSET (9)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER (0x00001000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER_OFFSET (12)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_METERING_CLUSTER (0x00002000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_METERING_CLUSTER_OFFSET (13)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER (0x00004000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER_OFFSET (14)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NETWORK_KEY_ACTIVE (0x00008000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NETWORK_KEY_ACTIVE_OFFSET (15)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_DISPLAY_MESSAGE (0x00010000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_DISPLAY_MESSAGE_OFFSET (16)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CANCEL_ALL_MESSAGES (0x00020000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CANCEL_ALL_MESSAGES_OFFSET (17)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANGE_SUPPLY (0x00040000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANGE_SUPPLY_OFFSET (18)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_LOCAL_CHANGE_SUPPLY (0x00080000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_LOCAL_CHANGE_SUPPLY_OFFSET (19)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_SET_UNCONTROLLED_FLOW_THRESHOLD (0x00100000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_SET_UNCONTROLLED_FLOW_THRESHOLD_OFFSET (20)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TUNNEL_MESSAGE_PENDING (0x00200000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TUNNEL_MESSAGE_PENDING_OFFSET (21)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SNAPSHOT (0x00400000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SNAPSHOT_OFFSET (22)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SAMPLED_DATA (0x00800000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SAMPLED_DATA_OFFSET (23)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE (0x01000000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE_OFFSET (24)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_ENERGY_SCAN_PENDING (0x02000000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_ENERGY_SCAN_PENDING_OFFSET (25)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANNEL_CHANGE_PENDING (0x04000000)
-#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANNEL_CHANGE_PENDING_OFFSET (26)
-#define EMBER_AF_SNAPSHOT_CAUSE_GENERAL (0x00000001)
-#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BILLING_PERIOD (0x00000002)
-#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BILLING_PERIOD_OFFSET (1)
-#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BLOCK_PERIOD (0x00000004)
-#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BLOCK_PERIOD_OFFSET (2)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TARIFF_INFORMATION (0x00000008)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TARIFF_INFORMATION_OFFSET (3)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_PRICE_MATRIX (0x00000010)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_PRICE_MATRIX_OFFSET (4)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_BLOCK_THRESHOLDS (0x00000020)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_BLOCK_THRESHOLDS_OFFSET (5)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CV (0x00000040)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CV_OFFSET (6)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CF (0x00000080)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CF_OFFSET (7)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CALENDAR (0x00000100)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CALENDAR_OFFSET (8)
-#define EMBER_AF_SNAPSHOT_CAUSE_CRITICAL_PEAK_PRICING (0x00000200)
-#define EMBER_AF_SNAPSHOT_CAUSE_CRITICAL_PEAK_PRICING_OFFSET (9)
-#define EMBER_AF_SNAPSHOT_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT (0x00000400)
-#define EMBER_AF_SNAPSHOT_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT_OFFSET (10)
-#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_RESOLVE_PERIOD (0x00000800)
-#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_RESOLVE_PERIOD_OFFSET (11)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TENANCY (0x00001000)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TENANCY_OFFSET (12)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_SUPPLIER (0x00002000)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_SUPPLIER_OFFSET (13)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_MODE (0x00004000)
-#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_MODE_OFFSET (14)
-#define EMBER_AF_SNAPSHOT_CAUSE_DEBT_PAYMENT (0x00008000)
-#define EMBER_AF_SNAPSHOT_CAUSE_DEBT_PAYMENT_OFFSET (15)
-#define EMBER_AF_SNAPSHOT_CAUSE_SCHEDULED_SNAPSHOT (0x00010000)
-#define EMBER_AF_SNAPSHOT_CAUSE_SCHEDULED_SNAPSHOT_OFFSET (16)
-#define EMBER_AF_SNAPSHOT_CAUSE_OTA_FIRMWARE_DOWNLOAD (0x00020000)
-#define EMBER_AF_SNAPSHOT_CAUSE_OTA_FIRMWARE_DOWNLOAD_OFFSET (17)
-#define EMBER_AF_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED (0x01)
-#define EMBER_AF_MESSAGING_CONTROL_MASK_TRANS_MECHANISM (0x03)
-#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_URGENCY (0x0C)
-#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_URGENCY_OFFSET (2)
-#define EMBER_AF_MESSAGING_CONTROL_MASK_ENHANCED_CONFIRMATION_REQUEST (0x20)
-#define EMBER_AF_MESSAGING_CONTROL_MASK_ENHANCED_CONFIRMATION_REQUEST_OFFSET (5)
-#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_CONFIRMATION (0x80)
-#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_CONFIRMATION_OFFSET (7)
-#define EMBER_AF_MESSAGING_EXTENDED_CONTROL_MASK_MESSAGE_CONFIRMATION_STATUS (0x01)
-#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_NO_RETURNED (0x01)
-#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_YES_RETURNED (0x02)
-#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_YES_RETURNED_OFFSET (1)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DISCONNECTION_ENABLED (0x0001)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_PREPAYMENT_ENABLED (0x0002)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_PREPAYMENT_ENABLED_OFFSET (1)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_MANAGEMENT_ENABLED (0x0004)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_MANAGEMENT_ENABLED_OFFSET (2)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_DISPLAY_ENABLED (0x0010)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_DISPLAY_ENABLED_OFFSET (4)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_ACCOUNT_BASE (0x0040)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_ACCOUNT_BASE_OFFSET (6)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CONTACTOR_FITTED (0x0080)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CONTACTOR_FITTED_OFFSET (7)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_STANDING_CHARGE_CONFIGURATION (0x0100)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_STANDING_CHARGE_CONFIGURATION_OFFSET (8)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_STANDING_CHARGE_CONFIGURATION (0x0200)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_STANDING_CHARGE_CONFIGURATION_OFFSET (9)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DEBT_CONFIGURATION (0x0400)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DEBT_CONFIGURATION_OFFSET (10)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_DEBT_CONFIGURATION (0x0800)
-#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_DEBT_CONFIGURATION_OFFSET (11)
-#define EMBER_AF_CREDIT_STATUS_CREDIT_OK (0x01)
-#define EMBER_AF_CREDIT_STATUS_LOW_CREDIT (0x02)
-#define EMBER_AF_CREDIT_STATUS_LOW_CREDIT_OFFSET (1)
-#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_ENABLED (0x04)
-#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_ENABLED_OFFSET (2)
-#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_AVAILABLE (0x08)
-#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_AVAILABLE_OFFSET (3)
-#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_SELECTED (0x10)
-#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_SELECTED_OFFSET (4)
-#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_IN_USE (0x20)
-#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_IN_USE_OFFSET (5)
-#define EMBER_AF_CREDIT_STATUS_CREDIT_EXHAUSTED (0x40)
-#define EMBER_AF_CREDIT_STATUS_CREDIT_EXHAUSTED_OFFSET (6)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_LOW_CREDIT_WARNING (0x0001)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ERROR (0x0002)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ERROR_OFFSET (1)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ALREADY_USED (0x0004)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ALREADY_USED_OFFSET (2)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_INVALID (0x0008)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_INVALID_OFFSET (3)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_IN_USE (0x0010)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_IN_USE_OFFSET (4)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_PERIOD_END_WARNING (0x0020)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_PERIOD_END_WARNING_OFFSET (5)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_EC_AVAILABLE (0x0040)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_EC_AVAILABLE_OFFSET (6)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_UNAUTHORISED_ENERGY_USE (0x0080)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_UNAUTHORISED_ENERGY_USE_OFFSET (7)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_CREDIT (0x0100)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_CREDIT_OFFSET (8)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_TAMPER (0x0200)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_TAMPER_OFFSET (9)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_HES (0x0400)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_HES_OFFSET (10)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_PHYSICAL_ATTACK (0x0800)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_PHYSICAL_ATTACK_OFFSET (11)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_ELECTRONIC_ATTACK (0x1000)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_ELECTRONIC_ATTACK_OFFSET (12)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_A (0x2000)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_A_OFFSET (13)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_B (0x4000)
-#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_B_OFFSET (14)
-#define EMBER_AF_ORIGINATOR_ID_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED (0x01)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_GENERAL (0x00000001)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TARIFF_INFORMATION (0x00000008)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TARIFF_INFORMATION_OFFSET (3)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_PRICE_MATRIX (0x00000010)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_PRICE_MATRIX_OFFSET (4)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT (0x00000400)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT_OFFSET (10)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TENANCY (0x00001000)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TENANCY_OFFSET (12)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_SUPPLIER (0x00002000)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_SUPPLIER_OFFSET (13)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_METER_MODE (0x00004000)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_METER_MODE_OFFSET (14)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_TOP_UP_ADDITION (0x00040000)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_TOP_UP_ADDITION_OFFSET (18)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_DEBT_CREDIT_ADDITION (0x00080000)
-#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_DEBT_CREDIT_ADDITION_OFFSET (19)
-#define EMBER_AF_FRIENDLY_CREDIT_FRIENDLY_CREDIT_ENABLED (0x01)
-#define EMBER_AF_LOAD_CONTROL_STATE_RELAY_OPEN_OR_CONSUMPTION_INTERUPTED (0x01)
-#define EMBER_AF_LOAD_CONTROL_STATE_EVENT_IN_PROGRESS (0x02)
-#define EMBER_AF_LOAD_CONTROL_STATE_EVENT_IN_PROGRESS_OFFSET (1)
-#define EMBER_AF_LOAD_CONTROL_STATE_POWER_STABILIZING (0x04)
-#define EMBER_AF_LOAD_CONTROL_STATE_POWER_STABILIZING_OFFSET (2)
-#define EMBER_AF_LOAD_CONTROL_STATE_OTHER_LOAD_REDUCTION (0x08)
-#define EMBER_AF_LOAD_CONTROL_STATE_OTHER_LOAD_REDUCTION_OFFSET (3)
-#define EMBER_AF_LOAD_CONTROL_STATE_CURRENT_FLOW_OR_CONSUMING_COMMODITY (0x10)
-#define EMBER_AF_LOAD_CONTROL_STATE_CURRENT_FLOW_OR_CONSUMING_COMMODITY_OFFSET (4)
-#define EMBER_AF_LOAD_CONTROL_STATE_LOAD_CALL (0x20)
-#define EMBER_AF_LOAD_CONTROL_STATE_LOAD_CALL_OFFSET (5)
-#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_START_TIME (0x01)
-#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_DURATION (0x02)
-#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_DURATION_OFFSET (1)
-#define EMBER_AF_CURRENT_EVENT_STATUS_EXTENDED_BITS_PRESENT (0x04)
-#define EMBER_AF_CURRENT_EVENT_STATUS_EXTENDED_BITS_PRESENT_OFFSET (2)
-#define EMBER_AF_CURRENT_EVENT_STATUS_EVENT_ACTIVE (0x08)
-#define EMBER_AF_CURRENT_EVENT_STATUS_EVENT_ACTIVE_OFFSET (3)
-#define EMBER_AF_CURRENT_EVENT_STATUS_DEVICE_PARTICIPATING_IN_EVENT (0x10)
-#define EMBER_AF_CURRENT_EVENT_STATUS_DEVICE_PARTICIPATING_IN_EVENT_OFFSET (4)
-#define EMBER_AF_CURRENT_EVENT_STATUS_REDUCING_LOAD (0x20)
-#define EMBER_AF_CURRENT_EVENT_STATUS_REDUCING_LOAD_OFFSET (5)
-#define EMBER_AF_CURRENT_EVENT_STATUS_ON_AT_END_OF_EVENT (0x40)
-#define EMBER_AF_CURRENT_EVENT_STATUS_ON_AT_END_OF_EVENT_OFFSET (6)
#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH1 (0x01)
+#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH1_OFFSET (0)
#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH2 (0x02)
#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH2_OFFSET (1)
#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH3 (0x04)
@@ -3080,52 +2685,314 @@ typedef enum
#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH7_OFFSET (6)
#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH8 (0x80)
#define EMBER_AF_AUXILIARY_LOAD_SWITCH_STATE_AUXILIARY_SWITCH8_OFFSET (7)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_PRE_SNAPSHOTS (0x00000001)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_POST_SNAPSHOTS (0x00000002)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_POST_SNAPSHOTS_OFFSET (1)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_CREDIT_REGISTER (0x00000004)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_CREDIT_REGISTER_OFFSET (2)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_DEBIT_REGISTER (0x00000008)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_DEBIT_REGISTER_OFFSET (3)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_BILLING_PERIOD (0x00000010)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_BILLING_PERIOD_OFFSET (4)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TARIFF_PLAN (0x00000020)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TARIFF_PLAN_OFFSET (5)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_STANDING_CHARGE (0x00000040)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_STANDING_CHARGE_OFFSET (6)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_BLOCK_HISTORICAL_LOAD_PROFILE_INFORMATION (0x00000080)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_BLOCK_HISTORICAL_LOAD_PROFILE_INFORMATION_OFFSET (7)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_HISTORICAL_LOAD_PROFILE_INFORMATION (0x00000100)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_HISTORICAL_LOAD_PROFILE_INFORMATION_OFFSET (8)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_CONSUMER (0x00000200)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_CONSUMER_OFFSET (9)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_SUPPLIER (0x00000400)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_SUPPLIER_OFFSET (10)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_METER_CONNECTOR_STATE_ON_OFF_ARMED (0x00001800)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_METER_CONNECTOR_STATE_ON_OFF_ARMED_OFFSET (11)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TRANSACTION_LOG (0x00002000)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TRANSACTION_LOG_OFFSET (13)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_PREPAYMENT_LOG (0x00004000)
-#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_PREPAYMENT_LOG_OFFSET (14)
-#define EMBER_AF_EVENT_CONFIGURATION_LOG_ACTION (0x07)
-#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_W_A_N (0x08)
-#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_W_A_N_OFFSET (3)
-#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_H_A_N (0x10)
-#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_H_A_N_OFFSET (4)
-#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_ZIG_BEE (0x20)
-#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_ZIG_BEE_OFFSET (5)
-#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_PHYSICAL (0x40)
-#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_PHYSICAL_OFFSET (6)
-#define EMBER_AF_EVENT_CONTROL_LOG_ID_LOG_ID (0x0F)
-#define EMBER_AF_EVENT_CONTROL_LOG_ID_EVENT_CONTROL (0xF0)
-#define EMBER_AF_EVENT_CONTROL_LOG_ID_EVENT_CONTROL_OFFSET (4)
-#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_H_A_N_DEVICES (0x01)
-#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_W_A_N (0x02)
-#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_W_A_N_OFFSET (1)
-#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_LOG_PAYLOAD_CONTROL (0x0F)
-#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_NUMBER_OF_EVENTS (0xF0)
-#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_NUMBER_OF_EVENTS_OFFSET (4)
+#define EMBER_AF_BALLAST_STATUS_NON_OPERATIONAL (0x1)
+#define EMBER_AF_BALLAST_STATUS_NON_OPERATIONAL_OFFSET (0)
+#define EMBER_AF_BALLAST_STATUS_LAMP_NOT_IN_SOCKET (0x2)
+#define EMBER_AF_BALLAST_STATUS_LAMP_NOT_IN_SOCKET_OFFSET (1)
+#define EMBER_AF_BARRIER_CONTROL_CAPABILITIES_PARTIAL_BARRIER (0x01)
+#define EMBER_AF_BARRIER_CONTROL_CAPABILITIES_PARTIAL_BARRIER_OFFSET (0)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_REMOTE_LOCKOUT (0x01)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_REMOTE_LOCKOUT_OFFSET (0)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_TEMPER_DETECTED (0x02)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_TEMPER_DETECTED_OFFSET (1)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_FAILED_COMMUNICATION (0x04)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_FAILED_COMMUNICATION_OFFSET (2)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_POSITION_FAILURE (0x08)
+#define EMBER_AF_BARRIER_CONTROL_SAFETY_STATUS_POSITION_FAILURE_OFFSET (3)
+#define EMBER_AF_BATTERY_ALARM_MASK_VOLTAGE_TOO_LOW (0x1)
+#define EMBER_AF_BATTERY_ALARM_MASK_VOLTAGE_TOO_LOW_OFFSET (0)
+#define EMBER_AF_BILL_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
+#define EMBER_AF_BILL_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_BILLING_PERIOD_DURATION_DURATION (0x3FFFFF)
+#define EMBER_AF_BILLING_PERIOD_DURATION_DURATION_OFFSET (0)
+#define EMBER_AF_BILLING_PERIOD_DURATION_UNITS (0xC00000)
+#define EMBER_AF_BILLING_PERIOD_DURATION_UNITS_OFFSET (22)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_TIMEBASE (0x0F)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_TIMEBASE_OFFSET (0)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_CONTROL (0xF0)
+#define EMBER_AF_BILLING_PERIOD_DURATION_TYPE_CONTROL_OFFSET (4)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT_REQUIREMENT (0x01)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT_REQUIREMENT_OFFSET (0)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK (0x02)
+#define EMBER_AF_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK_OFFSET (1)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE (0x0F)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_TIMEBASE_OFFSET (0)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_CONTROL (0xF0)
+#define EMBER_AF_BLOCK_PERIOD_DURATION_TYPE_CONTROL_OFFSET (4)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER1 (0x0002)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER1_OFFSET (1)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER2 (0x0004)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER2_OFFSET (2)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER3 (0x0008)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER3_OFFSET (3)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER4 (0x0010)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER4_OFFSET (4)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER5 (0x0020)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER5_OFFSET (5)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER6 (0x0040)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER6_OFFSET (6)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER7 (0x0080)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER7_OFFSET (7)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER8 (0x0100)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER8_OFFSET (8)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER9 (0x0200)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER9_OFFSET (9)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER10 (0x0400)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER10_OFFSET (10)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER11 (0x0800)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER11_OFFSET (11)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER12 (0x1000)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER12_OFFSET (12)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER13 (0x2000)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER13_OFFSET (13)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER14 (0x4000)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER14_OFFSET (14)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER15 (0x8000)
+#define EMBER_AF_BLOCK_THRESHOLD_MASK_TIER15_OFFSET (15)
+#define EMBER_AF_BLOCK_THRESHOLD_SUB_PAYLOAD_CONTROL_APPLY_TO_ALL_TOU_TIERS_OR_WHEN_BLOCK_ONLY_CHARGING (0x01)
+#define EMBER_AF_BLOCK_THRESHOLD_SUB_PAYLOAD_CONTROL_APPLY_TO_ALL_TOU_TIERS_OR_WHEN_BLOCK_ONLY_CHARGING_OFFSET (0)
+#define EMBER_AF_CO2_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
+#define EMBER_AF_CO2_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_CALORIFIC_VALUE_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
+#define EMBER_AF_CALORIFIC_VALUE_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL0 (0x00000001)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL0_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL0 (0x00000001)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL0_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL27 (0x00000001)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL27_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL35 (0x00000001)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL35_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL0 (0x00000001)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL0_OFFSET (0)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL1 (0x00000002)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL1_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL1 (0x00000002)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL1_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL28 (0x00000002)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL28_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_853_CHANNEL36 (0x00000002)
+#define EMBER_AF_CHANNEL_MASK_853_CHANNEL36_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL1 (0x00000002)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL1_OFFSET (1)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL2 (0x00000004)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL2_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL2 (0x00000004)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL2_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL29 (0x00000004)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL29_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL37 (0x00000004)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL37_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL2 (0x00000004)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL2_OFFSET (2)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL3 (0x00000008)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL3_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL3 (0x00000008)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL3_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL30 (0x00000008)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL30_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL38 (0x00000008)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL38_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL3 (0x00000008)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL3_OFFSET (3)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL4 (0x00000010)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL4_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL4 (0x00000010)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL4_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL31 (0x00000010)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL31_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL39 (0x00000010)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL39_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL4 (0x00000010)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL4_OFFSET (4)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL5 (0x00000020)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL5_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL5 (0x00000020)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL5_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL32 (0x00000020)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL32_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL40 (0x00000020)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL40_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL5 (0x00000020)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL5_OFFSET (5)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL6 (0x00000040)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL6_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL6 (0x00000040)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL6_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL33 (0x00000040)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL33_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL41 (0x00000040)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL41_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL6 (0x00000040)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL6_OFFSET (6)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL7 (0x00000080)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL7_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL7 (0x00000080)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL7_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL34 (0x00000080)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL34_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL42 (0x00000080)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL42_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL7 (0x00000080)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL7_OFFSET (7)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL8 (0x00000100)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL8_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL8 (0x00000100)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL8_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL62 (0x00000100)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL62_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL43 (0x00000100)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL43_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL8 (0x00000100)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL8_OFFSET (8)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL9 (0x00000200)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL9_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL9 (0x00000200)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL9_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL44 (0x00000200)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL44_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL9 (0x00000200)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL9_OFFSET (9)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL10 (0x00000400)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL10_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL10 (0x00000400)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL10_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL45 (0x00000400)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL45_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL10 (0x00000400)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL10_OFFSET (10)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL11 (0x00000800)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL11_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL11 (0x00000800)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL11_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL46 (0x00000800)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL46_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL11 (0x00000800)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL11_OFFSET (11)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL12 (0x00001000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL12_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL12 (0x00001000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL12_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL47 (0x00001000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL47_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL12 (0x00001000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL12_OFFSET (12)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL13 (0x00002000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL13_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL13 (0x00002000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL13_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL48 (0x00002000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL48_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL13 (0x00002000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL13_OFFSET (13)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL14 (0x00004000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL14_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL14 (0x00004000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL14_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL49 (0x00004000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL49_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL14 (0x00004000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL14_OFFSET (14)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL15 (0x00008000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL15_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL15 (0x00008000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL15_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL50 (0x00008000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL50_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL15 (0x00008000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL15_OFFSET (15)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL16 (0x00010000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL16_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL16 (0x00010000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL16_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL51 (0x00010000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL51_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL16 (0x00010000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL16_OFFSET (16)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL17 (0x00020000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL17_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL17 (0x00020000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL17_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL52 (0x00020000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL52_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL17 (0x00020000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL17_OFFSET (17)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL18 (0x00040000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL18_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL18 (0x00040000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL18_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL53 (0x00040000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL53_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL18 (0x00040000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL18_OFFSET (18)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL19 (0x00080000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL19_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL19 (0x00080000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL19_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL54 (0x00080000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL54_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL19 (0x00080000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL19_OFFSET (19)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL20 (0x00100000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL20_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL20 (0x00100000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL20_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL55 (0x00100000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL55_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL20 (0x00100000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL20_OFFSET (20)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL21 (0x00200000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL21_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL21 (0x00200000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL21_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL56 (0x00200000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL56_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL21 (0x00200000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL21_OFFSET (21)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL22 (0x00400000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL22_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL22 (0x00400000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL22_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL57 (0x00400000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL57_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL22 (0x00400000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL22_OFFSET (22)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL23 (0x00800000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL23_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL23 (0x00800000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL23_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL58 (0x00800000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL58_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL23 (0x00800000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL23_OFFSET (23)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL24 (0x01000000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL24_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL24 (0x01000000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL24_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL59 (0x01000000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL59_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL24 (0x01000000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL24_OFFSET (24)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL25 (0x02000000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL25_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL25 (0x02000000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL25_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL60 (0x02000000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL60_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL25 (0x02000000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL25_OFFSET (25)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL26 (0x04000000)
+#define EMBER_AF_CHANNEL_MASK_CHANNEL26_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL26 (0x04000000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL26_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL61 (0x04000000)
+#define EMBER_AF_CHANNEL_MASK_863_CHANNEL61_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL26 (0x04000000)
+#define EMBER_AF_CHANNEL_MASK_915_CHANNEL26_OFFSET (26)
+#define EMBER_AF_CHANNEL_MASK_PAGE (0xF8000000)
+#define EMBER_AF_CHANNEL_MASK_PAGE_OFFSET (27)
#define EMBER_AF_CLEARED_EVENTS_LOGS_ALL_LOGS_CLEARED (0x01)
+#define EMBER_AF_CLEARED_EVENTS_LOGS_ALL_LOGS_CLEARED_OFFSET (0)
#define EMBER_AF_CLEARED_EVENTS_LOGS_TAMPER_LOG_CLEARED (0x02)
#define EMBER_AF_CLEARED_EVENTS_LOGS_TAMPER_LOG_CLEARED_OFFSET (1)
#define EMBER_AF_CLEARED_EVENTS_LOGS_FAULT_LOG_CLEARED (0x04)
@@ -3136,97 +3003,254 @@ typedef enum
#define EMBER_AF_CLEARED_EVENTS_LOGS_SECURITY_EVENT_LOG_CLEARED_OFFSET (4)
#define EMBER_AF_CLEARED_EVENTS_LOGS_NETWORK_EVENT_LOG_CLEARED (0x20)
#define EMBER_AF_CLEARED_EVENTS_LOGS_NETWORK_EVENT_LOG_CLEARED_OFFSET (5)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL0 (0x00000001)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL1 (0x00000002)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL1_OFFSET (1)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL2 (0x00000004)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL2_OFFSET (2)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL3 (0x00000008)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL3_OFFSET (3)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL4 (0x00000010)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL4_OFFSET (4)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL5 (0x00000020)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL5_OFFSET (5)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL6 (0x00000040)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL6_OFFSET (6)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL7 (0x00000080)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL7_OFFSET (7)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL8 (0x00000100)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL8_OFFSET (8)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL9 (0x00000200)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL9_OFFSET (9)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL10 (0x00000400)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL10_OFFSET (10)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL11 (0x00000800)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL11_OFFSET (11)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL12 (0x00001000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL12_OFFSET (12)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL13 (0x00002000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL13_OFFSET (13)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL14 (0x00004000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL14_OFFSET (14)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL15 (0x00008000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL15_OFFSET (15)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL16 (0x00010000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL16_OFFSET (16)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL17 (0x00020000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL17_OFFSET (17)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL18 (0x00040000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL18_OFFSET (18)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL19 (0x00080000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL19_OFFSET (19)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL20 (0x00100000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL20_OFFSET (20)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL21 (0x00200000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL21_OFFSET (21)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL22 (0x00400000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL22_OFFSET (22)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL23 (0x00800000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL23_OFFSET (23)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL24 (0x01000000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL24_OFFSET (24)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL25 (0x02000000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL25_OFFSET (25)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL26 (0x04000000)
-#define EMBER_AF_CHANNEL_MASK915_CHANNEL26_OFFSET (26)
-#define EMBER_AF_CHANNEL_MASK_PAGE (0xF8000000)
-#define EMBER_AF_CHANNEL_MASK_PAGE_OFFSET (27)
-#define EMBER_AF_SCENES_COPY_MODE_COPY_ALL_SCENES (0x01)
-#define EMBER_AF_ON_OFF_CONTROL_ACCEPT_ONLY_WHEN_ON (0x01)
#define EMBER_AF_COLOR_CAPABILITIES_HUE_SATURATION_SUPPORTED (0x0001)
+#define EMBER_AF_COLOR_CAPABILITIES_HUE_SATURATION_SUPPORTED_OFFSET (0)
#define EMBER_AF_COLOR_CAPABILITIES_ENHANCED_HUE_SUPPORTED (0x0002)
#define EMBER_AF_COLOR_CAPABILITIES_ENHANCED_HUE_SUPPORTED_OFFSET (1)
#define EMBER_AF_COLOR_CAPABILITIES_COLOR_LOOP_SUPPORTED (0x0004)
#define EMBER_AF_COLOR_CAPABILITIES_COLOR_LOOP_SUPPORTED_OFFSET (2)
-#define EMBER_AF_COLOR_CAPABILITIES_X_Y_ATTRIBUTES_SUPPORTED (0x0008)
-#define EMBER_AF_COLOR_CAPABILITIES_X_Y_ATTRIBUTES_SUPPORTED_OFFSET (3)
+#define EMBER_AF_COLOR_CAPABILITIES_XY_ATTRIBUTES_SUPPORTED (0x0008)
+#define EMBER_AF_COLOR_CAPABILITIES_XY_ATTRIBUTES_SUPPORTED_OFFSET (3)
#define EMBER_AF_COLOR_CAPABILITIES_COLOR_TEMPERATURE_SUPPORTED (0x0010)
#define EMBER_AF_COLOR_CAPABILITIES_COLOR_TEMPERATURE_SUPPORTED_OFFSET (4)
#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_ACTION (0x01)
+#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_ACTION_OFFSET (0)
#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_DIRECTION (0x02)
#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_DIRECTION_OFFSET (1)
#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_TIME (0x04)
#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_TIME_OFFSET (2)
#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_START_HUE (0x08)
#define EMBER_AF_COLOR_LOOP_UPDATE_FLAGS_UPDATE_START_HUE_OFFSET (3)
-#define EMBER_AF_ZIGBEE_INFORMATION_LOGICAL_TYPE (0x03)
-#define EMBER_AF_ZIGBEE_INFORMATION_RX_ON_WHEN_IDLE (0x04)
-#define EMBER_AF_ZIGBEE_INFORMATION_RX_ON_WHEN_IDLE_OFFSET (2)
-#define EMBER_AF_ZLL_INFORMATION_FACTORY_NEW (0x01)
-#define EMBER_AF_ZLL_INFORMATION_ADDRESS_ASSIGNMENT (0x02)
-#define EMBER_AF_ZLL_INFORMATION_ADDRESS_ASSIGNMENT_OFFSET (1)
-#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_INITIATOR (0x10)
-#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_INITIATOR_OFFSET (4)
-#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_PRIORITY_REQUEST (0x20)
-#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_PRIORITY_REQUEST_OFFSET (5)
-#define EMBER_AF_ZLL_INFORMATION_PROFILE_INTEROP (0x80)
-#define EMBER_AF_ZLL_INFORMATION_PROFILE_INTEROP_OFFSET (7)
-#define EMBER_AF_KEY_BITMASK_DEVELOPMENT (0x0001)
-#define EMBER_AF_KEY_BITMASK_MASTER (0x0010)
-#define EMBER_AF_KEY_BITMASK_MASTER_OFFSET (4)
-#define EMBER_AF_KEY_BITMASK_CERTIFICATION (0x8000)
-#define EMBER_AF_KEY_BITMASK_CERTIFICATION_OFFSET (15)
+#define EMBER_AF_CONVERSION_FACTOR_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
+#define EMBER_AF_CONVERSION_FACTOR_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_OK (0x01)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_OK_OFFSET (0)
+#define EMBER_AF_CREDIT_STATUS_LOW_CREDIT (0x02)
+#define EMBER_AF_CREDIT_STATUS_LOW_CREDIT_OFFSET (1)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_ENABLED (0x04)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_ENABLED_OFFSET (2)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_AVAILABLE (0x08)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_AVAILABLE_OFFSET (3)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_SELECTED (0x10)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_SELECTED_OFFSET (4)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_IN_USE (0x20)
+#define EMBER_AF_CREDIT_STATUS_EMERGENCY_CREDIT_IN_USE_OFFSET (5)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_EXHAUSTED (0x40)
+#define EMBER_AF_CREDIT_STATUS_CREDIT_EXHAUSTED_OFFSET (6)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_BILLING_INFO (0x01)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_BILLING_INFO_OFFSET (0)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_BILLING_INFO_USING_NEW_CURRENCY (0x02)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_BILLING_INFO_USING_NEW_CURRENCY_OFFSET (1)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_OLD_CONSUMPTION_DATA (0x04)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CLEAR_OLD_CONSUMPTION_DATA_OFFSET (2)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_OLD_CONSUMPTION_DATA_USING_NEW_CURRENCY (0x08)
+#define EMBER_AF_CURRENCY_CHANGE_CONTROL_CONVERT_OLD_CONSUMPTION_DATA_USING_NEW_CURRENCY_OFFSET (3)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_START_TIME (0x01)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_START_TIME_OFFSET (0)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_DURATION (0x02)
+#define EMBER_AF_CURRENT_EVENT_STATUS_RANDOMIZED_DURATION_OFFSET (1)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EXTENDED_BITS_PRESENT (0x04)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EXTENDED_BITS_PRESENT_OFFSET (2)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EVENT_ACTIVE (0x08)
+#define EMBER_AF_CURRENT_EVENT_STATUS_EVENT_ACTIVE_OFFSET (3)
+#define EMBER_AF_CURRENT_EVENT_STATUS_DEVICE_PARTICIPATING_IN_EVENT (0x10)
+#define EMBER_AF_CURRENT_EVENT_STATUS_DEVICE_PARTICIPATING_IN_EVENT_OFFSET (4)
+#define EMBER_AF_CURRENT_EVENT_STATUS_REDUCING_LOAD (0x20)
+#define EMBER_AF_CURRENT_EVENT_STATUS_REDUCING_LOAD_OFFSET (5)
+#define EMBER_AF_CURRENT_EVENT_STATUS_ON_AT_END_OF_EVENT (0x40)
+#define EMBER_AF_CURRENT_EVENT_STATUS_ON_AT_END_OF_EVENT_OFFSET (6)
+#define EMBER_AF_DAY_OF_WEEK_SUNDAY (0x01)
+#define EMBER_AF_DAY_OF_WEEK_SUNDAY_OFFSET (0)
+#define EMBER_AF_DAY_OF_WEEK_MONDAY (0x02)
+#define EMBER_AF_DAY_OF_WEEK_MONDAY_OFFSET (1)
+#define EMBER_AF_DAY_OF_WEEK_TUESDAY (0x04)
+#define EMBER_AF_DAY_OF_WEEK_TUESDAY_OFFSET (2)
+#define EMBER_AF_DAY_OF_WEEK_WEDNESDAY (0x08)
+#define EMBER_AF_DAY_OF_WEEK_WEDNESDAY_OFFSET (3)
+#define EMBER_AF_DAY_OF_WEEK_THURSDAY (0x10)
+#define EMBER_AF_DAY_OF_WEEK_THURSDAY_OFFSET (4)
+#define EMBER_AF_DAY_OF_WEEK_FRIDAY (0x20)
+#define EMBER_AF_DAY_OF_WEEK_FRIDAY_OFFSET (5)
+#define EMBER_AF_DAY_OF_WEEK_SATURDAY (0x40)
+#define EMBER_AF_DAY_OF_WEEK_SATURDAY_OFFSET (6)
+#define EMBER_AF_DAY_OF_WEEK_AWAY_OR_VACATION (0x80)
+#define EMBER_AF_DAY_OF_WEEK_AWAY_OR_VACATION_OFFSET (7)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_LOW (0x1)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_LOW_OFFSET (0)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_HIGH (0x2)
+#define EMBER_AF_DEVICE_TEMP_ALARM_MASK_TOO_HIGH_OFFSET (1)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SUNDAY (0x01)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SUNDAY_OFFSET (0)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_MONDAY (0x02)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_MONDAY_OFFSET (1)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_TUESDAY (0x04)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_TUESDAY_OFFSET (2)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_WEDNESDAY (0x08)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_WEDNESDAY_OFFSET (3)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_THURSDAY (0x10)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_THURSDAY_OFFSET (4)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_FRIDAY (0x20)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_FRIDAY_OFFSET (5)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SATURDAY (0x40)
+#define EMBER_AF_DOOR_LOCK_DAY_OF_WEEK_SATURDAY_OFFSET (6)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_RIGHT_OF_THE_DECIMAL_POINT (0x07)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_RIGHT_OF_THE_DECIMAL_POINT_OFFSET (0)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_LEFT_OF_THE_DECIMAL_POINT (0x78)
+#define EMBER_AF_ENERGY_FORMATTING_NUMBER_OF_DIGITS_TO_THE_LEFT_OF_THE_DECIMAL_POINT_OFFSET (3)
+#define EMBER_AF_ENERGY_FORMATTING_SUPPRESS_LEADING_ZEROS (0x80)
+#define EMBER_AF_ENERGY_FORMATTING_SUPPRESS_LEADING_ZEROS_OFFSET (7)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_HAN_DEVICES (0x01)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_HAN_DEVICES_OFFSET (0)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_WAN (0x02)
+#define EMBER_AF_EVENT_ACTION_CONTROL_REPORT_EVENT_TO_WAN_OFFSET (1)
+#define EMBER_AF_EVENT_CONFIGURATION_LOG_ACTION (0x07)
+#define EMBER_AF_EVENT_CONFIGURATION_LOG_ACTION_OFFSET (0)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_WAN (0x08)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_WAN_OFFSET (3)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_HAN (0x10)
+#define EMBER_AF_EVENT_CONFIGURATION_PUSH_EVENT_TO_HAN_OFFSET (4)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_ZIG_BEE (0x20)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_ZIG_BEE_OFFSET (5)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_PHYSICAL (0x40)
+#define EMBER_AF_EVENT_CONFIGURATION_RAISE_ALARM_PHYSICAL_OFFSET (6)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_LOG_ID (0x0F)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_LOG_ID_OFFSET (0)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_EVENT_CONTROL (0xF0)
+#define EMBER_AF_EVENT_CONTROL_LOG_ID_EVENT_CONTROL_OFFSET (4)
+#define EMBER_AF_FRIENDLY_CREDIT_FRIENDLY_CREDIT_ENABLED (0x01)
+#define EMBER_AF_FRIENDLY_CREDIT_FRIENDLY_CREDIT_ENABLED_OFFSET (0)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_OTA_FIRMWARE (0x00000001)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_OTA_FIRMWARE_OFFSET (0)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CBKE_UPDATE_REQUEST (0x00000002)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CBKE_UPDATE_REQUEST_OFFSET (1)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TIME_SYNC (0x00000004)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TIME_SYNC_OFFSET (2)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_HAN (0x00000010)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_HAN_OFFSET (4)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_WAN (0x00000020)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_STAY_AWAKE_REQUEST_WAN_OFFSET (5)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET (0x000001C0)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET_OFFSET (6)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET (0x00000E00)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET_OFFSET (9)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER (0x00001000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER_OFFSET (12)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_METERING_CLUSTER (0x00002000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_METERING_CLUSTER_OFFSET (13)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER (0x00004000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER_OFFSET (14)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NETWORK_KEY_ACTIVE (0x00008000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NETWORK_KEY_ACTIVE_OFFSET (15)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_DISPLAY_MESSAGE (0x00010000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_DISPLAY_MESSAGE_OFFSET (16)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CANCEL_ALL_MESSAGES (0x00020000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CANCEL_ALL_MESSAGES_OFFSET (17)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANGE_SUPPLY (0x00040000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANGE_SUPPLY_OFFSET (18)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_LOCAL_CHANGE_SUPPLY (0x00080000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_LOCAL_CHANGE_SUPPLY_OFFSET (19)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_SET_UNCONTROLLED_FLOW_THRESHOLD (0x00100000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_SET_UNCONTROLLED_FLOW_THRESHOLD_OFFSET (20)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TUNNEL_MESSAGE_PENDING (0x00200000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_TUNNEL_MESSAGE_PENDING_OFFSET (21)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SNAPSHOT (0x00400000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SNAPSHOT_OFFSET (22)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SAMPLED_DATA (0x00800000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_GET_SAMPLED_DATA_OFFSET (23)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE (0x01000000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE_OFFSET (24)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_ENERGY_SCAN_PENDING (0x02000000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_ENERGY_SCAN_PENDING_OFFSET (25)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANNEL_CHANGE_PENDING (0x04000000)
+#define EMBER_AF_FUNCTIONAL_NOTIFICATION_FLAGS_CHANNEL_CHANGE_PENDING_OFFSET (26)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_ABSOLUTE_ONLY (0x1)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_ABSOLUTE_ONLY_OFFSET (0)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_RECALCULATE (0x2)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_RECALCULATE_OFFSET (1)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST (0x4)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_OFFSET (2)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_RESPONSE (0x8)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_BROADCAST_RESPONSE_OFFSET (3)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_COMPACT_RESPONSE (0x10)
+#define EMBER_AF_GET_LOCATION_DATA_FLAGS_COMPACT_RESPONSE_OFFSET (4)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MANUFACTURE_ID_PRESENT (0x01)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MANUFACTURE_ID_PRESENT_OFFSET (0)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MODEL_ID_PRESENT (0x02)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_MODEL_ID_PRESENT_OFFSET (1)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_GPD_COMMANDS_PRESENT (0x04)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_GPD_COMMANDS_PRESENT_OFFSET (2)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_CLUSTER_LIST_PRESENT (0x08)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_CLUSTER_LIST_PRESENT_OFFSET (3)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_SWITCH_INFORMATION_PRESENT (0x10)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_SWITCH_INFORMATION_PRESENT_OFFSET (4)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_APPLICATION_DESCRIPTION_PRESENT (0x20)
+#define EMBER_AF_GP_APPLICATION_INFORMATION_APPLICATION_DESCRIPTION_PRESENT_OFFSET (5)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_APPLICATION_ID (0x0007)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RX_AFTER_TX (0x0008)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RX_AFTER_TX_OFFSET (3)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_LEVEL (0x0030)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_LEVEL_OFFSET (4)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_KEY_TYPE (0x01C0)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_KEY_TYPE_OFFSET (6)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_PROCESSING_FAILED (0x0200)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_PROCESSING_FAILED_OFFSET (9)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY (0x0400)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY_OFFSET (10)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_PROXY_INFO_PRESENT (0x0800)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_PROXY_INFO_PRESENT_OFFSET (11)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RESERVED (0xF000)
+#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RESERVED_OFFSET (12)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_MASK (0x1F)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_MASK_OFFSET (0)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_OPERATIONAL_CHANNEL (0x0F)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_OPERATIONAL_CHANNEL_OFFSET (0)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_BASIC (0x10)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_BASIC_OFFSET (4)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_RESERVED (0xE0)
+#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_NEXT_ATTEMPT (0x0F)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_NEXT_ATTEMPT_OFFSET (0)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_SECOND_NEXT_ATTEMPT (0xF0)
+#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_SECOND_NEXT_ATTEMPT_OFFSET (4)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_SECURITY_LEVEL_CAPABILITIES (0x03)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_SECURITY_LEVEL_CAPABILITIES_OFFSET (0)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_KEY_TYPE (0x1C)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_KEY_TYPE_OFFSET (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_PRESENT (0x20)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_PRESENT_OFFSET (5)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_ENCRYPTION (0x40)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_ENCRYPTION_OFFSET (6)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_OUTGOING_COUNTER_PRESENT (0x80)
+#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_OUTGOING_COUNTER_PRESENT_OFFSET (7)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_MAC_SEQ_NUM_CAP (0x01)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_MAC_SEQ_NUM_CAP_OFFSET (0)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RX_ON_CAP (0x02)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RX_ON_CAP_OFFSET (1)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_APPLICATION_INFORMATION_PRESENT (0x04)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_APPLICATION_INFORMATION_PRESENT_OFFSET (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RESERVED (0x08)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RESERVED_OFFSET (3)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_PAN_ID_REQUEST (0x10)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_PAN_ID_REQUEST_OFFSET (4)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_GP_SECURITY_KEY_REQUEST (0x20)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_GP_SECURITY_KEY_REQUEST_OFFSET (5)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_FIXED_LOCATION (0x40)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_FIXED_LOCATION_OFFSET (6)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_EXTENDED_OPTIONS_FIELD (0x80)
+#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_EXTENDED_OPTIONS_FIELD_OFFSET (7)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_PAN_ID_PRESENT (0x01)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_PAN_ID_PRESENT_OFFSET (0)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPD_SECURITY_KEY_PRESENT (0x02)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPD_SECURITY_KEY_PRESENT_OFFSET (1)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPDKEY_ENCRYPTION (0x04)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPDKEY_ENCRYPTION_OFFSET (2)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_SECURITY_LEVEL (0x18)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_SECURITY_LEVEL_OFFSET (3)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_KEY_TYPE (0xE0)
+#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_KEY_TYPE_OFFSET (5)
#define EMBER_AF_GP_GPS_FUNCTIONALITY_GP_FEATURE (0x000001)
+#define EMBER_AF_GP_GPS_FUNCTIONALITY_GP_FEATURE_OFFSET (0)
#define EMBER_AF_GP_GPS_FUNCTIONALITY_DIRECT_COMMUNICATION (0x000002)
#define EMBER_AF_GP_GPS_FUNCTIONALITY_DIRECT_COMMUNICATION_OFFSET (1)
#define EMBER_AF_GP_GPS_FUNCTIONALITY_DERIVED_GROUPCAST_COMMUNICATION (0x000004)
@@ -3269,74 +3293,8 @@ typedef enum
#define EMBER_AF_GP_GPS_FUNCTIONALITY_COMPACT_ATTRIBUTE_REPORTING_OFFSET (20)
#define EMBER_AF_GP_GPS_FUNCTIONALITY_RESERVED (0xE00000)
#define EMBER_AF_GP_GPS_FUNCTIONALITY_RESERVED_OFFSET (21)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_APPLICATION_ID (0x00000007)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_ACTIVE (0x00000008)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_ACTIVE_OFFSET (3)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_VALID (0x00000010)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_VALID_OFFSET (4)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SEQUENCE_NUMBER_CAP (0x00000020)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SEQUENCE_NUMBER_CAP_OFFSET (5)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_LIGHTWEIGHT_UNICAST_GPS (0x00000040)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_LIGHTWEIGHT_UNICAST_GPS_OFFSET (6)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_DERIVED_GROUP_GPS (0x00000080)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_DERIVED_GROUP_GPS_OFFSET (7)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_COMMISIONED_GROUP_GPS (0x00000100)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_COMMISIONED_GROUP_GPS_OFFSET (8)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FIRST_TO_FORWARD (0x00000200)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FIRST_TO_FORWARD_OFFSET (9)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_IN_RANGE (0x00000400)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_IN_RANGE_OFFSET (10)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_GPD_FIXED (0x00000800)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_GPD_FIXED_OFFSET (11)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_HAS_ALL_UNICAST_ROUTES (0x00001000)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_HAS_ALL_UNICAST_ROUTES_OFFSET (12)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS (0x00002000)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS_OFFSET (13)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SECURITY_USE (0x00004000)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SECURITY_USE_OFFSET (14)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_EXTENSION (0x00008000)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_EXTENSION_OFFSET (15)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FULL_UNICAST_GPS (0x00010000)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FULL_UNICAST_GPS_OFFSET (16)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL (0x03)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE (0x1C)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE_OFFSET (2)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED (0xE0)
-#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED_OFFSET (5)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_MAC_SEQ_NUM_CAP (0x01)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RX_ON_CAP (0x02)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RX_ON_CAP_OFFSET (1)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_APPLICATION_INFORMATION_PRESENT (0x04)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_APPLICATION_INFORMATION_PRESENT_OFFSET (2)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RESERVED (0x08)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_RESERVED_OFFSET (3)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_PAN_ID_REQUEST (0x10)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_PAN_ID_REQUEST_OFFSET (4)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_GP_SECURITY_KEY_REQUEST (0x20)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_GP_SECURITY_KEY_REQUEST_OFFSET (5)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_FIXED_LOCATION (0x40)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_FIXED_LOCATION_OFFSET (6)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_EXTENDED_OPTIONS_FIELD (0x80)
-#define EMBER_AF_GP_GPD_COMMISSIONING_OPTIONS_EXTENDED_OPTIONS_FIELD_OFFSET (7)
-#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_SECURITY_LEVEL_CAPABILITIES (0x03)
-#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_KEY_TYPE (0x1C)
-#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_KEY_TYPE_OFFSET (2)
-#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_PRESENT (0x20)
-#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_PRESENT_OFFSET (5)
-#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_ENCRYPTION (0x40)
-#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_KEY_ENCRYPTION_OFFSET (6)
-#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_OUTGOING_COUNTER_PRESENT (0x80)
-#define EMBER_AF_GP_GPD_COMMISSIONING_EXTENDED_OPTIONS_GPD_OUTGOING_COUNTER_PRESENT_OFFSET (7)
-#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_PAN_ID_PRESENT (0x01)
-#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPD_SECURITY_KEY_PRESENT (0x02)
-#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPD_SECURITY_KEY_PRESENT_OFFSET (1)
-#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPDKEY_ENCRYPTION (0x04)
-#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_GPDKEY_ENCRYPTION_OFFSET (2)
-#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_SECURITY_LEVEL (0x18)
-#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_SECURITY_LEVEL_OFFSET (3)
-#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_KEY_TYPE (0xE0)
-#define EMBER_AF_GP_GPD_COMMISSIONING_REPLY_OPTIONS_KEY_TYPE_OFFSET (5)
#define EMBER_AF_GP_NOTIFICATION_OPTION_APPLICATION_ID (0x0007)
+#define EMBER_AF_GP_NOTIFICATION_OPTION_APPLICATION_ID_OFFSET (0)
#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_UNICAST (0x0008)
#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_UNICAST_OFFSET (3)
#define EMBER_AF_GP_NOTIFICATION_OPTION_ALSO_DERIVED_GROUP (0x0010)
@@ -3357,86 +3315,22 @@ typedef enum
#define EMBER_AF_GP_NOTIFICATION_OPTION_PROXY_INFO_PRESENT_OFFSET (14)
#define EMBER_AF_GP_NOTIFICATION_OPTION_RESERVED (0x8000)
#define EMBER_AF_GP_NOTIFICATION_OPTION_RESERVED_OFFSET (15)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_APPLICATION_ID (0x0007)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_UNICAST_SINKS (0x0008)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_UNICAST_SINKS_OFFSET (3)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_DERIVED_GROUPCAST_SINKS (0x0010)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_DERIVED_GROUPCAST_SINKS_OFFSET (4)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_COMMISSIONED_GROUPCAST_SINKS (0x0020)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_COMMISSIONED_GROUPCAST_SINKS_OFFSET (5)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_FRAME_COUNTER (0x0040)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_FRAME_COUNTER_OFFSET (6)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_KEY (0x0080)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_KEY_OFFSET (7)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_RESERVED (0xFF00)
-#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_RESERVED_OFFSET (8)
-#define EMBER_AF_GP_TUNNELING_STOP_OPTION_APPLICATION_ID (0x07)
-#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_DERIVED_GROUP (0x08)
-#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_DERIVED_GROUP_OFFSET (3)
-#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_COMMISSIONED_GROUP (0x10)
-#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_COMMISSIONED_GROUP_OFFSET (4)
-#define EMBER_AF_GP_TUNNELING_STOP_OPTION_RESERVED (0xE0)
-#define EMBER_AF_GP_TUNNELING_STOP_OPTION_RESERVED_OFFSET (5)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_APPLICATION_ID (0x0007)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RX_AFTER_TX (0x0008)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RX_AFTER_TX_OFFSET (3)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_LEVEL (0x0030)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_LEVEL_OFFSET (4)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_KEY_TYPE (0x01C0)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_KEY_TYPE_OFFSET (6)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_PROCESSING_FAILED (0x0200)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_PROCESSING_FAILED_OFFSET (9)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY (0x0400)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_BIDIRECTIONAL_CAPABILITY_OFFSET (10)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_PROXY_INFO_PRESENT (0x0800)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_PROXY_INFO_PRESENT_OFFSET (11)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RESERVED (0xF000)
-#define EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_RESERVED_OFFSET (12)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_ACTION (0x01)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_SECURITY (0x02)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_SECURITY_OFFSET (1)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_PAIRING (0x04)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_PAIRING_OFFSET (2)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_PROXIES (0x08)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_PROXIES_OFFSET (3)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_RESERVED (0xF0)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_RESERVED_OFFSET (4)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION (0x01)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS (0x02)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS_OFFSET (1)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT (0x04)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT_OFFSET (2)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_RESERVED (0xF8)
-#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_RESERVED_OFFSET (3)
-#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_APPLICATION_ID (0x07)
-#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TYPE (0x18)
-#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_OFFSET (3)
-#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_RESERVED (0xE0)
-#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_RESERVED_OFFSET (5)
-#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_APPLICATION_ID (0x0007)
-#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ACTION (0x0018)
-#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ACTION_OFFSET (3)
-#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_NUMBER_OF_TRANSLATIONS (0x00E0)
-#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_NUMBER_OF_TRANSLATIONS_OFFSET (5)
-#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT (0x0100)
-#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT_OFFSET (8)
-#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_RESERVED (0xFE00)
-#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_RESERVED_OFFSET (9)
-#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_GPD_ID (0x01)
-#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_CMD_ID (0x02)
-#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_CMD_ID_OFFSET (1)
-#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_PAYLOAD (0x04)
-#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_PAYLOAD_OFFSET (2)
-#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ZB_ENDPOINT (0x08)
-#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ZB_ENDPOINT_OFFSET (3)
-#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ADDITIONAL_INFO_BLOCK (0x10)
-#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ADDITIONAL_INFO_BLOCK_OFFSET (4)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_APPLICATION_ID (0x07)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_FIRST_TO_FORWARD (0x08)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_FIRST_TO_FORWARD_OFFSET (3)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_NO_PAIRING (0x10)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_NO_PAIRING_OFFSET (4)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_RESERVED (0xE0)
+#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_RESERVED_OFFSET (5)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_ACTION (0x07)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_ACTION_OFFSET (0)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_SEND_GP_PAIRING (0x08)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_SEND_GP_PAIRING_OFFSET (3)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_RESERVED (0xF0)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_RESERVED_OFFSET (4)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_ID (0x0007)
+#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_ID_OFFSET (0)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE (0x0018)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_COMMUNICATION_MODE_OFFSET (3)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_SEQUENCE_NUMBER_CAPABILITIES (0x0020)
@@ -3453,25 +3347,8 @@ typedef enum
#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_APPLICATION_INFORMATION_PRESENT_OFFSET (10)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_RESERVED (0xF800)
#define EMBER_AF_GP_PAIRING_CONFIGURATION_OPTION_RESERVED_OFFSET (11)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_MANUFACTURE_ID_PRESENT (0x01)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_MODEL_ID_PRESENT (0x02)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_MODEL_ID_PRESENT_OFFSET (1)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_GPD_COMMANDS_PRESENT (0x04)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_GPD_COMMANDS_PRESENT_OFFSET (2)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_CLUSTER_LIST_PRESENT (0x08)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_CLUSTER_LIST_PRESENT_OFFSET (3)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_SWITCH_INFORMATION_PRESENT (0x10)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_SWITCH_INFORMATION_PRESENT_OFFSET (4)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_APPLICATION_DESCRIPTION_PRESENT (0x20)
-#define EMBER_AF_GP_APPLICATION_INFORMATION_APPLICATION_DESCRIPTION_PRESENT_OFFSET (5)
-#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_APPLICATION_ID (0x07)
-#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_FIRST_TO_FORWARD (0x08)
-#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_FIRST_TO_FORWARD_OFFSET (3)
-#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_NO_PAIRING (0x10)
-#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_NO_PAIRING_OFFSET (4)
-#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_RESERVED (0xE0)
-#define EMBER_AF_GP_NOTIFICATION_RESPONSE_OPTION_RESERVED_OFFSET (5)
#define EMBER_AF_GP_PAIRING_OPTION_APPLICATION_ID (0x000007)
+#define EMBER_AF_GP_PAIRING_OPTION_APPLICATION_ID_OFFSET (0)
#define EMBER_AF_GP_PAIRING_OPTION_ADD_SINK (0x000008)
#define EMBER_AF_GP_PAIRING_OPTION_ADD_SINK_OFFSET (3)
#define EMBER_AF_GP_PAIRING_OPTION_REMOVE_GPD (0x000010)
@@ -3496,7 +3373,28 @@ typedef enum
#define EMBER_AF_GP_PAIRING_OPTION_GROUPCAST_RADIUS_PRESENT_OFFSET (17)
#define EMBER_AF_GP_PAIRING_OPTION_RESERVED (0xFC0000)
#define EMBER_AF_GP_PAIRING_OPTION_RESERVED_OFFSET (18)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_APPLICATION_ID (0x0007)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_UNICAST_SINKS (0x0008)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_UNICAST_SINKS_OFFSET (3)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_DERIVED_GROUPCAST_SINKS (0x0010)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_DERIVED_GROUPCAST_SINKS_OFFSET (4)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_COMMISSIONED_GROUPCAST_SINKS (0x0020)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_COMMISSIONED_GROUPCAST_SINKS_OFFSET (5)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_FRAME_COUNTER (0x0040)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_FRAME_COUNTER_OFFSET (6)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_KEY (0x0080)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_REQUEST_GPD_SECURITY_KEY_OFFSET (7)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_RESERVED (0xFF00)
+#define EMBER_AF_GP_PAIRING_SEARCH_OPTION_RESERVED_OFFSET (8)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION (0x02)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION_OFFSET (1)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS (0x04)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS_OFFSET (2)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT (0x08)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT_OFFSET (3)
#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_ACTION (0x01)
+#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_ACTION_OFFSET (0)
#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_COMMISSIONING_WINDOW_PRESENT (0x02)
#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_COMMISSIONING_WINDOW_PRESENT_OFFSET (1)
#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_EXIT_MODE (0x0C)
@@ -3507,21 +3405,78 @@ typedef enum
#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_UNICAST_COMMUNICATION_OFFSET (5)
#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_RESERVED (0xC0)
#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_OPTION_RESERVED_OFFSET (6)
-#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION (0x02)
-#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION_OFFSET (1)
-#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS (0x04)
-#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS_OFFSET (2)
-#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT (0x08)
-#define EMBER_AF_GP_PROXY_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT_OFFSET (3)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_APPLICATION_ID (0x00000007)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_ACTIVE (0x00000008)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_ACTIVE_OFFSET (3)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_VALID (0x00000010)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ENTRY_VALID_OFFSET (4)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SEQUENCE_NUMBER_CAP (0x00000020)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SEQUENCE_NUMBER_CAP_OFFSET (5)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_LIGHTWEIGHT_UNICAST_GPS (0x00000040)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_LIGHTWEIGHT_UNICAST_GPS_OFFSET (6)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_DERIVED_GROUP_GPS (0x00000080)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_DERIVED_GROUP_GPS_OFFSET (7)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_COMMISIONED_GROUP_GPS (0x00000100)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_COMMISIONED_GROUP_GPS_OFFSET (8)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FIRST_TO_FORWARD (0x00000200)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FIRST_TO_FORWARD_OFFSET (9)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_IN_RANGE (0x00000400)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_IN_RANGE_OFFSET (10)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_GPD_FIXED (0x00000800)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_GPD_FIXED_OFFSET (11)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_HAS_ALL_UNICAST_ROUTES (0x00001000)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_HAS_ALL_UNICAST_ROUTES_OFFSET (12)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS (0x00002000)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_ASSIGNED_ALIAS_OFFSET (13)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SECURITY_USE (0x00004000)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_SECURITY_USE_OFFSET (14)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_EXTENSION (0x00008000)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_EXTENSION_OFFSET (15)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FULL_UNICAST_GPS (0x00010000)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_OPTIONS_FULL_UNICAST_GPS_OFFSET (16)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL (0x03)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL_OFFSET (0)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE (0x1C)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE_OFFSET (2)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED (0xE0)
+#define EMBER_AF_GP_PROXY_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_APPLICATION_ID (0x07)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE (0x18)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_OFFSET (3)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_RESERVED (0xE0)
+#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_RESERVED_OFFSET (5)
#define EMBER_AF_GP_RESPONSE_OPTION_APPLICATION_ID (0x07)
+#define EMBER_AF_GP_RESPONSE_OPTION_APPLICATION_ID_OFFSET (0)
#define EMBER_AF_GP_RESPONSE_OPTION_TRANSMIT_ON_END_POINT_MATCH (0x08)
#define EMBER_AF_GP_RESPONSE_OPTION_TRANSMIT_ON_END_POINT_MATCH_OFFSET (3)
#define EMBER_AF_GP_RESPONSE_OPTION_RESERVED (0xF0)
#define EMBER_AF_GP_RESPONSE_OPTION_RESERVED_OFFSET (4)
#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_TRANSMIT_CHANNEL (0x0F)
+#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_TRANSMIT_CHANNEL_OFFSET (0)
#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_RESERVED (0xF0)
#define EMBER_AF_GP_RESPONSE_TEMP_MASTER_TX_CHANNEL_RESERVED_OFFSET (4)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION (0x01)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_COMMISSIONING_WINDOW_EXPIRATION_OFFSET (0)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS (0x02)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_FIRST_PAIRING_SUCCESS_OFFSET (1)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT (0x04)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_ON_GP_PROXY_COMMISSIONING_MODE_EXIT_OFFSET (2)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_RESERVED (0xF8)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_EXIT_MODE_RESERVED_OFFSET (3)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_ACTION (0x01)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_ACTION_OFFSET (0)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_SECURITY (0x02)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_SECURITY_OFFSET (1)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_PAIRING (0x04)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_GPM_IN_PAIRING_OFFSET (2)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_PROXIES (0x08)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_INVOLVE_PROXIES_OFFSET (3)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_RESERVED (0xF0)
+#define EMBER_AF_GP_SINK_COMMISSIONING_MODE_OPTIONS_RESERVED_OFFSET (4)
#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_APPLICATION_ID (0x0007)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_APPLICATION_ID_OFFSET (0)
#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_COMMUNICATION_MODE (0x0018)
#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_COMMUNICATION_MODE_OFFSET (3)
#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_SEQUENCE_NUM_CAPABILITIES (0x0020)
@@ -3537,34 +3492,564 @@ typedef enum
#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_RESERVED (0xFC00)
#define EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_RESERVED_OFFSET (10)
#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL (0x03)
+#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_LEVEL_OFFSET (0)
#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE (0x1C)
#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_SECURITY_KEY_TYPE_OFFSET (2)
#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED (0xE0)
#define EMBER_AF_GP_SINK_TABLE_ENTRY_SECURITY_OPTIONS_RESERVED_OFFSET (5)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_APPLICATION_ID (0x07)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TYPE (0x18)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_OFFSET (3)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_RESERVED (0xE0)
+#define EMBER_AF_GP_SINK_TABLE_REQUEST_OPTIONS_RESERVED_OFFSET (5)
#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_APPLICATION_ID (0x07)
+#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_APPLICATION_ID_OFFSET (0)
#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT (0x08)
#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT_OFFSET (3)
#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_RESERVED (0xF0)
#define EMBER_AF_GP_TRANSLATION_TABLE_RESPONSE_OPTION_RESERVED_OFFSET (4)
-#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_APPLICATION_ID (0x07)
-#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE (0x18)
-#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_REQUEST_TYPE_OFFSET (3)
-#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_RESERVED (0xE0)
-#define EMBER_AF_GP_PROXY_TABLE_REQUEST_OPTIONS_RESERVED_OFFSET (5)
-#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_NEXT_ATTEMPT (0x0F)
-#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_SECOND_NEXT_ATTEMPT (0xF0)
-#define EMBER_AF_GP_GPD_CHANNEL_REQUEST_CHANNEL_TOGGLING_BEHAVIOUR_RX_CHANNEL_SECOND_NEXT_ATTEMPT_OFFSET (4)
-#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_MASK (0x1F)
-#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_OPERATIONAL_CHANNEL (0x0F)
-#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_BASIC (0x10)
-#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_BASIC_OFFSET (4)
-#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_RESERVED (0xE0)
-#define EMBER_AF_GP_GPD_CHANNEL_CONFIGURATION_CHANNEL_RESERVED_OFFSET (5)
-#define EMBER_AF_GP_RESPONSE_OPTION_MASK (0x0F)
-#define EMBER_AF_GP_RESPONSE_OPTION_TRANSMIT_ON_END_POINT_MATCH (0x08)
-#define EMBER_AF_GP_RESPONSE_OPTION_TRANSMIT_ON_END_POINT_MATCH_OFFSET (3)
-#define EMBER_AF_GP_RESPONSE_OPTION_RESERVED (0xF0)
-#define EMBER_AF_GP_RESPONSE_OPTION_RESERVED_OFFSET (4)
-/** @} END Enums */
-/** @} END addtogroup */
-#endif // SILABS_EMBER_AF_ENUMS
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_GPD_ID (0x01)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_GPD_ID_OFFSET (0)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_CMD_ID (0x02)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_CMD_ID_OFFSET (1)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_PAYLOAD (0x04)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_PAYLOAD_OFFSET (2)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ZB_ENDPOINT (0x08)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ZB_ENDPOINT_OFFSET (3)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ADDITIONAL_INFO_BLOCK (0x10)
+#define EMBER_AF_GP_TRANSLATION_TABLE_SCAN_LEVEL_ADDITIONAL_INFO_BLOCK_OFFSET (4)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_APPLICATION_ID (0x0007)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ACTION (0x0018)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ACTION_OFFSET (3)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_NUMBER_OF_TRANSLATIONS (0x00E0)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_NUMBER_OF_TRANSLATIONS_OFFSET (5)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT (0x0100)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_ADDITIONAL_INFORMATION_BLOCK_PRESENT_OFFSET (8)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_RESERVED (0xFE00)
+#define EMBER_AF_GP_TRANSLATION_TABLE_UPDATE_OPTION_RESERVED_OFFSET (9)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_APPLICATION_ID (0x07)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_APPLICATION_ID_OFFSET (0)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_DERIVED_GROUP (0x08)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_DERIVED_GROUP_OFFSET (3)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_COMMISSIONED_GROUP (0x10)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_ALSO_COMMISSIONED_GROUP_OFFSET (4)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_RESERVED (0xE0)
+#define EMBER_AF_GP_TUNNELING_STOP_OPTION_RESERVED_OFFSET (5)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM1 (0x1)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM1_OFFSET (0)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM2 (0x2)
+#define EMBER_AF_IAS_ZONE_STATUS_ALARM2_OFFSET (1)
+#define EMBER_AF_IAS_ZONE_STATUS_TAMPER (0x4)
+#define EMBER_AF_IAS_ZONE_STATUS_TAMPER_OFFSET (2)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY (0x8)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_OFFSET (3)
+#define EMBER_AF_IAS_ZONE_STATUS_SUPERVISION_REPORTS (0x10)
+#define EMBER_AF_IAS_ZONE_STATUS_SUPERVISION_REPORTS_OFFSET (4)
+#define EMBER_AF_IAS_ZONE_STATUS_RESTORE_REPORTS (0x20)
+#define EMBER_AF_IAS_ZONE_STATUS_RESTORE_REPORTS_OFFSET (5)
+#define EMBER_AF_IAS_ZONE_STATUS_TROUBLE (0x40)
+#define EMBER_AF_IAS_ZONE_STATUS_TROUBLE_OFFSET (6)
+#define EMBER_AF_IAS_ZONE_STATUS_AC (0x80)
+#define EMBER_AF_IAS_ZONE_STATUS_AC_OFFSET (7)
+#define EMBER_AF_IAS_ZONE_STATUS_TEST (0x100)
+#define EMBER_AF_IAS_ZONE_STATUS_TEST_OFFSET (8)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_DEFECT (0x200)
+#define EMBER_AF_IAS_ZONE_STATUS_BATTERY_DEFECT_OFFSET (9)
+#define EMBER_AF_KEY_BITMASK_DEVELOPMENT (0x0001)
+#define EMBER_AF_KEY_BITMASK_DEVELOPMENT_OFFSET (0)
+#define EMBER_AF_KEY_BITMASK_MASTER (0x0010)
+#define EMBER_AF_KEY_BITMASK_MASTER_OFFSET (4)
+#define EMBER_AF_KEY_BITMASK_CERTIFICATION (0x8000)
+#define EMBER_AF_KEY_BITMASK_CERTIFICATION_OFFSET (15)
+#define EMBER_AF_LAMP_ALARM_MODE_LAMP_BURN_HOURS (0x1)
+#define EMBER_AF_LAMP_ALARM_MODE_LAMP_BURN_HOURS_OFFSET (0)
+#define EMBER_AF_LOAD_CONTROL_STATE_RELAY_OPEN_OR_CONSUMPTION_INTERUPTED (0x01)
+#define EMBER_AF_LOAD_CONTROL_STATE_RELAY_OPEN_OR_CONSUMPTION_INTERUPTED_OFFSET (0)
+#define EMBER_AF_LOAD_CONTROL_STATE_EVENT_IN_PROGRESS (0x02)
+#define EMBER_AF_LOAD_CONTROL_STATE_EVENT_IN_PROGRESS_OFFSET (1)
+#define EMBER_AF_LOAD_CONTROL_STATE_POWER_STABILIZING (0x04)
+#define EMBER_AF_LOAD_CONTROL_STATE_POWER_STABILIZING_OFFSET (2)
+#define EMBER_AF_LOAD_CONTROL_STATE_OTHER_LOAD_REDUCTION (0x08)
+#define EMBER_AF_LOAD_CONTROL_STATE_OTHER_LOAD_REDUCTION_OFFSET (3)
+#define EMBER_AF_LOAD_CONTROL_STATE_CURRENT_FLOW_OR_CONSUMING_COMMODITY (0x10)
+#define EMBER_AF_LOAD_CONTROL_STATE_CURRENT_FLOW_OR_CONSUMING_COMMODITY_OFFSET (4)
+#define EMBER_AF_LOAD_CONTROL_STATE_LOAD_CALL (0x20)
+#define EMBER_AF_LOAD_CONTROL_STATE_LOAD_CALL_OFFSET (5)
+#define EMBER_AF_LOCATION_TYPE_ABSOLUTE (0x1)
+#define EMBER_AF_LOCATION_TYPE_ABSOLUTE_OFFSET (0)
+#define EMBER_AF_LOCATION_TYPE_2_D (0x2)
+#define EMBER_AF_LOCATION_TYPE_2_D_OFFSET (1)
+#define EMBER_AF_LOCATION_TYPE_COORDINATE_SYSTEM (0xc)
+#define EMBER_AF_LOCATION_TYPE_COORDINATE_SYSTEM_OFFSET (2)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_LOW (0x1)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_LOW_OFFSET (0)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_HIGH (0x2)
+#define EMBER_AF_MAINS_ALARM_MASK_VOLTAGE_TOO_HIGH_OFFSET (1)
+#define EMBER_AF_MAINS_ALARM_MASK_MAINS_POWER_SUPPLY_LOST (0x4)
+#define EMBER_AF_MAINS_ALARM_MASK_MAINS_POWER_SUPPLY_LOST_OFFSET (2)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_NO_RETURNED (0x01)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_NO_RETURNED_OFFSET (0)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_YES_RETURNED (0x02)
+#define EMBER_AF_MESSAGING_CONFIRMATION_CONTROL_YES_RETURNED_OFFSET (1)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_TRANS_MECHANISM (0x03)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_TRANS_MECHANISM_OFFSET (0)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_URGENCY (0x0C)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_URGENCY_OFFSET (2)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_ENHANCED_CONFIRMATION_REQUEST (0x20)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_ENHANCED_CONFIRMATION_REQUEST_OFFSET (5)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_CONFIRMATION (0x80)
+#define EMBER_AF_MESSAGING_CONTROL_MASK_MESSAGE_CONFIRMATION_OFFSET (7)
+#define EMBER_AF_MESSAGING_EXTENDED_CONTROL_MASK_MESSAGE_CONFIRMATION_STATUS (0x01)
+#define EMBER_AF_MESSAGING_EXTENDED_CONTROL_MASK_MESSAGE_CONFIRMATION_STATUS_OFFSET (0)
+#define EMBER_AF_METERING_EXTENDED_STATUS_METER_COVER_REMOVED (0x0000000000000001)
+#define EMBER_AF_METERING_EXTENDED_STATUS_METER_COVER_REMOVED_OFFSET (0)
+#define EMBER_AF_METERING_EXTENDED_STATUS_STRONG_MAGNETIC_FIELD_DETECTED (0x0000000000000002)
+#define EMBER_AF_METERING_EXTENDED_STATUS_STRONG_MAGNETIC_FIELD_DETECTED_OFFSET (1)
+#define EMBER_AF_METERING_EXTENDED_STATUS_BATTERY_FAILURE (0x0000000000000004)
+#define EMBER_AF_METERING_EXTENDED_STATUS_BATTERY_FAILURE_OFFSET (2)
+#define EMBER_AF_METERING_EXTENDED_STATUS_PROGRAM_MEMORY_ERROR (0x0000000000000008)
+#define EMBER_AF_METERING_EXTENDED_STATUS_PROGRAM_MEMORY_ERROR_OFFSET (3)
+#define EMBER_AF_METERING_EXTENDED_STATUS_RAM_ERROR (0x0000000000000010)
+#define EMBER_AF_METERING_EXTENDED_STATUS_RAM_ERROR_OFFSET (4)
+#define EMBER_AF_METERING_EXTENDED_STATUS_NV_MEMORY_ERROR (0x0000000000000020)
+#define EMBER_AF_METERING_EXTENDED_STATUS_NV_MEMORY_ERROR_OFFSET (5)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SYSTEM_ERROR (0x0000000000000040)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SYSTEM_ERROR_OFFSET (6)
+#define EMBER_AF_METERING_EXTENDED_STATUS_WATCHDOG_ERROR (0x0000000000000080)
+#define EMBER_AF_METERING_EXTENDED_STATUS_WATCHDOG_ERROR_OFFSET (7)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_DISCONNECT_FAILURE (0x0000000000000100)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_DISCONNECT_FAILURE_OFFSET (8)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_CONNECT_FAILURE (0x0000000000000200)
+#define EMBER_AF_METERING_EXTENDED_STATUS_SUPPLY_CONNECT_FAILURE_OFFSET (9)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SW_CHANGED_TAMPERED (0x0000000000000400)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MEASUREMENT_SW_CHANGED_TAMPERED_OFFSET (10)
+#define EMBER_AF_METERING_EXTENDED_STATUS_CLOCK_INVALID (0x0000000000000800)
+#define EMBER_AF_METERING_EXTENDED_STATUS_CLOCK_INVALID_OFFSET (11)
+#define EMBER_AF_METERING_EXTENDED_STATUS_TEMPERATURE_EXCEEDED (0x0000000000001000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_TEMPERATURE_EXCEEDED_OFFSET (12)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MOISTURE_DETECTED (0x0000000000002000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_MOISTURE_DETECTED_OFFSET (13)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_TERMINAL_COVER_REMOVED (0x0000000001000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_TERMINAL_COVER_REMOVED_OFFSET (24)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_INCORRECT_POLARITY (0x0000000002000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_INCORRECT_POLARITY_OFFSET (25)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_CURRENT_WITH_NO_VOLTAGE (0x0000000004000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_CURRENT_WITH_NO_VOLTAGE_OFFSET (26)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_LIMIT_THRESHOLD_EXCEEDED (0x0000000008000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_LIMIT_THRESHOLD_EXCEEDED_OFFSET (27)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_UNDER_VOLTAGE (0x0000000010000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_UNDER_VOLTAGE_OFFSET (28)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_OVER_VOLTAGE (0x0000000020000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_OVER_VOLTAGE_OFFSET (29)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_BATTERY_COVER_REMOVED (0x0000000001000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_BATTERY_COVER_REMOVED_OFFSET (24)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_TILT_TAMPER (0x0000000002000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_TILT_TAMPER_OFFSET (25)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_EXCESS_FLOW (0x0000000004000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_GAS_METER_EXCESS_FLOW_OFFSET (26)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_POWER (0x0000000040000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_POWER_OFFSET (30)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_VOLTAGE \
+ (0x0000000080000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVER_VOLTAGE_OFFSET (31)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_REMOTE_LOAD_CONTROL \
+ (0x00000000C0000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_REMOTE_LOAD_CONTROL_OFFSET (30)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_BY_OTHER_REMOTE_COMMAND \
+ (0x0000000100000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_BY_OTHER_REMOTE_COMMAND_OFFSET (32)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_SHORT_CIRCUIT \
+ (0x0000000140000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_SHORT_CIRCUIT_OFFSET \
+ (30)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_OTHER \
+ (0x0000000180000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_SERVICE_DISCONNECTION_REASON_OFF_DUE_TO_OVERHEATING_OTHER_OFFSET (31)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_BI_DIRECTIONAL_OPERATION (0x0000000400000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_BI_DIRECTIONAL_OPERATION_OFFSET (34)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_ACTIVE_POWER_RECEIVED (0x0000000800000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_ACTIVE_POWER_RECEIVED_OFFSET (35)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_MODE_OF_OPERATION (0x0000001000000000)
+#define EMBER_AF_METERING_EXTENDED_STATUS_ELECTRICITY_METER_MODE_OF_OPERATION_OFFSET (36)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_CHECK_METER (0x01)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LOW_BATTERY (0x02)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_TAMPER_DETECT (0x04)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_FAILURE (0x08)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_FAILURE_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_QUALITY (0x10)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_POWER_QUALITY_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LEAK_DETECT (0x20)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_SERVICE_DISCONNECT_OPEN (0x40)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_SERVICE_DISCONNECT_OPEN_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_RESERVED (0x80)
+#define EMBER_AF_METERING_STATUS_ELECTRICITY_RESERVED_OFFSET (7)
+#define EMBER_AF_METERING_STATUS_GAS_CHECK_METER (0x01)
+#define EMBER_AF_METERING_STATUS_GAS_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_BATTERY (0x02)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_GAS_TAMPER_DETECT (0x04)
+#define EMBER_AF_METERING_STATUS_GAS_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_GAS_NOT_DEFINED (0x08)
+#define EMBER_AF_METERING_STATUS_GAS_NOT_DEFINED_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_PRESSURE (0x10)
+#define EMBER_AF_METERING_STATUS_GAS_LOW_PRESSURE_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_GAS_LEAK_DETECT (0x20)
+#define EMBER_AF_METERING_STATUS_GAS_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_GAS_SERVICE_DISCONNECT (0x40)
+#define EMBER_AF_METERING_STATUS_GAS_SERVICE_DISCONNECT_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_GAS_REVERSE_FLOW (0x80)
+#define EMBER_AF_METERING_STATUS_GAS_REVERSE_FLOW_OFFSET (7)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_CHECK_METER (0x01)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LOW_BATTERY (0x02)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TAMPER_DETECT (0x04)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TEMPERATURE_SENSOR (0x08)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_TEMPERATURE_SENSOR_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_BURST_DETECT (0x10)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_BURST_DETECT_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LEAK_DETECT (0x20)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_SERVICE_DISCONNECT (0x40)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_SERVICE_DISCONNECT_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_FLOW_SENSOR (0x80)
+#define EMBER_AF_METERING_STATUS_HEAT_AND_COOLING_FLOW_SENSOR_OFFSET (7)
+#define EMBER_AF_METERING_STATUS_WATER_CHECK_METER (0x01)
+#define EMBER_AF_METERING_STATUS_WATER_CHECK_METER_OFFSET (0)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_BATTERY (0x02)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_BATTERY_OFFSET (1)
+#define EMBER_AF_METERING_STATUS_WATER_TAMPER_DETECT (0x04)
+#define EMBER_AF_METERING_STATUS_WATER_TAMPER_DETECT_OFFSET (2)
+#define EMBER_AF_METERING_STATUS_WATER_PIPE_EMPTY (0x08)
+#define EMBER_AF_METERING_STATUS_WATER_PIPE_EMPTY_OFFSET (3)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_PRESSURE (0x10)
+#define EMBER_AF_METERING_STATUS_WATER_LOW_PRESSURE_OFFSET (4)
+#define EMBER_AF_METERING_STATUS_WATER_LEAK_DETECT (0x20)
+#define EMBER_AF_METERING_STATUS_WATER_LEAK_DETECT_OFFSET (5)
+#define EMBER_AF_METERING_STATUS_WATER_SERVICE_DISCONNECT (0x40)
+#define EMBER_AF_METERING_STATUS_WATER_SERVICE_DISCONNECT_OFFSET (6)
+#define EMBER_AF_METERING_STATUS_WATER_REVERSE_FLOW (0x80)
+#define EMBER_AF_METERING_STATUS_WATER_REVERSE_FLOW_OFFSET (7)
+#define EMBER_AF_MODE_FOR_SEQUENCE_HEAT_SETPOINT_FIELD_PRESENT (0x01)
+#define EMBER_AF_MODE_FOR_SEQUENCE_HEAT_SETPOINT_FIELD_PRESENT_OFFSET (0)
+#define EMBER_AF_MODE_FOR_SEQUENCE_COOL_SETPOINT_FIELD_PRESENT (0x02)
+#define EMBER_AF_MODE_FOR_SEQUENCE_COOL_SETPOINT_FIELD_PRESENT_OFFSET (1)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_LOG_PAYLOAD_CONTROL (0x0F)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_LOG_PAYLOAD_CONTROL_OFFSET (0)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_NUMBER_OF_EVENTS (0xF0)
+#define EMBER_AF_NUMBER_OF_EVENTS_LOG_PAYLOAD_CONTROL_NUMBER_OF_EVENTS_OFFSET (4)
+#define EMBER_AF_OCCUPANCY_OCCUPIED (0x1)
+#define EMBER_AF_OCCUPANCY_OCCUPIED_OFFSET (0)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PIR (0x01)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PIR_OFFSET (0)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_ULTRASONIC (0x02)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_ULTRASONIC_OFFSET (1)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PHYSICAL_CONTACT (0x04)
+#define EMBER_AF_OCCUPANCY_SENSOR_TYPE_BITMAP_PHYSICAL_CONTACT_OFFSET (2)
+#define EMBER_AF_ON_OFF_CONTROL_ACCEPT_ONLY_WHEN_ON (0x01)
+#define EMBER_AF_ON_OFF_CONTROL_ACCEPT_ONLY_WHEN_ON_OFFSET (0)
+#define EMBER_AF_ORIGINATOR_ID_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED (0x01)
+#define EMBER_AF_ORIGINATOR_ID_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED_OFFSET (0)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DISCONNECTION_ENABLED (0x0001)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DISCONNECTION_ENABLED_OFFSET (0)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_PREPAYMENT_ENABLED (0x0002)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_PREPAYMENT_ENABLED_OFFSET (1)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_MANAGEMENT_ENABLED (0x0004)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_MANAGEMENT_ENABLED_OFFSET (2)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_DISPLAY_ENABLED (0x0010)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CREDIT_DISPLAY_ENABLED_OFFSET (4)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_ACCOUNT_BASE (0x0040)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_ACCOUNT_BASE_OFFSET (6)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CONTACTOR_FITTED (0x0080)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_CONTACTOR_FITTED_OFFSET (7)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_STANDING_CHARGE_CONFIGURATION (0x0100)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_STANDING_CHARGE_CONFIGURATION_OFFSET (8)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_STANDING_CHARGE_CONFIGURATION (0x0200)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_STANDING_CHARGE_CONFIGURATION_OFFSET (9)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DEBT_CONFIGURATION (0x0400)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_DEBT_CONFIGURATION_OFFSET (10)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_DEBT_CONFIGURATION (0x0800)
+#define EMBER_AF_PAYMENT_CONTROL_CONFIGURATION_EMERGENCY_DEBT_CONFIGURATION_OFFSET (11)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_GENERAL (0x00000001)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_GENERAL_OFFSET (0)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TARIFF_INFORMATION (0x00000008)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TARIFF_INFORMATION_OFFSET (3)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_PRICE_MATRIX (0x00000010)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_PRICE_MATRIX_OFFSET (4)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT (0x00000400)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT_OFFSET (10)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TENANCY (0x00001000)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_TENANCY_OFFSET (12)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_SUPPLIER (0x00002000)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_SUPPLIER_OFFSET (13)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_METER_MODE (0x00004000)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_CHANGE_OF_METER_MODE_OFFSET (14)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_TOP_UP_ADDITION (0x00040000)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_TOP_UP_ADDITION_OFFSET (18)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_DEBT_CREDIT_ADDITION (0x00080000)
+#define EMBER_AF_PREPAY_SNAPSHOT_PAYLOAD_CAUSE_DEBT_CREDIT_ADDITION_OFFSET (19)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_LOW_CREDIT_WARNING (0x0001)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_LOW_CREDIT_WARNING_OFFSET (0)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ERROR (0x0002)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ERROR_OFFSET (1)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ALREADY_USED (0x0004)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_ALREADY_USED_OFFSET (2)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_INVALID (0x0008)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_TOP_UP_CODE_INVALID_OFFSET (3)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_IN_USE (0x0010)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_IN_USE_OFFSET (4)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_PERIOD_END_WARNING (0x0020)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_FRIENDLY_CREDIT_PERIOD_END_WARNING_OFFSET (5)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_EC_AVAILABLE (0x0040)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_EC_AVAILABLE_OFFSET (6)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_UNAUTHORISED_ENERGY_USE (0x0080)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_UNAUTHORISED_ENERGY_USE_OFFSET (7)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_CREDIT (0x0100)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_CREDIT_OFFSET (8)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_TAMPER (0x0200)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_TAMPER_OFFSET (9)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_HES (0x0400)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_DISCONNECTED_SUPPLY_DUE_TO_HES_OFFSET (10)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_PHYSICAL_ATTACK (0x0800)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_PHYSICAL_ATTACK_OFFSET (11)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_ELECTRONIC_ATTACK (0x1000)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_ELECTRONIC_ATTACK_OFFSET (12)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_A (0x2000)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_A_OFFSET (13)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_B (0x4000)
+#define EMBER_AF_PREPAYMENT_ALARM_STATUS_MANUFACTURE_ALARM_CODE_B_OFFSET (14)
+#define EMBER_AF_PRICE_CONTROL_MASK_PRICE_ACKNOWLEDGEMENT_REQUIRED (0x01)
+#define EMBER_AF_PRICE_CONTROL_MASK_PRICE_ACKNOWLEDGEMENT_REQUIRED_OFFSET (0)
+#define EMBER_AF_PRICE_CONTROL_MASK_TOTAL_TIERS_EXCEEDS15 (0x02)
+#define EMBER_AF_PRICE_CONTROL_MASK_TOTAL_TIERS_EXCEEDS15_OFFSET (1)
+#define EMBER_AF_PRICE_MATRIX_SUB_PAYLOAD_CONTROL_TOU_BASED (0x01)
+#define EMBER_AF_PRICE_MATRIX_SUB_PAYLOAD_CONTROL_TOU_BASED_OFFSET (0)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_REGISTER_TIER (0x0F)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_REGISTER_TIER_OFFSET (0)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_NUMBER_OF_PRICE_TIERS (0xF0)
+#define EMBER_AF_PRICE_NUMBER_OF_PRICE_TIERS_AND_REGISTER_TIER_NUMBER_OF_PRICE_TIERS_OFFSET (4)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_TRAILING_DIGIT (0xF0)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_PRICE_TIER (0x0F)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_PRICE_TIER_OFFSET (0)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_TRAILING_DIGIT (0xF0)
+#define EMBER_AF_PRICE_TRAILING_DIGIT_AND_PRICE_TIER_TRAILING_DIGIT_OFFSET (4)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_PRE_SNAPSHOTS (0x00000001)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_PRE_SNAPSHOTS_OFFSET (0)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_POST_SNAPSHOTS (0x00000002)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_POST_SNAPSHOTS_OFFSET (1)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_CREDIT_REGISTER (0x00000004)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_CREDIT_REGISTER_OFFSET (2)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_DEBIT_REGISTER (0x00000008)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_DEBIT_REGISTER_OFFSET (3)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_BILLING_PERIOD (0x00000010)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_RESET_BILLING_PERIOD_OFFSET (4)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TARIFF_PLAN (0x00000020)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TARIFF_PLAN_OFFSET (5)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_STANDING_CHARGE (0x00000040)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_STANDING_CHARGE_OFFSET (6)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_BLOCK_HISTORICAL_LOAD_PROFILE_INFORMATION (0x00000080)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_BLOCK_HISTORICAL_LOAD_PROFILE_INFORMATION_OFFSET (7)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_HISTORICAL_LOAD_PROFILE_INFORMATION (0x00000100)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_HISTORICAL_LOAD_PROFILE_INFORMATION_OFFSET (8)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_CONSUMER (0x00000200)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_CONSUMER_OFFSET (9)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_SUPPLIER (0x00000400)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_IHD_DATA_SUPPLIER_OFFSET (10)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_METER_CONNECTOR_STATE_ON_OFF_ARMED (0x00001800)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_METER_CONNECTOR_STATE_ON_OFF_ARMED_OFFSET (11)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TRANSACTION_LOG (0x00002000)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_TRANSACTION_LOG_OFFSET (13)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_PREPAYMENT_LOG (0x00004000)
+#define EMBER_AF_PROPOSED_CHANGE_CONTROL_CLEAR_PREPAYMENT_LOG_OFFSET (14)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_LOW (0x1)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_LOW_OFFSET (0)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_HIGH (0x2)
+#define EMBER_AF_PUMP_ALARM_MASK_SUPPLY_VOLTAGE_TOO_HIGH_OFFSET (1)
+#define EMBER_AF_PUMP_ALARM_MASK_POWER_MISSING_PHASE (0x4)
+#define EMBER_AF_PUMP_ALARM_MASK_POWER_MISSING_PHASE_OFFSET (2)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_LOW (0x8)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_LOW_OFFSET (3)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_HIGH (0x10)
+#define EMBER_AF_PUMP_ALARM_MASK_SYSTEM_PRESSURE_TOO_HIGH_OFFSET (4)
+#define EMBER_AF_PUMP_ALARM_MASK_DRY_RUNNING (0x20)
+#define EMBER_AF_PUMP_ALARM_MASK_DRY_RUNNING_OFFSET (5)
+#define EMBER_AF_PUMP_ALARM_MASK_MOTOR_TEMPERATURE_TOO_HIGH (0x40)
+#define EMBER_AF_PUMP_ALARM_MASK_MOTOR_TEMPERATURE_TOO_HIGH_OFFSET (6)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_MOTOR_HAS_FATAL_FAILURE (0x80)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_MOTOR_HAS_FATAL_FAILURE_OFFSET (7)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_TEMPERATURE_TOO_HIGH (0x100)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_TEMPERATURE_TOO_HIGH_OFFSET (8)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_BLOCKED (0x200)
+#define EMBER_AF_PUMP_ALARM_MASK_PUMP_BLOCKED_OFFSET (9)
+#define EMBER_AF_PUMP_ALARM_MASK_SENSOR_FAILURE (0x400)
+#define EMBER_AF_PUMP_ALARM_MASK_SENSOR_FAILURE_OFFSET (10)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_NON_FATAL_FAILURE (0x800)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_NON_FATAL_FAILURE_OFFSET (11)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_FATAL_FAILURE (0x1000)
+#define EMBER_AF_PUMP_ALARM_MASK_ELECTRONIC_FATAL_FAILURE_OFFSET (12)
+#define EMBER_AF_PUMP_ALARM_MASK_GENERAL_FAULT (0x2000)
+#define EMBER_AF_PUMP_ALARM_MASK_GENERAL_FAULT_OFFSET (13)
+#define EMBER_AF_PUMP_STATUS_DEVICE_FAULT (0x1)
+#define EMBER_AF_PUMP_STATUS_DEVICE_FAULT_OFFSET (0)
+#define EMBER_AF_PUMP_STATUS_SUPPLYFAULT (0x2)
+#define EMBER_AF_PUMP_STATUS_SUPPLYFAULT_OFFSET (1)
+#define EMBER_AF_PUMP_STATUS_SPEED_LOW (0x4)
+#define EMBER_AF_PUMP_STATUS_SPEED_LOW_OFFSET (2)
+#define EMBER_AF_PUMP_STATUS_SPEED_HIGH (0x8)
+#define EMBER_AF_PUMP_STATUS_SPEED_HIGH_OFFSET (3)
+#define EMBER_AF_PUMP_STATUS_LOCAL_OVERRIDE (0x10)
+#define EMBER_AF_PUMP_STATUS_LOCAL_OVERRIDE_OFFSET (4)
+#define EMBER_AF_PUMP_STATUS_RUNNING (0x20)
+#define EMBER_AF_PUMP_STATUS_RUNNING_OFFSET (5)
+#define EMBER_AF_PUMP_STATUS_REMOTE_PRESSURE (0x40)
+#define EMBER_AF_PUMP_STATUS_REMOTE_PRESSURE_OFFSET (6)
+#define EMBER_AF_PUMP_STATUS_REMOTE_FLOW (0x80)
+#define EMBER_AF_PUMP_STATUS_REMOTE_FLOW_OFFSET (7)
+#define EMBER_AF_PUMP_STATUS_REMOTE_TEMPERATURE (0x100)
+#define EMBER_AF_PUMP_STATUS_REMOTE_TEMPERATURE_OFFSET (8)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_REMOTE_ENABLE_FLAGS (0x0F)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_REMOTE_ENABLE_FLAGS_OFFSET (0)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_DEVICE_STATUS2_STRUCTURE (0xF0)
+#define EMBER_AF_REMOTE_ENABLE_FLAGS_AND_DEVICE_STATUS2_DEVICE_STATUS2_STRUCTURE_OFFSET (4)
+#define EMBER_AF_RESET_OPTIONS_RESET_CURRENT (0x1)
+#define EMBER_AF_RESET_OPTIONS_RESET_CURRENT_OFFSET (0)
+#define EMBER_AF_RESET_OPTIONS_RESET_ALL (0x2)
+#define EMBER_AF_RESET_OPTIONS_RESET_ALL_OFFSET (1)
+#define EMBER_AF_RESET_OPTIONS_ERASE_INDEX (0x4)
+#define EMBER_AF_RESET_OPTIONS_ERASE_INDEX_OFFSET (2)
+#define EMBER_AF_RESTART_OPTIONS_START_MODE1 (0x1)
+#define EMBER_AF_RESTART_OPTIONS_START_MODE1_OFFSET (0)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE2 (0x2)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE2_OFFSET (1)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE3 (0x4)
+#define EMBER_AF_RESTART_OPTIONS_STARTUP_MODE3_OFFSET (2)
+#define EMBER_AF_RESTART_OPTIONS_IMMEDIATE (0x8)
+#define EMBER_AF_RESTART_OPTIONS_IMMEDIATE_OFFSET (3)
+#define EMBER_AF_SCENES_COPY_MODE_COPY_ALL_SCENES (0x01)
+#define EMBER_AF_SCENES_COPY_MODE_COPY_ALL_SCENES_OFFSET (0)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPERATIONAL (0x1)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPERATIONAL_OFFSET (0)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_ADJUSTING (0x2)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_ADJUSTING_OFFSET (1)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPENING (0x4)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_OPENING_OFFSET (2)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_MOTOR_OPENING (0x8)
+#define EMBER_AF_SHADE_CLOSURE_STATUS_MOTOR_OPENING_OFFSET (3)
+#define EMBER_AF_SNAPSHOT_CAUSE_GENERAL (0x00000001)
+#define EMBER_AF_SNAPSHOT_CAUSE_GENERAL_OFFSET (0)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BILLING_PERIOD (0x00000002)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BILLING_PERIOD_OFFSET (1)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BLOCK_PERIOD (0x00000004)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_BLOCK_PERIOD_OFFSET (2)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TARIFF_INFORMATION (0x00000008)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TARIFF_INFORMATION_OFFSET (3)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_PRICE_MATRIX (0x00000010)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_PRICE_MATRIX_OFFSET (4)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_BLOCK_THRESHOLDS (0x00000020)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_BLOCK_THRESHOLDS_OFFSET (5)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CV (0x00000040)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CV_OFFSET (6)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CF (0x00000080)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CF_OFFSET (7)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CALENDAR (0x00000100)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_CALENDAR_OFFSET (8)
+#define EMBER_AF_SNAPSHOT_CAUSE_CRITICAL_PEAK_PRICING (0x00000200)
+#define EMBER_AF_SNAPSHOT_CAUSE_CRITICAL_PEAK_PRICING_OFFSET (9)
+#define EMBER_AF_SNAPSHOT_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT (0x00000400)
+#define EMBER_AF_SNAPSHOT_CAUSE_MANUALLY_TRIGGERED_FROM_CLIENT_OFFSET (10)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_RESOLVE_PERIOD (0x00000800)
+#define EMBER_AF_SNAPSHOT_CAUSE_END_OF_RESOLVE_PERIOD_OFFSET (11)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TENANCY (0x00001000)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_TENANCY_OFFSET (12)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_SUPPLIER (0x00002000)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_SUPPLIER_OFFSET (13)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_MODE (0x00004000)
+#define EMBER_AF_SNAPSHOT_CAUSE_CHANGE_OF_MODE_OFFSET (14)
+#define EMBER_AF_SNAPSHOT_CAUSE_DEBT_PAYMENT (0x00008000)
+#define EMBER_AF_SNAPSHOT_CAUSE_DEBT_PAYMENT_OFFSET (15)
+#define EMBER_AF_SNAPSHOT_CAUSE_SCHEDULED_SNAPSHOT (0x00010000)
+#define EMBER_AF_SNAPSHOT_CAUSE_SCHEDULED_SNAPSHOT_OFFSET (16)
+#define EMBER_AF_SNAPSHOT_CAUSE_OTA_FIRMWARE_DOWNLOAD (0x00020000)
+#define EMBER_AF_SNAPSHOT_CAUSE_OTA_FIRMWARE_DOWNLOAD_OFFSET (17)
+#define EMBER_AF_SQUAWK_INFO_MODE (0xf0)
+#define EMBER_AF_SQUAWK_INFO_MODE_OFFSET (4)
+#define EMBER_AF_SQUAWK_INFO_STROBE (0x08)
+#define EMBER_AF_SQUAWK_INFO_STROBE_OFFSET (3)
+#define EMBER_AF_SQUAWK_INFO_LEVEL (0x03)
+#define EMBER_AF_SQUAWK_INFO_LEVEL_OFFSET (0)
+#define EMBER_AF_START_TIME_MINUTES (0x003F)
+#define EMBER_AF_START_TIME_MINUTES_OFFSET (0)
+#define EMBER_AF_START_TIME_TIME_ENCODING (0x00C0)
+#define EMBER_AF_START_TIME_TIME_ENCODING_OFFSET (6)
+#define EMBER_AF_START_TIME_HOURS (0xFF00)
+#define EMBER_AF_START_TIME_HOURS_OFFSET (8)
+#define EMBER_AF_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED (0x01)
+#define EMBER_AF_SUPPLY_CONTROL_BITS_ACKNOWLEDGE_REQUIRED_OFFSET (0)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_TYPE (0x0F)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_TYPE_OFFSET (0)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_CHARGING_SCHEME (0xF0)
+#define EMBER_AF_TARIFF_TYPE_CHARGING_SCHEME_TARIFF_CHARGING_SCHEME_OFFSET (4)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_INITIALIZATION_FAILURE (0x1)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_INITIALIZATION_FAILURE_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_HARDWARE_FAILURE (0x2)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_HARDWARE_FAILURE_OFFSET (1)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_SELFCALIBRATION_FAILURE (0x4)
+#define EMBER_AF_THERMOSTAT_ALARM_MASK_SELFCALIBRATION_FAILURE_OFFSET (2)
+#define EMBER_AF_THERMOSTAT_OCCUPANCY_OCCUPIED (0x1)
+#define EMBER_AF_THERMOSTAT_OCCUPANCY_OCCUPIED_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_STATE_ON (0x0001)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_STATE_ON_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_STATE_ON (0x0002)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_STATE_ON_OFFSET (1)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_STATE_ON (0x0004)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_STATE_ON_OFFSET (2)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_SECOND_STAGE_STATE_ON (0x0008)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_HEAT_SECOND_STAGE_STATE_ON_OFFSET (3)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_SECOND_STAGE_STATE_ON (0x0010)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_COOL_SECOND_STAGE_STATE_ON_OFFSET (4)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_SECOND_STAGE_STATE_ON (0x0020)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_SECOND_STAGE_STATE_ON_OFFSET (5)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_THIRD_STAGE_STATE_ON (0x0040)
+#define EMBER_AF_THERMOSTAT_RUNNING_STATE_FAN_THIRD_STAGE_STATE_ON_OFFSET (6)
+#define EMBER_AF_THERMOSTAT_SENSING_LOCAL_TEMP_SENSED_REMOTELY (0x1)
+#define EMBER_AF_THERMOSTAT_SENSING_LOCAL_TEMP_SENSED_REMOTELY_OFFSET (0)
+#define EMBER_AF_THERMOSTAT_SENSING_OUTDOOR_TEMP_SENSED_REMOTELY (0x2)
+#define EMBER_AF_THERMOSTAT_SENSING_OUTDOOR_TEMP_SENSED_REMOTELY_OFFSET (1)
+#define EMBER_AF_THERMOSTAT_SENSING_OCCUPANCY_SENSED_REMOTELY (0x4)
+#define EMBER_AF_THERMOSTAT_SENSING_OCCUPANCY_SENSED_REMOTELY_OFFSET (2)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_CLOCK (0x1)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_CLOCK_OFFSET (0)
+#define EMBER_AF_TIME_STATUS_MASK_SYNCHRONIZED (0x2)
+#define EMBER_AF_TIME_STATUS_MASK_SYNCHRONIZED_OFFSET (1)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_ZONE_DST (0x4)
+#define EMBER_AF_TIME_STATUS_MASK_MASTER_ZONE_DST_OFFSET (2)
+#define EMBER_AF_TIME_STATUS_MASK_SUPERSEDING (0x8)
+#define EMBER_AF_TIME_STATUS_MASK_SUPERSEDING_OFFSET (3)
+#define EMBER_AF_WARNING_INFO_MODE (0xf0)
+#define EMBER_AF_WARNING_INFO_MODE_OFFSET (4)
+#define EMBER_AF_WARNING_INFO_STROBE (0x0c)
+#define EMBER_AF_WARNING_INFO_STROBE_OFFSET (2)
+#define EMBER_AF_WARNING_INFO_SIREN_LEVEL (0x03)
+#define EMBER_AF_WARNING_INFO_SIREN_LEVEL_OFFSET (0)
+#define EMBER_AF_ZIGBEE_INFORMATION_LOGICAL_TYPE (0x03)
+#define EMBER_AF_ZIGBEE_INFORMATION_LOGICAL_TYPE_OFFSET (0)
+#define EMBER_AF_ZIGBEE_INFORMATION_RX_ON_WHEN_IDLE (0x04)
+#define EMBER_AF_ZIGBEE_INFORMATION_RX_ON_WHEN_IDLE_OFFSET (2)
+#define EMBER_AF_ZLL_INFORMATION_FACTORY_NEW (0x01)
+#define EMBER_AF_ZLL_INFORMATION_FACTORY_NEW_OFFSET (0)
+#define EMBER_AF_ZLL_INFORMATION_ADDRESS_ASSIGNMENT (0x02)
+#define EMBER_AF_ZLL_INFORMATION_ADDRESS_ASSIGNMENT_OFFSET (1)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_INITIATOR (0x10)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_INITIATOR_OFFSET (4)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_PRIORITY_REQUEST (0x20)
+#define EMBER_AF_ZLL_INFORMATION_TOUCH_LINK_PRIORITY_REQUEST_OFFSET (5)
+#define EMBER_AF_ZLL_INFORMATION_PROFILE_INTEROP (0x80)
+#define EMBER_AF_ZLL_INFORMATION_PROFILE_INTEROP_OFFSET (7)
diff --git a/examples/all-clusters-app/all-clusters-common/gen/gen_config.h b/examples/all-clusters-app/all-clusters-common/gen/gen_config.h
new file mode 100644
index 00000000000000..29ebbde513ecbf
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/gen_config.h
@@ -0,0 +1,162 @@
+
+/*
+ *
+ * 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.
+ */
+
+// Prevent multiple inclusion
+#pragma once
+
+// User options for plugin Binding Table Library
+#define EMBER_BINDING_TABLE_SIZE 10
+
+/**** Network Section ****/
+#define EMBER_SUPPORTED_NETWORKS (1)
+
+#define EMBER_APS_UNICAST_MESSAGE_COUNT 10
+
+/**** Cluster endpoint counts ****/
+#define EMBER_AF_BARRIER_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_BARRIER_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_BASIC_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_BASIC_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_COLOR_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_COLOR_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_DOOR_LOCK_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_DOOR_LOCK_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_GROUPS_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_GROUPS_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_IAS_ZONE_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_IDENTIFY_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_LEVEL_CONTROL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_LEVEL_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_ON_OFF_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_SCENES_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_SCENES_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_TEMP_MEASUREMENT_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+
+/**** Cluster Plugins ****/
+
+// Use this macro to check if the client side of the Barrier Control cluster is included
+#define ZCL_USING_BARRIER_CONTROL_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_BARRIER_CONTROL_CLIENT
+
+// Use this macro to check if the server side of the Barrier Control cluster is included
+#define ZCL_USING_BARRIER_CONTROL_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_BARRIER_CONTROL_SERVER
+#define EMBER_AF_PLUGIN_BARRIER_CONTROL
+
+// Use this macro to check if the client side of the Basic cluster is included
+#define ZCL_USING_BASIC_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_BASIC_CLIENT
+
+// Use this macro to check if the server side of the Basic cluster is included
+#define ZCL_USING_BASIC_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_BASIC_SERVER
+#define EMBER_AF_PLUGIN_BASIC
+
+// Use this macro to check if the client side of the Color Control cluster is included
+#define ZCL_USING_COLOR_CONTROL_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_COLOR_CONTROL_CLIENT
+
+// Use this macro to check if the server side of the Color Control cluster is included
+#define ZCL_USING_COLOR_CONTROL_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_COLOR_CONTROL_SERVER
+#define EMBER_AF_PLUGIN_COLOR_CONTROL
+// User options for server plugin Color Control
+#define EMBER_AF_PLUGIN_COLOR_CONTROL_SERVER_XY
+#define EMBER_AF_PLUGIN_COLOR_CONTROL_SERVER_TEMP
+#define EMBER_AF_PLUGIN_COLOR_CONTROL_SERVER_HSV
+
+// Use this macro to check if the client side of the Door Lock cluster is included
+#define ZCL_USING_DOOR_LOCK_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_DOOR_LOCK_CLIENT
+
+// Use this macro to check if the server side of the Door Lock cluster is included
+#define ZCL_USING_DOOR_LOCK_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_DOOR_LOCK_SERVER
+#define EMBER_AF_PLUGIN_DOOR_LOCK
+
+// Use this macro to check if the client side of the Groups cluster is included
+#define ZCL_USING_GROUPS_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_GROUPS_CLIENT
+
+// Use this macro to check if the server side of the Groups cluster is included
+#define ZCL_USING_GROUPS_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_GROUPS_SERVER
+#define EMBER_AF_PLUGIN_GROUPS
+
+// Use this macro to check if the server side of the IAS Zone cluster is included
+#define ZCL_USING_IAS_ZONE_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_IAS_ZONE_SERVER
+#define EMBER_AF_PLUGIN_IAS_ZONE
+// User options for server plugin IAS Zone
+#define EMBER_AF_PLUGIN_IAS_ZONE_SERVER_ZONE_TYPE 541
+
+// Use this macro to check if the client side of the Identify cluster is included
+#define ZCL_USING_IDENTIFY_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_IDENTIFY_CLIENT
+
+// Use this macro to check if the server side of the Identify cluster is included
+#define ZCL_USING_IDENTIFY_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_IDENTIFY_SERVER
+#define EMBER_AF_PLUGIN_IDENTIFY
+
+// Use this macro to check if the client side of the Level Control cluster is included
+#define ZCL_USING_LEVEL_CONTROL_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_LEVEL_CONTROL_CLIENT
+
+// Use this macro to check if the server side of the Level Control cluster is included
+#define ZCL_USING_LEVEL_CONTROL_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_LEVEL_CONTROL_SERVER
+#define EMBER_AF_PLUGIN_LEVEL_CONTROL
+// User options for server plugin Level Control
+#define EMBER_AF_PLUGIN_LEVEL_CONTROL_MAXIMUM_LEVEL 255
+#define EMBER_AF_PLUGIN_LEVEL_CONTROL_MINIMUM_LEVEL 0
+#define EMBER_AF_PLUGIN_LEVEL_CONTROL_RATE 0
+
+// Use this macro to check if the client side of the On/off cluster is included
+#define ZCL_USING_ON_OFF_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_ON_OFF_CLIENT
+
+// Use this macro to check if the server side of the On/off cluster is included
+#define ZCL_USING_ON_OFF_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_ON_OFF_SERVER
+#define EMBER_AF_PLUGIN_ON_OFF
+
+// Use this macro to check if the client side of the Scenes cluster is included
+#define ZCL_USING_SCENES_CLUSTER_CLIENT
+#define EMBER_AF_PLUGIN_SCENES_CLIENT
+
+// Use this macro to check if the server side of the Scenes cluster is included
+#define ZCL_USING_SCENES_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_SCENES_SERVER
+#define EMBER_AF_PLUGIN_SCENES
+// User options for server plugin Scenes
+#define EMBER_AF_PLUGIN_SCENES_TABLE_SIZE 3
+
+// Use this macro to check if the server side of the Temperature Measurement cluster is included
+#define ZCL_USING_TEMP_MEASUREMENT_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_TEMPERATURE_MEASUREMENT_SERVER
+#define EMBER_AF_PLUGIN_TEMPERATURE_MEASUREMENT
+
+// TODO Issue #3871 Reporting should only be enabled if there are reportable attributes
+// Use this macro to check if Reporting plugin is included
+#define EMBER_AF_PLUGIN_REPORTING
+// User options for plugin Reporting
+#define EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE 5
+#define EMBER_AF_PLUGIN_REPORTING_ENABLE_GROUP_BOUND_REPORTS
diff --git a/examples/lighting-app/efr32/src/gen/gen_tokens.h b/examples/all-clusters-app/all-clusters-common/gen/gen_tokens.h
similarity index 100%
rename from examples/lighting-app/efr32/src/gen/gen_tokens.h
rename to examples/all-clusters-app/all-clusters-common/gen/gen_tokens.h
diff --git a/examples/all-clusters-app/all-clusters-common/gen/print-cluster.h b/examples/all-clusters-app/all-clusters-common/gen/print-cluster.h
new file mode 100644
index 00000000000000..a37d7fb0495995
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/gen/print-cluster.h
@@ -0,0 +1,860 @@
+
+/*
+ *
+ * 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.
+ */
+
+// Prevent multiple inclusion
+#pragma once
+
+// This is the mapping of IDs to cluster names assuming a format according
+// to the "EmberAfClusterName" defined in the ZCL header.
+// The names of clusters that are not present, are removed.
+
+#if defined(ZCL_USING_BASIC_CLUSTER_SERVER) || defined(ZCL_USING_BASIC_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BASIC_CLUSTER { ZCL_BASIC_CLUSTER_ID, 0, "Basic" },
+#else
+#define CHIP_PRINTCLUSTER_BASIC_CLUSTER
+#endif
+
+#if defined(ZCL_USING_POWER_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_POWER_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_POWER_CONFIG_CLUSTER { ZCL_POWER_CONFIG_CLUSTER_ID, 1, "Power Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_POWER_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEVICE_TEMP_CLUSTER_SERVER) || defined(ZCL_USING_DEVICE_TEMP_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEVICE_TEMP_CLUSTER { ZCL_DEVICE_TEMP_CLUSTER_ID, 2, "Device Temperature Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_DEVICE_TEMP_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IDENTIFY_CLUSTER_SERVER) || defined(ZCL_USING_IDENTIFY_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IDENTIFY_CLUSTER { ZCL_IDENTIFY_CLUSTER_ID, 3, "Identify" },
+#else
+#define CHIP_PRINTCLUSTER_IDENTIFY_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GROUPS_CLUSTER_SERVER) || defined(ZCL_USING_GROUPS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GROUPS_CLUSTER { ZCL_GROUPS_CLUSTER_ID, 4, "Groups" },
+#else
+#define CHIP_PRINTCLUSTER_GROUPS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SCENES_CLUSTER_SERVER) || defined(ZCL_USING_SCENES_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SCENES_CLUSTER { ZCL_SCENES_CLUSTER_ID, 5, "Scenes" },
+#else
+#define CHIP_PRINTCLUSTER_SCENES_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ON_OFF_CLUSTER_SERVER) || defined(ZCL_USING_ON_OFF_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ON_OFF_CLUSTER { ZCL_ON_OFF_CLUSTER_ID, 6, "On/off" },
+#else
+#define CHIP_PRINTCLUSTER_ON_OFF_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ON_OFF_SWITCH_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_ON_OFF_SWITCH_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ON_OFF_SWITCH_CONFIG_CLUSTER { ZCL_ON_OFF_SWITCH_CONFIG_CLUSTER_ID, 7, "On/off Switch Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_ON_OFF_SWITCH_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_LEVEL_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_LEVEL_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_LEVEL_CONTROL_CLUSTER { ZCL_LEVEL_CONTROL_CLUSTER_ID, 8, "Level Control" },
+#else
+#define CHIP_PRINTCLUSTER_LEVEL_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ALARM_CLUSTER_SERVER) || defined(ZCL_USING_ALARM_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ALARM_CLUSTER { ZCL_ALARM_CLUSTER_ID, 9, "Alarms" },
+#else
+#define CHIP_PRINTCLUSTER_ALARM_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TIME_CLUSTER_SERVER) || defined(ZCL_USING_TIME_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TIME_CLUSTER { ZCL_TIME_CLUSTER_ID, 10, "Time" },
+#else
+#define CHIP_PRINTCLUSTER_TIME_CLUSTER
+#endif
+
+#if defined(ZCL_USING_RSSI_LOCATION_CLUSTER_SERVER) || defined(ZCL_USING_RSSI_LOCATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_RSSI_LOCATION_CLUSTER { ZCL_RSSI_LOCATION_CLUSTER_ID, 11, "RSSI Location" },
+#else
+#define CHIP_PRINTCLUSTER_RSSI_LOCATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BINARY_INPUT_BASIC_CLUSTER_SERVER) || defined(ZCL_USING_BINARY_INPUT_BASIC_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BINARY_INPUT_BASIC_CLUSTER { ZCL_BINARY_INPUT_BASIC_CLUSTER_ID, 15, "Binary Input (Basic)" },
+#else
+#define CHIP_PRINTCLUSTER_BINARY_INPUT_BASIC_CLUSTER
+#endif
+
+#if defined(ZCL_USING_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_COMMISSIONING_CLUSTER { ZCL_COMMISSIONING_CLUSTER_ID, 21, "Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_COMMISSIONING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PARTITION_CLUSTER_SERVER) || defined(ZCL_USING_PARTITION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PARTITION_CLUSTER { ZCL_PARTITION_CLUSTER_ID, 22, "Partition" },
+#else
+#define CHIP_PRINTCLUSTER_PARTITION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OTA_BOOTLOAD_CLUSTER_SERVER) || defined(ZCL_USING_OTA_BOOTLOAD_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OTA_BOOTLOAD_CLUSTER { ZCL_OTA_BOOTLOAD_CLUSTER_ID, 25, "Over the Air Bootloading" },
+#else
+#define CHIP_PRINTCLUSTER_OTA_BOOTLOAD_CLUSTER
+#endif
+
+#if defined(ZCL_USING_POWER_PROFILE_CLUSTER_SERVER) || defined(ZCL_USING_POWER_PROFILE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_POWER_PROFILE_CLUSTER { ZCL_POWER_PROFILE_CLUSTER_ID, 26, "Power Profile" },
+#else
+#define CHIP_PRINTCLUSTER_POWER_PROFILE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_CONTROL_CLUSTER { ZCL_APPLIANCE_CONTROL_CLUSTER_ID, 27, "Appliance Control" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_POLL_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_POLL_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_POLL_CONTROL_CLUSTER { ZCL_POLL_CONTROL_CLUSTER_ID, 32, "Poll Control" },
+#else
+#define CHIP_PRINTCLUSTER_POLL_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GREEN_POWER_CLUSTER_SERVER) || defined(ZCL_USING_GREEN_POWER_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GREEN_POWER_CLUSTER { ZCL_GREEN_POWER_CLUSTER_ID, 33, "Green Power" },
+#else
+#define CHIP_PRINTCLUSTER_GREEN_POWER_CLUSTER
+#endif
+
+#if defined(ZCL_USING_KEEPALIVE_CLUSTER_SERVER) || defined(ZCL_USING_KEEPALIVE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER { ZCL_KEEPALIVE_CLUSTER_ID, 37, "Keep-Alive" },
+#else
+#define CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DOOR_LOCK_CLUSTER_SERVER) || defined(ZCL_USING_DOOR_LOCK_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER { ZCL_DOOR_LOCK_CLUSTER_ID, 257, "Door Lock" },
+#else
+#define CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER
+#endif
+
+#if defined(ZCL_USING_WINDOW_COVERING_CLUSTER_SERVER) || defined(ZCL_USING_WINDOW_COVERING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER { ZCL_WINDOW_COVERING_CLUSTER_ID, 258, "Window Covering" },
+#else
+#define CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BARRIER_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_BARRIER_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BARRIER_CONTROL_CLUSTER { ZCL_BARRIER_CONTROL_CLUSTER_ID, 259, "Barrier Control" },
+#else
+#define CHIP_PRINTCLUSTER_BARRIER_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PUMP_CONFIG_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_PUMP_CONFIG_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PUMP_CONFIG_CONTROL_CLUSTER { ZCL_PUMP_CONFIG_CONTROL_CLUSTER_ID, 512, "Pump Configuration and Control" },
+#else
+#define CHIP_PRINTCLUSTER_PUMP_CONFIG_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_THERMOSTAT_CLUSTER_SERVER) || defined(ZCL_USING_THERMOSTAT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_THERMOSTAT_CLUSTER { ZCL_THERMOSTAT_CLUSTER_ID, 513, "Thermostat" },
+#else
+#define CHIP_PRINTCLUSTER_THERMOSTAT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FAN_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_FAN_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FAN_CONTROL_CLUSTER { ZCL_FAN_CONTROL_CLUSTER_ID, 514, "Fan Control" },
+#else
+#define CHIP_PRINTCLUSTER_FAN_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEHUMID_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_DEHUMID_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEHUMID_CONTROL_CLUSTER { ZCL_DEHUMID_CONTROL_CLUSTER_ID, 515, "Dehumidification Control" },
+#else
+#define CHIP_PRINTCLUSTER_DEHUMID_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_THERMOSTAT_UI_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_THERMOSTAT_UI_CONFIG_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_THERMOSTAT_UI_CONFIG_CLUSTER \
+ { ZCL_THERMOSTAT_UI_CONFIG_CLUSTER_ID, 516, "Thermostat User Interface Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_THERMOSTAT_UI_CONFIG_CLUSTER
+#endif
+
+#if defined(ZCL_USING_COLOR_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_COLOR_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_COLOR_CONTROL_CLUSTER { ZCL_COLOR_CONTROL_CLUSTER_ID, 768, "Color Control" },
+#else
+#define CHIP_PRINTCLUSTER_COLOR_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BALLAST_CONFIGURATION_CLUSTER_SERVER) || defined(ZCL_USING_BALLAST_CONFIGURATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BALLAST_CONFIGURATION_CLUSTER { ZCL_BALLAST_CONFIGURATION_CLUSTER_ID, 769, "Ballast Configuration" },
+#else
+#define CHIP_PRINTCLUSTER_BALLAST_CONFIGURATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ILLUM_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_ILLUM_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ILLUM_MEASUREMENT_CLUSTER { ZCL_ILLUM_MEASUREMENT_CLUSTER_ID, 1024, "Illuminance Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ILLUM_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ILLUM_LEVEL_SENSING_CLUSTER_SERVER) || defined(ZCL_USING_ILLUM_LEVEL_SENSING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ILLUM_LEVEL_SENSING_CLUSTER { ZCL_ILLUM_LEVEL_SENSING_CLUSTER_ID, 1025, "Illuminance Level Sensing" },
+#else
+#define CHIP_PRINTCLUSTER_ILLUM_LEVEL_SENSING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TEMP_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_TEMP_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TEMP_MEASUREMENT_CLUSTER { ZCL_TEMP_MEASUREMENT_CLUSTER_ID, 1026, "Temperature Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TEMP_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PRESSURE_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_PRESSURE_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PRESSURE_MEASUREMENT_CLUSTER { ZCL_PRESSURE_MEASUREMENT_CLUSTER_ID, 1027, "Pressure Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_PRESSURE_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FLOW_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_FLOW_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FLOW_MEASUREMENT_CLUSTER { ZCL_FLOW_MEASUREMENT_CLUSTER_ID, 1028, "Flow Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_FLOW_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER \
+ { ZCL_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_ID, 1029, "Relative Humidity Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OCCUPANCY_SENSING_CLUSTER_SERVER) || defined(ZCL_USING_OCCUPANCY_SENSING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OCCUPANCY_SENSING_CLUSTER { ZCL_OCCUPANCY_SENSING_CLUSTER_ID, 1030, "Occupancy Sensing" },
+#else
+#define CHIP_PRINTCLUSTER_OCCUPANCY_SENSING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1036, "Carbon Monoxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1037, "Carbon Dioxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1038, "Ethylene Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1039, "Ethylene Oxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1040, "Hydrogen Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1041, "Hydrogen Sulphide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1042, "Nitric Oxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1043, "Nitrogen Dioxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1044, "Oxygen Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1045, "Ozone Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1046, "Sulfur Dioxide Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1047, "Dissolved Oxygen Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1048, "Bromate Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1049, "Chloramines Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1050, "Chlorine Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1051, \
+ "Fecal coliform and E. Coli Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1052, "Fluoride Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1053, "Haloacetic Acids Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1054, "Total Trihalomethanes Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1055, "Total Coliform Bacteria Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1056, "Turbidity Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1057, "Copper Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1058, "Lead Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1059, "Manganese Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1060, "Sulfate Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1061, "Bromodichloromethane Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1062, "Bromoform Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1063, "Chlorodibromomethane Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1064, "Chloroform Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_SERVER) || \
+ defined(ZCL_USING_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER \
+ { ZCL_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER_ID, 1065, "Sodium Concentration Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IAS_ZONE_CLUSTER_SERVER) || defined(ZCL_USING_IAS_ZONE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IAS_ZONE_CLUSTER { ZCL_IAS_ZONE_CLUSTER_ID, 1280, "IAS Zone" },
+#else
+#define CHIP_PRINTCLUSTER_IAS_ZONE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IAS_ACE_CLUSTER_SERVER) || defined(ZCL_USING_IAS_ACE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IAS_ACE_CLUSTER { ZCL_IAS_ACE_CLUSTER_ID, 1281, "IAS ACE" },
+#else
+#define CHIP_PRINTCLUSTER_IAS_ACE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_IAS_WD_CLUSTER_SERVER) || defined(ZCL_USING_IAS_WD_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_IAS_WD_CLUSTER { ZCL_IAS_WD_CLUSTER_ID, 1282, "IAS WD" },
+#else
+#define CHIP_PRINTCLUSTER_IAS_WD_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GENERIC_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_GENERIC_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GENERIC_TUNNEL_CLUSTER { ZCL_GENERIC_TUNNEL_CLUSTER_ID, 1536, "Generic Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_GENERIC_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BACNET_PROTOCOL_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_BACNET_PROTOCOL_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BACNET_PROTOCOL_TUNNEL_CLUSTER { ZCL_BACNET_PROTOCOL_TUNNEL_CLUSTER_ID, 1537, "BACnet Protocol Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_BACNET_PROTOCOL_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_11073_PROTOCOL_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_11073_PROTOCOL_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_11073_PROTOCOL_TUNNEL_CLUSTER { ZCL_11073_PROTOCOL_TUNNEL_CLUSTER_ID, 1556, "11073 Protocol Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_11073_PROTOCOL_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ISO7816_PROTOCOL_TUNNEL_CLUSTER_SERVER) || defined(ZCL_USING_ISO7816_PROTOCOL_TUNNEL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ISO7816_PROTOCOL_TUNNEL_CLUSTER \
+ { ZCL_ISO7816_PROTOCOL_TUNNEL_CLUSTER_ID, 1557, "ISO 7816 Protocol Tunnel" },
+#else
+#define CHIP_PRINTCLUSTER_ISO7816_PROTOCOL_TUNNEL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PRICE_CLUSTER_SERVER) || defined(ZCL_USING_PRICE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PRICE_CLUSTER { ZCL_PRICE_CLUSTER_ID, 1792, "Price" },
+#else
+#define CHIP_PRINTCLUSTER_PRICE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER \
+ { ZCL_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER_ID, 1793, "Demand Response and Load Control" },
+#else
+#define CHIP_PRINTCLUSTER_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SIMPLE_METERING_CLUSTER_SERVER) || defined(ZCL_USING_SIMPLE_METERING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SIMPLE_METERING_CLUSTER { ZCL_SIMPLE_METERING_CLUSTER_ID, 1794, "Simple Metering" },
+#else
+#define CHIP_PRINTCLUSTER_SIMPLE_METERING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MESSAGING_CLUSTER_SERVER) || defined(ZCL_USING_MESSAGING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MESSAGING_CLUSTER { ZCL_MESSAGING_CLUSTER_ID, 1795, "Messaging" },
+#else
+#define CHIP_PRINTCLUSTER_MESSAGING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_TUNNELING_CLUSTER_SERVER) || defined(ZCL_USING_TUNNELING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_TUNNELING_CLUSTER { ZCL_TUNNELING_CLUSTER_ID, 1796, "Tunneling" },
+#else
+#define CHIP_PRINTCLUSTER_TUNNELING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PREPAYMENT_CLUSTER_SERVER) || defined(ZCL_USING_PREPAYMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PREPAYMENT_CLUSTER { ZCL_PREPAYMENT_CLUSTER_ID, 1797, "Prepayment" },
+#else
+#define CHIP_PRINTCLUSTER_PREPAYMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ENERGY_MANAGEMENT_CLUSTER_SERVER) || defined(ZCL_USING_ENERGY_MANAGEMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ENERGY_MANAGEMENT_CLUSTER { ZCL_ENERGY_MANAGEMENT_CLUSTER_ID, 1798, "Energy Management" },
+#else
+#define CHIP_PRINTCLUSTER_ENERGY_MANAGEMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CALENDAR_CLUSTER_SERVER) || defined(ZCL_USING_CALENDAR_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CALENDAR_CLUSTER { ZCL_CALENDAR_CLUSTER_ID, 1799, "Calendar" },
+#else
+#define CHIP_PRINTCLUSTER_CALENDAR_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DEVICE_MANAGEMENT_CLUSTER_SERVER) || defined(ZCL_USING_DEVICE_MANAGEMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DEVICE_MANAGEMENT_CLUSTER { ZCL_DEVICE_MANAGEMENT_CLUSTER_ID, 1800, "Device Management" },
+#else
+#define CHIP_PRINTCLUSTER_DEVICE_MANAGEMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_EVENTS_CLUSTER_SERVER) || defined(ZCL_USING_EVENTS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_EVENTS_CLUSTER { ZCL_EVENTS_CLUSTER_ID, 1801, "Events" },
+#else
+#define CHIP_PRINTCLUSTER_EVENTS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MDU_PAIRING_CLUSTER_SERVER) || defined(ZCL_USING_MDU_PAIRING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MDU_PAIRING_CLUSTER { ZCL_MDU_PAIRING_CLUSTER_ID, 1802, "MDU Pairing" },
+#else
+#define CHIP_PRINTCLUSTER_MDU_PAIRING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SUB_GHZ_CLUSTER_SERVER) || defined(ZCL_USING_SUB_GHZ_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SUB_GHZ_CLUSTER { ZCL_SUB_GHZ_CLUSTER_ID, 1803, "Sub-GHz" },
+#else
+#define CHIP_PRINTCLUSTER_SUB_GHZ_CLUSTER
+#endif
+
+#if defined(ZCL_USING_KEY_ESTABLISHMENT_CLUSTER_SERVER) || defined(ZCL_USING_KEY_ESTABLISHMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_KEY_ESTABLISHMENT_CLUSTER { ZCL_KEY_ESTABLISHMENT_CLUSTER_ID, 2048, "Key Establishment" },
+#else
+#define CHIP_PRINTCLUSTER_KEY_ESTABLISHMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_INFORMATION_CLUSTER_SERVER) || defined(ZCL_USING_INFORMATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_INFORMATION_CLUSTER { ZCL_INFORMATION_CLUSTER_ID, 2304, "Information" },
+#else
+#define CHIP_PRINTCLUSTER_INFORMATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DATA_SHARING_CLUSTER_SERVER) || defined(ZCL_USING_DATA_SHARING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DATA_SHARING_CLUSTER { ZCL_DATA_SHARING_CLUSTER_ID, 2305, "Data Sharing" },
+#else
+#define CHIP_PRINTCLUSTER_DATA_SHARING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_GAMING_CLUSTER_SERVER) || defined(ZCL_USING_GAMING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_GAMING_CLUSTER { ZCL_GAMING_CLUSTER_ID, 2306, "Gaming" },
+#else
+#define CHIP_PRINTCLUSTER_GAMING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DATA_RATE_CONTROL_CLUSTER_SERVER) || defined(ZCL_USING_DATA_RATE_CONTROL_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DATA_RATE_CONTROL_CLUSTER { ZCL_DATA_RATE_CONTROL_CLUSTER_ID, 2307, "Data Rate Control" },
+#else
+#define CHIP_PRINTCLUSTER_DATA_RATE_CONTROL_CLUSTER
+#endif
+
+#if defined(ZCL_USING_VOICE_OVER_ZIGBEE_CLUSTER_SERVER) || defined(ZCL_USING_VOICE_OVER_ZIGBEE_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_VOICE_OVER_ZIGBEE_CLUSTER { ZCL_VOICE_OVER_ZIGBEE_CLUSTER_ID, 2308, "Voice over ZigBee" },
+#else
+#define CHIP_PRINTCLUSTER_VOICE_OVER_ZIGBEE_CLUSTER
+#endif
+
+#if defined(ZCL_USING_CHATTING_CLUSTER_SERVER) || defined(ZCL_USING_CHATTING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_CHATTING_CLUSTER { ZCL_CHATTING_CLUSTER_ID, 2309, "Chatting" },
+#else
+#define CHIP_PRINTCLUSTER_CHATTING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_PAYMENT_CLUSTER_SERVER) || defined(ZCL_USING_PAYMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_PAYMENT_CLUSTER { ZCL_PAYMENT_CLUSTER_ID, 2561, "Payment" },
+#else
+#define CHIP_PRINTCLUSTER_PAYMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_BILLING_CLUSTER_SERVER) || defined(ZCL_USING_BILLING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_BILLING_CLUSTER { ZCL_BILLING_CLUSTER_ID, 2562, "Billing" },
+#else
+#define CHIP_PRINTCLUSTER_BILLING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_IDENTIFICATION_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_IDENTIFICATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_IDENTIFICATION_CLUSTER \
+ { ZCL_APPLIANCE_IDENTIFICATION_CLUSTER_ID, 2816, "Appliance Identification" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_IDENTIFICATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_METER_IDENTIFICATION_CLUSTER_SERVER) || defined(ZCL_USING_METER_IDENTIFICATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_METER_IDENTIFICATION_CLUSTER { ZCL_METER_IDENTIFICATION_CLUSTER_ID, 2817, "Meter Identification" },
+#else
+#define CHIP_PRINTCLUSTER_METER_IDENTIFICATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_EVENTS_AND_ALERT_CLUSTER \
+ { ZCL_APPLIANCE_EVENTS_AND_ALERT_CLUSTER_ID, 2818, "Appliance Events and Alert" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_EVENTS_AND_ALERT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_APPLIANCE_STATISTICS_CLUSTER_SERVER) || defined(ZCL_USING_APPLIANCE_STATISTICS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_APPLIANCE_STATISTICS_CLUSTER { ZCL_APPLIANCE_STATISTICS_CLUSTER_ID, 2819, "Appliance Statistics" },
+#else
+#define CHIP_PRINTCLUSTER_APPLIANCE_STATISTICS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ELECTRICAL_MEASUREMENT_CLUSTER_SERVER) || defined(ZCL_USING_ELECTRICAL_MEASUREMENT_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER { ZCL_ELECTRICAL_MEASUREMENT_CLUSTER_ID, 2820, "Electrical Measurement" },
+#else
+#define CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER
+#endif
+
+#if defined(ZCL_USING_DIAGNOSTICS_CLUSTER_SERVER) || defined(ZCL_USING_DIAGNOSTICS_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER { ZCL_DIAGNOSTICS_CLUSTER_ID, 2821, "Diagnostics" },
+#else
+#define CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER
+#endif
+
+#if defined(ZCL_USING_ZLL_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_ZLL_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER { ZCL_ZLL_COMMISSIONING_CLUSTER_ID, 4096, "ZLL Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_SERVER) || defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER { ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_ID, 64512, "Sample Mfg Specific Cluster" },
+#else
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_2_SERVER) || defined(ZCL_USING_SAMPLE_MFG_SPECIFIC_CLUSTER_2_CLIENT)
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER_2 \
+ { ZCL_SAMPLE_MFG_SPECIFIC_CLUSTER_2_ID, 64512, "Sample Mfg Specific Cluster 2" },
+#else
+#define CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER_2
+#endif
+
+#if defined(ZCL_USING_OTA_CONFIGURATION_CLUSTER_SERVER) || defined(ZCL_USING_OTA_CONFIGURATION_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_OTA_CONFIGURATION_CLUSTER { ZCL_OTA_CONFIGURATION_CLUSTER_ID, 64513, "Configuration Cluster" },
+#else
+#define CHIP_PRINTCLUSTER_OTA_CONFIGURATION_CLUSTER
+#endif
+
+#if defined(ZCL_USING_MFGLIB_CLUSTER_SERVER) || defined(ZCL_USING_MFGLIB_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_MFGLIB_CLUSTER { ZCL_MFGLIB_CLUSTER_ID, 64514, "MFGLIB Cluster" },
+#else
+#define CHIP_PRINTCLUSTER_MFGLIB_CLUSTER
+#endif
+
+#if defined(ZCL_USING_SL_WWAH_CLUSTER_SERVER) || defined(ZCL_USING_SL_WWAH_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_SL_WWAH_CLUSTER { ZCL_SL_WWAH_CLUSTER_ID, 64599, "SL Works With All Hubs" },
+#else
+#define CHIP_PRINTCLUSTER_SL_WWAH_CLUSTER
+#endif
+
+#define CLUSTER_IDS_TO_NAMES \
+ CHIP_PRINTCLUSTER_BASIC_CLUSTER \
+ CHIP_PRINTCLUSTER_POWER_CONFIG_CLUSTER \
+ CHIP_PRINTCLUSTER_DEVICE_TEMP_CLUSTER \
+ CHIP_PRINTCLUSTER_IDENTIFY_CLUSTER \
+ CHIP_PRINTCLUSTER_GROUPS_CLUSTER \
+ CHIP_PRINTCLUSTER_SCENES_CLUSTER \
+ CHIP_PRINTCLUSTER_ON_OFF_CLUSTER \
+ CHIP_PRINTCLUSTER_ON_OFF_SWITCH_CONFIG_CLUSTER \
+ CHIP_PRINTCLUSTER_LEVEL_CONTROL_CLUSTER \
+ CHIP_PRINTCLUSTER_ALARM_CLUSTER \
+ CHIP_PRINTCLUSTER_TIME_CLUSTER \
+ CHIP_PRINTCLUSTER_RSSI_LOCATION_CLUSTER \
+ CHIP_PRINTCLUSTER_BINARY_INPUT_BASIC_CLUSTER \
+ CHIP_PRINTCLUSTER_COMMISSIONING_CLUSTER \
+ CHIP_PRINTCLUSTER_PARTITION_CLUSTER \
+ CHIP_PRINTCLUSTER_OTA_BOOTLOAD_CLUSTER \
+ CHIP_PRINTCLUSTER_POWER_PROFILE_CLUSTER \
+ CHIP_PRINTCLUSTER_APPLIANCE_CONTROL_CLUSTER \
+ CHIP_PRINTCLUSTER_POLL_CONTROL_CLUSTER \
+ CHIP_PRINTCLUSTER_GREEN_POWER_CLUSTER \
+ CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER \
+ CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER \
+ CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER \
+ CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER \
+ CHIP_PRINTCLUSTER_BARRIER_CONTROL_CLUSTER \
+ CHIP_PRINTCLUSTER_PUMP_CONFIG_CONTROL_CLUSTER \
+ CHIP_PRINTCLUSTER_THERMOSTAT_CLUSTER \
+ CHIP_PRINTCLUSTER_FAN_CONTROL_CLUSTER \
+ CHIP_PRINTCLUSTER_DEHUMID_CONTROL_CLUSTER \
+ CHIP_PRINTCLUSTER_THERMOSTAT_UI_CONFIG_CLUSTER \
+ CHIP_PRINTCLUSTER_COLOR_CONTROL_CLUSTER \
+ CHIP_PRINTCLUSTER_BALLAST_CONFIGURATION_CLUSTER \
+ CHIP_PRINTCLUSTER_ILLUM_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_ILLUM_LEVEL_SENSING_CLUSTER \
+ CHIP_PRINTCLUSTER_TEMP_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_PRESSURE_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_FLOW_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_OCCUPANCY_SENSING_CLUSTER \
+ CHIP_PRINTCLUSTER_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_ETHYLENE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_ETHYLENE_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_HYDROGEN_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_HYDROGEN_SULPHIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_SULFUR_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_DISSOLVED_OXYGEN_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_BROMATE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_CHLORAMINES_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_CHLORINE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_FECAL_COLIFORM_AND_E_COLI_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_FLUORIDE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_HALOACETIC_ACIDS_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_TOTAL_TRIHALOMETHANES_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_TOTAL_COLIFORM_BACTERIA_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_TURBIDITY_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_COPPER_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_LEAD_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_MANGANESE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_SULFATE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_BROMODICHLOROMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_BROMOFORM_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_CHLORODIBROMOMETHANE_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_CHLOROFORM_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_SODIUM_CONCENTRATION_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_IAS_ZONE_CLUSTER \
+ CHIP_PRINTCLUSTER_IAS_ACE_CLUSTER \
+ CHIP_PRINTCLUSTER_IAS_WD_CLUSTER \
+ CHIP_PRINTCLUSTER_GENERIC_TUNNEL_CLUSTER \
+ CHIP_PRINTCLUSTER_BACNET_PROTOCOL_TUNNEL_CLUSTER \
+ CHIP_PRINTCLUSTER_11073_PROTOCOL_TUNNEL_CLUSTER \
+ CHIP_PRINTCLUSTER_ISO7816_PROTOCOL_TUNNEL_CLUSTER \
+ CHIP_PRINTCLUSTER_PRICE_CLUSTER \
+ CHIP_PRINTCLUSTER_DEMAND_RESPONSE_LOAD_CONTROL_CLUSTER \
+ CHIP_PRINTCLUSTER_SIMPLE_METERING_CLUSTER \
+ CHIP_PRINTCLUSTER_MESSAGING_CLUSTER \
+ CHIP_PRINTCLUSTER_TUNNELING_CLUSTER \
+ CHIP_PRINTCLUSTER_PREPAYMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_ENERGY_MANAGEMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_CALENDAR_CLUSTER \
+ CHIP_PRINTCLUSTER_DEVICE_MANAGEMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_EVENTS_CLUSTER \
+ CHIP_PRINTCLUSTER_MDU_PAIRING_CLUSTER \
+ CHIP_PRINTCLUSTER_SUB_GHZ_CLUSTER \
+ CHIP_PRINTCLUSTER_KEY_ESTABLISHMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_INFORMATION_CLUSTER \
+ CHIP_PRINTCLUSTER_DATA_SHARING_CLUSTER \
+ CHIP_PRINTCLUSTER_GAMING_CLUSTER \
+ CHIP_PRINTCLUSTER_DATA_RATE_CONTROL_CLUSTER \
+ CHIP_PRINTCLUSTER_VOICE_OVER_ZIGBEE_CLUSTER \
+ CHIP_PRINTCLUSTER_CHATTING_CLUSTER \
+ CHIP_PRINTCLUSTER_PAYMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_BILLING_CLUSTER \
+ CHIP_PRINTCLUSTER_APPLIANCE_IDENTIFICATION_CLUSTER \
+ CHIP_PRINTCLUSTER_METER_IDENTIFICATION_CLUSTER \
+ CHIP_PRINTCLUSTER_APPLIANCE_EVENTS_AND_ALERT_CLUSTER \
+ CHIP_PRINTCLUSTER_APPLIANCE_STATISTICS_CLUSTER \
+ CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER \
+ CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER \
+ CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER \
+ CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER \
+ CHIP_PRINTCLUSTER_SAMPLE_MFG_SPECIFIC_CLUSTER_2 \
+ CHIP_PRINTCLUSTER_OTA_CONFIGURATION_CLUSTER \
+ CHIP_PRINTCLUSTER_MFGLIB_CLUSTER \
+ CHIP_PRINTCLUSTER_SL_WWAH_CLUSTER
+
+#define MAX_CLUSTER_NAME_LENGTH 52
diff --git a/examples/wifi-echo/server/esp32/.gitignore b/examples/all-clusters-app/esp32/.gitignore
similarity index 100%
rename from examples/wifi-echo/server/esp32/.gitignore
rename to examples/all-clusters-app/esp32/.gitignore
diff --git a/examples/wifi-echo/server/esp32/Makefile b/examples/all-clusters-app/esp32/Makefile
similarity index 89%
rename from examples/wifi-echo/server/esp32/Makefile
rename to examples/all-clusters-app/esp32/Makefile
index 4140c5ee5215f6..69689a82e692a1 100644
--- a/examples/wifi-echo/server/esp32/Makefile
+++ b/examples/all-clusters-app/esp32/Makefile
@@ -19,12 +19,12 @@
# project subdirectory.
#
-PROJECT_NAME := chip-wifi-echo
+PROJECT_NAME := chip-all-clusters-app
EXTRA_COMPONENT_DIRS += $(PROJECT_PATH)/third_party/connectedhomeip/config/esp32/components \
- $(PROJECT_PATH)/../../../common/m5stack-tft/repo/components \
- $(PROJECT_PATH)/../../../common/QRCode \
- $(PROJECT_PATH)/../../../common/screen-framework \
+ $(PROJECT_PATH)/../../common/m5stack-tft/repo/components \
+ $(PROJECT_PATH)/../../common/QRCode \
+ $(PROJECT_PATH)/../../common/screen-framework \
CXXFLAGS += -std=c++11 -Os -DLWIP_IPV6_SCOPES=0
CPPFLAGS += -Os -DLWIP_IPV6_SCOPES=0 -DCHIP_HAVE_CONFIG_H
diff --git a/examples/wifi-echo/server/esp32/README.md b/examples/all-clusters-app/esp32/README.md
similarity index 94%
rename from examples/wifi-echo/server/esp32/README.md
rename to examples/all-clusters-app/esp32/README.md
index a5340392fe4072..38261c6c663b99 100644
--- a/examples/wifi-echo/server/esp32/README.md
+++ b/examples/all-clusters-app/esp32/README.md
@@ -1,4 +1,4 @@
-# CHIP WiFi Echo Server Example
+# CHIP All Clusters Example
A prototype appplication that uses CHIP to setup WiFi on the ESP32 and runs an
Echo Server. This example will evolve as more complex messaging is supported in
@@ -6,7 +6,7 @@ CHIP.
---
-- [CHIP WiFi Echo Server Example](#chip-wifi-echo-server-example)
+- [CHIP App Server Example](#chip-app-server-example)
- [Supported Devices](#supported-devices)
- [Building the Example Application](#building-the-example-application)
- [To build the application, follow these steps:](#to-build-the-application-follow-these-steps)
@@ -33,7 +33,7 @@ Development Framework and the xtensa-esp32-elf toolchain.
The VSCode devcontainer has these components pre-installed, so you can skip this
step. To install these components manually, follow these steps:
-- Clone the Espressif ESP-IDF and checkout release v4.1
+- Clone the Espressif ESP-IDF and checkout release/v4.1 branch
$ mkdir ${HOME}/tools
$ cd ${HOME}/tools
@@ -65,13 +65,13 @@ make sure the IDF_PATH has been exported(See the manual setup steps above).
$ idf make menuconfig
- Select ESP32 based `Device Type` through `WiFi Echo Demo`->`Device Type`.
+ Select ESP32 based `Device Type` through `Demo`->`Device Type`.
The device types that are currently supported include `ESP32-DevKitC` (default),
`ESP32-WROVER-KIT_V4.1` and `M5Stack`
If you are using `standalone chip-tool` to communicate with the ESP32, bypass the
Rendezvous mode so that the device can communicate over an insecure channel.
- This can be done through `WiFi Echo Demo`->`Rendezvous Mode`->`Bypass`
+ This can be done through `Demo`->`Rendezvous Mode`->`Bypass`
To connect the ESP32 to your network, configure the Wi-Fi SSID and Passphrase through
`Component config`->`CHIP Device Layer`->`WiFi Station Options`->`Default WiFi SSID` and
@@ -163,7 +163,7 @@ Alternatively, you can connect to the ESP32's Soft-AP directly.
In addition to the echo server, this demo also supports controlling OnOff
cluster (Server) attributes of an endpoint. For `ESP32-DevKitC` and
`ESP32-WROVER-KIT_V4.1`, a GPIO (configurable through `STATUS_LED_GPIO_NUM` in
-`main/wifi-echo.cpp`) is updated through the on/off/toggle commands from the
+`main/main.cpp`) is updated through the on/off/toggle commands from the
`chip-tool`. For `M5Stack`, a virtual Green LED on the display is used for the
same.
diff --git a/examples/wifi-echo/server/esp32/idf.sh b/examples/all-clusters-app/esp32/idf.sh
similarity index 100%
rename from examples/wifi-echo/server/esp32/idf.sh
rename to examples/all-clusters-app/esp32/idf.sh
diff --git a/examples/wifi-echo/server/esp32/main/BluetoothWidget.cpp b/examples/all-clusters-app/esp32/main/BluetoothWidget.cpp
similarity index 100%
rename from examples/wifi-echo/server/esp32/main/BluetoothWidget.cpp
rename to examples/all-clusters-app/esp32/main/BluetoothWidget.cpp
diff --git a/examples/wifi-echo/server/esp32/main/Button.cpp b/examples/all-clusters-app/esp32/main/Button.cpp
similarity index 100%
rename from examples/wifi-echo/server/esp32/main/Button.cpp
rename to examples/all-clusters-app/esp32/main/Button.cpp
diff --git a/examples/wifi-echo/server/esp32/main/CHIPDeviceManager.cpp b/examples/all-clusters-app/esp32/main/CHIPDeviceManager.cpp
similarity index 71%
rename from examples/wifi-echo/server/esp32/main/CHIPDeviceManager.cpp
rename to examples/all-clusters-app/esp32/main/CHIPDeviceManager.cpp
index 9b02720efe707c..f7c557062de632 100644
--- a/examples/wifi-echo/server/esp32/main/CHIPDeviceManager.cpp
+++ b/examples/all-clusters-app/esp32/main/CHIPDeviceManager.cpp
@@ -25,11 +25,14 @@
#include
#include "CHIPDeviceManager.h"
+#include
#include
#include
#include
#include
+using namespace ::chip;
+
namespace chip {
namespace DeviceManager {
@@ -60,11 +63,11 @@ CHIP_ERROR CHIPDeviceManager::Init(CHIPDeviceManagerCallbacks * cb)
switch (static_cast(CONFIG_RENDEZVOUS_MODE))
{
case RendezvousInformationFlags::kBLE:
- ConnectivityMgr().SetBLEAdvertisingEnabled(ConnectivityManager::kCHIPoBLEServiceMode_Enabled);
+ ConnectivityMgr().SetBLEAdvertisingEnabled(true);
break;
case RendezvousInformationFlags::kWiFi:
- ConnectivityMgr().SetBLEAdvertisingEnabled(ConnectivityManager::kCHIPoBLEServiceMode_Disabled);
+ ConnectivityMgr().SetBLEAdvertisingEnabled(false);
ConnectivityMgr().SetWiFiAPMode(ConnectivityManager::kWiFiAPMode_Enabled);
break;
@@ -92,39 +95,16 @@ CHIP_ERROR CHIPDeviceManager::Init(CHIPDeviceManagerCallbacks * cb)
exit:
return err;
}
+} // namespace DeviceManager
+} // namespace chip
-extern "C" {
-void emberAfPostAttributeChangeCallback(uint8_t endpointId, EmberAfClusterId clusterId, EmberAfAttributeId attributeId,
- uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
+void emberAfPostAttributeChangeCallback(EndpointId endpointId, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+ uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
{
- CHIPDeviceManagerCallbacks * cb = CHIPDeviceManager::GetInstance().GetCHIPDeviceManagerCallbacks();
+ chip::DeviceManager::CHIPDeviceManagerCallbacks * cb =
+ chip::DeviceManager::CHIPDeviceManager::GetInstance().GetCHIPDeviceManagerCallbacks();
if (cb != nullptr)
{
cb->PostAttributeChangeCallback(endpointId, clusterId, attributeId, mask, manufacturerCode, type, size, value);
}
}
-
-void emberAfPluginBasicResetToFactoryDefaultsCallback(uint8_t endpointId)
-{
- CHIPDeviceManagerCallbacks * cb = CHIPDeviceManager::GetInstance().GetCHIPDeviceManagerCallbacks();
- if (cb != nullptr)
- {
- cb->PluginBasicResetToFactoryDefaultsCallback(endpointId);
- }
-}
-
-bool emberAfPluginDoorLockServerActivateDoorLockCallback(bool activate)
-{
- CHIPDeviceManagerCallbacks * cb = CHIPDeviceManager::GetInstance().GetCHIPDeviceManagerCallbacks();
- if (cb != nullptr)
- {
- return cb->PluginDoorLockActivateDoorLockCallback(activate);
- }
-
- return false;
-}
-
-} // extern "C"
-
-} // namespace DeviceManager
-} // namespace chip
diff --git a/examples/wifi-echo/server/esp32/main/DeviceCallbacks.cpp b/examples/all-clusters-app/esp32/main/DeviceCallbacks.cpp
similarity index 74%
rename from examples/wifi-echo/server/esp32/main/DeviceCallbacks.cpp
rename to examples/all-clusters-app/esp32/main/DeviceCallbacks.cpp
index 701c71c831089e..f40b1fa013e8c3 100644
--- a/examples/wifi-echo/server/esp32/main/DeviceCallbacks.cpp
+++ b/examples/all-clusters-app/esp32/main/DeviceCallbacks.cpp
@@ -30,16 +30,15 @@
#include "WiFiWidget.h"
#include "esp_heap_caps.h"
#include "esp_log.h"
-#include
+#include "gen/attribute-id.h"
+#include "gen/cluster-id.h"
+#include
+#include
#include
-extern "C" {
-#include "../gen/attribute-id.h"
-#include "../gen/cluster-id.h"
-} // extern "C"
-
-static const char * TAG = "echo-devicecallbacks";
+static const char * TAG = "app-devicecallbacks";
+using namespace ::chip;
using namespace ::chip::Inet;
using namespace ::chip::System;
using namespace ::chip::DeviceLayer;
@@ -63,9 +62,8 @@ void DeviceCallbacks::DeviceEventCallback(const ChipDeviceEvent * event, intptr_
ESP_LOGI(TAG, "Current free heap: %d\n", heap_caps_get_free_size(MALLOC_CAP_8BIT));
}
-void DeviceCallbacks::PostAttributeChangeCallback(uint8_t endpointId, EmberAfClusterId clusterId, EmberAfAttributeId attributeId,
- uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint8_t size,
- uint8_t * value)
+void DeviceCallbacks::PostAttributeChangeCallback(EndpointId endpointId, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+ uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
{
ESP_LOGI(TAG, "PostAttributeChangeCallback - Cluster ID: '0x%04x', EndPoint ID: '0x%02x', Attribute ID: '0x%04x'", clusterId,
endpointId, attributeId);
@@ -94,7 +92,7 @@ void DeviceCallbacks::OnInternetConnectivityChange(const ChipDeviceEvent * event
{
ESP_LOGI(TAG, "Server ready at: %s:%d", event->InternetConnectivityChange.address, CHIP_PORT);
wifiLED.Set(true);
- publisher.StartPublishDevice();
+ chip::Mdns::DiscoveryManager::GetInstance().StartPublishDevice();
}
else if (event->InternetConnectivityChange.IPv4 == kConnectivity_Lost)
{
@@ -104,7 +102,7 @@ void DeviceCallbacks::OnInternetConnectivityChange(const ChipDeviceEvent * event
if (event->InternetConnectivityChange.IPv6 == kConnectivity_Established)
{
ESP_LOGI(TAG, "IPv6 Server ready...");
- publisher.StartPublishDevice();
+ chip::Mdns::DiscoveryManager::GetInstance().StartPublishDevice();
}
else if (event->InternetConnectivityChange.IPv6 == kConnectivity_Lost)
{
@@ -120,7 +118,7 @@ void DeviceCallbacks::OnSessionEstablished(const ChipDeviceEvent * event)
}
}
-void DeviceCallbacks::OnOnOffPostAttributeChangeCallback(uint8_t endpointId, uint16_t attributeId, uint8_t * value)
+void DeviceCallbacks::OnOnOffPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value)
{
VerifyOrExit(attributeId == ZCL_ON_OFF_ATTRIBUTE_ID, ESP_LOGI(TAG, "Unhandled Attribute ID: '0x%04x", attributeId));
VerifyOrExit(endpointId == 1 || endpointId == 2, ESP_LOGE(TAG, "Unexpected EndPoint ID: `0x%02x'", endpointId));
@@ -136,23 +134,22 @@ void IdentifyTimerHandler(Layer * systemLayer, void * appState, Error error)
{
statusLED1.Animate();
- // Decrement the timer count.
- identifyTimerCount--;
-
if (identifyTimerCount)
{
SystemLayer.StartTimer(kIdentifyTimerDelayMS, IdentifyTimerHandler, appState);
+ // Decrement the timer count.
+ identifyTimerCount--;
}
}
-void DeviceCallbacks::OnIdentifyPostAttributeChangeCallback(uint8_t endpointId, uint16_t attributeId, uint8_t * value)
+void DeviceCallbacks::OnIdentifyPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value)
{
VerifyOrExit(attributeId == ZCL_IDENTIFY_TIME_ATTRIBUTE_ID, ESP_LOGI(TAG, "Unhandled Attribute ID: '0x%04x", attributeId));
VerifyOrExit(endpointId == 1, ESP_LOGE(TAG, "Unexpected EndPoint ID: `0x%02x'", endpointId));
statusLED1.Blink(kIdentifyTimerDelayMS * 2);
- // timerCount represents the number of callback execution before the we stopped the timer.
+ // timerCount represents the number of callback executions before we stop the timer.
// value is expressed in seconds and the timer is fired every 250ms, so just multiply value by 4.
// Also, we want timerCount to be odd number, so the ligth state ends in the same state it starts.
identifyTimerCount = (*value) * 4;
@@ -163,22 +160,3 @@ void DeviceCallbacks::OnIdentifyPostAttributeChangeCallback(uint8_t endpointId,
exit:
return;
}
-
-void DeviceCallbacks::PluginBasicResetToFactoryDefaultsCallback(uint8_t endpointId)
-{
- ESP_LOGI(TAG, "PluginBasicResetToFactoryDefaultsCallback - EndPoint ID: '0x%02x'", endpointId);
-
- VerifyOrExit(endpointId == 1, ESP_LOGE(TAG, "Unexpected EndPoint ID: `0x%02x'", endpointId));
-
- ConnectivityMgr().ClearWiFiStationProvision();
-
-exit:
- return;
-}
-
-bool DeviceCallbacks::PluginDoorLockActivateDoorLockCallback(bool activate)
-{
- ESP_LOGI(TAG, "PluginDoorLockActivateDoorLockCallback: '0x%02x'", activate);
- // Simulate that locking/unlocking the door is always succesful.
- return true;
-}
diff --git a/examples/wifi-echo/server/esp32/main/Globals.cpp b/examples/all-clusters-app/esp32/main/Globals.cpp
similarity index 89%
rename from examples/wifi-echo/server/esp32/main/Globals.cpp
rename to examples/all-clusters-app/esp32/main/Globals.cpp
index 5f18629ac810a6..f0d643ab19be1b 100644
--- a/examples/wifi-echo/server/esp32/main/Globals.cpp
+++ b/examples/all-clusters-app/esp32/main/Globals.cpp
@@ -21,5 +21,3 @@ LEDWidget statusLED1;
LEDWidget statusLED2;
BluetoothWidget bluetoothLED;
WiFiWidget wifiLED;
-chip::Protocols::Mdns::Publisher publisher;
-const chip::NodeId kLocalNodeId = 12344321;
diff --git a/examples/wifi-echo/server/esp32/main/Kconfig.projbuild b/examples/all-clusters-app/esp32/main/Kconfig.projbuild
similarity index 99%
rename from examples/wifi-echo/server/esp32/main/Kconfig.projbuild
rename to examples/all-clusters-app/esp32/main/Kconfig.projbuild
index 549e8ebd594228..2577ddba2a66ec 100644
--- a/examples/wifi-echo/server/esp32/main/Kconfig.projbuild
+++ b/examples/all-clusters-app/esp32/main/Kconfig.projbuild
@@ -18,7 +18,7 @@
# Configuration options CHIP ESP32 demo application.
#
-menu "WiFi Echo Demo"
+menu "Demo"
choice
prompt "Device Type"
diff --git a/examples/wifi-echo/server/esp32/main/LEDWidget.cpp b/examples/all-clusters-app/esp32/main/LEDWidget.cpp
similarity index 100%
rename from examples/wifi-echo/server/esp32/main/LEDWidget.cpp
rename to examples/all-clusters-app/esp32/main/LEDWidget.cpp
diff --git a/examples/wifi-echo/server/esp32/main/QRCodeScreen.cpp b/examples/all-clusters-app/esp32/main/QRCodeScreen.cpp
similarity index 100%
rename from examples/wifi-echo/server/esp32/main/QRCodeScreen.cpp
rename to examples/all-clusters-app/esp32/main/QRCodeScreen.cpp
diff --git a/examples/wifi-echo/server/esp32/main/WiFiWidget.cpp b/examples/all-clusters-app/esp32/main/WiFiWidget.cpp
similarity index 100%
rename from examples/wifi-echo/server/esp32/main/WiFiWidget.cpp
rename to examples/all-clusters-app/esp32/main/WiFiWidget.cpp
diff --git a/examples/wifi-echo/server/esp32/main/component.mk b/examples/all-clusters-app/esp32/main/component.mk
similarity index 85%
rename from examples/wifi-echo/server/esp32/main/component.mk
rename to examples/all-clusters-app/esp32/main/component.mk
index 331c2a78590d8f..6eef1d02ab74d7 100644
--- a/examples/wifi-echo/server/esp32/main/component.mk
+++ b/examples/all-clusters-app/esp32/main/component.mk
@@ -23,11 +23,12 @@ COMPONENT_DEPENDS := chip QRCode tft spidriver
COMPONENT_SRCDIRS := \
. \
- gen \
../third_party/connectedhomeip/examples/common/chip-app-server \
+ ../third_party/connectedhomeip/examples/all-clusters-app/all-clusters-common/gen \
../third_party/connectedhomeip/src/app/util \
../third_party/connectedhomeip/src/app/clusters/on-off-server \
../third_party/connectedhomeip/src/app/clusters/level-control \
+ ../third_party/connectedhomeip/src/app/clusters/identify-client \
../third_party/connectedhomeip/src/app/clusters/identify \
../third_party/connectedhomeip/src/app/clusters/barrier-control-server \
../third_party/connectedhomeip/src/app/clusters/scenes-client \
@@ -38,13 +39,15 @@ COMPONENT_SRCDIRS :=
../third_party/connectedhomeip/src/app/clusters/scenes \
../third_party/connectedhomeip/src/app/clusters/basic \
../third_party/connectedhomeip/src/app/reporting \
+ ../third_party/connectedhomeip/src/app/clusters/door-lock-client \
../third_party/connectedhomeip/src/app/clusters/door-lock-server \
../third_party/connectedhomeip/src/app/clusters/ias-zone-server \
# ../third_party/connectedhomeip/src/app/clusters/ias-zone-client \
-COMPONENT_EXTRA_INCLUDES := $(PROJECT_PATH)/third_party/connectedhomeip/src/app/util \
- $(PROJECT_PATH)/third_party/connectedhomeip/examples/common/chip-app-server/include \
+COMPONENT_EXTRA_INCLUDES := $(PROJECT_PATH)/third_party/connectedhomeip/src/app/util \
+ $(PROJECT_PATH)/third_party/connectedhomeip/examples/common/chip-app-server/include \
+ $(PROJECT_PATH)/third_party/connectedhomeip/examples/all-clusters-app/all-clusters-common \
$(PROJECT_PATH)/third_party/connectedhomeip/src
# So "gen/*" files are found by the src/app bits.
diff --git a/examples/wifi-echo/server/esp32/main/include/BluetoothWidget.h b/examples/all-clusters-app/esp32/main/include/BluetoothWidget.h
similarity index 100%
rename from examples/wifi-echo/server/esp32/main/include/BluetoothWidget.h
rename to examples/all-clusters-app/esp32/main/include/BluetoothWidget.h
diff --git a/examples/wifi-echo/server/esp32/main/include/Button.h b/examples/all-clusters-app/esp32/main/include/Button.h
similarity index 100%
rename from examples/wifi-echo/server/esp32/main/include/Button.h
rename to examples/all-clusters-app/esp32/main/include/Button.h
diff --git a/examples/wifi-echo/server/esp32/main/include/CHIPDeviceManager.h b/examples/all-clusters-app/esp32/main/include/CHIPDeviceManager.h
similarity index 83%
rename from examples/wifi-echo/server/esp32/main/include/CHIPDeviceManager.h
rename to examples/all-clusters-app/esp32/main/include/CHIPDeviceManager.h
index 88efa745c8167b..eb5171e70c3a90 100644
--- a/examples/wifi-echo/server/esp32/main/include/CHIPDeviceManager.h
+++ b/examples/all-clusters-app/esp32/main/include/CHIPDeviceManager.h
@@ -59,25 +59,6 @@ class DLL_EXPORT CHIPDeviceManagerCallbacks
*/
virtual void DeviceEventCallback(const chip::DeviceLayer::ChipDeviceEvent * event, intptr_t arg);
- /**
- * @brief
- * Called when the ResetToFactoryDefaults method of the Basic cluster object has been called
- *
- * @param endpoint endpoint id
- */
- virtual void PluginBasicResetToFactoryDefaultsCallback(uint8_t endpointId);
-
- /**
- * @brief
- * Activate Door Lock Callback
- *
- * @param activate True if the lock should move to the locked position,
- * False if it should move to the unlocked position
- *
- * @returns true if the callback was able to activate/deactivate the Lock.
- */
- virtual bool PluginDoorLockActivateDoorLockCallback(bool activate);
-
/**
* @brief
* Called after an attribute has been changed
@@ -91,7 +72,7 @@ class DLL_EXPORT CHIPDeviceManagerCallbacks
* @param size size of the attribute
* @param value pointer to the new value
*/
- virtual void PostAttributeChangeCallback(uint8_t endpoint, EmberAfClusterId clusterId, EmberAfAttributeId attributeId,
+ virtual void PostAttributeChangeCallback(chip::EndpointId endpoint, chip::ClusterId clusterId, chip::AttributeId attributeId,
uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
{}
virtual ~CHIPDeviceManagerCallbacks() {}
diff --git a/examples/wifi-echo/server/esp32/main/include/DeviceCallbacks.h b/examples/all-clusters-app/esp32/main/include/DeviceCallbacks.h
similarity index 74%
rename from examples/wifi-echo/server/esp32/main/include/DeviceCallbacks.h
rename to examples/all-clusters-app/esp32/main/include/DeviceCallbacks.h
index ed4cf06da0cd3b..2b8aa5e89e1cac 100644
--- a/examples/wifi-echo/server/esp32/main/include/DeviceCallbacks.h
+++ b/examples/all-clusters-app/esp32/main/include/DeviceCallbacks.h
@@ -27,20 +27,19 @@
#include "CHIPDeviceManager.h"
#include
+#include
#include
class DeviceCallbacks : public chip::DeviceManager::CHIPDeviceManagerCallbacks
{
public:
virtual void DeviceEventCallback(const chip::DeviceLayer::ChipDeviceEvent * event, intptr_t arg);
- virtual void PluginBasicResetToFactoryDefaultsCallback(uint8_t endpointId);
- virtual bool PluginDoorLockActivateDoorLockCallback(bool activate);
- virtual void PostAttributeChangeCallback(uint8_t endpointId, EmberAfClusterId clusterId, EmberAfAttributeId attributeId,
+ virtual void PostAttributeChangeCallback(chip::EndpointId endpointId, chip::ClusterId clusterId, chip::AttributeId attributeId,
uint8_t mask, uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value);
private:
void OnInternetConnectivityChange(const chip::DeviceLayer::ChipDeviceEvent * event);
void OnSessionEstablished(const chip::DeviceLayer::ChipDeviceEvent * event);
- void OnOnOffPostAttributeChangeCallback(uint8_t endpointId, uint16_t attributeId, uint8_t * value);
- void OnIdentifyPostAttributeChangeCallback(uint8_t endpointId, uint16_t attributeId, uint8_t * value);
+ void OnOnOffPostAttributeChangeCallback(chip::EndpointId endpointId, chip::AttributeId attributeId, uint8_t * value);
+ void OnIdentifyPostAttributeChangeCallback(chip::EndpointId endpointId, chip::AttributeId attributeId, uint8_t * value);
};
diff --git a/examples/wifi-echo/server/esp32/main/include/Globals.h b/examples/all-clusters-app/esp32/main/include/Globals.h
similarity index 91%
rename from examples/wifi-echo/server/esp32/main/include/Globals.h
rename to examples/all-clusters-app/esp32/main/include/Globals.h
index c69165497dce19..bee1e909ebb346 100644
--- a/examples/wifi-echo/server/esp32/main/include/Globals.h
+++ b/examples/all-clusters-app/esp32/main/include/Globals.h
@@ -20,12 +20,10 @@
#include "BluetoothWidget.h"
#include "LEDWidget.h"
#include "WiFiWidget.h"
-#include "lib/mdns/Publisher.h"
#include "transport/raw/MessageHeader.h"
extern LEDWidget statusLED1;
extern LEDWidget statusLED2;
extern BluetoothWidget bluetoothLED;
extern WiFiWidget wifiLED;
-extern chip::Protocols::Mdns::Publisher publisher;
extern const chip::NodeId kLocalNodeId;
diff --git a/examples/wifi-echo/server/esp32/main/include/LEDWidget.h b/examples/all-clusters-app/esp32/main/include/LEDWidget.h
similarity index 100%
rename from examples/wifi-echo/server/esp32/main/include/LEDWidget.h
rename to examples/all-clusters-app/esp32/main/include/LEDWidget.h
diff --git a/examples/wifi-echo/server/esp32/main/include/QRCodeScreen.h b/examples/all-clusters-app/esp32/main/include/QRCodeScreen.h
similarity index 100%
rename from examples/wifi-echo/server/esp32/main/include/QRCodeScreen.h
rename to examples/all-clusters-app/esp32/main/include/QRCodeScreen.h
diff --git a/examples/wifi-echo/server/esp32/main/include/WiFiWidget.h b/examples/all-clusters-app/esp32/main/include/WiFiWidget.h
similarity index 100%
rename from examples/wifi-echo/server/esp32/main/include/WiFiWidget.h
rename to examples/all-clusters-app/esp32/main/include/WiFiWidget.h
diff --git a/examples/wifi-echo/server/esp32/main/wifi-echo.cpp b/examples/all-clusters-app/esp32/main/main.cpp
similarity index 88%
rename from examples/wifi-echo/server/esp32/main/wifi-echo.cpp
rename to examples/all-clusters-app/esp32/main/main.cpp
index d8c0db4baf8ddb..b0afc4e1d48585 100644
--- a/examples/wifi-echo/server/esp32/main/wifi-echo.cpp
+++ b/examples/all-clusters-app/esp32/main/main.cpp
@@ -15,18 +15,19 @@
* limitations under the License.
*/
+#include "AppDelegate.h"
#include "BluetoothWidget.h"
#include "Button.h"
#include "CHIPDeviceManager.h"
-#include "DataModelHandler.h"
#include "DeviceCallbacks.h"
#include "Display.h"
#include "Globals.h"
#include "LEDWidget.h"
#include "ListScreen.h"
#include "QRCodeScreen.h"
-#include "RendezvousDeviceDelegate.h"
+#include "QRCodeUtil.h"
#include "ScreenManager.h"
+#include "Server.h"
#include "WiFiWidget.h"
#include "esp_heap_caps_init.h"
#include "esp_log.h"
@@ -44,21 +45,16 @@
#include
#include
-#include
-#include
#include
#include
#include
#include
#include
-#include
using namespace ::chip;
using namespace ::chip::DeviceManager;
using namespace ::chip::DeviceLayer;
-extern void startServer();
-
#define QRCODE_BASE_URL "https://dhrishi.github.io/connectedhomeip/qrcode.html"
#if CONFIG_DEVICE_TYPE_M5STACK
@@ -85,21 +81,9 @@ extern void startServer();
// Used to indicate that an IP address has been added to the QRCode
#define EXAMPLE_VENDOR_TAG_IP 1
-extern void PairingComplete(SecurePairingSession * pairing);
-
-const char * TAG = "wifi-echo-demo";
+const char * TAG = "all-clusters-app";
static DeviceCallbacks EchoCallbacks;
-RendezvousDeviceDelegate * rendezvousDelegate = nullptr;
-
-namespace chip {
-namespace DeviceLayer {
-namespace Internal {
-const uint64_t TestDeviceId = kLocalNodeId; // For chip::DeviceLayer::GetDeviceId
-const uint64_t TestFabricId = 0; // For chip::DeviceLayer::GetFabricId
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
namespace {
@@ -353,11 +337,6 @@ bool isRendezvousBLE()
return static_cast(CONFIG_RENDEZVOUS_MODE) == RendezvousInformationFlags::kBLE;
}
-bool isRendezvousBypassed()
-{
- return static_cast(CONFIG_RENDEZVOUS_MODE) == RendezvousInformationFlags::kNone;
-}
-
std::string createSetupPayload()
{
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -442,55 +421,19 @@ std::string createSetupPayload()
return result;
};
-bool inRfc3986UnreservedChar(const char c)
-{
- static const char unreserved[] = { '-', '.', '_', '~' };
- return isalpha(c) || isdigit(c) || (strchr(unreserved, c) != NULL);
-}
-
-esp_err_t urlEncode(const char * src, size_t len, char * dest, size_t max_size)
+class AppCallbacks : public AppDelegate
{
- const char upper_xdigits[] = "0123456789ABCDEF";
- size_t i = 0, j = 0;
- for (i = 0; i < len; ++i)
- {
- unsigned char c = src[i];
- if (inRfc3986UnreservedChar(c))
- {
- if ((j + 1) < max_size)
- {
- dest[j++] = c;
- }
- else
- {
- return ESP_FAIL;
- }
- }
- else
- {
- if ((j + 3) < max_size)
- {
- dest[j++] = '%';
- dest[j++] = upper_xdigits[c >> 4];
- dest[j++] = upper_xdigits[(c & 0x0f)];
- }
- else
- {
- return ESP_FAIL;
- }
- }
- }
- dest[j] = '\0';
- return ESP_OK;
-}
-
-static SecurePairingUsingTestSecret gTestPairing;
+public:
+ void OnReceiveError() override { statusLED1.BlinkOnError(); }
+ void OnRendezvousStarted() override { bluetoothLED.Set(true); }
+ void OnRendezvousStopped() override { bluetoothLED.Set(false); }
+};
} // namespace
extern "C" void app_main()
{
- ESP_LOGI(TAG, "WiFi Echo Demo!");
+ ESP_LOGI(TAG, "All Clusters Demo!");
/* Print chip information */
esp_chip_info_t chip_info;
@@ -529,8 +472,6 @@ extern "C" void app_main()
}
SetupPretendDevices();
- publisher.Init();
- publisher.StopPublishDevice();
statusLED1.Init(STATUS_LED_GPIO_NUM);
// Our second LED doesn't map to any physical LEDs so far, just to virtual
@@ -539,29 +480,19 @@ extern "C" void app_main()
bluetoothLED.Init();
wifiLED.Init();
- // Start the Echo Server
- InitDataModelHandler();
- startServer();
-
- if (isRendezvousBLE())
- {
- rendezvousDelegate = chip::Platform::New();
- }
- else if (isRendezvousBypassed())
- {
- ChipLogProgress(Ble, "Rendezvous and Secure Pairing skipped. Using test secret.");
- PairingComplete(&gTestPairing);
- }
+ // Init ZCL Data Model and CHIP App Server
+ AppCallbacks callbacks;
+ InitServer(&callbacks);
std::string qrCodeText = createSetupPayload();
ESP_LOGI(TAG, "QR CODE Text: '%s'", qrCodeText.c_str());
{
std::vector qrCode(3 * qrCodeText.size() + 1);
- err = urlEncode(qrCodeText.c_str(), qrCodeText.size(), qrCode.data(), qrCode.max_size());
- if (err == ESP_OK)
+ err = EncodeQRCodeToUrl(qrCodeText.c_str(), qrCodeText.size(), qrCode.data(), qrCode.max_size());
+ if (err == CHIP_NO_ERROR)
{
- ESP_LOGI(TAG, "Copy paste the below URL in a browser to see the QR CODE:\n\t%s?data=%s", QRCODE_BASE_URL,
+ ESP_LOGI(TAG, "Copy/paste the below URL in a browser to see the QR CODE:\n\t%s?data=%s", QRCODE_BASE_URL,
qrCode.data());
}
}
diff --git a/examples/wifi-echo/server/esp32/partitions.csv b/examples/all-clusters-app/esp32/partitions.csv
similarity index 100%
rename from examples/wifi-echo/server/esp32/partitions.csv
rename to examples/all-clusters-app/esp32/partitions.csv
diff --git a/examples/wifi-echo/server/esp32/sdkconfig.defaults b/examples/all-clusters-app/esp32/sdkconfig.defaults
similarity index 100%
rename from examples/wifi-echo/server/esp32/sdkconfig.defaults
rename to examples/all-clusters-app/esp32/sdkconfig.defaults
diff --git a/examples/wifi-echo/server/esp32/sdkconfig_devkit.defaults b/examples/all-clusters-app/esp32/sdkconfig_devkit.defaults
similarity index 100%
rename from examples/wifi-echo/server/esp32/sdkconfig_devkit.defaults
rename to examples/all-clusters-app/esp32/sdkconfig_devkit.defaults
diff --git a/examples/wifi-echo/server/esp32/sdkconfig_m5stack.defaults b/examples/all-clusters-app/esp32/sdkconfig_m5stack.defaults
similarity index 100%
rename from examples/wifi-echo/server/esp32/sdkconfig_m5stack.defaults
rename to examples/all-clusters-app/esp32/sdkconfig_m5stack.defaults
diff --git a/examples/all-clusters-app/esp32/third_party/connectedhomeip b/examples/all-clusters-app/esp32/third_party/connectedhomeip
new file mode 120000
index 00000000000000..11a54ed360106c
--- /dev/null
+++ b/examples/all-clusters-app/esp32/third_party/connectedhomeip
@@ -0,0 +1 @@
+../../../../
\ No newline at end of file
diff --git a/examples/all-clusters-app/linux/.gn b/examples/all-clusters-app/linux/.gn
new file mode 100644
index 00000000000000..c3cfa5fd40318d
--- /dev/null
+++ b/examples/all-clusters-app/linux/.gn
@@ -0,0 +1,23 @@
+# 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.
+
+# The location of the build configuration file.
+buildconfig = "//build/config/BUILDCONFIG.gn"
+
+# CHIP uses angle bracket includes.
+check_system_includes = true
+
+default_args = {
+ import("//args.gni")
+}
diff --git a/examples/all-clusters-app/linux/BUILD.gn b/examples/all-clusters-app/linux/BUILD.gn
new file mode 100644
index 00000000000000..01da5ec0b3b43d
--- /dev/null
+++ b/examples/all-clusters-app/linux/BUILD.gn
@@ -0,0 +1,51 @@
+# 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.
+
+import("//build_overrides/chip.gni")
+
+import("${chip_root}/build/chip/tools.gni")
+
+assert(chip_build_tools)
+
+config("includes") {
+ include_dirs = [
+ ".",
+ "include",
+ "${chip_root}/src/app/util",
+ ]
+}
+
+executable("all-clusters-server") {
+ sources = [ "main.cpp" ]
+
+ if (is_debug) {
+ defines = [ "BUILD_RELEASE=0" ]
+ } else {
+ defines = [ "BUILD_RELEASE=1" ]
+ }
+
+ public_configs = [ ":includes" ]
+
+ deps = [
+ "${chip_root}/examples/all-clusters-app/all-clusters-common",
+ "${chip_root}/examples/common/chip-app-server:chip-app-server",
+ "${chip_root}/src/lib",
+ ]
+
+ output_dir = root_out_dir
+}
+
+group("linux") {
+ deps = [ ":all-clusters-server" ]
+}
diff --git a/examples/all-clusters-app/linux/Dockerfile b/examples/all-clusters-app/linux/Dockerfile
new file mode 100644
index 00000000000000..11630a808b0c19
--- /dev/null
+++ b/examples/all-clusters-app/linux/Dockerfile
@@ -0,0 +1,23 @@
+#
+# 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.
+#
+
+from generic_node_image
+RUN apt-get install -y libglib2.0
+COPY out/debug/chip-tool-all-clusters-server /usr/bin/
+COPY entrypoint.sh /
+
+ENTRYPOINT ["/entrypoint.sh", "server"]
diff --git a/examples/all-clusters-app/linux/args.gni b/examples/all-clusters-app/linux/args.gni
new file mode 100644
index 00000000000000..311ddab32d5fe5
--- /dev/null
+++ b/examples/all-clusters-app/linux/args.gni
@@ -0,0 +1,17 @@
+# 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.
+
+import("//build_overrides/chip.gni")
+
+import("${chip_root}/config/standalone/args.gni")
diff --git a/examples/all-clusters-app/linux/build b/examples/all-clusters-app/linux/build
new file mode 120000
index 00000000000000..d56ed62ae4d1ff
--- /dev/null
+++ b/examples/all-clusters-app/linux/build
@@ -0,0 +1 @@
+third_party/connectedhomeip/build
\ No newline at end of file
diff --git a/examples/all-clusters-app/linux/build_overrides b/examples/all-clusters-app/linux/build_overrides
new file mode 120000
index 00000000000000..e578e73312ebd1
--- /dev/null
+++ b/examples/all-clusters-app/linux/build_overrides
@@ -0,0 +1 @@
+../../build_overrides
\ No newline at end of file
diff --git a/examples/all-clusters-app/linux/entrypoint.sh b/examples/all-clusters-app/linux/entrypoint.sh
new file mode 100755
index 00000000000000..413f2d36b0799c
--- /dev/null
+++ b/examples/all-clusters-app/linux/entrypoint.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+
+#
+# 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.
+#
+
+set -ex
+
+service dbus start
+sleep 1
+/usr/sbin/otbr-agent -I wpan0 spinel+hdlc+uart:///dev/ttyUSB0 &
+sleep 1
+ot-ctl panid 0x1234
+ot-ctl ifconfig up
+ot-ctl thread start
+
+chip-tool-all-clusters-server
diff --git a/examples/all-clusters-app/linux/main.cpp b/examples/all-clusters-app/linux/main.cpp
new file mode 100644
index 00000000000000..145ce38a267ffe
--- /dev/null
+++ b/examples/all-clusters-app/linux/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 "af.h"
+#include "gen/attribute-id.h"
+#include "gen/cluster-id.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "Server.h"
+
+#include
+#include
+
+using namespace chip;
+using namespace chip::Inet;
+using namespace chip::Transport;
+using namespace chip::DeviceLayer;
+
+void emberAfPostAttributeChangeCallback(EndpointId endpoint, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+ uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
+{}
+
+int main(int argc, char * argv[])
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ err = chip::Platform::MemoryInit();
+ SuccessOrExit(err);
+
+ err = chip::DeviceLayer::PlatformMgr().InitChipStack();
+ SuccessOrExit(err);
+
+ // Init ZCL Data Model and CHIP App Server
+ InitServer();
+
+ chip::DeviceLayer::PlatformMgr().RunEventLoop();
+
+exit:
+ if (err != CHIP_NO_ERROR)
+ {
+ std::cerr << "Failed to run All Clusters App: " << ErrorStr(err) << std::endl;
+ // End the program with non zero error code to indicate a error.
+ return 1;
+ }
+ return 0;
+}
diff --git a/examples/all-clusters-app/linux/third_party/connectedhomeip b/examples/all-clusters-app/linux/third_party/connectedhomeip
new file mode 120000
index 00000000000000..11a54ed360106c
--- /dev/null
+++ b/examples/all-clusters-app/linux/third_party/connectedhomeip
@@ -0,0 +1 @@
+../../../../
\ No newline at end of file
diff --git a/examples/chip-tool/BUILD.gn b/examples/chip-tool/BUILD.gn
index 9f5a4107c0767e..17ed976ef3b89e 100644
--- a/examples/chip-tool/BUILD.gn
+++ b/examples/chip-tool/BUILD.gn
@@ -20,12 +20,15 @@ assert(chip_build_tools)
executable("chip-tool") {
sources = [
+ "commands/clusters/ModelCommand.cpp",
"commands/common/Command.cpp",
"commands/common/Commands.cpp",
- "commands/common/EchoCommand.cpp",
"commands/common/Logging.cpp",
- "commands/common/ModelCommand.cpp",
"commands/common/NetworkCommand.cpp",
+ "commands/echo/EchoCommand.cpp",
+ "commands/pairing/PairingCommand.cpp",
+ "commands/payload/ParseCommand.cpp",
+ "config/PersistentStorage.cpp",
"main.cpp",
]
@@ -37,7 +40,10 @@ executable("chip-tool") {
cflags = [ "-Wconversion" ]
- public_deps = [ "${chip_root}/src/lib" ]
+ public_deps = [
+ "${chip_root}/src/lib",
+ "${chip_root}/third_party/inipp",
+ ]
output_dir = root_out_dir
}
diff --git a/examples/chip-tool/Dockerfile b/examples/chip-tool/Dockerfile
index 96a3f15552d221..1651eb36b24204 100644
--- a/examples/chip-tool/Dockerfile
+++ b/examples/chip-tool/Dockerfile
@@ -15,8 +15,8 @@
# limitations under the License.
#
-from generic_node_image
-RUN apt-get install -y libglib2.0
+from chip-cirque-device-base
+RUN apt-get update && apt-get install -y libglib2.0 avahi-daemon libavahi-client3 && rm -rf /var/lib/apt/lists/*
COPY out/debug/chip-tool /usr/bin/
COPY entrypoint.sh /
diff --git a/examples/chip-tool/README.md b/examples/chip-tool/README.md
index b200ec96f0c6b0..bf0cbdff08b5fa 100644
--- a/examples/chip-tool/README.md
+++ b/examples/chip-tool/README.md
@@ -27,40 +27,53 @@ ninja -C out/debug
- After the application is built, it can be found in the build directory as
`out/debug/chip-tool`
-## Using the Client to Request an Echo
+## Using the Client to Pair a device
+
+In order to send commands to a device, it must be paired with the client.
+
+#### Pair a device
+
+To initiate a client pairing request to a device, run the built executable and
+choose the pairing mode.
+
+##### Pair a device configured to bypass Rendezvous
-### Ping a device over BLE
+The command below pair a device with the provided IP address and port of the
+server to talk to.
-To initiate a client echo request to a BLE device, run the built executable and
-pass it the discriminator and pairing code of the remote device. The command
-below uses the default values hard-coded into the debug versions of the ESP32
-wifi-echo app:
+ $ chip-tool pairing bypass 192.168.0.30 11097
- $ chip-tool echo ble 12345678 3840
+#### Pair a device over BLE
-### Ping a device over IP
+Run the built executable and pass it the discriminator and pairing code of the
+remote device.
-To start the Client in echo mode, run the built executable and pass it the IP
-address and port of the server to talk to, as well as the command "echo".
+The command below uses the default values hard-coded into the debug versions of
+the ESP32 all-clusters-app:
- $ chip-tool echo ip 192.168.0.30 11097
+ $ chip-tool pairing ble 12345678 3840
-If valid values are supplied, it will begin to periodically send messages to the
-server address provided.
+### Unpair a device
-It also verifies that the incoming echo from the server matches what was sent
-out.
+ $ chip-tool pairing unpair
-Stop the Client at any time with `Ctrl + C`.
+## Using the Client to Request an Echo
+
+### Ping a device
+
+ $ chip-tool echo ip
+
+If valid values are supplied, it will send a message to the paired device and
+verify that the incoming echo from the server matches what was sent out.
## Using the Client to Send CHIP Commands
To use the Client to send a CHIP commands, run the built executable and pass it
-the target cluster name, the target command name, the ip address and port of the
-server to talk to as well as an endpoint id. The endpoint id must be between 1
-and 240.
+the target cluster name, the target command name as well as an endpoint id.
+
+The endpoint id must be between 1 and 240.
- $ chip-tool onoff on 192.168.0.30 11097 1
+ $ chip-tool onoff on 1
The client will send a single command packet and then exit.
@@ -91,3 +104,24 @@ To get the list of parameters for a specific command, run the built executable
with the target cluster name and the target command name
$ chip-tool onoff on
+
+## Using the Client for Setup Payload
+
+### How to parse a setup code
+
+To parse a setup code, run the built executable with the `payload` cluster name
+and the `parse` command
+
+ $ chip-tool payload parse code
+
+#### QR Code
+
+ $ chip-tool payload parse "CH:#####"
+
+#### QR Code with optional Vendor Info
+
+ $ chip-tool chip-tool payload parse "CH:#####"
+
+#### Manual Setup Code
+
+ $ chip-tool payload parse :#####"
diff --git a/examples/chip-tool/commands/clusters/Commands.h b/examples/chip-tool/commands/clusters/Commands.h
index 87335ea3880c4b..039c37c0796f5a 100644
--- a/examples/chip-tool/commands/clusters/Commands.h
+++ b/examples/chip-tool/commands/clusters/Commands.h
@@ -20,8 +20,8 @@
#pragma once
-#include "../common/ModelCommand.h"
-#include "../common/ModelCommandResponse.h"
+#include "ModelCommand.h"
+#include "ModelCommandResponse.h"
#include
@@ -487,8 +487,14 @@ bool ReadAttributeValue(uint8_t *& message, uint16_t & messageLen)
| * ReadAttributesResponse | 0x01 |
| * WriteAttributesResponse | 0x04 |
| * WriteAttributesNoResponse | 0x05 |
+| * ConfigureReportingResponse | 0x07 |
+| * ReadReportingConfigurationResponse | 0x09 |
| * DefaultResponse | 0x0B |
| * DiscoverAttributesResponse | 0x0D |
+| * WriteAttributesStructuredResponse | 0x10 |
+| * DiscoverCommandsReceivedResponse | 0x12 |
+| * DiscoverCommandsGeneratedResponse | 0x14 |
+| * DiscoverAttributesExtendedResponse | 0x16 |
\*----------------------------------------------------------------------------*/
/*
@@ -508,10 +514,13 @@ class ReadAttributesResponse : public ModelCommandResponse
while (messageLen)
{
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", chip::Encoding::LittleEndian::Read16(message)); // attribId
+ uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", attributeId);
+
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
if (status == 0)
{
if (!ReadAttributeValue(message, messageLen))
@@ -520,7 +529,6 @@ class ReadAttributesResponse : public ModelCommandResponse
}
}
}
-
return success;
}
};
@@ -544,13 +552,14 @@ class WriteAttributesResponse : public ModelCommandResponse
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
if (status != 0)
{
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", chip::Encoding::LittleEndian::Read16(message)); // attribId
+ uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", attributeId);
}
}
-
return success;
}
};
@@ -572,13 +581,113 @@ class WriteAttributesNoResponse : public ModelCommandResponse
while (messageLen)
{
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", chip::Encoding::LittleEndian::Read16(message)); // attribId
+ uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", attributeId);
+
if (!ReadAttributeValue(message, messageLen))
{
return false;
}
}
+ return success;
+ }
+};
+
+/*
+ * Command ConfigureReportingResponse
+ */
+class ConfigureReportingResponse : public ModelCommandResponse
+{
+public:
+ ConfigureReportingResponse() : ModelCommandResponse(0x07) {}
+
+ bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
+ {
+ bool success = true;
+ ChipLogProgress(chipTool, "ConfigureReportingResponse (0x07):");
+ // struct configureReportingResponseRecord[]
+ while (messageLen)
+ {
+ CHECK_MESSAGE_LENGTH(1);
+ uint8_t status = chip::Encoding::Read8(message); // zclStatus
+ success = CheckStatus(status);
+
+ if (status != 0)
+ {
+ CHECK_MESSAGE_LENGTH(1);
+ uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+ ChipLogProgress(chipTool, " %s: 0x%02x", "direction", direction);
+ }
+
+ if (status != 0)
+ {
+ CHECK_MESSAGE_LENGTH(2);
+ uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", attributeId);
+ }
+ }
+ return success;
+ }
+};
+
+/*
+ * Command ReadReportingConfigurationResponse
+ */
+class ReadReportingConfigurationResponse : public ModelCommandResponse
+{
+public:
+ ReadReportingConfigurationResponse() : ModelCommandResponse(0x09) {}
+
+ bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
+ {
+ bool success = true;
+ ChipLogProgress(chipTool, "ReadReportingConfigurationResponse (0x09):");
+
+ // struct readReportingConfigurationResponseRecord[]
+ while (messageLen)
+ {
+ CHECK_MESSAGE_LENGTH(1);
+ uint8_t direction = chip::Encoding::Read8(message); // reportingRole
+ ChipLogProgress(chipTool, " %s: 0x%02x", "direction", direction);
+
+ CHECK_MESSAGE_LENGTH(2);
+ uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", attributeId);
+
+ if (direction == 0)
+ {
+ CHECK_MESSAGE_LENGTH(1);
+ uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+ ChipLogProgress(chipTool, " %s: 0x%02x", "attributeType", attributeType);
+ }
+
+ if (direction == 0)
+ {
+ CHECK_MESSAGE_LENGTH(2);
+ uint16_t minimumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "minimumReportingInterval", minimumReportingInterval);
+ }
+
+ if (direction == 0)
+ {
+ CHECK_MESSAGE_LENGTH(2);
+ uint16_t maximumReportingInterval = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "maximumReportingInterval", maximumReportingInterval);
+ }
+
+ if (direction == 0)
+ {
+ // FIXME: unk is not supported yet.
+ }
+
+ if (direction == 1)
+ {
+ CHECK_MESSAGE_LENGTH(2);
+ uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "timeout", timeout);
+ }
+ }
return success;
}
};
@@ -597,7 +706,9 @@ class DefaultResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "DefaultResponse (0x0B):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "commandId", chip::Encoding::Read8(message)); // uint8
+ uint8_t commandId = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "commandId", commandId);
+
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
@@ -620,16 +731,146 @@ class DiscoverAttributesResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "DiscoverAttributesResponse (0x0D):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "discoveryComplete", chip::Encoding::Read8(message)); // bool
+ bool discoveryComplete = chip::Encoding::Read8(message); // bool
+ ChipLogProgress(chipTool, " %s: 0x%02x", "discoveryComplete", discoveryComplete);
+
// struct discoverAttributesResponseRecord[]
while (messageLen)
{
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", chip::Encoding::LittleEndian::Read16(message)); // attribId
+ uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", attributeId);
+
+ CHECK_MESSAGE_LENGTH(1);
+ uint8_t attributeType = chip::Encoding::Read8(message); // zclType
+ ChipLogProgress(chipTool, " %s: 0x%02x", "attributeType", attributeType);
+ }
+ return success;
+ }
+};
+
+/*
+ * Command WriteAttributesStructuredResponse
+ */
+class WriteAttributesStructuredResponse : public ModelCommandResponse
+{
+public:
+ WriteAttributesStructuredResponse() : ModelCommandResponse(0x10) {}
+
+ bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
+ {
+ bool success = true;
+ ChipLogProgress(chipTool, "WriteAttributesStructuredResponse (0x10):");
+
+ // struct writeStructuredResponseRecord[]
+ while (messageLen)
+ {
+ CHECK_MESSAGE_LENGTH(1);
+ uint8_t status = chip::Encoding::Read8(message); // zclStatus
+ success = CheckStatus(status);
+
+ if (status != 0)
+ {
+ CHECK_MESSAGE_LENGTH(2);
+ uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", attributeId);
+ }
+
+ if (status != 0)
+ {
+ CHECK_MESSAGE_LENGTH(2);
+ uint16_t selector = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "selector", selector);
+ }
+ }
+ return success;
+ }
+};
+
+/*
+ * Command DiscoverCommandsReceivedResponse
+ */
+class DiscoverCommandsReceivedResponse : public ModelCommandResponse
+{
+public:
+ DiscoverCommandsReceivedResponse() : ModelCommandResponse(0x12) {}
+
+ bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
+ {
+ bool success = true;
+ ChipLogProgress(chipTool, "DiscoverCommandsReceivedResponse (0x12):");
+
+ CHECK_MESSAGE_LENGTH(1);
+ bool discoveryComplete = chip::Encoding::Read8(message); // bool
+ ChipLogProgress(chipTool, " %s: 0x%02x", "discoveryComplete", discoveryComplete);
+
+ // uint8_t uint8[]
+ while (messageLen)
+ {
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "attributeType", chip::Encoding::Read8(message)); // zclType
+ uint8_t commandId = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "commandId", commandId);
}
+ return success;
+ }
+};
+
+/*
+ * Command DiscoverCommandsGeneratedResponse
+ */
+class DiscoverCommandsGeneratedResponse : public ModelCommandResponse
+{
+public:
+ DiscoverCommandsGeneratedResponse() : ModelCommandResponse(0x14) {}
+
+ bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
+ {
+ bool success = true;
+ ChipLogProgress(chipTool, "DiscoverCommandsGeneratedResponse (0x14):");
+
+ CHECK_MESSAGE_LENGTH(1);
+ bool discoveryComplete = chip::Encoding::Read8(message); // bool
+ ChipLogProgress(chipTool, " %s: 0x%02x", "discoveryComplete", discoveryComplete);
+ // uint8_t uint8[]
+ while (messageLen)
+ {
+ CHECK_MESSAGE_LENGTH(1);
+ uint8_t commandId = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "commandId", commandId);
+ }
+ return success;
+ }
+};
+
+/*
+ * Command DiscoverAttributesExtendedResponse
+ */
+class DiscoverAttributesExtendedResponse : public ModelCommandResponse
+{
+public:
+ DiscoverAttributesExtendedResponse() : ModelCommandResponse(0x16) {}
+
+ bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
+ {
+ bool success = true;
+ ChipLogProgress(chipTool, "DiscoverAttributesExtendedResponse (0x16):");
+
+ CHECK_MESSAGE_LENGTH(1);
+ bool discoveryComplete = chip::Encoding::Read8(message); // bool
+ ChipLogProgress(chipTool, " %s: 0x%02x", "discoveryComplete", discoveryComplete);
+
+ // struct discoverAttributesExtendedResponseRecord[]
+ while (messageLen)
+ {
+ CHECK_MESSAGE_LENGTH(2);
+ uint16_t attributeId = chip::Encoding::LittleEndian::Read16(message); // attribId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "attributeId", attributeId);
+
+ CHECK_MESSAGE_LENGTH(1);
+ uint8_t accessControl = chip::Encoding::Read8(message); // bitmap8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "accessControl", accessControl);
+ }
return success;
}
};
@@ -642,7 +883,7 @@ class DiscoverAttributesResponse : public ModelCommandResponse
| ColorControl | 0x0300 |
| DoorLock | 0x0101 |
| Groups | 0x0004 |
-| IASZone | 0x0500 |
+| IasZone | 0x0500 |
| Identify | 0x0003 |
| Level | 0x0008 |
| OnOff | 0x0006 |
@@ -655,7 +896,7 @@ constexpr uint16_t kBasicClusterId = 0x0000;
constexpr uint16_t kColorControlClusterId = 0x0300;
constexpr uint16_t kDoorLockClusterId = 0x0101;
constexpr uint16_t kGroupsClusterId = 0x0004;
-constexpr uint16_t kIASZoneClusterId = 0x0500;
+constexpr uint16_t kIasZoneClusterId = 0x0500;
constexpr uint16_t kIdentifyClusterId = 0x0003;
constexpr uint16_t kLevelClusterId = 0x0008;
constexpr uint16_t kOnOffClusterId = 0x0006;
@@ -685,15 +926,15 @@ constexpr uint16_t kTempMeasurementClusterId = 0x0402;
class BarrierControlGoToPercent : public ModelCommand
{
public:
- BarrierControlGoToPercent() : ModelCommand("go-to-percent", kBarrierControlClusterId, 0x00)
+ BarrierControlGoToPercent() : ModelCommand("barrier-control-go-to-percent", kBarrierControlClusterId, 0x00)
{
AddArgument("percentOpen", 0, UINT8_MAX, &mPercentOpen);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeBarrierControlClusterGoToPercentCommand(buffer->Start(), bufferSize, endPointId, mPercentOpen);
+ return encodeBarrierControlClusterBarrierControlGoToPercentCommand(buffer->Start(), bufferSize, endPointId, mPercentOpen);
}
// Global Response: DefaultResponse
@@ -713,11 +954,11 @@ class BarrierControlGoToPercent : public ModelCommand
class BarrierControlStop : public ModelCommand
{
public:
- BarrierControlStop() : ModelCommand("stop", kBarrierControlClusterId, 0x01) { ModelCommand::AddArguments(); }
+ BarrierControlStop() : ModelCommand("barrier-control-stop", kBarrierControlClusterId, 0x01) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeBarrierControlClusterStopCommand(buffer->Start(), bufferSize, endPointId);
+ return encodeBarrierControlClusterBarrierControlStopCommand(buffer->Start(), bufferSize, endPointId);
}
// Global Response: DefaultResponse
@@ -736,7 +977,7 @@ class DiscoverBarrierControlAttributes : public ModelCommand
public:
DiscoverBarrierControlAttributes() : ModelCommand("discover", kBarrierControlClusterId, 0x0c) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeBarrierControlClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
@@ -757,13 +998,13 @@ class ReadBarrierControlMovingState : public ModelCommand
public:
ReadBarrierControlMovingState() : ModelCommand("read", kBarrierControlClusterId, 0x00)
{
- AddArgument("attr-name", "moving-state");
+ AddArgument("attr-name", "barrier-moving-state");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeBarrierControlClusterReadMovingStateAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeBarrierControlClusterReadBarrierMovingStateAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -782,13 +1023,13 @@ class ReadBarrierControlSafetyStatus : public ModelCommand
public:
ReadBarrierControlSafetyStatus() : ModelCommand("read", kBarrierControlClusterId, 0x00)
{
- AddArgument("attr-name", "safety-status");
+ AddArgument("attr-name", "barrier-safety-status");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeBarrierControlClusterReadSafetyStatusAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeBarrierControlClusterReadBarrierSafetyStatusAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -807,13 +1048,13 @@ class ReadBarrierControlCapabilities : public ModelCommand
public:
ReadBarrierControlCapabilities() : ModelCommand("read", kBarrierControlClusterId, 0x00)
{
- AddArgument("attr-name", "capabilities");
+ AddArgument("attr-name", "barrier-capabilities");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeBarrierControlClusterReadCapabilitiesAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeBarrierControlClusterReadBarrierCapabilitiesAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -836,7 +1077,7 @@ class ReadBarrierControlBarrierPosition : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeBarrierControlClusterReadBarrierPositionAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -859,7 +1100,7 @@ class ReadBarrierControlBarrierPosition : public ModelCommand
| * ResetToFactoryDefaults | 0x00 |
|------------------------------------------------------------------------------|
| Attributes: | |
-| * ZCLVersion | 0x0000 |
+| * ZclVersion | 0x0000 |
| * PowerSource | 0x0007 |
\*----------------------------------------------------------------------------*/
@@ -874,7 +1115,7 @@ class BasicResetToFactoryDefaults : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeBasicClusterResetToFactoryDefaultsCommand(buffer->Start(), bufferSize, endPointId);
}
@@ -895,7 +1136,7 @@ class DiscoverBasicAttributes : public ModelCommand
public:
DiscoverBasicAttributes() : ModelCommand("discover", kBasicClusterId, 0x0c) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeBasicClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
@@ -909,20 +1150,20 @@ class DiscoverBasicAttributes : public ModelCommand
};
/*
- * Attribute ZCLVersion
+ * Attribute ZclVersion
*/
-class ReadBasicZCLVersion : public ModelCommand
+class ReadBasicZclVersion : public ModelCommand
{
public:
- ReadBasicZCLVersion() : ModelCommand("read", kBasicClusterId, 0x00)
+ ReadBasicZclVersion() : ModelCommand("read", kBasicClusterId, 0x00)
{
- AddArgument("attr-name", "zclversion");
+ AddArgument("attr-name", "zcl-version");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeBasicClusterReadZCLVersionAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeBasicClusterReadZclVersionAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -945,7 +1186,7 @@ class ReadBasicPowerSource : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeBasicClusterReadPowerSourceAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -986,9 +1227,8 @@ class ReadBasicPowerSource : public ModelCommand
| * RemainingTime | 0x0002 |
| * CurrentX | 0x0003 |
| * CurrentY | 0x0004 |
-| * ColorTemperatureMireds | 0x0007 |
+| * ColorTemperature | 0x0007 |
| * ColorMode | 0x0008 |
-| * Options | 0x000F |
| * NumberOfPrimaries | 0x0010 |
| * Primary1X | 0x0011 |
| * Primary1Y | 0x0012 |
@@ -1013,11 +1253,9 @@ class ReadBasicPowerSource : public ModelCommand
| * ColorLoopActive | 0x4002 |
| * ColorLoopDirection | 0x4003 |
| * ColorLoopTime | 0x4004 |
-| * ColorLoopStartEnhancedHue | 0x4005 |
-| * ColorLoopStoredEnhancedHue | 0x4006 |
| * ColorCapabilities | 0x400A |
-| * ColorTempPhysicalMinMireds | 0x400B |
-| * ColorTempPhysicalMaxMireds | 0x400C |
+| * ColorTempPhysicalMin | 0x400B |
+| * ColorTempPhysicalMax | 0x400C |
| * CoupleColorTempToLevelMinMireds | 0x400D |
| * StartUpColorTemperatureMireds | 0x4010 |
\*----------------------------------------------------------------------------*/
@@ -1037,7 +1275,7 @@ class ColorControlMoveColor : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterMoveColorCommand(buffer->Start(), bufferSize, endPointId, mRateX, mRateY, mOptionsMask,
mOptionsOverride);
@@ -1067,17 +1305,17 @@ class ColorControlMoveColorTemperature : public ModelCommand
{
AddArgument("moveMode", 0, UINT8_MAX, &mMoveMode);
AddArgument("rate", 0, UINT16_MAX, &mRate);
- AddArgument("colorTemperatureMinimumMireds", 0, UINT16_MAX, &mColorTemperatureMinimumMireds);
- AddArgument("colorTemperatureMaximumMireds", 0, UINT16_MAX, &mColorTemperatureMaximumMireds);
+ AddArgument("colorTemperatureMinimum", 0, UINT16_MAX, &mColorTemperatureMinimum);
+ AddArgument("colorTemperatureMaximum", 0, UINT16_MAX, &mColorTemperatureMaximum);
AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterMoveColorTemperatureCommand(buffer->Start(), bufferSize, endPointId, mMoveMode, mRate,
- mColorTemperatureMinimumMireds, mColorTemperatureMaximumMireds,
+ mColorTemperatureMinimum, mColorTemperatureMaximum,
mOptionsMask, mOptionsOverride);
}
@@ -1091,8 +1329,8 @@ class ColorControlMoveColorTemperature : public ModelCommand
private:
uint8_t mMoveMode;
uint16_t mRate;
- uint16_t mColorTemperatureMinimumMireds;
- uint16_t mColorTemperatureMaximumMireds;
+ uint16_t mColorTemperatureMinimum;
+ uint16_t mColorTemperatureMaximum;
uint8_t mOptionsMask;
uint8_t mOptionsOverride;
};
@@ -1112,7 +1350,7 @@ class ColorControlMoveHue : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterMoveHueCommand(buffer->Start(), bufferSize, endPointId, mMoveMode, mRate, mOptionsMask,
mOptionsOverride);
@@ -1147,7 +1385,7 @@ class ColorControlMoveSaturation : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterMoveSaturationCommand(buffer->Start(), bufferSize, endPointId, mMoveMode, mRate,
mOptionsMask, mOptionsOverride);
@@ -1183,7 +1421,7 @@ class ColorControlMoveToColor : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterMoveToColorCommand(buffer->Start(), bufferSize, endPointId, mColorX, mColorY,
mTransitionTime, mOptionsMask, mOptionsOverride);
@@ -1212,17 +1450,17 @@ class ColorControlMoveToColorTemperature : public ModelCommand
public:
ColorControlMoveToColorTemperature() : ModelCommand("move-to-color-temperature", kColorControlClusterId, 0x0A)
{
- AddArgument("colorTemperatureMireds", 0, UINT16_MAX, &mColorTemperatureMireds);
+ AddArgument("colorTemperature", 0, UINT16_MAX, &mColorTemperature);
AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeColorControlClusterMoveToColorTemperatureCommand(
- buffer->Start(), bufferSize, endPointId, mColorTemperatureMireds, mTransitionTime, mOptionsMask, mOptionsOverride);
+ return encodeColorControlClusterMoveToColorTemperatureCommand(buffer->Start(), bufferSize, endPointId, mColorTemperature,
+ mTransitionTime, mOptionsMask, mOptionsOverride);
}
// Global Response: DefaultResponse
@@ -1233,7 +1471,7 @@ class ColorControlMoveToColorTemperature : public ModelCommand
}
private:
- uint16_t mColorTemperatureMireds;
+ uint16_t mColorTemperature;
uint16_t mTransitionTime;
uint8_t mOptionsMask;
uint8_t mOptionsOverride;
@@ -1255,7 +1493,7 @@ class ColorControlMoveToHue : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterMoveToHueCommand(buffer->Start(), bufferSize, endPointId, mHue, mDirection, mTransitionTime,
mOptionsMask, mOptionsOverride);
@@ -1292,7 +1530,7 @@ class ColorControlMoveToHueAndSaturation : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterMoveToHueAndSaturationCommand(buffer->Start(), bufferSize, endPointId, mHue, mSaturation,
mTransitionTime, mOptionsMask, mOptionsOverride);
@@ -1328,7 +1566,7 @@ class ColorControlMoveToSaturation : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterMoveToSaturationCommand(buffer->Start(), bufferSize, endPointId, mSaturation,
mTransitionTime, mOptionsMask, mOptionsOverride);
@@ -1364,7 +1602,7 @@ class ColorControlStepColor : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterStepColorCommand(buffer->Start(), bufferSize, endPointId, mStepX, mStepY, mTransitionTime,
mOptionsMask, mOptionsOverride);
@@ -1396,18 +1634,18 @@ class ColorControlStepColorTemperature : public ModelCommand
AddArgument("stepMode", 0, UINT8_MAX, &mStepMode);
AddArgument("stepSize", 0, UINT16_MAX, &mStepSize);
AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
- AddArgument("colorTemperatureMinimumMireds", 0, UINT16_MAX, &mColorTemperatureMinimumMireds);
- AddArgument("colorTemperatureMaximumMireds", 0, UINT16_MAX, &mColorTemperatureMaximumMireds);
+ AddArgument("colorTemperatureMinimum", 0, UINT16_MAX, &mColorTemperatureMinimum);
+ AddArgument("colorTemperatureMaximum", 0, UINT16_MAX, &mColorTemperatureMaximum);
AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterStepColorTemperatureCommand(buffer->Start(), bufferSize, endPointId, mStepMode, mStepSize,
- mTransitionTime, mColorTemperatureMinimumMireds,
- mColorTemperatureMaximumMireds, mOptionsMask, mOptionsOverride);
+ mTransitionTime, mColorTemperatureMinimum,
+ mColorTemperatureMaximum, mOptionsMask, mOptionsOverride);
}
// Global Response: DefaultResponse
@@ -1421,8 +1659,8 @@ class ColorControlStepColorTemperature : public ModelCommand
uint8_t mStepMode;
uint16_t mStepSize;
uint16_t mTransitionTime;
- uint16_t mColorTemperatureMinimumMireds;
- uint16_t mColorTemperatureMaximumMireds;
+ uint16_t mColorTemperatureMinimum;
+ uint16_t mColorTemperatureMaximum;
uint8_t mOptionsMask;
uint8_t mOptionsOverride;
};
@@ -1443,7 +1681,7 @@ class ColorControlStepHue : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterStepHueCommand(buffer->Start(), bufferSize, endPointId, mStepMode, mStepSize,
mTransitionTime, mOptionsMask, mOptionsOverride);
@@ -1480,7 +1718,7 @@ class ColorControlStepSaturation : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterStepSaturationCommand(buffer->Start(), bufferSize, endPointId, mStepMode, mStepSize,
mTransitionTime, mOptionsMask, mOptionsOverride);
@@ -1514,7 +1752,7 @@ class ColorControlStopMoveStep : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterStopMoveStepCommand(buffer->Start(), bufferSize, endPointId, mOptionsMask,
mOptionsOverride);
@@ -1540,7 +1778,7 @@ class DiscoverColorControlAttributes : public ModelCommand
public:
DiscoverColorControlAttributes() : ModelCommand("discover", kColorControlClusterId, 0x0c) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
@@ -1565,7 +1803,7 @@ class ReadColorControlCurrentHue : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadCurrentHueAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1578,6 +1816,37 @@ class ReadColorControlCurrentHue : public ModelCommand
}
};
+class ReportColorControlCurrentHue : public ModelCommand
+{
+public:
+ ReportColorControlCurrentHue() : ModelCommand("report", kColorControlClusterId, 0x06)
+ {
+ AddArgument("attr-name", "current-hue");
+ AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
+ AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
+ AddArgument("change", 0, UINT8_MAX, &mChange);
+ ModelCommand::AddArguments();
+ }
+
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
+ {
+ return encodeColorControlClusterReportCurrentHueAttribute(buffer->Start(), bufferSize, endPointId, mMinInterval,
+ mMaxInterval, mChange);
+ }
+
+ // Global Response: ConfigureReportingResponse
+ bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+ {
+ ConfigureReportingResponse response;
+ return response.HandleCommandResponse(commandId, message, messageLen);
+ }
+
+private:
+ uint16_t mMinInterval;
+ uint16_t mMaxInterval;
+ uint8_t mChange;
+};
+
/*
* Attribute CurrentSaturation
*/
@@ -1590,7 +1859,7 @@ class ReadColorControlCurrentSaturation : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadCurrentSaturationAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1603,6 +1872,37 @@ class ReadColorControlCurrentSaturation : public ModelCommand
}
};
+class ReportColorControlCurrentSaturation : public ModelCommand
+{
+public:
+ ReportColorControlCurrentSaturation() : ModelCommand("report", kColorControlClusterId, 0x06)
+ {
+ AddArgument("attr-name", "current-saturation");
+ AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
+ AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
+ AddArgument("change", 0, UINT8_MAX, &mChange);
+ ModelCommand::AddArguments();
+ }
+
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
+ {
+ return encodeColorControlClusterReportCurrentSaturationAttribute(buffer->Start(), bufferSize, endPointId, mMinInterval,
+ mMaxInterval, mChange);
+ }
+
+ // Global Response: ConfigureReportingResponse
+ bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+ {
+ ConfigureReportingResponse response;
+ return response.HandleCommandResponse(commandId, message, messageLen);
+ }
+
+private:
+ uint16_t mMinInterval;
+ uint16_t mMaxInterval;
+ uint8_t mChange;
+};
+
/*
* Attribute RemainingTime
*/
@@ -1615,7 +1915,7 @@ class ReadColorControlRemainingTime : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadRemainingTimeAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1636,11 +1936,11 @@ class ReadColorControlCurrentX : public ModelCommand
public:
ReadColorControlCurrentX() : ModelCommand("read", kColorControlClusterId, 0x00)
{
- AddArgument("attr-name", "current-x");
+ AddArgument("attr-name", "currentx");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadCurrentXAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1653,6 +1953,37 @@ class ReadColorControlCurrentX : public ModelCommand
}
};
+class ReportColorControlCurrentX : public ModelCommand
+{
+public:
+ ReportColorControlCurrentX() : ModelCommand("report", kColorControlClusterId, 0x06)
+ {
+ AddArgument("attr-name", "currentx");
+ AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
+ AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
+ AddArgument("change", 0, UINT16_MAX, &mChange);
+ ModelCommand::AddArguments();
+ }
+
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
+ {
+ return encodeColorControlClusterReportCurrentXAttribute(buffer->Start(), bufferSize, endPointId, mMinInterval, mMaxInterval,
+ mChange);
+ }
+
+ // Global Response: ConfigureReportingResponse
+ bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+ {
+ ConfigureReportingResponse response;
+ return response.HandleCommandResponse(commandId, message, messageLen);
+ }
+
+private:
+ uint16_t mMinInterval;
+ uint16_t mMaxInterval;
+ uint16_t mChange;
+};
+
/*
* Attribute CurrentY
*/
@@ -1661,11 +1992,11 @@ class ReadColorControlCurrentY : public ModelCommand
public:
ReadColorControlCurrentY() : ModelCommand("read", kColorControlClusterId, 0x00)
{
- AddArgument("attr-name", "current-y");
+ AddArgument("attr-name", "currenty");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadCurrentYAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1678,46 +2009,52 @@ class ReadColorControlCurrentY : public ModelCommand
}
};
-/*
- * Attribute ColorTemperatureMireds
- */
-class ReadColorControlColorTemperatureMireds : public ModelCommand
+class ReportColorControlCurrentY : public ModelCommand
{
public:
- ReadColorControlColorTemperatureMireds() : ModelCommand("read", kColorControlClusterId, 0x00)
+ ReportColorControlCurrentY() : ModelCommand("report", kColorControlClusterId, 0x06)
{
- AddArgument("attr-name", "color-temperature-mireds");
+ AddArgument("attr-name", "currenty");
+ AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
+ AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
+ AddArgument("change", 0, UINT16_MAX, &mChange);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeColorControlClusterReadColorTemperatureMiredsAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeColorControlClusterReportCurrentYAttribute(buffer->Start(), bufferSize, endPointId, mMinInterval, mMaxInterval,
+ mChange);
}
- // Global Response: ReadAttributesResponse
+ // Global Response: ConfigureReportingResponse
bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- ReadAttributesResponse response;
+ ConfigureReportingResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
+
+private:
+ uint16_t mMinInterval;
+ uint16_t mMaxInterval;
+ uint16_t mChange;
};
/*
- * Attribute ColorMode
+ * Attribute ColorTemperature
*/
-class ReadColorControlColorMode : public ModelCommand
+class ReadColorControlColorTemperature : public ModelCommand
{
public:
- ReadColorControlColorMode() : ModelCommand("read", kColorControlClusterId, 0x00)
+ ReadColorControlColorTemperature() : ModelCommand("read", kColorControlClusterId, 0x00)
{
- AddArgument("attr-name", "color-mode");
+ AddArgument("attr-name", "color-temperature-mireds");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeColorControlClusterReadColorModeAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeColorControlClusterReadColorTemperatureAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -1728,55 +2065,60 @@ class ReadColorControlColorMode : public ModelCommand
}
};
-/*
- * Attribute Options
- */
-class ReadColorControlOptions : public ModelCommand
+class ReportColorControlColorTemperature : public ModelCommand
{
public:
- ReadColorControlOptions() : ModelCommand("read", kColorControlClusterId, 0x00)
+ ReportColorControlColorTemperature() : ModelCommand("report", kColorControlClusterId, 0x06)
{
- AddArgument("attr-name", "options");
+ AddArgument("attr-name", "color-temperature-mireds");
+ AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
+ AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
+ AddArgument("change", 0, UINT16_MAX, &mChange);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeColorControlClusterReadOptionsAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeColorControlClusterReportColorTemperatureAttribute(buffer->Start(), bufferSize, endPointId, mMinInterval,
+ mMaxInterval, mChange);
}
- // Global Response: ReadAttributesResponse
+ // Global Response: ConfigureReportingResponse
bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- ReadAttributesResponse response;
+ ConfigureReportingResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
+
+private:
+ uint16_t mMinInterval;
+ uint16_t mMaxInterval;
+ uint16_t mChange;
};
-class WriteColorControlOptions : public ModelCommand
+/*
+ * Attribute ColorMode
+ */
+class ReadColorControlColorMode : public ModelCommand
{
public:
- WriteColorControlOptions() : ModelCommand("write", kColorControlClusterId, 0x01)
+ ReadColorControlColorMode() : ModelCommand("read", kColorControlClusterId, 0x00)
{
- AddArgument("attr-name", "options");
- AddArgument("attr-value", 0, UINT8_MAX, &mOptions);
+ AddArgument("attr-name", "color-mode");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeColorControlClusterWriteOptionsAttribute(buffer->Start(), bufferSize, endPointId, mOptions);
+ return encodeColorControlClusterReadColorModeAttribute(buffer->Start(), bufferSize, endPointId);
}
- // Global Response: WriteAttributesResponse
+ // Global Response: ReadAttributesResponse
bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- WriteAttributesResponse response;
+ ReadAttributesResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
-
-private:
- uint8_t mOptions;
};
/*
@@ -1791,7 +2133,7 @@ class ReadColorControlNumberOfPrimaries : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadNumberOfPrimariesAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1816,7 +2158,7 @@ class ReadColorControlPrimary1X : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary1XAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1841,7 +2183,7 @@ class ReadColorControlPrimary1Y : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary1YAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1866,7 +2208,7 @@ class ReadColorControlPrimary1Intensity : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary1IntensityAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1891,7 +2233,7 @@ class ReadColorControlPrimary2X : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary2XAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1916,7 +2258,7 @@ class ReadColorControlPrimary2Y : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary2YAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1941,7 +2283,7 @@ class ReadColorControlPrimary2Intensity : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary2IntensityAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1966,7 +2308,7 @@ class ReadColorControlPrimary3X : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary3XAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -1991,7 +2333,7 @@ class ReadColorControlPrimary3Y : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary3YAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2016,7 +2358,7 @@ class ReadColorControlPrimary3Intensity : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary3IntensityAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2041,7 +2383,7 @@ class ReadColorControlPrimary4X : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary4XAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2066,7 +2408,7 @@ class ReadColorControlPrimary4Y : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary4YAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2091,7 +2433,7 @@ class ReadColorControlPrimary4Intensity : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary4IntensityAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2116,7 +2458,7 @@ class ReadColorControlPrimary5X : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary5XAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2141,7 +2483,7 @@ class ReadColorControlPrimary5Y : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary5YAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2166,7 +2508,7 @@ class ReadColorControlPrimary5Intensity : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary5IntensityAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2191,7 +2533,7 @@ class ReadColorControlPrimary6X : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary6XAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2216,7 +2558,7 @@ class ReadColorControlPrimary6Y : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary6YAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2241,7 +2583,7 @@ class ReadColorControlPrimary6Intensity : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadPrimary6IntensityAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2266,7 +2608,7 @@ class ReadColorControlEnhancedCurrentHue : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadEnhancedCurrentHueAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2291,7 +2633,7 @@ class ReadColorControlEnhancedColorMode : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadEnhancedColorModeAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2316,7 +2658,7 @@ class ReadColorControlColorLoopActive : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadColorLoopActiveAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2341,7 +2683,7 @@ class ReadColorControlColorLoopDirection : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadColorLoopDirectionAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2366,7 +2708,7 @@ class ReadColorControlColorLoopTime : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadColorLoopTimeAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2379,56 +2721,6 @@ class ReadColorControlColorLoopTime : public ModelCommand
}
};
-/*
- * Attribute ColorLoopStartEnhancedHue
- */
-class ReadColorControlColorLoopStartEnhancedHue : public ModelCommand
-{
-public:
- ReadColorControlColorLoopStartEnhancedHue() : ModelCommand("read", kColorControlClusterId, 0x00)
- {
- AddArgument("attr-name", "color-loop-start-enhanced-hue");
- ModelCommand::AddArguments();
- }
-
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
- {
- return encodeColorControlClusterReadColorLoopStartEnhancedHueAttribute(buffer->Start(), bufferSize, endPointId);
- }
-
- // Global Response: ReadAttributesResponse
- bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
- {
- ReadAttributesResponse response;
- return response.HandleCommandResponse(commandId, message, messageLen);
- }
-};
-
-/*
- * Attribute ColorLoopStoredEnhancedHue
- */
-class ReadColorControlColorLoopStoredEnhancedHue : public ModelCommand
-{
-public:
- ReadColorControlColorLoopStoredEnhancedHue() : ModelCommand("read", kColorControlClusterId, 0x00)
- {
- AddArgument("attr-name", "color-loop-stored-enhanced-hue");
- ModelCommand::AddArguments();
- }
-
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
- {
- return encodeColorControlClusterReadColorLoopStoredEnhancedHueAttribute(buffer->Start(), bufferSize, endPointId);
- }
-
- // Global Response: ReadAttributesResponse
- bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
- {
- ReadAttributesResponse response;
- return response.HandleCommandResponse(commandId, message, messageLen);
- }
-};
-
/*
* Attribute ColorCapabilities
*/
@@ -2441,7 +2733,7 @@ class ReadColorControlColorCapabilities : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadColorCapabilitiesAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2455,20 +2747,20 @@ class ReadColorControlColorCapabilities : public ModelCommand
};
/*
- * Attribute ColorTempPhysicalMinMireds
+ * Attribute ColorTempPhysicalMin
*/
-class ReadColorControlColorTempPhysicalMinMireds : public ModelCommand
+class ReadColorControlColorTempPhysicalMin : public ModelCommand
{
public:
- ReadColorControlColorTempPhysicalMinMireds() : ModelCommand("read", kColorControlClusterId, 0x00)
+ ReadColorControlColorTempPhysicalMin() : ModelCommand("read", kColorControlClusterId, 0x00)
{
- AddArgument("attr-name", "color-temp-physical-min-mireds");
+ AddArgument("attr-name", "color-temp-physical-min");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeColorControlClusterReadColorTempPhysicalMinMiredsAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeColorControlClusterReadColorTempPhysicalMinAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -2480,20 +2772,20 @@ class ReadColorControlColorTempPhysicalMinMireds : public ModelCommand
};
/*
- * Attribute ColorTempPhysicalMaxMireds
+ * Attribute ColorTempPhysicalMax
*/
-class ReadColorControlColorTempPhysicalMaxMireds : public ModelCommand
+class ReadColorControlColorTempPhysicalMax : public ModelCommand
{
public:
- ReadColorControlColorTempPhysicalMaxMireds() : ModelCommand("read", kColorControlClusterId, 0x00)
+ ReadColorControlColorTempPhysicalMax() : ModelCommand("read", kColorControlClusterId, 0x00)
{
- AddArgument("attr-name", "color-temp-physical-max-mireds");
+ AddArgument("attr-name", "color-temp-physical-max");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeColorControlClusterReadColorTempPhysicalMaxMiredsAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeColorControlClusterReadColorTempPhysicalMaxAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -2516,7 +2808,7 @@ class ReadColorControlCoupleColorTempToLevelMinMireds : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadCoupleColorTempToLevelMinMiredsAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2541,7 +2833,7 @@ class ReadColorControlStartUpColorTemperatureMireds : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeColorControlClusterReadStartUpColorTemperatureMiredsAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -2554,82 +2846,55 @@ class ReadColorControlStartUpColorTemperatureMireds : public ModelCommand
}
};
-class WriteColorControlStartUpColorTemperatureMireds : public ModelCommand
-{
-public:
- WriteColorControlStartUpColorTemperatureMireds() : ModelCommand("write", kColorControlClusterId, 0x01)
- {
- AddArgument("attr-name", "start-up-color-temperature-mireds");
- AddArgument("attr-value", 0, UINT16_MAX, &mStartUpColorTemperatureMireds);
- ModelCommand::AddArguments();
- }
-
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
- {
- return encodeColorControlClusterWriteStartUpColorTemperatureMiredsAttribute(buffer->Start(), bufferSize, endPointId,
- mStartUpColorTemperatureMireds);
- }
-
- // Global Response: WriteAttributesResponse
- bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
- {
- WriteAttributesResponse response;
- return response.HandleCommandResponse(commandId, message, messageLen);
- }
-
-private:
- uint16_t mStartUpColorTemperatureMireds;
-};
-
/*----------------------------------------------------------------------------*\
| Cluster DoorLock | 0x0101 |
|------------------------------------------------------------------------------|
| Responses: | |
-| * ClearAllPINCodesResponse | 0x08 |
-| * ClearAllRFIDCodesResponse | 0x19 |
+| * ClearAllPinsResponse | 0x08 |
+| * ClearAllRfidsResponse | 0x19 |
| * ClearHolidayScheduleResponse | 0x13 |
-| * ClearPINCodeResponse | 0x07 |
-| * ClearRFIDCodeResponse | 0x18 |
+| * ClearPinResponse | 0x07 |
+| * ClearRfidResponse | 0x18 |
| * ClearWeekdayScheduleResponse | 0x0D |
-| * ClearYearDayScheduleResponse | 0x10 |
+| * ClearYeardayScheduleResponse | 0x10 |
| * GetHolidayScheduleResponse | 0x12 |
-| * GetPINCodeResponse | 0x06 |
-| * GetRFIDCodeResponse | 0x17 |
+| * GetPinResponse | 0x06 |
+| * GetRfidResponse | 0x17 |
| * GetUserTypeResponse | 0x15 |
| * GetWeekdayScheduleResponse | 0x0C |
-| * GetYearDayScheduleResponse | 0x0F |
+| * GetYeardayScheduleResponse | 0x0F |
| * LockDoorResponse | 0x00 |
| * SetHolidayScheduleResponse | 0x11 |
-| * SetPINCodeResponse | 0x05 |
-| * SetRFIDCodeResponse | 0x16 |
+| * SetPinResponse | 0x05 |
+| * SetRfidResponse | 0x16 |
| * SetUserTypeResponse | 0x14 |
| * SetWeekdayScheduleResponse | 0x0B |
-| * SetYearDayScheduleResponse | 0x0E |
+| * SetYeardayScheduleResponse | 0x0E |
| * UnlockDoorResponse | 0x01 |
| * UnlockWithTimeoutResponse | 0x03 |
| | |
|------------------------------------------------------------------------------|
| Commands: | |
-| * ClearAllPINCodes | 0x08 |
-| * ClearAllRFIDCodes | 0x19 |
+| * ClearAllPins | 0x08 |
+| * ClearAllRfids | 0x19 |
| * ClearHolidaySchedule | 0x13 |
-| * ClearPINCode | 0x07 |
-| * ClearRFIDCode | 0x18 |
+| * ClearPin | 0x07 |
+| * ClearRfid | 0x18 |
| * ClearWeekdaySchedule | 0x0D |
-| * ClearYearDaySchedule | 0x10 |
+| * ClearYeardaySchedule | 0x10 |
| * GetHolidaySchedule | 0x12 |
-| * GetPINCode | 0x06 |
-| * GetRFIDCode | 0x17 |
+| * GetPin | 0x06 |
+| * GetRfid | 0x17 |
| * GetUserType | 0x15 |
| * GetWeekdaySchedule | 0x0C |
-| * GetYearDaySchedule | 0x0F |
+| * GetYeardaySchedule | 0x0F |
| * LockDoor | 0x00 |
| * SetHolidaySchedule | 0x11 |
-| * SetPINCode | 0x05 |
-| * SetRFIDCode | 0x16 |
+| * SetPin | 0x05 |
+| * SetRfid | 0x16 |
| * SetUserType | 0x14 |
| * SetWeekdaySchedule | 0x0B |
-| * SetYearDaySchedule | 0x0E |
+| * SetYeardaySchedule | 0x0E |
| * UnlockDoor | 0x01 |
| * UnlockWithTimeout | 0x03 |
|------------------------------------------------------------------------------|
@@ -2640,40 +2905,42 @@ class WriteColorControlStartUpColorTemperatureMireds : public ModelCommand
\*----------------------------------------------------------------------------*/
/*
- * Command Response ClearAllPINCodesResponse
+ * Command Response ClearAllPinsResponse
*/
-class ClearAllPINCodesResponse : public ModelCommandResponse
+class ClearAllPinsResponse : public ModelCommandResponse
{
public:
- ClearAllPINCodesResponse() : ModelCommandResponse(0x08) {}
+ ClearAllPinsResponse() : ModelCommandResponse(0x08) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "ClearAllPINCodesResponse (0x08):");
+ ChipLogProgress(chipTool, "ClearAllPinsResponse (0x08):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
};
/*
- * Command Response ClearAllRFIDCodesResponse
+ * Command Response ClearAllRfidsResponse
*/
-class ClearAllRFIDCodesResponse : public ModelCommandResponse
+class ClearAllRfidsResponse : public ModelCommandResponse
{
public:
- ClearAllRFIDCodesResponse() : ModelCommandResponse(0x19) {}
+ ClearAllRfidsResponse() : ModelCommandResponse(0x19) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "ClearAllRFIDCodesResponse (0x19):");
+ ChipLogProgress(chipTool, "ClearAllRfidsResponse (0x19):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
@@ -2693,47 +2960,50 @@ class ClearHolidayScheduleResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "ClearHolidayScheduleResponse (0x13):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
};
/*
- * Command Response ClearPINCodeResponse
+ * Command Response ClearPinResponse
*/
-class ClearPINCodeResponse : public ModelCommandResponse
+class ClearPinResponse : public ModelCommandResponse
{
public:
- ClearPINCodeResponse() : ModelCommandResponse(0x07) {}
+ ClearPinResponse() : ModelCommandResponse(0x07) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "ClearPINCodeResponse (0x07):");
+ ChipLogProgress(chipTool, "ClearPinResponse (0x07):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
};
/*
- * Command Response ClearRFIDCodeResponse
+ * Command Response ClearRfidResponse
*/
-class ClearRFIDCodeResponse : public ModelCommandResponse
+class ClearRfidResponse : public ModelCommandResponse
{
public:
- ClearRFIDCodeResponse() : ModelCommandResponse(0x18) {}
+ ClearRfidResponse() : ModelCommandResponse(0x18) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "ClearRFIDCodeResponse (0x18):");
+ ChipLogProgress(chipTool, "ClearRfidResponse (0x18):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
@@ -2753,27 +3023,29 @@ class ClearWeekdayScheduleResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "ClearWeekdayScheduleResponse (0x0D):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
};
/*
- * Command Response ClearYearDayScheduleResponse
+ * Command Response ClearYeardayScheduleResponse
*/
-class ClearYearDayScheduleResponse : public ModelCommandResponse
+class ClearYeardayScheduleResponse : public ModelCommandResponse
{
public:
- ClearYearDayScheduleResponse() : ModelCommandResponse(0x10) {}
+ ClearYeardayScheduleResponse() : ModelCommandResponse(0x10) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "ClearYearDayScheduleResponse (0x10):");
+ ChipLogProgress(chipTool, "ClearYeardayScheduleResponse (0x10):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
@@ -2793,24 +3065,32 @@ class GetHolidayScheduleResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "GetHolidayScheduleResponse (0x12):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "holidayScheduleId", chip::Encoding::Read8(message)); // uint8
+ uint8_t holidayScheduleId = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "holidayScheduleId", holidayScheduleId);
+
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
if (status == 0)
{
CHECK_MESSAGE_LENGTH(4);
- ChipLogProgress(chipTool, " %s: 0x%08x", "localStartTime", chip::Encoding::LittleEndian::Read32(message)); // uint32
+ uint32_t localStartTime = chip::Encoding::LittleEndian::Read32(message); // uint32
+ ChipLogProgress(chipTool, " %s: 0x%08x", "localStartTime", localStartTime);
}
+
if (status == 0)
{
CHECK_MESSAGE_LENGTH(4);
- ChipLogProgress(chipTool, " %s: 0x%08x", "localEndTime", chip::Encoding::LittleEndian::Read32(message)); // uint32
+ uint32_t localEndTime = chip::Encoding::LittleEndian::Read32(message); // uint32
+ ChipLogProgress(chipTool, " %s: 0x%08x", "localEndTime", localEndTime);
}
+
if (status == 0)
{
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "operatingModeDuringHoliday", chip::Encoding::Read8(message)); // DrlkOperMode
+ uint8_t operatingModeDuringHoliday = chip::Encoding::Read8(message); // DrlkOperMode
+ ChipLogProgress(chipTool, " %s: 0x%02x", "operatingModeDuringHoliday", operatingModeDuringHoliday);
}
return success;
@@ -2818,24 +3098,30 @@ class GetHolidayScheduleResponse : public ModelCommandResponse
};
/*
- * Command Response GetPINCodeResponse
+ * Command Response GetPinResponse
*/
-class GetPINCodeResponse : public ModelCommandResponse
+class GetPinResponse : public ModelCommandResponse
{
public:
- GetPINCodeResponse() : ModelCommandResponse(0x06) {}
+ GetPinResponse() : ModelCommandResponse(0x06) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "GetPINCodeResponse (0x06):");
+ ChipLogProgress(chipTool, "GetPinResponse (0x06):");
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "userId", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t userId = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "userId", userId);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "userStatus", chip::Encoding::Read8(message)); // DrlkUserStatus
+ uint8_t userStatus = chip::Encoding::Read8(message); // DrlkUserStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "userStatus", userStatus);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "userType", chip::Encoding::Read8(message)); // DrlkUserType
+ uint8_t userType = chip::Encoding::Read8(message); // DrlkUserType
+ ChipLogProgress(chipTool, " %s: 0x%02x", "userType", userType);
+
CHECK_MESSAGE_LENGTH(1);
{
uint8_t codeLen = chip::Encoding::Read8(message); // octstr
@@ -2852,24 +3138,30 @@ class GetPINCodeResponse : public ModelCommandResponse
};
/*
- * Command Response GetRFIDCodeResponse
+ * Command Response GetRfidResponse
*/
-class GetRFIDCodeResponse : public ModelCommandResponse
+class GetRfidResponse : public ModelCommandResponse
{
public:
- GetRFIDCodeResponse() : ModelCommandResponse(0x17) {}
+ GetRfidResponse() : ModelCommandResponse(0x17) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "GetRFIDCodeResponse (0x17):");
+ ChipLogProgress(chipTool, "GetRfidResponse (0x17):");
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "userId", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t userId = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "userId", userId);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "userStatus", chip::Encoding::Read8(message)); // DrlkUserStatus
+ uint8_t userStatus = chip::Encoding::Read8(message); // DrlkUserStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "userStatus", userStatus);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "userType", chip::Encoding::Read8(message)); // DrlkUserType
+ uint8_t userType = chip::Encoding::Read8(message); // DrlkUserType
+ ChipLogProgress(chipTool, " %s: 0x%02x", "userType", userType);
+
CHECK_MESSAGE_LENGTH(1);
{
uint8_t rFIdCodeLen = chip::Encoding::Read8(message); // octstr
@@ -2899,9 +3191,12 @@ class GetUserTypeResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "GetUserTypeResponse (0x15):");
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "userId", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t userId = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "userId", userId);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "userType", chip::Encoding::Read8(message)); // DrlkUserType
+ uint8_t userType = chip::Encoding::Read8(message); // DrlkUserType
+ ChipLogProgress(chipTool, " %s: 0x%02x", "userType", userType);
return success;
}
@@ -2921,36 +3216,50 @@ class GetWeekdayScheduleResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "GetWeekdayScheduleResponse (0x0C):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "scheduleId", chip::Encoding::Read8(message)); // uint8
+ uint8_t scheduleId = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "scheduleId", scheduleId);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "userId", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t userId = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "userId", userId);
+
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
if (status == 0)
{
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "daysMask", chip::Encoding::Read8(message)); // DrlkDaysMask
+ uint8_t daysMask = chip::Encoding::Read8(message); // DrlkDaysMask
+ ChipLogProgress(chipTool, " %s: 0x%02x", "daysMask", daysMask);
}
+
if (status == 0)
{
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "startHour", chip::Encoding::Read8(message)); // uint8
+ uint8_t startHour = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "startHour", startHour);
}
+
if (status == 0)
{
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "startMinute", chip::Encoding::Read8(message)); // uint8
+ uint8_t startMinute = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "startMinute", startMinute);
}
+
if (status == 0)
{
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "endHour", chip::Encoding::Read8(message)); // uint8
+ uint8_t endHour = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "endHour", endHour);
}
+
if (status == 0)
{
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "endMinute", chip::Encoding::Read8(message)); // uint8
+ uint8_t endMinute = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "endMinute", endMinute);
}
return success;
@@ -2958,34 +3267,42 @@ class GetWeekdayScheduleResponse : public ModelCommandResponse
};
/*
- * Command Response GetYearDayScheduleResponse
+ * Command Response GetYeardayScheduleResponse
*/
-class GetYearDayScheduleResponse : public ModelCommandResponse
+class GetYeardayScheduleResponse : public ModelCommandResponse
{
public:
- GetYearDayScheduleResponse() : ModelCommandResponse(0x0F) {}
+ GetYeardayScheduleResponse() : ModelCommandResponse(0x0F) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "GetYearDayScheduleResponse (0x0F):");
+ ChipLogProgress(chipTool, "GetYeardayScheduleResponse (0x0F):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "scheduleId", chip::Encoding::Read8(message)); // uint8
+ uint8_t scheduleId = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "scheduleId", scheduleId);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "userId", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t userId = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "userId", userId);
+
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
if (status == 0)
{
CHECK_MESSAGE_LENGTH(4);
- ChipLogProgress(chipTool, " %s: 0x%08x", "localStartTime", chip::Encoding::LittleEndian::Read32(message)); // uint32
+ uint32_t localStartTime = chip::Encoding::LittleEndian::Read32(message); // uint32
+ ChipLogProgress(chipTool, " %s: 0x%08x", "localStartTime", localStartTime);
}
+
if (status == 0)
{
CHECK_MESSAGE_LENGTH(4);
- ChipLogProgress(chipTool, " %s: 0x%08x", "localEndTime", chip::Encoding::LittleEndian::Read32(message)); // uint32
+ uint32_t localEndTime = chip::Encoding::LittleEndian::Read32(message); // uint32
+ ChipLogProgress(chipTool, " %s: 0x%08x", "localEndTime", localEndTime);
}
return success;
@@ -3027,47 +3344,50 @@ class SetHolidayScheduleResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "SetHolidayScheduleResponse (0x11):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
};
/*
- * Command Response SetPINCodeResponse
+ * Command Response SetPinResponse
*/
-class SetPINCodeResponse : public ModelCommandResponse
+class SetPinResponse : public ModelCommandResponse
{
public:
- SetPINCodeResponse() : ModelCommandResponse(0x05) {}
+ SetPinResponse() : ModelCommandResponse(0x05) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "SetPINCodeResponse (0x05):");
+ ChipLogProgress(chipTool, "SetPinResponse (0x05):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkSetCodeStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkSetCodeStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
};
/*
- * Command Response SetRFIDCodeResponse
+ * Command Response SetRfidResponse
*/
-class SetRFIDCodeResponse : public ModelCommandResponse
+class SetRfidResponse : public ModelCommandResponse
{
public:
- SetRFIDCodeResponse() : ModelCommandResponse(0x16) {}
+ SetRfidResponse() : ModelCommandResponse(0x16) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "SetRFIDCodeResponse (0x16):");
+ ChipLogProgress(chipTool, "SetRfidResponse (0x16):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkSetCodeStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkSetCodeStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
@@ -3087,7 +3407,8 @@ class SetUserTypeResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "SetUserTypeResponse (0x14):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
@@ -3107,27 +3428,29 @@ class SetWeekdayScheduleResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "SetWeekdayScheduleResponse (0x0B):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
};
/*
- * Command Response SetYearDayScheduleResponse
+ * Command Response SetYeardayScheduleResponse
*/
-class SetYearDayScheduleResponse : public ModelCommandResponse
+class SetYeardayScheduleResponse : public ModelCommandResponse
{
public:
- SetYearDayScheduleResponse() : ModelCommandResponse(0x0E) {}
+ SetYeardayScheduleResponse() : ModelCommandResponse(0x0E) {}
bool HandleResponse(uint8_t * message, uint16_t messageLen) const override
{
bool success = true;
- ChipLogProgress(chipTool, "SetYearDayScheduleResponse (0x0E):");
+ ChipLogProgress(chipTool, "SetYeardayScheduleResponse (0x0E):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // DrlkPassFailStatus
+ uint8_t status = chip::Encoding::Read8(message); // DrlkPassFailStatus
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
return success;
}
@@ -3176,16 +3499,16 @@ class UnlockWithTimeoutResponse : public ModelCommandResponse
};
/*
- * Command ClearAllPINCodes
+ * Command ClearAllPins
*/
-class DoorLockClearAllPINCodes : public ModelCommand
+class DoorLockClearAllPins : public ModelCommand
{
public:
- DoorLockClearAllPINCodes() : ModelCommand("clear-all-pincodes", kDoorLockClusterId, 0x08) { ModelCommand::AddArguments(); }
+ DoorLockClearAllPins() : ModelCommand("clear-all-pins", kDoorLockClusterId, 0x08) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterClearAllPINCodesCommand(buffer->Start(), bufferSize, endPointId);
+ return encodeDoorLockClusterClearAllPinsCommand(buffer->Start(), bufferSize, endPointId);
}
// Global Response: DefaultResponse
@@ -3195,25 +3518,25 @@ class DoorLockClearAllPINCodes : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: ClearAllPINCodesResponse
+ // Specific Response: ClearAllPinsResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- ClearAllPINCodesResponse response;
+ ClearAllPinsResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
};
/*
- * Command ClearAllRFIDCodes
+ * Command ClearAllRfids
*/
-class DoorLockClearAllRFIDCodes : public ModelCommand
+class DoorLockClearAllRfids : public ModelCommand
{
public:
- DoorLockClearAllRFIDCodes() : ModelCommand("clear-all-rfidcodes", kDoorLockClusterId, 0x19) { ModelCommand::AddArguments(); }
+ DoorLockClearAllRfids() : ModelCommand("clear-all-rfids", kDoorLockClusterId, 0x19) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterClearAllRFIDCodesCommand(buffer->Start(), bufferSize, endPointId);
+ return encodeDoorLockClusterClearAllRfidsCommand(buffer->Start(), bufferSize, endPointId);
}
// Global Response: DefaultResponse
@@ -3223,10 +3546,10 @@ class DoorLockClearAllRFIDCodes : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: ClearAllRFIDCodesResponse
+ // Specific Response: ClearAllRfidsResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- ClearAllRFIDCodesResponse response;
+ ClearAllRfidsResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
};
@@ -3243,7 +3566,7 @@ class DoorLockClearHolidaySchedule : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterClearHolidayScheduleCommand(buffer->Start(), bufferSize, endPointId, mHolidayScheduleID);
}
@@ -3267,20 +3590,20 @@ class DoorLockClearHolidaySchedule : public ModelCommand
};
/*
- * Command ClearPINCode
+ * Command ClearPin
*/
-class DoorLockClearPINCode : public ModelCommand
+class DoorLockClearPin : public ModelCommand
{
public:
- DoorLockClearPINCode() : ModelCommand("clear-pincode", kDoorLockClusterId, 0x07)
+ DoorLockClearPin() : ModelCommand("clear-pin", kDoorLockClusterId, 0x07)
{
AddArgument("userID", 0, UINT16_MAX, &mUserID);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterClearPINCodeCommand(buffer->Start(), bufferSize, endPointId, mUserID);
+ return encodeDoorLockClusterClearPinCommand(buffer->Start(), bufferSize, endPointId, mUserID);
}
// Global Response: DefaultResponse
@@ -3290,10 +3613,10 @@ class DoorLockClearPINCode : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: ClearPINCodeResponse
+ // Specific Response: ClearPinResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- ClearPINCodeResponse response;
+ ClearPinResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
@@ -3302,20 +3625,20 @@ class DoorLockClearPINCode : public ModelCommand
};
/*
- * Command ClearRFIDCode
+ * Command ClearRfid
*/
-class DoorLockClearRFIDCode : public ModelCommand
+class DoorLockClearRfid : public ModelCommand
{
public:
- DoorLockClearRFIDCode() : ModelCommand("clear-rfidcode", kDoorLockClusterId, 0x18)
+ DoorLockClearRfid() : ModelCommand("clear-rfid", kDoorLockClusterId, 0x18)
{
AddArgument("userID", 0, UINT16_MAX, &mUserID);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterClearRFIDCodeCommand(buffer->Start(), bufferSize, endPointId, mUserID);
+ return encodeDoorLockClusterClearRfidCommand(buffer->Start(), bufferSize, endPointId, mUserID);
}
// Global Response: DefaultResponse
@@ -3325,10 +3648,10 @@ class DoorLockClearRFIDCode : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: ClearRFIDCodeResponse
+ // Specific Response: ClearRfidResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- ClearRFIDCodeResponse response;
+ ClearRfidResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
@@ -3349,7 +3672,7 @@ class DoorLockClearWeekdaySchedule : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterClearWeekdayScheduleCommand(buffer->Start(), bufferSize, endPointId, mScheduleID, mUserID);
}
@@ -3374,21 +3697,21 @@ class DoorLockClearWeekdaySchedule : public ModelCommand
};
/*
- * Command ClearYearDaySchedule
+ * Command ClearYeardaySchedule
*/
-class DoorLockClearYearDaySchedule : public ModelCommand
+class DoorLockClearYeardaySchedule : public ModelCommand
{
public:
- DoorLockClearYearDaySchedule() : ModelCommand("clear-year-day-schedule", kDoorLockClusterId, 0x10)
+ DoorLockClearYeardaySchedule() : ModelCommand("clear-yearday-schedule", kDoorLockClusterId, 0x10)
{
AddArgument("scheduleID", 0, UINT8_MAX, &mScheduleID);
AddArgument("userID", 0, UINT16_MAX, &mUserID);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterClearYearDayScheduleCommand(buffer->Start(), bufferSize, endPointId, mScheduleID, mUserID);
+ return encodeDoorLockClusterClearYeardayScheduleCommand(buffer->Start(), bufferSize, endPointId, mScheduleID, mUserID);
}
// Global Response: DefaultResponse
@@ -3398,10 +3721,10 @@ class DoorLockClearYearDaySchedule : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: ClearYearDayScheduleResponse
+ // Specific Response: ClearYeardayScheduleResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- ClearYearDayScheduleResponse response;
+ ClearYeardayScheduleResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
@@ -3422,7 +3745,7 @@ class DoorLockGetHolidaySchedule : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterGetHolidayScheduleCommand(buffer->Start(), bufferSize, endPointId, mHolidayScheduleID);
}
@@ -3446,20 +3769,20 @@ class DoorLockGetHolidaySchedule : public ModelCommand
};
/*
- * Command GetPINCode
+ * Command GetPin
*/
-class DoorLockGetPINCode : public ModelCommand
+class DoorLockGetPin : public ModelCommand
{
public:
- DoorLockGetPINCode() : ModelCommand("get-pincode", kDoorLockClusterId, 0x06)
+ DoorLockGetPin() : ModelCommand("get-pin", kDoorLockClusterId, 0x06)
{
AddArgument("userID", 0, UINT16_MAX, &mUserID);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterGetPINCodeCommand(buffer->Start(), bufferSize, endPointId, mUserID);
+ return encodeDoorLockClusterGetPinCommand(buffer->Start(), bufferSize, endPointId, mUserID);
}
// Global Response: DefaultResponse
@@ -3469,10 +3792,10 @@ class DoorLockGetPINCode : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: GetPINCodeResponse
+ // Specific Response: GetPinResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- GetPINCodeResponse response;
+ GetPinResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
@@ -3481,20 +3804,20 @@ class DoorLockGetPINCode : public ModelCommand
};
/*
- * Command GetRFIDCode
+ * Command GetRfid
*/
-class DoorLockGetRFIDCode : public ModelCommand
+class DoorLockGetRfid : public ModelCommand
{
public:
- DoorLockGetRFIDCode() : ModelCommand("get-rfidcode", kDoorLockClusterId, 0x17)
+ DoorLockGetRfid() : ModelCommand("get-rfid", kDoorLockClusterId, 0x17)
{
AddArgument("userID", 0, UINT16_MAX, &mUserID);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterGetRFIDCodeCommand(buffer->Start(), bufferSize, endPointId, mUserID);
+ return encodeDoorLockClusterGetRfidCommand(buffer->Start(), bufferSize, endPointId, mUserID);
}
// Global Response: DefaultResponse
@@ -3504,10 +3827,10 @@ class DoorLockGetRFIDCode : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: GetRFIDCodeResponse
+ // Specific Response: GetRfidResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- GetRFIDCodeResponse response;
+ GetRfidResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
@@ -3527,7 +3850,7 @@ class DoorLockGetUserType : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterGetUserTypeCommand(buffer->Start(), bufferSize, endPointId, mUserID);
}
@@ -3563,7 +3886,7 @@ class DoorLockGetWeekdaySchedule : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterGetWeekdayScheduleCommand(buffer->Start(), bufferSize, endPointId, mScheduleID, mUserID);
}
@@ -3588,21 +3911,21 @@ class DoorLockGetWeekdaySchedule : public ModelCommand
};
/*
- * Command GetYearDaySchedule
+ * Command GetYeardaySchedule
*/
-class DoorLockGetYearDaySchedule : public ModelCommand
+class DoorLockGetYeardaySchedule : public ModelCommand
{
public:
- DoorLockGetYearDaySchedule() : ModelCommand("get-year-day-schedule", kDoorLockClusterId, 0x0F)
+ DoorLockGetYeardaySchedule() : ModelCommand("get-yearday-schedule", kDoorLockClusterId, 0x0F)
{
AddArgument("scheduleID", 0, UINT8_MAX, &mScheduleID);
AddArgument("userID", 0, UINT16_MAX, &mUserID);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterGetYearDayScheduleCommand(buffer->Start(), bufferSize, endPointId, mScheduleID, mUserID);
+ return encodeDoorLockClusterGetYeardayScheduleCommand(buffer->Start(), bufferSize, endPointId, mScheduleID, mUserID);
}
// Global Response: DefaultResponse
@@ -3612,10 +3935,10 @@ class DoorLockGetYearDaySchedule : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: GetYearDayScheduleResponse
+ // Specific Response: GetYeardayScheduleResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- GetYearDayScheduleResponse response;
+ GetYeardayScheduleResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
@@ -3636,7 +3959,7 @@ class DoorLockLockDoor : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterLockDoorCommand(buffer->Start(), bufferSize, endPointId, mPINOrRFIDCode);
}
@@ -3674,7 +3997,7 @@ class DoorLockSetHolidaySchedule : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterSetHolidayScheduleCommand(buffer->Start(), bufferSize, endPointId, mHolidayScheduleID,
mLocalStartTime, mLocalEndTime, mOperatingModeDuringHoliday);
@@ -3702,24 +4025,23 @@ class DoorLockSetHolidaySchedule : public ModelCommand
};
/*
- * Command SetPINCode
+ * Command SetPin
*/
-class DoorLockSetPINCode : public ModelCommand
+class DoorLockSetPin : public ModelCommand
{
public:
- DoorLockSetPINCode() : ModelCommand("set-pincode", kDoorLockClusterId, 0x05)
+ DoorLockSetPin() : ModelCommand("set-pin", kDoorLockClusterId, 0x05)
{
AddArgument("userID", 0, UINT16_MAX, &mUserID);
AddArgument("userStatus", 0, UINT8_MAX, &mUserStatus);
AddArgument("userType", 0, UINT8_MAX, &mUserType);
- AddArgument("pIN", &mPIN);
+ AddArgument("pin", &mPIN);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterSetPINCodeCommand(buffer->Start(), bufferSize, endPointId, mUserID, mUserStatus, mUserType,
- mPIN);
+ return encodeDoorLockClusterSetPinCommand(buffer->Start(), bufferSize, endPointId, mUserID, mUserStatus, mUserType, mPIN);
}
// Global Response: DefaultResponse
@@ -3729,10 +4051,10 @@ class DoorLockSetPINCode : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: SetPINCodeResponse
+ // Specific Response: SetPinResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- SetPINCodeResponse response;
+ SetPinResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
@@ -3744,24 +4066,23 @@ class DoorLockSetPINCode : public ModelCommand
};
/*
- * Command SetRFIDCode
+ * Command SetRfid
*/
-class DoorLockSetRFIDCode : public ModelCommand
+class DoorLockSetRfid : public ModelCommand
{
public:
- DoorLockSetRFIDCode() : ModelCommand("set-rfidcode", kDoorLockClusterId, 0x16)
+ DoorLockSetRfid() : ModelCommand("set-rfid", kDoorLockClusterId, 0x16)
{
AddArgument("userID", 0, UINT16_MAX, &mUserID);
AddArgument("userStatus", 0, UINT8_MAX, &mUserStatus);
AddArgument("userType", 0, UINT8_MAX, &mUserType);
- AddArgument("rFIDCode", &mRFIDCode);
+ AddArgument("rfid", &mRFID);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterSetRFIDCodeCommand(buffer->Start(), bufferSize, endPointId, mUserID, mUserStatus, mUserType,
- mRFIDCode);
+ return encodeDoorLockClusterSetRfidCommand(buffer->Start(), bufferSize, endPointId, mUserID, mUserStatus, mUserType, mRFID);
}
// Global Response: DefaultResponse
@@ -3771,10 +4092,10 @@ class DoorLockSetRFIDCode : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: SetRFIDCodeResponse
+ // Specific Response: SetRfidResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- SetRFIDCodeResponse response;
+ SetRfidResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
@@ -3782,7 +4103,7 @@ class DoorLockSetRFIDCode : public ModelCommand
uint16_t mUserID;
uint8_t mUserStatus;
uint8_t mUserType;
- char * mRFIDCode;
+ char * mRFID;
};
/*
@@ -3798,7 +4119,7 @@ class DoorLockSetUserType : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterSetUserTypeCommand(buffer->Start(), bufferSize, endPointId, mUserID, mUserType);
}
@@ -3840,7 +4161,7 @@ class DoorLockSetWeekdaySchedule : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterSetWeekdayScheduleCommand(buffer->Start(), bufferSize, endPointId, mScheduleID, mUserID,
mDaysMask, mStartHour, mStartMinute, mEndHour, mEndMinute);
@@ -3871,12 +4192,12 @@ class DoorLockSetWeekdaySchedule : public ModelCommand
};
/*
- * Command SetYearDaySchedule
+ * Command SetYeardaySchedule
*/
-class DoorLockSetYearDaySchedule : public ModelCommand
+class DoorLockSetYeardaySchedule : public ModelCommand
{
public:
- DoorLockSetYearDaySchedule() : ModelCommand("set-year-day-schedule", kDoorLockClusterId, 0x0E)
+ DoorLockSetYeardaySchedule() : ModelCommand("set-yearday-schedule", kDoorLockClusterId, 0x0E)
{
AddArgument("scheduleID", 0, UINT8_MAX, &mScheduleID);
AddArgument("userID", 0, UINT16_MAX, &mUserID);
@@ -3885,9 +4206,9 @@ class DoorLockSetYearDaySchedule : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeDoorLockClusterSetYearDayScheduleCommand(buffer->Start(), bufferSize, endPointId, mScheduleID, mUserID,
+ return encodeDoorLockClusterSetYeardayScheduleCommand(buffer->Start(), bufferSize, endPointId, mScheduleID, mUserID,
mLocalStartTime, mLocalEndTime);
}
@@ -3898,10 +4219,10 @@ class DoorLockSetYearDaySchedule : public ModelCommand
return response.HandleCommandResponse(commandId, message, messageLen);
}
- // Specific Response: SetYearDayScheduleResponse
+ // Specific Response: SetYeardayScheduleResponse
bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
{
- SetYearDayScheduleResponse response;
+ SetYeardayScheduleResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
@@ -3924,7 +4245,7 @@ class DoorLockUnlockDoor : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterUnlockDoorCommand(buffer->Start(), bufferSize, endPointId, mPINOrRFIDCode);
}
@@ -3960,7 +4281,7 @@ class DoorLockUnlockWithTimeout : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterUnlockWithTimeoutCommand(buffer->Start(), bufferSize, endPointId, mTimeoutInSeconds,
mPINOrRFIDCode);
@@ -3993,7 +4314,7 @@ class DiscoverDoorLockAttributes : public ModelCommand
public:
DiscoverDoorLockAttributes() : ModelCommand("discover", kDoorLockClusterId, 0x0c) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
@@ -4018,7 +4339,7 @@ class ReadDoorLockLockState : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterReadLockStateAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -4031,6 +4352,34 @@ class ReadDoorLockLockState : public ModelCommand
}
};
+class ReportDoorLockLockState : public ModelCommand
+{
+public:
+ ReportDoorLockLockState() : ModelCommand("report", kDoorLockClusterId, 0x06)
+ {
+ AddArgument("attr-name", "lock-state");
+ AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
+ AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
+ ModelCommand::AddArguments();
+ }
+
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
+ {
+ return encodeDoorLockClusterReportLockStateAttribute(buffer->Start(), bufferSize, endPointId, mMinInterval, mMaxInterval);
+ }
+
+ // Global Response: ConfigureReportingResponse
+ bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+ {
+ ConfigureReportingResponse response;
+ return response.HandleCommandResponse(commandId, message, messageLen);
+ }
+
+private:
+ uint16_t mMinInterval;
+ uint16_t mMaxInterval;
+};
+
/*
* Attribute LockType
*/
@@ -4043,7 +4392,7 @@ class ReadDoorLockLockType : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterReadLockTypeAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -4068,7 +4417,7 @@ class ReadDoorLockActuatorEnabled : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeDoorLockClusterReadActuatorEnabledAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -4117,9 +4466,12 @@ class AddGroupResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "AddGroupResponse (0x00):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // enum8
+ uint8_t status = chip::Encoding::Read8(message); // enum8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", groupId);
return success;
}
@@ -4139,14 +4491,19 @@ class GetGroupMembershipResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "GetGroupMembershipResponse (0x02):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "capacity", chip::Encoding::Read8(message)); // uint8
+ uint8_t capacity = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "capacity", capacity);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "groupCount", chip::Encoding::Read8(message)); // uint8
+ uint8_t groupCount = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "groupCount", groupCount);
+
// uint16_t uint16[]
while (messageLen)
{
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "groupList", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t groupList = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "groupList", groupList);
}
return success;
@@ -4167,9 +4524,12 @@ class RemoveGroupResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "RemoveGroupResponse (0x03):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // enum8
+ uint8_t status = chip::Encoding::Read8(message); // enum8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", groupId);
return success;
}
@@ -4189,9 +4549,13 @@ class ViewGroupResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "ViewGroupResponse (0x01):");
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "status", chip::Encoding::Read8(message)); // enum8
+ uint8_t status = chip::Encoding::Read8(message); // enum8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "status", status);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", groupId);
+
CHECK_MESSAGE_LENGTH(1);
{
uint8_t groupNameLen = chip::Encoding::Read8(message); // string
@@ -4220,7 +4584,7 @@ class GroupsAddGroup : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeGroupsClusterAddGroupCommand(buffer->Start(), bufferSize, endPointId, mGroupId, mGroupName);
}
@@ -4257,7 +4621,7 @@ class GroupsAddGroupIfIdentifying : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeGroupsClusterAddGroupIfIdentifyingCommand(buffer->Start(), bufferSize, endPointId, mGroupId, mGroupName);
}
@@ -4289,7 +4653,7 @@ class GroupsGetGroupMembership : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeGroupsClusterGetGroupMembershipCommand(buffer->Start(), bufferSize, endPointId, mGroupCount, mGroupList);
}
@@ -4321,7 +4685,7 @@ class GroupsRemoveAllGroups : public ModelCommand
public:
GroupsRemoveAllGroups() : ModelCommand("remove-all-groups", kGroupsClusterId, 0x04) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeGroupsClusterRemoveAllGroupsCommand(buffer->Start(), bufferSize, endPointId);
}
@@ -4346,7 +4710,7 @@ class GroupsRemoveGroup : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeGroupsClusterRemoveGroupCommand(buffer->Start(), bufferSize, endPointId, mGroupId);
}
@@ -4381,7 +4745,7 @@ class GroupsViewGroup : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeGroupsClusterViewGroupCommand(buffer->Start(), bufferSize, endPointId, mGroupId);
}
@@ -4412,7 +4776,7 @@ class DiscoverGroupsAttributes : public ModelCommand
public:
DiscoverGroupsAttributes() : ModelCommand("discover", kGroupsClusterId, 0x0c) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeGroupsClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
@@ -4437,7 +4801,7 @@ class ReadGroupsNameSupport : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeGroupsClusterReadNameSupportAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -4451,7 +4815,7 @@ class ReadGroupsNameSupport : public ModelCommand
};
/*----------------------------------------------------------------------------*\
-| Cluster IASZone | 0x0500 |
+| Cluster IasZone | 0x0500 |
|------------------------------------------------------------------------------|
| Responses: | |
| | |
@@ -4462,21 +4826,21 @@ class ReadGroupsNameSupport : public ModelCommand
| * ZoneState | 0x0000 |
| * ZoneType | 0x0001 |
| * ZoneStatus | 0x0002 |
-| * IASCIEAddress | 0x0010 |
+| * IasCieAddress | 0x0010 |
| * ZoneID | 0x0011 |
\*----------------------------------------------------------------------------*/
/*
* Discover attributes
*/
-class DiscoverIASZoneAttributes : public ModelCommand
+class DiscoverIasZoneAttributes : public ModelCommand
{
public:
- DiscoverIASZoneAttributes() : ModelCommand("discover", kIASZoneClusterId, 0x0c) { ModelCommand::AddArguments(); }
+ DiscoverIasZoneAttributes() : ModelCommand("discover", kIasZoneClusterId, 0x0c) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeIASZoneClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
+ return encodeIasZoneClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
// Global Response: DiscoverAttributesResponse
@@ -4490,18 +4854,18 @@ class DiscoverIASZoneAttributes : public ModelCommand
/*
* Attribute ZoneState
*/
-class ReadIASZoneZoneState : public ModelCommand
+class ReadIasZoneZoneState : public ModelCommand
{
public:
- ReadIASZoneZoneState() : ModelCommand("read", kIASZoneClusterId, 0x00)
+ ReadIasZoneZoneState() : ModelCommand("read", kIasZoneClusterId, 0x00)
{
AddArgument("attr-name", "zone-state");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeIASZoneClusterReadZoneStateAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeIasZoneClusterReadZoneStateAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -4515,18 +4879,18 @@ class ReadIASZoneZoneState : public ModelCommand
/*
* Attribute ZoneType
*/
-class ReadIASZoneZoneType : public ModelCommand
+class ReadIasZoneZoneType : public ModelCommand
{
public:
- ReadIASZoneZoneType() : ModelCommand("read", kIASZoneClusterId, 0x00)
+ ReadIasZoneZoneType() : ModelCommand("read", kIasZoneClusterId, 0x00)
{
AddArgument("attr-name", "zone-type");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeIASZoneClusterReadZoneTypeAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeIasZoneClusterReadZoneTypeAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -4540,18 +4904,18 @@ class ReadIASZoneZoneType : public ModelCommand
/*
* Attribute ZoneStatus
*/
-class ReadIASZoneZoneStatus : public ModelCommand
+class ReadIasZoneZoneStatus : public ModelCommand
{
public:
- ReadIASZoneZoneStatus() : ModelCommand("read", kIASZoneClusterId, 0x00)
+ ReadIasZoneZoneStatus() : ModelCommand("read", kIasZoneClusterId, 0x00)
{
AddArgument("attr-name", "zone-status");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeIASZoneClusterReadZoneStatusAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeIasZoneClusterReadZoneStatusAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -4563,20 +4927,20 @@ class ReadIASZoneZoneStatus : public ModelCommand
};
/*
- * Attribute IASCIEAddress
+ * Attribute IasCieAddress
*/
-class ReadIASZoneIASCIEAddress : public ModelCommand
+class ReadIasZoneIasCieAddress : public ModelCommand
{
public:
- ReadIASZoneIASCIEAddress() : ModelCommand("read", kIASZoneClusterId, 0x00)
+ ReadIasZoneIasCieAddress() : ModelCommand("read", kIasZoneClusterId, 0x00)
{
- AddArgument("attr-name", "iascieaddress");
+ AddArgument("attr-name", "ias-cie-address");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeIASZoneClusterReadIASCIEAddressAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeIasZoneClusterReadIasCieAddressAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -4587,19 +4951,19 @@ class ReadIASZoneIASCIEAddress : public ModelCommand
}
};
-class WriteIASZoneIASCIEAddress : public ModelCommand
+class WriteIasZoneIasCieAddress : public ModelCommand
{
public:
- WriteIASZoneIASCIEAddress() : ModelCommand("write", kIASZoneClusterId, 0x01)
+ WriteIasZoneIasCieAddress() : ModelCommand("write", kIasZoneClusterId, 0x01)
{
- AddArgument("attr-name", "iascieaddress");
- AddArgument("attr-value", 0, UINT64_MAX, &mIASCIEAddress);
+ AddArgument("attr-name", "ias-cie-address");
+ AddArgument("attr-value", 0, UINT64_MAX, &mIasCieAddress);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeIASZoneClusterWriteIASCIEAddressAttribute(buffer->Start(), bufferSize, endPointId, mIASCIEAddress);
+ return encodeIasZoneClusterWriteIasCieAddressAttribute(buffer->Start(), bufferSize, endPointId, mIasCieAddress);
}
// Global Response: WriteAttributesResponse
@@ -4610,24 +4974,24 @@ class WriteIASZoneIASCIEAddress : public ModelCommand
}
private:
- uint64_t mIASCIEAddress;
+ uint64_t mIasCieAddress;
};
/*
* Attribute ZoneID
*/
-class ReadIASZoneZoneID : public ModelCommand
+class ReadIasZoneZoneID : public ModelCommand
{
public:
- ReadIASZoneZoneID() : ModelCommand("read", kIASZoneClusterId, 0x00)
+ ReadIasZoneZoneID() : ModelCommand("read", kIasZoneClusterId, 0x00)
{
AddArgument("attr-name", "zone-id");
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeIASZoneClusterReadZoneIDAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeIasZoneClusterReadZoneIdAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -4667,7 +5031,8 @@ class IdentifyQueryResponse : public ModelCommandResponse
ChipLogProgress(chipTool, "IdentifyQueryResponse (0x00):");
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "timeout", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t timeout = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "timeout", timeout);
return success;
}
@@ -4685,7 +5050,7 @@ class IdentifyIdentify : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeIdentifyClusterIdentifyCommand(buffer->Start(), bufferSize, endPointId, mIdentifyTime);
}
@@ -4709,7 +5074,7 @@ class IdentifyIdentifyQuery : public ModelCommand
public:
IdentifyIdentifyQuery() : ModelCommand("identify-query", kIdentifyClusterId, 0x01) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeIdentifyClusterIdentifyQueryCommand(buffer->Start(), bufferSize, endPointId);
}
@@ -4737,7 +5102,7 @@ class DiscoverIdentifyAttributes : public ModelCommand
public:
DiscoverIdentifyAttributes() : ModelCommand("discover", kIdentifyClusterId, 0x0c) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeIdentifyClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
@@ -4762,7 +5127,7 @@ class ReadIdentifyIdentifyTime : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeIdentifyClusterReadIdentifyTimeAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -4775,32 +5140,6 @@ class ReadIdentifyIdentifyTime : public ModelCommand
}
};
-class WriteIdentifyIdentifyTime : public ModelCommand
-{
-public:
- WriteIdentifyIdentifyTime() : ModelCommand("write", kIdentifyClusterId, 0x01)
- {
- AddArgument("attr-name", "identify-time");
- AddArgument("attr-value", 0, UINT16_MAX, &mIdentifyTime);
- ModelCommand::AddArguments();
- }
-
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
- {
- return encodeIdentifyClusterWriteIdentifyTimeAttribute(buffer->Start(), bufferSize, endPointId, mIdentifyTime);
- }
-
- // Global Response: WriteAttributesResponse
- bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
- {
- WriteAttributesResponse response;
- return response.HandleCommandResponse(commandId, message, messageLen);
- }
-
-private:
- uint16_t mIdentifyTime;
-};
-
/*----------------------------------------------------------------------------*\
| Cluster Level | 0x0008 |
|------------------------------------------------------------------------------|
@@ -4836,10 +5175,10 @@ class LevelMove : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeLevelClusterMoveCommand(buffer->Start(), bufferSize, endPointId, mMoveMode, mRate, mOptionsMask,
- mOptionsOverride);
+ return encodeLevelControlClusterMoveCommand(buffer->Start(), bufferSize, endPointId, mMoveMode, mRate, mOptionsMask,
+ mOptionsOverride);
}
// Global Response: DefaultResponse
@@ -4871,10 +5210,10 @@ class LevelMoveToLevel : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeLevelClusterMoveToLevelCommand(buffer->Start(), bufferSize, endPointId, mLevel, mTransitionTime, mOptionsMask,
- mOptionsOverride);
+ return encodeLevelControlClusterMoveToLevelCommand(buffer->Start(), bufferSize, endPointId, mLevel, mTransitionTime,
+ mOptionsMask, mOptionsOverride);
}
// Global Response: DefaultResponse
@@ -4901,15 +5240,13 @@ class LevelMoveToLevelWithOnOff : public ModelCommand
{
AddArgument("level", 0, UINT8_MAX, &mLevel);
AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
- AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
- AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeLevelClusterMoveToLevelWithOnOffCommand(buffer->Start(), bufferSize, endPointId, mLevel, mTransitionTime,
- mOptionsMask, mOptionsOverride);
+ return encodeLevelControlClusterMoveToLevelWithOnOffCommand(buffer->Start(), bufferSize, endPointId, mLevel,
+ mTransitionTime);
}
// Global Response: DefaultResponse
@@ -4922,8 +5259,6 @@ class LevelMoveToLevelWithOnOff : public ModelCommand
private:
uint8_t mLevel;
uint16_t mTransitionTime;
- uint8_t mOptionsMask;
- uint8_t mOptionsOverride;
};
/*
@@ -4936,15 +5271,12 @@ class LevelMoveWithOnOff : public ModelCommand
{
AddArgument("moveMode", 0, UINT8_MAX, &mMoveMode);
AddArgument("rate", 0, UINT8_MAX, &mRate);
- AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
- AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeLevelClusterMoveWithOnOffCommand(buffer->Start(), bufferSize, endPointId, mMoveMode, mRate, mOptionsMask,
- mOptionsOverride);
+ return encodeLevelControlClusterMoveWithOnOffCommand(buffer->Start(), bufferSize, endPointId, mMoveMode, mRate);
}
// Global Response: DefaultResponse
@@ -4957,8 +5289,6 @@ class LevelMoveWithOnOff : public ModelCommand
private:
uint8_t mMoveMode;
uint8_t mRate;
- uint8_t mOptionsMask;
- uint8_t mOptionsOverride;
};
/*
@@ -4977,10 +5307,10 @@ class LevelStep : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeLevelClusterStepCommand(buffer->Start(), bufferSize, endPointId, mStepMode, mStepSize, mTransitionTime,
- mOptionsMask, mOptionsOverride);
+ return encodeLevelControlClusterStepCommand(buffer->Start(), bufferSize, endPointId, mStepMode, mStepSize, mTransitionTime,
+ mOptionsMask, mOptionsOverride);
}
// Global Response: DefaultResponse
@@ -5009,15 +5339,13 @@ class LevelStepWithOnOff : public ModelCommand
AddArgument("stepMode", 0, UINT8_MAX, &mStepMode);
AddArgument("stepSize", 0, UINT8_MAX, &mStepSize);
AddArgument("transitionTime", 0, UINT16_MAX, &mTransitionTime);
- AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
- AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeLevelClusterStepWithOnOffCommand(buffer->Start(), bufferSize, endPointId, mStepMode, mStepSize,
- mTransitionTime, mOptionsMask, mOptionsOverride);
+ return encodeLevelControlClusterStepWithOnOffCommand(buffer->Start(), bufferSize, endPointId, mStepMode, mStepSize,
+ mTransitionTime);
}
// Global Response: DefaultResponse
@@ -5031,8 +5359,6 @@ class LevelStepWithOnOff : public ModelCommand
uint8_t mStepMode;
uint8_t mStepSize;
uint16_t mTransitionTime;
- uint8_t mOptionsMask;
- uint8_t mOptionsOverride;
};
/*
@@ -5048,9 +5374,9 @@ class LevelStop : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeLevelClusterStopCommand(buffer->Start(), bufferSize, endPointId, mOptionsMask, mOptionsOverride);
+ return encodeLevelControlClusterStopCommand(buffer->Start(), bufferSize, endPointId, mOptionsMask, mOptionsOverride);
}
// Global Response: DefaultResponse
@@ -5071,16 +5397,11 @@ class LevelStop : public ModelCommand
class LevelStopWithOnOff : public ModelCommand
{
public:
- LevelStopWithOnOff() : ModelCommand("stop-with-on-off", kLevelClusterId, 0x07)
- {
- AddArgument("optionsMask", 0, UINT8_MAX, &mOptionsMask);
- AddArgument("optionsOverride", 0, UINT8_MAX, &mOptionsOverride);
- ModelCommand::AddArguments();
- }
+ LevelStopWithOnOff() : ModelCommand("stop-with-on-off", kLevelClusterId, 0x07) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeLevelClusterStopWithOnOffCommand(buffer->Start(), bufferSize, endPointId, mOptionsMask, mOptionsOverride);
+ return encodeLevelControlClusterStopWithOnOffCommand(buffer->Start(), bufferSize, endPointId);
}
// Global Response: DefaultResponse
@@ -5089,10 +5410,6 @@ class LevelStopWithOnOff : public ModelCommand
DefaultResponse response;
return response.HandleCommandResponse(commandId, message, messageLen);
}
-
-private:
- uint8_t mOptionsMask;
- uint8_t mOptionsOverride;
};
/*
@@ -5103,9 +5420,9 @@ class DiscoverLevelAttributes : public ModelCommand
public:
DiscoverLevelAttributes() : ModelCommand("discover", kLevelClusterId, 0x0c) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeLevelClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
+ return encodeLevelControlClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
// Global Response: DiscoverAttributesResponse
@@ -5128,9 +5445,9 @@ class ReadLevelCurrentLevel : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
- return encodeLevelClusterReadCurrentLevelAttribute(buffer->Start(), bufferSize, endPointId);
+ return encodeLevelControlClusterReadCurrentLevelAttribute(buffer->Start(), bufferSize, endPointId);
}
// Global Response: ReadAttributesResponse
@@ -5141,6 +5458,37 @@ class ReadLevelCurrentLevel : public ModelCommand
}
};
+class ReportLevelCurrentLevel : public ModelCommand
+{
+public:
+ ReportLevelCurrentLevel() : ModelCommand("report", kLevelClusterId, 0x06)
+ {
+ AddArgument("attr-name", "current-level");
+ AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
+ AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
+ AddArgument("change", 0, UINT8_MAX, &mChange);
+ ModelCommand::AddArguments();
+ }
+
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
+ {
+ return encodeLevelControlClusterReportCurrentLevelAttribute(buffer->Start(), bufferSize, endPointId, mMinInterval,
+ mMaxInterval, mChange);
+ }
+
+ // Global Response: ConfigureReportingResponse
+ bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+ {
+ ConfigureReportingResponse response;
+ return response.HandleCommandResponse(commandId, message, messageLen);
+ }
+
+private:
+ uint16_t mMinInterval;
+ uint16_t mMaxInterval;
+ uint8_t mChange;
+};
+
/*----------------------------------------------------------------------------*\
| Cluster OnOff | 0x0006 |
|------------------------------------------------------------------------------|
@@ -5164,7 +5512,7 @@ class OnOffOff : public ModelCommand
public:
OnOffOff() : ModelCommand("off", kOnOffClusterId, 0x00) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeOnOffClusterOffCommand(buffer->Start(), bufferSize, endPointId);
}
@@ -5185,7 +5533,7 @@ class OnOffOn : public ModelCommand
public:
OnOffOn() : ModelCommand("on", kOnOffClusterId, 0x01) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeOnOffClusterOnCommand(buffer->Start(), bufferSize, endPointId);
}
@@ -5206,7 +5554,7 @@ class OnOffToggle : public ModelCommand
public:
OnOffToggle() : ModelCommand("toggle", kOnOffClusterId, 0x02) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeOnOffClusterToggleCommand(buffer->Start(), bufferSize, endPointId);
}
@@ -5227,7 +5575,7 @@ class DiscoverOnOffAttributes : public ModelCommand
public:
DiscoverOnOffAttributes() : ModelCommand("discover", kOnOffClusterId, 0x0c) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeOnOffClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
@@ -5252,7 +5600,7 @@ class ReadOnOffOnOff : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeOnOffClusterReadOnOffAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -5265,6 +5613,34 @@ class ReadOnOffOnOff : public ModelCommand
}
};
+class ReportOnOffOnOff : public ModelCommand
+{
+public:
+ ReportOnOffOnOff() : ModelCommand("report", kOnOffClusterId, 0x06)
+ {
+ AddArgument("attr-name", "on-off");
+ AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
+ AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
+ ModelCommand::AddArguments();
+ }
+
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
+ {
+ return encodeOnOffClusterReportOnOffAttribute(buffer->Start(), bufferSize, endPointId, mMinInterval, mMaxInterval);
+ }
+
+ // Global Response: ConfigureReportingResponse
+ bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+ {
+ ConfigureReportingResponse response;
+ return response.HandleCommandResponse(commandId, message, messageLen);
+ }
+
+private:
+ uint16_t mMinInterval;
+ uint16_t mMaxInterval;
+};
+
/*----------------------------------------------------------------------------*\
| Cluster Scenes | 0x0005 |
|------------------------------------------------------------------------------|
@@ -5310,10 +5686,14 @@ class AddSceneResponse : public ModelCommandResponse
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", chip::Encoding::LittleEndian::Read16(message)); // SGroupId
+ uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", groupId);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "sceneId", chip::Encoding::Read8(message)); // uint8
+ uint8_t sceneId = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "sceneId", sceneId);
return success;
}
@@ -5335,15 +5715,21 @@ class GetSceneMembershipResponse : public ModelCommandResponse
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "capacity", chip::Encoding::Read8(message)); // uint8
+ uint8_t capacity = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "capacity", capacity);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", chip::Encoding::LittleEndian::Read16(message)); // SGroupId
+ uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", groupId);
+
// uint8_t uint8[]
while (messageLen)
{
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "sceneList", chip::Encoding::Read8(message)); // uint8
+ uint8_t sceneList = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "sceneList", sceneList);
}
return success;
@@ -5366,8 +5752,10 @@ class RemoveAllScenesResponse : public ModelCommandResponse
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", chip::Encoding::LittleEndian::Read16(message)); // SGroupId
+ uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", groupId);
return success;
}
@@ -5389,10 +5777,14 @@ class RemoveSceneResponse : public ModelCommandResponse
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", chip::Encoding::LittleEndian::Read16(message)); // SGroupId
+ uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", groupId);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "sceneId", chip::Encoding::Read8(message)); // uint8
+ uint8_t sceneId = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "sceneId", sceneId);
return success;
}
@@ -5414,10 +5806,14 @@ class StoreSceneResponse : public ModelCommandResponse
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", chip::Encoding::LittleEndian::Read16(message)); // SGroupId
+ uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", groupId);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "sceneId", chip::Encoding::Read8(message)); // uint8
+ uint8_t sceneId = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "sceneId", sceneId);
return success;
}
@@ -5439,12 +5835,19 @@ class ViewSceneResponse : public ModelCommandResponse
CHECK_MESSAGE_LENGTH(1);
uint8_t status = chip::Encoding::Read8(message); // zclStatus
success = CheckStatus(status);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", chip::Encoding::LittleEndian::Read16(message)); // SGroupId
+ uint16_t groupId = chip::Encoding::LittleEndian::Read16(message); // SGroupId
+ ChipLogProgress(chipTool, " %s: 0x%04x", "groupId", groupId);
+
CHECK_MESSAGE_LENGTH(1);
- ChipLogProgress(chipTool, " %s: 0x%02x", "sceneId", chip::Encoding::Read8(message)); // uint8
+ uint8_t sceneId = chip::Encoding::Read8(message); // uint8
+ ChipLogProgress(chipTool, " %s: 0x%02x", "sceneId", sceneId);
+
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "transitionTime", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t transitionTime = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "transitionTime", transitionTime);
+
CHECK_MESSAGE_LENGTH(1);
{
uint8_t sceneNameLen = chip::Encoding::Read8(message); // SSceneName
@@ -5455,11 +5858,14 @@ class ViewSceneResponse : public ModelCommandResponse
CHECK_MESSAGE_LENGTH(sceneNameLen);
message += sceneNameLen;
}
+
// struct SExtensionFieldSetList[]
while (messageLen)
{
CHECK_MESSAGE_LENGTH(2);
- ChipLogProgress(chipTool, " %s: 0x%04x", "clusterId", chip::Encoding::LittleEndian::Read16(message)); // uint16
+ uint16_t clusterId = chip::Encoding::LittleEndian::Read16(message); // uint16
+ ChipLogProgress(chipTool, " %s: 0x%04x", "clusterId", clusterId);
+
CHECK_MESSAGE_LENGTH(1);
{
uint8_t extensionFieldSetLen = chip::Encoding::Read8(message); // octstr
@@ -5491,14 +5897,15 @@ class ScenesAddScene : public ModelCommand
// extensionFieldSets is an array, but since chip-tool does not support variable
// number of arguments, only a single instance is supported.
AddArgument("clusterId", 0, UINT16_MAX, &mClusterId);
- AddArgument("extensionFieldSet", &mExtensionFieldSet);
+ AddArgument("length", 0, UINT8_MAX, &mLength);
+ AddArgument("value", 0, UINT8_MAX, &mValue);
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterAddSceneCommand(buffer->Start(), bufferSize, endPointId, mGroupID, mSceneID, mTransitionTime,
- mSceneName, mClusterId, mExtensionFieldSet);
+ mSceneName, mClusterId, mLength, mValue);
}
// Global Response: DefaultResponse
@@ -5521,7 +5928,8 @@ class ScenesAddScene : public ModelCommand
uint16_t mTransitionTime;
char * mSceneName;
uint16_t mClusterId;
- char * mExtensionFieldSet;
+ uint8_t mLength;
+ uint8_t mValue;
};
/*
@@ -5536,7 +5944,7 @@ class ScenesGetSceneMembership : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterGetSceneMembershipCommand(buffer->Start(), bufferSize, endPointId, mGroupID);
}
@@ -5573,7 +5981,7 @@ class ScenesRecallScene : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterRecallSceneCommand(buffer->Start(), bufferSize, endPointId, mGroupID, mSceneID, mTransitionTime);
}
@@ -5603,7 +6011,7 @@ class ScenesRemoveAllScenes : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterRemoveAllScenesCommand(buffer->Start(), bufferSize, endPointId, mGroupID);
}
@@ -5639,7 +6047,7 @@ class ScenesRemoveScene : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterRemoveSceneCommand(buffer->Start(), bufferSize, endPointId, mGroupID, mSceneID);
}
@@ -5676,7 +6084,7 @@ class ScenesStoreScene : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterStoreSceneCommand(buffer->Start(), bufferSize, endPointId, mGroupID, mSceneID);
}
@@ -5713,7 +6121,7 @@ class ScenesViewScene : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterViewSceneCommand(buffer->Start(), bufferSize, endPointId, mGroupID, mSceneID);
}
@@ -5745,7 +6153,7 @@ class DiscoverScenesAttributes : public ModelCommand
public:
DiscoverScenesAttributes() : ModelCommand("discover", kScenesClusterId, 0x0c) { ModelCommand::AddArguments(); }
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
@@ -5770,7 +6178,7 @@ class ReadScenesSceneCount : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterReadSceneCountAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -5795,7 +6203,7 @@ class ReadScenesCurrentScene : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterReadCurrentSceneAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -5820,7 +6228,7 @@ class ReadScenesCurrentGroup : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterReadCurrentGroupAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -5845,7 +6253,7 @@ class ReadScenesSceneValid : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterReadSceneValidAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -5870,7 +6278,7 @@ class ReadScenesNameSupport : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeScenesClusterReadNameSupportAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -5908,7 +6316,7 @@ class DiscoverTemperatureMeasurementAttributes : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeTemperatureMeasurementClusterDiscoverAttributes(buffer->Start(), bufferSize, endPointId);
}
@@ -5933,7 +6341,7 @@ class ReadTemperatureMeasurementMeasuredValue : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeTemperatureMeasurementClusterReadMeasuredValueAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -5946,6 +6354,37 @@ class ReadTemperatureMeasurementMeasuredValue : public ModelCommand
}
};
+class ReportTemperatureMeasurementMeasuredValue : public ModelCommand
+{
+public:
+ ReportTemperatureMeasurementMeasuredValue() : ModelCommand("report", kTempMeasurementClusterId, 0x06)
+ {
+ AddArgument("attr-name", "measured-value");
+ AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
+ AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
+ AddArgument("change", INT16_MIN, INT16_MAX, &mChange);
+ ModelCommand::AddArguments();
+ }
+
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
+ {
+ return encodeTemperatureMeasurementClusterReportMeasuredValueAttribute(buffer->Start(), bufferSize, endPointId,
+ mMinInterval, mMaxInterval, mChange);
+ }
+
+ // Global Response: ConfigureReportingResponse
+ bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const override
+ {
+ ConfigureReportingResponse response;
+ return response.HandleCommandResponse(commandId, message, messageLen);
+ }
+
+private:
+ uint16_t mMinInterval;
+ uint16_t mMaxInterval;
+ int16_t mChange;
+};
+
/*
* Attribute MinMeasuredValue
*/
@@ -5958,7 +6397,7 @@ class ReadTemperatureMeasurementMinMeasuredValue : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeTemperatureMeasurementClusterReadMinMeasuredValueAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -5983,7 +6422,7 @@ class ReadTemperatureMeasurementMaxMeasuredValue : public ModelCommand
ModelCommand::AddArguments();
}
- uint16_t EncodeCommand(PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) override
+ uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) override
{
return encodeTemperatureMeasurementClusterReadMaxMeasuredValueAttribute(buffer->Start(), bufferSize, endPointId);
}
@@ -6020,7 +6459,7 @@ void registerClusterBasic(Commands & commands)
commands_list clusterCommands = {
make_unique(),
make_unique(),
- make_unique(),
+ make_unique(),
make_unique(),
};
@@ -6048,14 +6487,17 @@ void registerClusterColorControl(Commands & commands)
make_unique(),
make_unique(),
make_unique(),
+ make_unique(),
make_unique(),
+ make_unique(),
make_unique(),
make_unique(),
+ make_unique(),
make_unique(),
- make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
make_unique(),
- make_unique(),
- make_unique(),
make_unique(),
make_unique(),
make_unique(),
@@ -6080,14 +6522,11 @@ void registerClusterColorControl(Commands & commands)
make_unique(),
make_unique(),
make_unique(),
- make_unique(),
- make_unique(),
make_unique(),
- make_unique(),
- make_unique(),
+ make_unique(),
+ make_unique(),
make_unique(),
make_unique(),
- make_unique(),
};
commands.Register(clusterName, clusterCommands);
@@ -6098,19 +6537,33 @@ void registerClusterDoorLock(Commands & commands)
const char * clusterName = "DoorLock";
commands_list clusterCommands = {
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(), make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
};
commands.Register(clusterName, clusterCommands);
@@ -6130,14 +6583,14 @@ void registerClusterGroups(Commands & commands)
commands.Register(clusterName, clusterCommands);
}
-void registerClusterIASZone(Commands & commands)
+void registerClusterIasZone(Commands & commands)
{
- const char * clusterName = "IASZone";
+ const char * clusterName = "IasZone";
commands_list clusterCommands = {
- make_unique(), make_unique(), make_unique(),
- make_unique(), make_unique(), make_unique(),
- make_unique(),
+ make_unique(), make_unique(), make_unique(),
+ make_unique(), make_unique(), make_unique(),
+ make_unique(),
};
commands.Register(clusterName, clusterCommands);
@@ -6148,9 +6601,10 @@ void registerClusterIdentify(Commands & commands)
const char * clusterName = "Identify";
commands_list clusterCommands = {
- make_unique(), make_unique(),
- make_unique(), make_unique(),
- make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
};
commands.Register(clusterName, clusterCommands);
@@ -6158,7 +6612,7 @@ void registerClusterIdentify(Commands & commands)
void registerClusterLevel(Commands & commands)
{
- const char * clusterName = "Level";
+ const char * clusterName = "LevelControl";
commands_list clusterCommands = {
make_unique(),
@@ -6171,6 +6625,7 @@ void registerClusterLevel(Commands & commands)
make_unique(),
make_unique(),
make_unique(),
+ make_unique(),
};
commands.Register(clusterName, clusterCommands);
@@ -6181,8 +6636,9 @@ void registerClusterOnOff(Commands & commands)
const char * clusterName = "OnOff";
commands_list clusterCommands = {
- make_unique(), make_unique(), make_unique(), make_unique(),
- make_unique(),
+ make_unique(), make_unique(),
+ make_unique(), make_unique(),
+ make_unique(), make_unique(),
};
commands.Register(clusterName, clusterCommands);
@@ -6208,9 +6664,8 @@ void registerClusterTempMeasurement(Commands & commands)
const char * clusterName = "TemperatureMeasurement";
commands_list clusterCommands = {
- make_unique(),
- make_unique(),
- make_unique(),
+ make_unique(), make_unique(),
+ make_unique(), make_unique(),
make_unique(),
};
@@ -6224,7 +6679,7 @@ void registerClusters(Commands & commands)
registerClusterColorControl(commands);
registerClusterDoorLock(commands);
registerClusterGroups(commands);
- registerClusterIASZone(commands);
+ registerClusterIasZone(commands);
registerClusterIdentify(commands);
registerClusterLevel(commands);
registerClusterOnOff(commands);
diff --git a/examples/chip-tool/commands/common/ModelCommand.cpp b/examples/chip-tool/commands/clusters/ModelCommand.cpp
similarity index 50%
rename from examples/chip-tool/commands/common/ModelCommand.cpp
rename to examples/chip-tool/commands/clusters/ModelCommand.cpp
index 0cfb50107bfa05..5d3bf097f2a901 100644
--- a/examples/chip-tool/commands/common/ModelCommand.cpp
+++ b/examples/chip-tool/commands/clusters/ModelCommand.cpp
@@ -18,15 +18,7 @@
#include "ModelCommand.h"
-#include
-#include
-#include
-#include
-
using namespace ::chip;
-using namespace ::chip::DeviceController;
-
-constexpr std::chrono::seconds kWaitingForResponseTimeout(10);
namespace {
constexpr uint8_t kZCLGlobalCmdFrameControlHeader = 8;
@@ -44,77 +36,15 @@ bool isGlobalCommand(uint8_t frameControl)
}
} // namespace
-void ModelCommand::OnConnect(ChipDeviceController * dc)
-{
- if (SendCommand(dc))
- {
- UpdateWaitForResponse(true);
- WaitForResponse();
- }
-}
-
-void ModelCommand::OnError(ChipDeviceController * dc, CHIP_ERROR err)
-{
- UpdateWaitForResponse(false);
-}
-
-void ModelCommand::OnMessage(ChipDeviceController * dc, PacketBuffer * buffer)
+uint16_t ModelCommand::Encode(PacketBufferHandle & buffer, uint16_t bufferSize)
{
- SetCommandExitStatus(ReceiveCommandResponse(dc, buffer));
- UpdateWaitForResponse(false);
-}
-
-CHIP_ERROR ModelCommand::Run(ChipDeviceController * dc, NodeId remoteId)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- err = NetworkCommand::Run(dc, remoteId);
- SuccessOrExit(err);
-
- err = dc->ServiceEventSignal();
- SuccessOrExit(err);
-
- VerifyOrExit(GetCommandExitStatus(), err = CHIP_ERROR_INTERNAL);
-
-exit:
- return err;
-}
-
-bool ModelCommand::SendCommand(ChipDeviceController * dc)
-{
- // Make sure our buffer is big enough, but this will need a better setup!
- static const uint16_t bufferSize = 1024;
- auto * buffer = PacketBuffer::NewWithAvailableSize(bufferSize);
-
- if (buffer == nullptr)
- {
- ChipLogError(chipTool, "Failed to allocate memory for packet data.");
- return false;
- }
-
ChipLogProgress(chipTool, "Endpoint id: '0x%02x', Cluster id: '0x%04x', Command id: '0x%02x'", mEndPointId, mClusterId,
mCommandId);
- uint16_t dataLength = EncodeCommand(buffer, bufferSize, mEndPointId);
- if (dataLength == 0)
- {
- PacketBuffer::Free(buffer);
- ChipLogError(chipTool, "Error while encoding data for command: %s", GetName());
- return false;
- }
-
- buffer->SetDataLength(dataLength);
- ChipLogDetail(chipTool, "Encoded data of length %d", dataLength);
-
-#ifdef DEBUG
- PrintBuffer(buffer);
-#endif
-
- dc->SendMessage(NULL, buffer);
- return true;
+ return EncodeCommand(buffer, bufferSize, mEndPointId);
}
-bool ModelCommand::ReceiveCommandResponse(ChipDeviceController * dc, PacketBuffer * buffer) const
+bool ModelCommand::Decode(PacketBufferHandle & buffer) const
{
EmberApsFrame frame;
uint8_t * message;
@@ -127,7 +57,6 @@ bool ModelCommand::ReceiveCommandResponse(ChipDeviceController * dc, PacketBuffe
if (extractApsFrame(buffer->Start(), buffer->DataLength(), &frame) == 0)
{
ChipLogError(chipTool, "APS frame processing failure!");
- PacketBuffer::Free(buffer);
ExitNow();
}
ChipLogDetail(chipTool, "APS frame processing success!");
@@ -152,34 +81,3 @@ bool ModelCommand::ReceiveCommandResponse(ChipDeviceController * dc, PacketBuffe
exit:
return success;
}
-
-void ModelCommand::UpdateWaitForResponse(bool value)
-{
- {
- std::lock_guard lk(cvWaitingForResponseMutex);
- mWaitingForResponse = value;
- }
- cvWaitingForResponse.notify_all();
-}
-
-void ModelCommand::WaitForResponse()
-{
- std::unique_lock lk(cvWaitingForResponseMutex);
- auto waitingUntil = std::chrono::system_clock::now() + kWaitingForResponseTimeout;
- if (!cvWaitingForResponse.wait_until(lk, waitingUntil, [this]() { return !this->mWaitingForResponse; }))
- {
- ChipLogError(chipTool, "No response from device");
- }
-}
-
-void ModelCommand::PrintBuffer(PacketBuffer * buffer) const
-{
- const size_t data_len = buffer->DataLength();
-
- fprintf(stderr, "SENDING: %zu ", data_len);
- for (size_t i = 0; i < data_len; ++i)
- {
- fprintf(stderr, "%d ", buffer->Start()[i]);
- }
- fprintf(stderr, "\n");
-}
diff --git a/examples/chip-tool/commands/common/ModelCommand.h b/examples/chip-tool/commands/clusters/ModelCommand.h
similarity index 52%
rename from examples/chip-tool/commands/common/ModelCommand.h
rename to examples/chip-tool/commands/clusters/ModelCommand.h
index 0907f719b9bf62..b8d159d182a0af 100644
--- a/examples/chip-tool/commands/common/ModelCommand.h
+++ b/examples/chip-tool/commands/clusters/ModelCommand.h
@@ -18,10 +18,7 @@
#pragma once
-#include "NetworkCommand.h"
-
-#include
-#include
+#include "../common/NetworkCommand.h"
#include
#include
@@ -35,38 +32,20 @@ class ModelCommand : public NetworkCommand
{
public:
ModelCommand(const char * commandName, uint16_t clusterId, uint8_t commandId) :
- NetworkCommand(commandName, NetworkType::UDP), mClusterId(clusterId), mCommandId(commandId)
+ NetworkCommand(commandName), mClusterId(clusterId), mCommandId(commandId)
{}
- void AddArguments()
- {
- NetworkCommand::AddArguments();
- AddArgument("endpoint-id", CHIP_ZCL_ENDPOINT_MIN, CHIP_ZCL_ENDPOINT_MAX, &mEndPointId);
- }
-
- /////////// Command Interface /////////
- CHIP_ERROR Run(ChipDeviceController * dc, NodeId remoteId) override;
+ void AddArguments() { AddArgument("endpoint-id", CHIP_ZCL_ENDPOINT_MIN, CHIP_ZCL_ENDPOINT_MAX, &mEndPointId); }
- /////////// IPCommand Interface /////////
- void OnConnect(ChipDeviceController * dc) override;
- void OnError(ChipDeviceController * dc, CHIP_ERROR err) override;
- void OnMessage(ChipDeviceController * dc, chip::System::PacketBuffer * buffer) override;
+ /////////// NetworkCommand Interface /////////
+ uint16_t Encode(PacketBufferHandle & buffer, uint16_t bufferSize) override;
+ bool Decode(PacketBufferHandle & buffer) const override;
- virtual uint16_t EncodeCommand(chip::System::PacketBuffer * buffer, uint16_t bufferSize, uint8_t endPointId) = 0;
+ virtual uint16_t EncodeCommand(const PacketBufferHandle & buffer, uint16_t bufferSize, uint8_t endPointId) = 0;
virtual bool HandleGlobalResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const { return false; }
virtual bool HandleSpecificResponse(uint8_t commandId, uint8_t * message, uint16_t messageLen) const { return false; }
private:
- bool SendCommand(ChipDeviceController * dc);
- bool ReceiveCommandResponse(ChipDeviceController * dc, chip::System::PacketBuffer * buffer) const;
-
- void UpdateWaitForResponse(bool value);
- void WaitForResponse(void);
- void PrintBuffer(chip::System::PacketBuffer * buffer) const;
-
- std::condition_variable cvWaitingForResponse;
- std::mutex cvWaitingForResponseMutex;
- bool mWaitingForResponse{ false };
const uint16_t mClusterId;
const uint8_t mCommandId;
uint8_t mEndPointId;
diff --git a/examples/chip-tool/commands/common/ModelCommandResponse.h b/examples/chip-tool/commands/clusters/ModelCommandResponse.h
similarity index 100%
rename from examples/chip-tool/commands/common/ModelCommandResponse.h
rename to examples/chip-tool/commands/clusters/ModelCommandResponse.h
diff --git a/examples/chip-tool/commands/common/Command.cpp b/examples/chip-tool/commands/common/Command.cpp
index f10e96f791da5e..a0df8493a50417 100644
--- a/examples/chip-tool/commands/common/Command.cpp
+++ b/examples/chip-tool/commands/common/Command.cpp
@@ -295,3 +295,23 @@ const char * Command::GetAttribute(void) const
return nullptr;
}
+
+void Command::UpdateWaitForResponse(bool value)
+{
+ {
+ std::lock_guard lk(cvWaitingForResponseMutex);
+ mWaitingForResponse = value;
+ }
+ cvWaitingForResponse.notify_all();
+}
+
+void Command::WaitForResponse(uint16_t duration)
+{
+ std::chrono::seconds waitingForResponseTimeout(duration);
+ std::unique_lock lk(cvWaitingForResponseMutex);
+ auto waitingUntil = std::chrono::system_clock::now() + waitingForResponseTimeout;
+ if (!cvWaitingForResponse.wait_until(lk, waitingUntil, [this]() { return !this->mWaitingForResponse; }))
+ {
+ ChipLogError(chipTool, "No response from device");
+ }
+}
diff --git a/examples/chip-tool/commands/common/Command.h b/examples/chip-tool/commands/common/Command.h
index 8c81731d486726..28557d34951374 100644
--- a/examples/chip-tool/commands/common/Command.h
+++ b/examples/chip-tool/commands/common/Command.h
@@ -22,10 +22,14 @@
#include
#include
+#include
+#include
#include
+#include
#include
class Command;
+class PersistentStorage;
template
std::unique_ptr make_unique(Args &&... args)
@@ -69,10 +73,14 @@ struct Argument
class Command
{
public:
- using ChipDeviceController = ::chip::DeviceController::ChipDeviceController;
- using IPAddress = ::chip::Inet::IPAddress;
- using PacketBuffer = ::chip::System::PacketBuffer;
- using NodeId = ::chip::NodeId;
+ using ChipDeviceCommissioner = ::chip::Controller::DeviceCommissioner;
+ using ChipSerializedDevice = ::chip::Controller::SerializedDevice;
+ using ChipDevice = ::chip::Controller::Device;
+ using PeerAddress = ::chip::Transport::PeerAddress;
+ using IPAddress = ::chip::Inet::IPAddress;
+ using PacketBuffer = ::chip::System::PacketBuffer;
+ using PacketBufferHandle = ::chip::System::PacketBufferHandle;
+ using NodeId = ::chip::NodeId;
struct AddressWithInterface
{
@@ -133,11 +141,14 @@ class Command
return AddArgument(name, min, max, reinterpret_cast(out), Number_uint64);
}
- virtual CHIP_ERROR Run(ChipDeviceController * dc, NodeId remoteId) = 0;
+ virtual CHIP_ERROR Run(PersistentStorage & storage, NodeId localId, NodeId remoteId) = 0;
bool GetCommandExitStatus() const { return mCommandExitStatus; }
void SetCommandExitStatus(bool status) { mCommandExitStatus = status; }
+ void UpdateWaitForResponse(bool value);
+ void WaitForResponse(uint16_t duration);
+
private:
bool InitArgument(size_t argIndex, const char * argValue);
size_t AddArgument(const char * name, int64_t min, uint64_t max, void * out, ArgumentType type);
@@ -146,4 +157,8 @@ class Command
bool mCommandExitStatus = false;
const char * mName = nullptr;
std::vector mArgs;
+
+ std::condition_variable cvWaitingForResponse;
+ std::mutex cvWaitingForResponseMutex;
+ bool mWaitingForResponse{ false };
};
diff --git a/examples/chip-tool/commands/common/Commands.cpp b/examples/chip-tool/commands/common/Commands.cpp
index b87344b387529c..346d507fa34aba 100644
--- a/examples/chip-tool/commands/common/Commands.cpp
+++ b/examples/chip-tool/commands/common/Commands.cpp
@@ -36,35 +36,24 @@ void Commands::Register(const char * clusterName, commands_list commandsList)
int Commands::Run(NodeId localId, NodeId remoteId, int argc, char ** argv)
{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ PersistentStorage storage;
ConfigureChipLogging();
- CHIP_ERROR err = chip::Platform::MemoryInit();
- if (err != CHIP_NO_ERROR)
- {
- ChipLogError(Controller, "Init Memory failure: %s", chip::ErrorStr(err));
- }
- else
- {
-
- ChipDeviceController dc;
-
- err = dc.Init(localId);
- VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure: %s", chip::ErrorStr(err)));
+ err = chip::Platform::MemoryInit();
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init Memory failure: %s", chip::ErrorStr(err)));
- err = dc.ServiceEvents();
- VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init Run Loop failure: %s", chip::ErrorStr(err)));
+ err = storage.Init();
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init Storage failure: %s", chip::ErrorStr(err)));
- err = RunCommand(dc, remoteId, argc, argv);
- SuccessOrExit(err);
+ err = RunCommand(storage, localId, remoteId, argc, argv);
+ SuccessOrExit(err);
- exit:
- dc.ServiceEventSignal();
- dc.Shutdown();
- }
+exit:
return (err == CHIP_NO_ERROR) ? EXIT_SUCCESS : EXIT_FAILURE;
}
-CHIP_ERROR Commands::RunCommand(ChipDeviceController & dc, NodeId remoteId, int argc, char ** argv)
+CHIP_ERROR Commands::RunCommand(PersistentStorage & storage, NodeId localId, NodeId remoteId, int argc, char ** argv)
{
CHIP_ERROR err = CHIP_NO_ERROR;
std::map::iterator cluster;
@@ -126,7 +115,7 @@ CHIP_ERROR Commands::RunCommand(ChipDeviceController & dc, NodeId remoteId, int
ExitNow(err = CHIP_ERROR_INVALID_ARGUMENT);
}
- err = command->Run(&dc, remoteId);
+ err = command->Run(storage, localId, remoteId);
if (err != CHIP_NO_ERROR)
{
ChipLogError(chipTool, "Run command failure: %s", chip::ErrorStr(err));
diff --git a/examples/chip-tool/commands/common/Commands.h b/examples/chip-tool/commands/common/Commands.h
index 531b557994ada7..68dcb5a6d5aefb 100644
--- a/examples/chip-tool/commands/common/Commands.h
+++ b/examples/chip-tool/commands/common/Commands.h
@@ -18,23 +18,21 @@
#pragma once
+#include "../../config/PersistentStorage.h"
#include "Command.h"
#include
-#include
-
class Commands
{
public:
- using ChipDeviceController = ::chip::DeviceController::ChipDeviceController;
- using NodeId = ::chip::NodeId;
- using CommandsVector = ::std::vector>;
+ using NodeId = ::chip::NodeId;
+ using CommandsVector = ::std::vector>;
void Register(const char * clusterName, commands_list commandsList);
int Run(NodeId localId, NodeId remoteId, int argc, char ** argv);
private:
- CHIP_ERROR RunCommand(ChipDeviceController & dc, NodeId remoteId, int argc, char ** argv);
+ CHIP_ERROR RunCommand(PersistentStorage & storage, NodeId localId, NodeId remoteId, int argc, char ** argv);
std::map::iterator GetCluster(std::string clusterName);
Command * GetCommand(CommandsVector & commands, std::string commandName);
Command * GetGlobalCommand(CommandsVector & commands, std::string commandName, std::string attributeName);
diff --git a/examples/chip-tool/commands/common/EchoCommand.cpp b/examples/chip-tool/commands/common/EchoCommand.cpp
deleted file mode 100644
index 10de3016edb082..00000000000000
--- a/examples/chip-tool/commands/common/EchoCommand.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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 "EchoCommand.h"
-
-using namespace ::chip;
-using namespace ::chip::DeviceController;
-
-#define SEND_DELAY 5
-static const char * PAYLOAD = "Message from Standalone CHIP echo client!";
-
-void EchoCommand::SendEcho() const
-{
- size_t payloadLen = strlen(PAYLOAD);
- if (payloadLen > UINT16_MAX)
- {
- ChipLogError(chipTool, "PAYLOAD length too big for PacketBuffer (> UINT16_MAX)");
- return;
- }
-
- // Reallocate buffer on each run, as the secure transport encrypts and
- // overwrites the buffer from previous iteration.
- auto * buffer = PacketBuffer::NewWithAvailableSize(static_cast(payloadLen));
- if (buffer == nullptr)
- {
- ChipLogError(chipTool, "Failed to allocate memory for packet data.");
- return;
- }
-
- memcpy(buffer->Start(), PAYLOAD, payloadLen);
- buffer->SetDataLength(static_cast(payloadLen));
-
- CHIP_ERROR err = mController->SendMessage(NULL, buffer);
- if (err == CHIP_NO_ERROR)
- {
- ChipLogProgress(chipTool, "Echo (%s): Message sent to server", GetNetworkName());
- }
- else
- {
- ChipLogError(chipTool, "Echo (%s): %s", GetNetworkName(), ErrorStr(err));
- }
-}
-
-void EchoCommand::ReceiveEcho(PacketBuffer * buffer) const
-{
- // attempt to print the incoming message
- size_t data_len = buffer->DataLength();
- char msg_buffer[data_len];
- msg_buffer[data_len] = 0; // Null-terminate whatever we received and treat like a string...
- memcpy(msg_buffer, buffer->Start(), data_len);
-
- bool isEchoIdenticalToMessage = strncmp(msg_buffer, PAYLOAD, data_len) == 0;
- if (isEchoIdenticalToMessage)
- {
- ChipLogProgress(chipTool, "Echo (%s): Received expected message !", GetNetworkName());
- }
- else
- {
- ChipLogError(chipTool, "Echo: (%s): Error \nSend: %s \nRecv: %s", GetNetworkName(), PAYLOAD, msg_buffer);
- }
-}
-
-CHIP_ERROR EchoCommand::Run(ChipDeviceController * dc, NodeId remoteId)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- err = NetworkCommand::Run(dc, remoteId);
- SuccessOrExit(err);
-
- // Run command until the user exits the process
- while (1)
- {
- if (mController != nullptr)
- {
- SendEcho();
- }
- sleep(SEND_DELAY);
- }
-
-exit:
- return err;
-}
diff --git a/examples/chip-tool/commands/common/EchoCommand.h b/examples/chip-tool/commands/common/EchoCommand.h
deleted file mode 100644
index 97a2adb34b0109..00000000000000
--- a/examples/chip-tool/commands/common/EchoCommand.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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 "NetworkCommand.h"
-
-class EchoCommand : public NetworkCommand
-{
-public:
- EchoCommand(const char * name, NetworkType type) : NetworkCommand(name, type) {}
-
- /////////// Command Interface /////////
- CHIP_ERROR Run(ChipDeviceController * dc, NodeId remoteId) override;
-
- /////////// IPCommand Interface /////////
- void OnConnect(ChipDeviceController * dc) override { mController = dc; }
- void OnMessage(ChipDeviceController * dc, chip::System::PacketBuffer * buffer) override { ReceiveEcho(buffer); }
- void OnError(ChipDeviceController * dc, CHIP_ERROR err) override { mController = nullptr; }
-
-private:
- void SendEcho(void) const;
- void ReceiveEcho(chip::System::PacketBuffer * buffer) const;
-
- ChipDeviceController * mController = nullptr;
-};
diff --git a/examples/chip-tool/commands/common/NetworkCommand.cpp b/examples/chip-tool/commands/common/NetworkCommand.cpp
index a49be61ceb9a9b..e79cc7f11c8bfb 100644
--- a/examples/chip-tool/commands/common/NetworkCommand.cpp
+++ b/examples/chip-tool/commands/common/NetworkCommand.cpp
@@ -19,77 +19,96 @@
#include "NetworkCommand.h"
using namespace ::chip;
-using namespace ::chip::DeviceController;
-using namespace ::chip::System;
-static void onConnect(ChipDeviceController * dc, Transport::PeerConnectionState * state, void * appReqState)
-{
- ChipLogDetail(chipTool, "OnConnect");
+constexpr uint16_t kWaitDurationInSeconds = 10;
- NetworkCommand * command = reinterpret_cast(dc->AppState);
- command->OnConnect(dc);
-}
+// Make sure our buffer is big enough, but this will need a better setup!
+constexpr uint16_t kMaxBufferSize = 1024;
-static void onError(ChipDeviceController * dc, void * appReqState, CHIP_ERROR err, const Inet::IPPacketInfo * pi)
+CHIP_ERROR NetworkCommand::Run(PersistentStorage & storage, NodeId localId, NodeId remoteId)
{
- ChipLogError(chipTool, "OnError: %s", ErrorStr(err));
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ err = mCommissioner.Init(localId, &storage);
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Commissioner: %s", chip::ErrorStr(err)));
+
+ err = mCommissioner.ServiceEvents();
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Run Loop: %s", chip::ErrorStr(err)));
+
+ err = RunInternal(remoteId);
+ SuccessOrExit(err);
+
+ VerifyOrExit(GetCommandExitStatus(), err = CHIP_ERROR_INTERNAL);
- NetworkCommand * command = reinterpret_cast(dc->AppState);
- command->OnError(dc, err);
+exit:
+ mCommissioner.ServiceEventSignal();
+ mCommissioner.Shutdown();
+ return err;
}
-static void onMessage(ChipDeviceController * dc, void * appReqState, PacketBuffer * buffer)
+CHIP_ERROR NetworkCommand::RunInternal(NodeId remoteId)
{
- ChipLogDetail(chipTool, "OnMessage: Received %zu bytes", buffer->DataLength());
+ ChipDevice * device;
+ CHIP_ERROR err = mCommissioner.GetDevice(remoteId, &device);
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(chipTool, "Could not find a paired device. Are you sure it has been paired ?"));
- NetworkCommand * command = reinterpret_cast(dc->AppState);
- command->OnMessage(dc, buffer);
+ device->SetDelegate(this);
- PacketBuffer::Free(buffer);
+ err = RunCommandInternal(device);
+ SuccessOrExit(err);
+
+ UpdateWaitForResponse(true);
+ WaitForResponse(kWaitDurationInSeconds);
+
+exit:
+ return err;
}
-CHIP_ERROR NetworkCommand::Run(ChipDeviceController * dc, NodeId remoteId)
+CHIP_ERROR NetworkCommand::RunCommandInternal(ChipDevice * device)
{
- CHIP_ERROR err = CHIP_NO_ERROR;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ uint16_t payloadLen = 0;
- dc->AppState = reinterpret_cast(this);
+ PacketBufferHandle buffer = PacketBuffer::NewWithAvailableSize(kMaxBufferSize);
+ VerifyOrExit(!buffer.IsNull(), err = CHIP_ERROR_NO_MEMORY);
- switch (mNetworkType)
- {
- case NetworkType::BLE:
- err = ConnectBLE(dc, remoteId);
- break;
-
- case NetworkType::UDP:
- err = ConnectUDP(dc, remoteId);
- break;
-
- case NetworkType::ALL:
- ChipLogError(chipTool, "Not implemented yet.");
- err = CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE;
- break;
- }
+ payloadLen = Encode(buffer, kMaxBufferSize);
+ VerifyOrExit(payloadLen != 0, err = CHIP_ERROR_INVALID_MESSAGE_LENGTH);
+
+ buffer->SetDataLength(payloadLen);
+
+#ifdef DEBUG
+ PrintBuffer(buffer);
+#endif
- VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(chipTool, "Failed to connect to the device"));
+ err = device->SendMessage(std::move(buffer));
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(chipTool, "Failed to send message: %s", ErrorStr(err)));
exit:
return err;
}
-CHIP_ERROR NetworkCommand::ConnectBLE(ChipDeviceController * dc, NodeId remoteId)
+void NetworkCommand::OnMessage(PacketBufferHandle buffer)
{
- snprintf(mName, sizeof(mName), "BLE:%u", mDiscriminator);
+ ChipLogDetail(chipTool, "OnMessage: Received %zu bytes", buffer->DataLength());
+
+ SetCommandExitStatus(Decode(buffer));
+ UpdateWaitForResponse(false);
+}
- RendezvousParameters params = RendezvousParameters().SetSetupPINCode(mSetupPINCode).SetDiscriminator(mDiscriminator);
- return dc->ConnectDevice(remoteId, params, NULL, onConnect, onMessage, onError);
+void NetworkCommand::OnStatusChange(void)
+{
+ ChipLogProgress(chipTool, "DeviceStatusDelegate::OnStatusChange");
}
-CHIP_ERROR NetworkCommand::ConnectUDP(ChipDeviceController * dc, NodeId remoteId)
+void NetworkCommand::PrintBuffer(PacketBufferHandle & buffer) const
{
- char hostIpStr[40];
- mRemoteAddr.address.ToString(hostIpStr, sizeof(hostIpStr));
- snprintf(mName, sizeof(mName), "%s:%d", hostIpStr, mRemotePort);
+ const size_t data_len = buffer->DataLength();
- return dc->ConnectDeviceWithoutSecurePairing(remoteId, mRemoteAddr.address, nullptr, onConnect, onMessage, onError, mRemotePort,
- mRemoteAddr.interfaceId);
+ fprintf(stderr, "SENDING: %zu ", data_len);
+ for (size_t i = 0; i < data_len; ++i)
+ {
+ fprintf(stderr, "%d ", buffer->Start()[i]);
+ }
+ fprintf(stderr, "\n");
}
diff --git a/examples/chip-tool/commands/common/NetworkCommand.h b/examples/chip-tool/commands/common/NetworkCommand.h
index 5ba729c709e46a..d520f6d7dfd0e5 100644
--- a/examples/chip-tool/commands/common/NetworkCommand.h
+++ b/examples/chip-tool/commands/common/NetworkCommand.h
@@ -18,51 +18,29 @@
#pragma once
+#include "../../config/PersistentStorage.h"
#include "Command.h"
-enum NetworkType
-{
- UDP,
- BLE,
- ALL
-};
-
-class NetworkCommand : public Command
+class NetworkCommand : public Command, public chip::Controller::DeviceStatusDelegate
{
public:
- NetworkCommand(const char * commandName, NetworkType type) : Command(commandName), mNetworkType(type) {}
+ NetworkCommand(const char * commandName) : Command(commandName) {}
- void AddArguments()
- {
- if (mNetworkType == NetworkType::UDP || mNetworkType == NetworkType::ALL)
- {
- AddArgument("device-remote-ip", &mRemoteAddr);
- AddArgument("device-remote-port", 0, UINT16_MAX, &mRemotePort);
- }
+ virtual uint16_t Encode(PacketBufferHandle & buffer, uint16_t bufferSize) = 0;
+ virtual bool Decode(PacketBufferHandle & buffer) const = 0;
- if (mNetworkType == NetworkType::BLE || mNetworkType == NetworkType::ALL)
- {
- AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode);
- AddArgument("discriminator", 0, 4096, &mDiscriminator);
- }
- }
+ /////////// Command Interface /////////
+ CHIP_ERROR Run(PersistentStorage & storage, NodeId localId, NodeId remoteId) override;
- const char * GetNetworkName(void) const { return mName; }
-
- virtual void OnConnect(ChipDeviceController * dc) = 0;
- virtual void OnError(ChipDeviceController * dc, CHIP_ERROR err) = 0;
- virtual void OnMessage(ChipDeviceController * dc, chip::System::PacketBuffer * buffer) = 0;
-
- CHIP_ERROR Run(ChipDeviceController * dc, NodeId remoteId) override;
+ /////////// DeviceStatusDelegate Interface /////////
+ void OnMessage(PacketBufferHandle buffer) override;
+ void OnStatusChange(void) override;
private:
- const NetworkType mNetworkType;
- CHIP_ERROR ConnectBLE(ChipDeviceController * dc, NodeId remoteId);
- CHIP_ERROR ConnectUDP(ChipDeviceController * dc, NodeId remoteId);
+ CHIP_ERROR RunInternal(NodeId remoteId);
+ CHIP_ERROR RunCommandInternal(ChipDevice * device);
+
+ void PrintBuffer(PacketBufferHandle & buffer) const;
- char mName[46];
- Command::AddressWithInterface mRemoteAddr;
- uint16_t mRemotePort;
- uint16_t mDiscriminator;
- uint32_t mSetupPINCode;
+ ChipDeviceCommissioner mCommissioner;
};
diff --git a/examples/chip-tool/commands/echo/Commands.h b/examples/chip-tool/commands/echo/Commands.h
index 94490fe6e68286..a9702dbe3d607b 100644
--- a/examples/chip-tool/commands/echo/Commands.h
+++ b/examples/chip-tool/commands/echo/Commands.h
@@ -18,18 +18,12 @@
#pragma once
-#include "../common/EchoCommand.h"
+#include "EchoCommand.h"
class Echo : public EchoCommand
{
public:
- Echo() : EchoCommand("ip", NetworkType::UDP) { NetworkCommand::AddArguments(); }
-};
-
-class EchoBle : public EchoCommand
-{
-public:
- EchoBle() : EchoCommand("ble", NetworkType::BLE) { NetworkCommand::AddArguments(); }
+ Echo() : EchoCommand("ip") {}
};
void registerCommandsEcho(Commands & commands)
@@ -38,7 +32,6 @@ void registerCommandsEcho(Commands & commands)
commands_list clusterCommands = {
make_unique(),
- make_unique(),
};
commands.Register(clusterName, clusterCommands);
diff --git a/examples/chip-tool/commands/echo/EchoCommand.cpp b/examples/chip-tool/commands/echo/EchoCommand.cpp
new file mode 100644
index 00000000000000..04e2fe20ab49b0
--- /dev/null
+++ b/examples/chip-tool/commands/echo/EchoCommand.cpp
@@ -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.
+ *
+ */
+
+#include "EchoCommand.h"
+
+using namespace ::chip;
+
+namespace {
+static const char PAYLOAD[] = "Message from Standalone CHIP echo client!";
+
+bool IsIdenticalMessage(System::PacketBufferHandle & buffer)
+{
+ size_t dataLen = buffer->DataLength();
+ return (dataLen + 1 == sizeof PAYLOAD) && (memcmp(buffer->Start(), PAYLOAD, dataLen) == 0);
+}
+} // namespace
+
+uint16_t EchoCommand::Encode(PacketBufferHandle & buffer, uint16_t bufferSize)
+{
+ uint16_t payloadLen = 0;
+
+ if (strlen(PAYLOAD) > bufferSize)
+ {
+ ChipLogError(chipTool, "PAYLOAD length too big for PacketBuffer (> bufferSize)");
+ }
+ else
+ {
+ payloadLen = static_cast(strlen(PAYLOAD));
+ memcpy(buffer->Start(), PAYLOAD, payloadLen);
+ }
+
+ return payloadLen;
+}
+
+bool EchoCommand::Decode(PacketBufferHandle & buffer) const
+{
+ bool success = IsIdenticalMessage(buffer);
+
+ if (!success)
+ {
+ ChipLogError(chipTool, "Echo: Error \nSend: %s \nRecv: %.*s", PAYLOAD, buffer->DataLength(), buffer->Start());
+ }
+
+ return success;
+}
diff --git a/src/controller/java/AndroidDevicePairingDelegate.h b/examples/chip-tool/commands/echo/EchoCommand.h
similarity index 61%
rename from src/controller/java/AndroidDevicePairingDelegate.h
rename to examples/chip-tool/commands/echo/EchoCommand.h
index 5aac026e8439f9..5ce008d68ff8b0 100644
--- a/src/controller/java/AndroidDevicePairingDelegate.h
+++ b/examples/chip-tool/commands/echo/EchoCommand.h
@@ -18,12 +18,14 @@
#pragma once
-#include
+#include "../common/NetworkCommand.h"
-class AndroidDevicePairingDelegate : public chip::DeviceController::DevicePairingDelegate
+class EchoCommand : public NetworkCommand
{
public:
- void OnNetworkCredentialsRequested(chip::RendezvousDeviceCredentialsDelegate * callback) override;
- void OnOperationalCredentialsRequested(const char * csr, size_t csr_length,
- chip::RendezvousDeviceCredentialsDelegate * callback) override;
+ EchoCommand(const char * commandName) : NetworkCommand(commandName) {}
+
+ /////////// NetworkCommand Interface /////////
+ uint16_t Encode(PacketBufferHandle & buffer, uint16_t bufferSize) override;
+ bool Decode(PacketBufferHandle & buffer) const override;
};
diff --git a/examples/chip-tool/commands/pairing/Commands.h b/examples/chip-tool/commands/pairing/Commands.h
new file mode 100644
index 00000000000000..3f760d93a554e7
--- /dev/null
+++ b/examples/chip-tool/commands/pairing/Commands.h
@@ -0,0 +1,59 @@
+/*
+ * 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 "PairingCommand.h"
+
+class Unpair : public PairingCommand
+{
+public:
+ Unpair() : PairingCommand("unpair", PairingMode::None) {}
+};
+
+class PairBypass : public PairingCommand
+{
+public:
+ PairBypass() : PairingCommand("bypass", PairingMode::Bypass) {}
+};
+
+class PairBle : public PairingCommand
+{
+public:
+ PairBle() : PairingCommand("ble", PairingMode::Ble) {}
+};
+
+class PairSoftAP : public PairingCommand
+{
+public:
+ PairSoftAP() : PairingCommand("softap", PairingMode::SoftAP) {}
+};
+
+void registerCommandsPairing(Commands & commands)
+{
+ const char * clusterName = "Pairing";
+
+ commands_list clusterCommands = {
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ make_unique(),
+ };
+
+ commands.Register(clusterName, clusterCommands);
+}
diff --git a/examples/chip-tool/commands/pairing/PairingCommand.cpp b/examples/chip-tool/commands/pairing/PairingCommand.cpp
new file mode 100644
index 00000000000000..6be2b74925d600
--- /dev/null
+++ b/examples/chip-tool/commands/pairing/PairingCommand.cpp
@@ -0,0 +1,149 @@
+/*
+ * 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 "PairingCommand.h"
+
+using namespace ::chip;
+
+constexpr uint16_t kWaitDurationInSeconds = 120;
+
+CHIP_ERROR PairingCommand::Run(PersistentStorage & storage, NodeId localId, NodeId remoteId)
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ err = mCommissioner.Init(localId, &storage, this);
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Commissioner: %s", chip::ErrorStr(err)));
+
+ err = mCommissioner.ServiceEvents();
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Run Loop: %s", chip::ErrorStr(err)));
+
+ err = RunInternal(remoteId);
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(chipTool, "Init Failure! PairDevice: %s", chip::ErrorStr(err)));
+
+exit:
+ mCommissioner.ServiceEventSignal();
+ mCommissioner.Shutdown();
+ return err;
+}
+
+CHIP_ERROR PairingCommand::RunInternal(NodeId remoteId)
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ UpdateWaitForResponse(true);
+ switch (mPairingMode)
+ {
+ case PairingMode::None:
+ err = Unpair(remoteId);
+ break;
+ case PairingMode::Bypass:
+ err = PairWithoutSecurity(remoteId, PeerAddress::UDP(mRemoteAddr.address, mRemotePort));
+ break;
+ case PairingMode::Ble:
+ err = Pair(remoteId, PeerAddress::BLE());
+ break;
+ case PairingMode::SoftAP:
+ err = Pair(remoteId, PeerAddress::UDP(mRemoteAddr.address, mRemotePort));
+ break;
+ }
+ WaitForResponse(kWaitDurationInSeconds);
+
+ return err;
+}
+
+CHIP_ERROR PairingCommand::Pair(NodeId remoteId, PeerAddress address)
+{
+ RendezvousParameters params =
+ RendezvousParameters().SetSetupPINCode(mSetupPINCode).SetDiscriminator(mDiscriminator).SetPeerAddress(address);
+
+ return mCommissioner.PairDevice(remoteId, params);
+}
+
+CHIP_ERROR PairingCommand::PairWithoutSecurity(NodeId remoteId, PeerAddress address)
+{
+ ChipSerializedDevice serializedTestDevice;
+ return mCommissioner.PairTestDeviceWithoutSecurity(remoteId, address.GetIPAddress(), serializedTestDevice, address.GetPort());
+}
+
+CHIP_ERROR PairingCommand::Unpair(NodeId remoteId)
+{
+ UpdateWaitForResponse(false);
+ return mCommissioner.UnpairDevice(remoteId);
+}
+
+void PairingCommand::OnStatusUpdate(RendezvousSessionDelegate::Status status)
+{
+ switch (status)
+ {
+ case RendezvousSessionDelegate::Status::SecurePairingSuccess:
+ ChipLogProgress(chipTool, "Secure Pairing Success");
+ break;
+ case RendezvousSessionDelegate::Status::SecurePairingFailed:
+ ChipLogError(chipTool, "Secure Pairing Failed");
+ break;
+ case RendezvousSessionDelegate::Status::NetworkProvisioningSuccess:
+ ChipLogProgress(chipTool, "Network Provisioning Success");
+ break;
+ case RendezvousSessionDelegate::Status::NetworkProvisioningFailed:
+ ChipLogError(chipTool, "Network Provisioning Failed");
+ break;
+ }
+}
+
+void PairingCommand::OnNetworkCredentialsRequested(RendezvousDeviceCredentialsDelegate * callback)
+{
+ ChipLogProgress(chipTool, "OnNetworkCredentialsRequested");
+ callback->SendNetworkCredentials(mSSID, mPassword);
+}
+
+void PairingCommand::OnOperationalCredentialsRequested(const char * csr, size_t csr_length,
+ RendezvousDeviceCredentialsDelegate * callback)
+{
+ // TODO Implement this
+ ChipLogProgress(chipTool, "OnOperationalCredentialsRequested");
+}
+
+void PairingCommand::OnPairingComplete(CHIP_ERROR err)
+{
+ if (err == CHIP_NO_ERROR)
+ {
+ ChipLogProgress(chipTool, "Pairing Success");
+ }
+ else
+ {
+ ChipLogProgress(chipTool, "Pairing Failure: %s", chip::ErrorStr(err));
+ }
+
+ SetCommandExitStatus(err == CHIP_NO_ERROR);
+ UpdateWaitForResponse(false);
+}
+
+void PairingCommand::OnPairingDeleted(CHIP_ERROR err)
+{
+ if (err == CHIP_NO_ERROR)
+ {
+ ChipLogProgress(chipTool, "Pairing Deleted Success");
+ }
+ else
+ {
+ ChipLogProgress(chipTool, "Pairing Deleted Failure: %s", chip::ErrorStr(err));
+ }
+
+ SetCommandExitStatus(err == CHIP_NO_ERROR);
+ UpdateWaitForResponse(false);
+}
diff --git a/examples/chip-tool/commands/pairing/PairingCommand.h b/examples/chip-tool/commands/pairing/PairingCommand.h
new file mode 100644
index 00000000000000..e91fc8d8caf1b0
--- /dev/null
+++ b/examples/chip-tool/commands/pairing/PairingCommand.h
@@ -0,0 +1,89 @@
+/*
+ * 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 "../../config/PersistentStorage.h"
+#include "../common/Command.h"
+
+enum class PairingMode
+{
+ None,
+ Bypass,
+ Ble,
+ SoftAP,
+};
+
+class PairingCommand : public Command, public chip::Controller::DevicePairingDelegate
+{
+public:
+ PairingCommand(const char * commandName, PairingMode mode) :
+ Command(commandName), mPairingMode(mode), mRemoteAddr{ IPAddress::Any, INET_NULL_INTERFACEID }
+ {
+ switch (mode)
+ {
+ case PairingMode::None:
+ break;
+ case PairingMode::Bypass:
+ AddArgument("device-remote-ip", &mRemoteAddr);
+ AddArgument("device-remote-port", 0, UINT16_MAX, &mRemotePort);
+ break;
+ case PairingMode::Ble:
+ AddArgument("ssid", &mSSID);
+ AddArgument("password", &mPassword);
+ AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode);
+ AddArgument("discriminator", 0, 4096, &mDiscriminator);
+ break;
+ case PairingMode::SoftAP:
+ AddArgument("ssid", &mSSID);
+ AddArgument("password", &mPassword);
+ AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode);
+ AddArgument("discriminator", 0, 4096, &mDiscriminator);
+ AddArgument("device-remote-ip", &mRemoteAddr);
+ AddArgument("device-remote-port", 0, UINT16_MAX, &mRemotePort);
+ break;
+ }
+ }
+
+ /////////// Command Interface /////////
+ CHIP_ERROR Run(PersistentStorage & storage, NodeId localId, NodeId remoteId) override;
+
+ /////////// DevicePairingDelegate Interface /////////
+ void OnStatusUpdate(chip::RendezvousSessionDelegate::Status status) override;
+ void OnNetworkCredentialsRequested(chip::RendezvousDeviceCredentialsDelegate * callback) override;
+ void OnOperationalCredentialsRequested(const char * csr, size_t csr_length,
+ chip::RendezvousDeviceCredentialsDelegate * callback) override;
+ void OnPairingComplete(CHIP_ERROR error) override;
+ void OnPairingDeleted(CHIP_ERROR error) override;
+
+private:
+ CHIP_ERROR RunInternal(NodeId remoteId);
+ CHIP_ERROR Pair(NodeId remoteId, PeerAddress address);
+ CHIP_ERROR PairWithoutSecurity(NodeId remoteId, PeerAddress address);
+ CHIP_ERROR Unpair(NodeId remoteId);
+
+ const PairingMode mPairingMode;
+ Command::AddressWithInterface mRemoteAddr;
+ uint16_t mRemotePort;
+ uint16_t mDiscriminator;
+ uint32_t mSetupPINCode;
+ char * mSSID;
+ char * mPassword;
+
+ ChipDeviceCommissioner mCommissioner;
+};
diff --git a/examples/chip-tool/commands/payload/Commands.h b/examples/chip-tool/commands/payload/Commands.h
new file mode 100644
index 00000000000000..83c1124af44910
--- /dev/null
+++ b/examples/chip-tool/commands/payload/Commands.h
@@ -0,0 +1,31 @@
+/*
+ * 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 "ParseCommand.h"
+
+void registerCommandsPayload(Commands & commands)
+{
+ const char * clusterName = "Payload";
+ commands_list clusterCommands = {
+ make_unique(),
+ };
+
+ commands.Register(clusterName, clusterCommands);
+}
diff --git a/examples/chip-tool/commands/payload/ParseCommand.cpp b/examples/chip-tool/commands/payload/ParseCommand.cpp
new file mode 100644
index 00000000000000..534efb14e2acc9
--- /dev/null
+++ b/examples/chip-tool/commands/payload/ParseCommand.cpp
@@ -0,0 +1,104 @@
+/*
+ * 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 "ParseCommand.h"
+#include
+#include
+#include
+
+using namespace ::chip;
+
+CHIP_ERROR ParseCommand::Run(PersistentStorage & storage, NodeId localId, NodeId remoteId)
+{
+ std::string codeString(mCode);
+ SetupPayload payload;
+
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ err = Parse(codeString, payload);
+ SuccessOrExit(err);
+
+ err = Print(payload);
+ SuccessOrExit(err);
+exit:
+ return err;
+}
+
+CHIP_ERROR ParseCommand::Print(chip::SetupPayload payload)
+{
+ std::string serialNumber;
+ std::vector optionalVendorData;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ ChipLogProgress(SetupPayload, "RequiresCustomFlow: %u", payload.requiresCustomFlow);
+ ChipLogProgress(SetupPayload, "VendorID: %u", payload.vendorID);
+ ChipLogProgress(SetupPayload, "Version: %u", payload.version);
+ ChipLogProgress(SetupPayload, "ProductID: %u", payload.productID);
+ ChipLogProgress(SetupPayload, "Discriminator: %u", payload.discriminator);
+ ChipLogProgress(SetupPayload, "SetUpPINCode: %u", payload.setUpPINCode);
+ ChipLogProgress(SetupPayload, "RendezvousInformation: %u", payload.rendezvousInformation);
+
+ if (payload.getSerialNumber(serialNumber) == CHIP_NO_ERROR)
+ {
+ ChipLogProgress(SetupPayload, "SerialNumber: %s", serialNumber.c_str());
+ }
+
+ optionalVendorData = payload.getAllOptionalVendorData();
+ for (const OptionalQRCodeInfo & info : optionalVendorData)
+ {
+ if (info.type == optionalQRCodeInfoTypeString)
+ {
+ ChipLogProgress(SetupPayload, "OptionalQRCodeInfo: tag=%u,string value=%s", info.tag, info.data.c_str());
+ }
+ else if (info.type == optionalQRCodeInfoTypeInt32)
+ {
+ ChipLogProgress(SetupPayload, "OptionalQRCodeInfo: tag=%u,int value=%u", info.tag, info.int32);
+ }
+ else
+ {
+ err = CHIP_ERROR_INVALID_ARGUMENT;
+ }
+ }
+
+ SuccessOrExit(err);
+
+exit:
+ return err;
+}
+
+CHIP_ERROR ParseCommand::Parse(std::string codeString, chip::SetupPayload & payload)
+{
+
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ if (IsQRCode(codeString))
+ {
+ ChipLogDetail(SetupPayload, "Parsing base41Representation: %s", codeString.c_str());
+ err = QRCodeSetupPayloadParser(codeString).populatePayload(payload);
+ }
+ else
+ {
+ ChipLogDetail(SetupPayload, "Parsing decimalRepresentation: %s", codeString.c_str());
+ err = ManualSetupPayloadParser(codeString).populatePayload(payload);
+ }
+
+ return err;
+}
+
+bool ParseCommand::IsQRCode(std::string codeString)
+{
+ return codeString.rfind(QRCODE_PREFIX) == 0;
+}
diff --git a/examples/chip-tool/commands/payload/ParseCommand.h b/examples/chip-tool/commands/payload/ParseCommand.h
new file mode 100644
index 00000000000000..f7d2a41a7ad8cc
--- /dev/null
+++ b/examples/chip-tool/commands/payload/ParseCommand.h
@@ -0,0 +1,36 @@
+/*
+ * 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 "../common/Command.h"
+#include
+
+class ParseCommand : public Command
+{
+public:
+ ParseCommand() : Command("parse") { AddArgument("code", &mCode); }
+ CHIP_ERROR Run(PersistentStorage & storage, NodeId localId, NodeId remoteId) override;
+
+private:
+ char * mCode;
+ CHIP_ERROR Parse(std::string codeString, chip::SetupPayload & payload);
+ CHIP_ERROR Print(chip::SetupPayload payload);
+ bool IsQRCode(std::string codeString);
+ const std::string QRCODE_PREFIX = "CH:";
+};
diff --git a/examples/chip-tool/config/PersistentStorage.cpp b/examples/chip-tool/config/PersistentStorage.cpp
new file mode 100644
index 00000000000000..24d270f3c68d38
--- /dev/null
+++ b/examples/chip-tool/config/PersistentStorage.cpp
@@ -0,0 +1,114 @@
+/*
+ * 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 "PersistentStorage.h"
+
+#include
+
+using String = std::basic_string;
+using Section = std::map;
+using Sections = std::map;
+
+using namespace ::chip;
+using namespace ::chip::Controller;
+
+constexpr const char kFilename[] = "/tmp/chip_tool_config.ini";
+constexpr const char kDefaultSectionName[] = "Default";
+
+CHIP_ERROR PersistentStorage::Init()
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ std::ifstream ifs;
+ ifs.open(kFilename, std::ifstream::in);
+ if (!ifs.good())
+ {
+ CommitConfig();
+ ifs.open(kFilename, std::ifstream::in);
+ }
+ VerifyOrExit(ifs.is_open(), err = CHIP_ERROR_OPEN_FAILED);
+
+ mConfig.parse(ifs);
+ ifs.close();
+
+exit:
+ return err;
+}
+
+void PersistentStorage::SetDelegate(PersistentStorageResultDelegate * delegate) {}
+
+void PersistentStorage::GetKeyValue(const char * key) {}
+
+CHIP_ERROR PersistentStorage::GetKeyValue(const char * key, char * value, uint16_t & size)
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ std::string iniValue;
+ size_t iniValueLength = 0;
+
+ auto section = mConfig.sections[kDefaultSectionName];
+ auto it = section.find(key);
+ VerifyOrExit(it != section.end(), err = CHIP_ERROR_KEY_NOT_FOUND);
+
+ VerifyOrExit(inipp::extract(section[key], iniValue), err = CHIP_ERROR_INVALID_ARGUMENT);
+
+ iniValueLength = iniValue.size();
+ VerifyOrExit(iniValueLength < static_cast(size) - 1, err = CHIP_ERROR_BUFFER_TOO_SMALL);
+
+ iniValueLength = iniValue.copy(value, iniValueLength);
+ value[iniValueLength] = '\0';
+
+exit:
+ return err;
+}
+
+void PersistentStorage::SetKeyValue(const char * key, const char * value)
+{
+ auto section = mConfig.sections[kDefaultSectionName];
+ section[key] = std::string(value);
+
+ mConfig.sections[kDefaultSectionName] = section;
+ CommitConfig();
+}
+
+void PersistentStorage::DeleteKeyValue(const char * key)
+{
+ auto section = mConfig.sections[kDefaultSectionName];
+ section.erase(key);
+
+ mConfig.sections[kDefaultSectionName] = section;
+ CommitConfig();
+}
+
+CHIP_ERROR PersistentStorage::CommitConfig()
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ std::ofstream ofs;
+ std::string tmpPath = kFilename;
+ tmpPath.append(".tmp");
+ ofs.open(tmpPath, std::ofstream::out | std::ofstream::trunc);
+ VerifyOrExit(ofs.good(), err = CHIP_ERROR_WRITE_FAILED);
+
+ mConfig.generate(ofs);
+ ofs.close();
+ VerifyOrExit(ofs.good(), err = CHIP_ERROR_WRITE_FAILED);
+
+ VerifyOrExit(rename(tmpPath.c_str(), kFilename) == 0, err = CHIP_ERROR_WRITE_FAILED);
+
+exit:
+ return err;
+}
diff --git a/examples/chip-tool/config/PersistentStorage.h b/examples/chip-tool/config/PersistentStorage.h
new file mode 100644
index 00000000000000..e4b0d0ec0bea58
--- /dev/null
+++ b/examples/chip-tool/config/PersistentStorage.h
@@ -0,0 +1,39 @@
+/*
+ * 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
+
+class PersistentStorage : public chip::Controller::PersistentStorageDelegate
+{
+public:
+ CHIP_ERROR Init();
+
+ /////////// PersistentStorageDelegate Interface /////////
+ void SetDelegate(chip::Controller::PersistentStorageResultDelegate * delegate) override;
+ void GetKeyValue(const char * key) override;
+ CHIP_ERROR GetKeyValue(const char * key, char * value, uint16_t & size) override;
+ void SetKeyValue(const char * key, const char * value) override;
+ void DeleteKeyValue(const char * key) override;
+
+private:
+ CHIP_ERROR CommitConfig();
+ inipp::Ini mConfig;
+};
diff --git a/examples/chip-tool/entrypoint.sh b/examples/chip-tool/entrypoint.sh
index b31c5bdf1552a3..2f0bfb3b7224aa 100755
--- a/examples/chip-tool/entrypoint.sh
+++ b/examples/chip-tool/entrypoint.sh
@@ -2,6 +2,7 @@
service dbus start
sleep 1
+service avahi-daemon start
/usr/sbin/otbr-agent -I wpan0 spinel+hdlc+uart:///dev/ttyUSB0 &
sleep 1
ot-ctl panid 0x1234
diff --git a/examples/chip-tool/main.cpp b/examples/chip-tool/main.cpp
index 43847874a16748..a7bf3ec9b1f478 100644
--- a/examples/chip-tool/main.cpp
+++ b/examples/chip-tool/main.cpp
@@ -20,12 +20,10 @@
#include "commands/clusters/Commands.h"
#include "commands/echo/Commands.h"
+#include "commands/pairing/Commands.h"
+#include "commands/payload/Commands.h"
-// NOTE: Remote device ID is in sync with the echo server device id
-// At some point, we may want to add an option to connect to a device without
-// knowing its id, because the ID can be learned on the first response that is received.
-constexpr chip::NodeId kLocalDeviceId = 112233;
-constexpr chip::NodeId kRemoteDeviceId = 12344321;
+#include
// ================================================================================
// Main Code
@@ -33,9 +31,10 @@ constexpr chip::NodeId kRemoteDeviceId = 12344321;
int main(int argc, char * argv[])
{
Commands commands;
-
registerCommandsEcho(commands);
+ registerCommandsPayload(commands);
+ registerCommandsPairing(commands);
registerClusters(commands);
- return commands.Run(kLocalDeviceId, kRemoteDeviceId, argc, argv);
+ return commands.Run(chip::kTestControllerNodeId, chip::kTestDeviceNodeId, argc, argv);
}
diff --git a/examples/common/QRCode/BUILD.gn b/examples/common/QRCode/BUILD.gn
new file mode 100644
index 00000000000000..f954876835f0bb
--- /dev/null
+++ b/examples/common/QRCode/BUILD.gn
@@ -0,0 +1,29 @@
+# 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.
+
+config("qrcode-common_config") {
+ include_dirs = [ "repo/c" ]
+
+ cflags = [ "-Wno-type-limits" ]
+}
+
+static_library("QRCode") {
+ output_name = "libqrcode-common"
+
+ output_dir = "${root_out_dir}/lib"
+
+ sources = [ "repo/c/qrcodegen.c" ]
+
+ public_configs = [ ":qrcode-common_config" ]
+}
diff --git a/examples/common/chip-app-server/BUILD.gn b/examples/common/chip-app-server/BUILD.gn
index 9028d413190ee2..1f9ed65cd1f5cf 100644
--- a/examples/common/chip-app-server/BUILD.gn
+++ b/examples/common/chip-app-server/BUILD.gn
@@ -21,11 +21,6 @@ config("includes") {
]
}
-declare_args() {
- # By pass provision and secure session
- bypass_rendezvous = false
-}
-
static_library("chip-app-server") {
output_name = "chip-app-server"
@@ -39,11 +34,10 @@ static_library("chip-app-server") {
"Server.cpp",
]
- if (bypass_rendezvous) {
- defines = [ "BYPASS_RENDEZVOUS=1" ]
- }
-
- deps = [ "${chip_root}/src/lib" ]
+ deps = [
+ "${chip_root}/src/lib",
+ "${chip_root}/src/lib/mdns",
+ ]
public_configs = [ ":includes" ]
diff --git a/examples/common/chip-app-server/DataModelHandler.cpp b/examples/common/chip-app-server/DataModelHandler.cpp
index 5b7445568d1d6b..9aa86739d7736e 100644
--- a/examples/common/chip-app-server/DataModelHandler.cpp
+++ b/examples/common/chip-app-server/DataModelHandler.cpp
@@ -20,28 +20,125 @@
* This file implements the handler for data model messages.
*/
-#include
-#include
-#include
-
#include "DataModelHandler.h"
#include
#include
#include
#include
+#include
+#include
+#include
using namespace ::chip;
-extern "C" {
/**
- * Handle a message that should be processed via our data model processing
- * codepath. This function will free the packet buffer.
+ * A data model message has nonzero length and always has a first byte whose
+ * value is one of: 0x00, 0x01, 0x02, 0x03. See chipZclEncodeZclHeader for the
+ * construction of the message and in particular the first byte.
*
- * @param [in] buffer The buffer holding the message. This function guarantees
- * that it will free the buffer before returning.
+ * Echo messages should generally not have a first byte with those values, so we
+ * can use that to try to distinguish between the two.
+ */
+bool ContentMayBeADataModelMessage(const System::PacketBufferHandle & buffer)
+{
+ const size_t data_len = buffer->DataLength();
+ const uint8_t * data = buffer->Start();
+ bool maybeDataModelMessage = true;
+
+ // Has to have nonzero length.
+ VerifyOrExit(data_len > 0, maybeDataModelMessage = false);
+
+ // Has to have a valid first byte value.
+ VerifyOrExit(data[0] < 0x04, maybeDataModelMessage = false);
+
+exit:
+ return maybeDataModelMessage;
+}
+
+/**
+ * @brief implements something like "od -c", changes an arbitrary byte string
+ * into a single-line of ascii. Destroys any byte-wise encoding that
+ * might be present, e.g. utf-8.
+ *
+ * @param bytes potentially unprintable buffer
+ * @param bytes_len length of bytes
+ * @param out where to put the printable string
+ * @param out_len length of out
+ * @return size_t required size of output buffer, including null-termination
*/
-void HandleDataModelMessage(const PacketHeader & header, System::PacketBuffer * buffer, SecureSessionMgrBase * mgr)
+static size_t BinaryBytesToPrintableString(const uint8_t * bytes, size_t bytes_len, char * out, size_t out_len)
+{
+ size_t required = 1; // always need null termination
+ memset(out, 0, out_len);
+ // count and print
+ for (; bytes_len > 0; bytes_len--, bytes++)
+ {
+ uint8_t byte = *bytes;
+
+ if ((byte >= '\t' && byte <= '\r') || byte == '\\')
+ {
+ static const char * kCodes = "tnvfr";
+ char code = (byte == '\\') ? '\\' : kCodes[byte - '\t'];
+ required += 2;
+ if (out_len > 2)
+ {
+ *out++ = '\\';
+ *out++ = code;
+ out_len -= 2;
+ }
+ }
+ else if (byte >= ' ' && byte <= '~')
+ {
+ required += 1;
+ if (out_len > 1)
+ {
+ *out++ = byte;
+ out_len--;
+ }
+ }
+ else
+ {
+ static const size_t kBinCodeLen = sizeof("\\xFF") - 1;
+ static const char * kCodes = "0123456789ABCDEF";
+
+ required += kBinCodeLen;
+ if (out_len > kBinCodeLen)
+ {
+ *out++ = '\\';
+ *out++ = 'x';
+ *out++ = kCodes[(byte & 0xf0) >> 4];
+ *out++ = kCodes[byte & 0xf];
+ out_len -= kBinCodeLen;
+ }
+ }
+ }
+
+ return required;
+}
+
+void ProcessOthersMessage(const PacketHeader & header, System::PacketBufferHandle & buffer, SecureSessionMgr * mgr)
+{
+ CHIP_ERROR err;
+ char logmsg[512];
+
+ BinaryBytesToPrintableString(buffer->Start(), buffer->DataLength(), logmsg, sizeof(logmsg));
+
+ ChipLogProgress(AppServer, "Client sent: %s", logmsg);
+
+ // Attempt to echo back
+ err = mgr->SendMessage(header.GetSourceNodeId().Value(), std::move(buffer));
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(AppServer, "Unable to echo back to client: %s", ErrorStr(err));
+ }
+ else
+ {
+ ChipLogProgress(AppServer, "Echo sent");
+ }
+}
+
+void ProcessDataModelMessage(const PacketHeader & header, System::PacketBufferHandle & buffer)
{
EmberApsFrame frame;
bool ok = extractApsFrame(buffer->Start(), buffer->DataLength(), &frame) > 0;
@@ -52,7 +149,6 @@ void HandleDataModelMessage(const PacketHeader & header, System::PacketBuffer *
else
{
ChipLogProgress(Zcl, "APS frame processing failure!");
- System::PacketBuffer::Free(buffer);
return;
}
@@ -64,8 +160,6 @@ void HandleDataModelMessage(const PacketHeader & header, System::PacketBuffer *
header.GetSourceNodeId().Value(), // source identifier
NULL);
- System::PacketBuffer::Free(buffer);
-
if (ok)
{
ChipLogProgress(Zcl, "Data model processing success!");
@@ -76,9 +170,32 @@ void HandleDataModelMessage(const PacketHeader & header, System::PacketBuffer *
}
}
+/**
+ * Handle a message that should be processed via our data model processing
+ * codepath. This function will free the packet buffer.
+ *
+ * @param [in] buffer The buffer holding the message. This function guarantees
+ * that it will free the buffer before returning.
+ */
+void HandleDataModelMessage(const PacketHeader & header, System::PacketBufferHandle buffer, SecureSessionMgr * mgr)
+{
+ // FIXME: Long-term we shouldn't be guessing what sort of message this is
+ // based on the message bytes. We're doing this for now to support both
+ // data model messages and text echo messages, but in the long term we
+ // should either do echo via a data model command or do echo on a separate
+ // port from data model processing.
+ if (ContentMayBeADataModelMessage(buffer))
+ {
+ ProcessDataModelMessage(header, buffer);
+ }
+ else
+ {
+ ProcessOthersMessage(header, buffer, mgr);
+ }
+}
+
void InitDataModelHandler()
{
emberAfEndpointConfigure();
emberAfInit();
}
-}
diff --git a/examples/common/chip-app-server/QRCodeUtil.cpp b/examples/common/chip-app-server/QRCodeUtil.cpp
index 681a6f83f65db9..9a38a084019e4a 100644
--- a/examples/common/chip-app-server/QRCodeUtil.cpp
+++ b/examples/common/chip-app-server/QRCodeUtil.cpp
@@ -22,8 +22,12 @@
#include
#include
+#include
#include
+constexpr char qrCodeBaseUrl[] = "https://dhrishi.github.io/connectedhomeip/qrcode.html";
+constexpr char specialCharsUnreservedInRfc3986[] = "-._~";
+
void PrintQRCode(chip::RendezvousInformationFlags rendezvousFlags)
{
uint32_t setupPinCode;
@@ -33,6 +37,15 @@ void PrintQRCode(chip::RendezvousInformationFlags rendezvousFlags)
{
ChipLogProgress(AppServer, "SetupPINCode: [%" PRIu32 "]", setupPinCode);
ChipLogProgress(AppServer, "SetupQRCode: [%s]", QRCode.c_str());
+
+ chip::Platform::ScopedMemoryBuffer qrCodeBuffer;
+ const size_t qrCodeBufferMaxSize = 3 * QRCode.size() + 1;
+ qrCodeBuffer.Alloc(qrCodeBufferMaxSize);
+ if (EncodeQRCodeToUrl(QRCode.c_str(), QRCode.size(), &qrCodeBuffer[0], qrCodeBufferMaxSize) == CHIP_NO_ERROR)
+ {
+ ChipLogProgress(AppServer, "Copy/paste the below URL in a browser to see the QR Code:\n\t%s?data=%s", qrCodeBaseUrl,
+ &qrCodeBuffer[0]);
+ }
}
else
{
@@ -75,3 +88,43 @@ CHIP_ERROR GetQRCode(uint32_t & setupPinCode, std::string & QRCode, chip::Rendez
exit:
return err;
}
+
+static inline bool isCharUnreservedInRfc3986(const char c)
+{
+ return isalpha(c) || isdigit(c) || (strchr(specialCharsUnreservedInRfc3986, c) != nullptr);
+}
+
+CHIP_ERROR EncodeQRCodeToUrl(const char * QRCode, size_t len, char * url, size_t maxSize)
+{
+ const char upperHexDigits[] = "0123456789ABCDEF";
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ size_t i = 0, j = 0;
+
+ VerifyOrExit((QRCode != nullptr) && (url != nullptr), err = CHIP_ERROR_INVALID_ARGUMENT);
+
+ for (i = 0; i < len; ++i)
+ {
+ unsigned char c = QRCode[i];
+ if (isCharUnreservedInRfc3986(c))
+ {
+
+ VerifyOrExit((j + 1) < maxSize, err = CHIP_ERROR_BUFFER_TOO_SMALL);
+
+ url[j++] = c;
+ }
+ else
+ {
+
+ VerifyOrExit((j + 3) < maxSize, err = CHIP_ERROR_BUFFER_TOO_SMALL);
+
+ url[j++] = '%';
+ url[j++] = upperHexDigits[(c & 0xf0) >> 4];
+ url[j++] = upperHexDigits[(c & 0x0f)];
+ }
+ }
+
+ url[j] = '\0';
+
+exit:
+ return err;
+}
diff --git a/examples/common/chip-app-server/RendezvousServer.cpp b/examples/common/chip-app-server/RendezvousServer.cpp
index 03d8e4cbe6d86b..ead0cf85d46088 100644
--- a/examples/common/chip-app-server/RendezvousServer.cpp
+++ b/examples/common/chip-app-server/RendezvousServer.cpp
@@ -18,7 +18,6 @@
#include "RendezvousServer.h"
#include "SessionManager.h"
-
#include