diff --git a/.devcontainer/build.sh b/.devcontainer/build.sh
index e1d36b4c400..7e7b9f0a619 100755
--- a/.devcontainer/build.sh
+++ b/.devcontainer/build.sh
@@ -76,7 +76,7 @@ if [ "$USER_UID" = "0" ]; then
USER_UID=1000
fi
-docker build \
+docker buildx build \
-t "$IMAGE_TAG" \
--pull \
--build-arg USER_UID="$USER_UID" \
diff --git a/.github/.wordlist.txt b/.github/.wordlist.txt
index b0a6eb9925e..fd96e9af7aa 100644
--- a/.github/.wordlist.txt
+++ b/.github/.wordlist.txt
@@ -403,6 +403,8 @@ deployable
depottools
deps
der
+dereference
+dereferencing
desc
descheduled
detokenization
@@ -550,6 +552,7 @@ EvalCode
EvalCodeWithName
EvalFrameDefault
EVB
+EVKBMIMXRT
EventLogging
evk
EVSE
@@ -608,6 +611,7 @@ fsl
fstab
fsync
ftd
+ftr
fullclean
fuzzer
fuzzers
@@ -1118,6 +1122,7 @@ params
PartNumber
PASE
Passcode
+passcodes
passRetained
passwd
Pausable
@@ -1369,6 +1374,7 @@ Silabs's
SiliconLabs
SimpleFileExFlags
SimpleLink
+simw
SiWx
sizedb
sl
diff --git a/.github/ISSUE_TEMPLATE/001-bug-report.yaml b/.github/ISSUE_TEMPLATE/001-bug-report.yaml
index 8944e002c5e..e8b8646a055 100644
--- a/.github/ISSUE_TEMPLATE/001-bug-report.yaml
+++ b/.github/ISSUE_TEMPLATE/001-bug-report.yaml
@@ -51,6 +51,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf
- python
- raspi
diff --git a/.github/ISSUE_TEMPLATE/002-1.0-issue.yaml b/.github/ISSUE_TEMPLATE/002-1.0-issue.yaml
index 10551fef60f..45c9e1ea114 100644
--- a/.github/ISSUE_TEMPLATE/002-1.0-issue.yaml
+++ b/.github/ISSUE_TEMPLATE/002-1.0-issue.yaml
@@ -51,6 +51,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/003-1.1-issue.yaml b/.github/ISSUE_TEMPLATE/003-1.1-issue.yaml
index 50db3e80a95..9a6b3bf80c1 100644
--- a/.github/ISSUE_TEMPLATE/003-1.1-issue.yaml
+++ b/.github/ISSUE_TEMPLATE/003-1.1-issue.yaml
@@ -51,6 +51,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/004-1.2-issue.yaml b/.github/ISSUE_TEMPLATE/004-1.2-issue.yaml
index 81b641a52e4..ef2472d325d 100644
--- a/.github/ISSUE_TEMPLATE/004-1.2-issue.yaml
+++ b/.github/ISSUE_TEMPLATE/004-1.2-issue.yaml
@@ -51,6 +51,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/005-1.3-issue.yaml b/.github/ISSUE_TEMPLATE/005-1.3-issue.yaml
index 5c91f91e75b..3be4a5f016f 100644
--- a/.github/ISSUE_TEMPLATE/005-1.3-issue.yaml
+++ b/.github/ISSUE_TEMPLATE/005-1.3-issue.yaml
@@ -51,6 +51,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/049-trivial-fix.yaml b/.github/ISSUE_TEMPLATE/049-trivial-fix.yaml
index 7c82d950e9f..a8bf9d85f99 100644
--- a/.github/ISSUE_TEMPLATE/049-trivial-fix.yaml
+++ b/.github/ISSUE_TEMPLATE/049-trivial-fix.yaml
@@ -42,6 +42,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/050-tooling-fix.yaml b/.github/ISSUE_TEMPLATE/050-tooling-fix.yaml
index 0d775a61ef1..8dddd0a064a 100644
--- a/.github/ISSUE_TEMPLATE/050-tooling-fix.yaml
+++ b/.github/ISSUE_TEMPLATE/050-tooling-fix.yaml
@@ -37,6 +37,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/060-platform-fix.yaml b/.github/ISSUE_TEMPLATE/060-platform-fix.yaml
index fdb8b76d88f..ad9bd8abb62 100644
--- a/.github/ISSUE_TEMPLATE/060-platform-fix.yaml
+++ b/.github/ISSUE_TEMPLATE/060-platform-fix.yaml
@@ -37,6 +37,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/080-feature-request.yaml b/.github/ISSUE_TEMPLATE/080-feature-request.yaml
index c83b0c22aca..118c763eee3 100644
--- a/.github/ISSUE_TEMPLATE/080-feature-request.yaml
+++ b/.github/ISSUE_TEMPLATE/080-feature-request.yaml
@@ -32,6 +32,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/090-sve-issue.yaml b/.github/ISSUE_TEMPLATE/090-sve-issue.yaml
index 6ea65341230..20436b77c74 100644
--- a/.github/ISSUE_TEMPLATE/090-sve-issue.yaml
+++ b/.github/ISSUE_TEMPLATE/090-sve-issue.yaml
@@ -51,6 +51,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/091-cert-blocker.yaml b/.github/ISSUE_TEMPLATE/091-cert-blocker.yaml
index 659135117d1..c2db0c59004 100644
--- a/.github/ISSUE_TEMPLATE/091-cert-blocker.yaml
+++ b/.github/ISSUE_TEMPLATE/091-cert-blocker.yaml
@@ -85,6 +85,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf
- python
- raspi
diff --git a/.github/ISSUE_TEMPLATE/097-ci-test-failure.yaml b/.github/ISSUE_TEMPLATE/097-ci-test-failure.yaml
index a99f5a63617..280309e9eed 100644
--- a/.github/ISSUE_TEMPLATE/097-ci-test-failure.yaml
+++ b/.github/ISSUE_TEMPLATE/097-ci-test-failure.yaml
@@ -34,6 +34,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/098-build-issue.yaml b/.github/ISSUE_TEMPLATE/098-build-issue.yaml
index 5d1adb35548..4bd88bffed0 100644
--- a/.github/ISSUE_TEMPLATE/098-build-issue.yaml
+++ b/.github/ISSUE_TEMPLATE/098-build-issue.yaml
@@ -34,6 +34,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/099-github-workflow-issue.yaml b/.github/ISSUE_TEMPLATE/099-github-workflow-issue.yaml
index eefa5f0f984..337d334df47 100644
--- a/.github/ISSUE_TEMPLATE/099-github-workflow-issue.yaml
+++ b/.github/ISSUE_TEMPLATE/099-github-workflow-issue.yaml
@@ -34,6 +34,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/ISSUE_TEMPLATE/100-documentation-issue.yaml b/.github/ISSUE_TEMPLATE/100-documentation-issue.yaml
index 51971d1d010..c325312949c 100644
--- a/.github/ISSUE_TEMPLATE/100-documentation-issue.yaml
+++ b/.github/ISSUE_TEMPLATE/100-documentation-issue.yaml
@@ -34,6 +34,7 @@ body:
- freeRTOS
- IMX8
- k32w
+ - linux
- nrf connect
- nrf
- python
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 26dcae00d21..7c3cec524fa 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -77,41 +77,45 @@ jobs:
languages: "cpp"
queries: security-extended, security-and-quality
- name: Setup Build
+ if: github.event.pull_request.number == null
run: scripts/build/gn_gen.sh --args="chip_config_memory_debug_checks=true chip_config_memory_debug_dmalloc=false"
- name: Run Build
+ if: github.event.pull_request.number == null
run: scripts/run_in_build_env.sh "ninja -C ./out"
- name: Run Tests
+ if: github.event.pull_request.number == null
run: scripts/tests/gn_tests.sh
- name: Clean out build output
+ if: github.event.pull_request.number == null
run: rm -rf ./out
# Do not run below steps with CodeQL since we are getting "Out of runner space issues" with CodeQL and their added coverage is limited
- name: Set up Build Without Detail Logging
- if: inputs.run-codeql != true
+ if: inputs.run-codeql != true && github.event.pull_request.number == null
run: scripts/build/gn_gen.sh --args="chip_detail_logging=false"
- name: Run Build Without Detail Logging
- if: inputs.run-codeql != true
+ if: inputs.run-codeql != true && github.event.pull_request.number == null
run: scripts/run_in_build_env.sh "ninja -C ./out"
- name: Cleanout build output
- if: inputs.run-codeql != true
+ if: inputs.run-codeql != true && github.event.pull_request.number == null
run: rm -rf ./out
- name: Set up Build Without Progress Logging
- if: inputs.run-codeql != true
+ if: inputs.run-codeql != true && github.event.pull_request.number == null
run: scripts/build/gn_gen.sh --args="chip_detail_logging=false chip_progress_logging=false"
- name: Run Build Without Progress Logging
- if: inputs.run-codeql != true
+ if: inputs.run-codeql != true && github.event.pull_request.number == null
run: scripts/run_in_build_env.sh "ninja -C ./out"
- name: Clean out build output
- if: inputs.run-codeql != true
+ if: inputs.run-codeql != true && github.event.pull_request.number == null
run: rm -rf ./out
- name: Set up Build Without Error Logging
- if: inputs.run-codeql != true
+ if: inputs.run-codeql != true && github.event.pull_request.number == null
run: scripts/build/gn_gen.sh --args="chip_detail_logging=false chip_progress_logging=false chip_error_logging=false"
- name: Run Build Without Error Logging
- if: inputs.run-codeql != true
+ if: inputs.run-codeql != true && github.event.pull_request.number == null
run: scripts/run_in_build_env.sh "ninja -C ./out"
- name: Clean out build output
- if: inputs.run-codeql != true
+ if: inputs.run-codeql != true && github.event.pull_request.number == null
run: rm -rf ./out
- name: Set up Build Without Logging
if: inputs.run-codeql != true
@@ -428,7 +432,7 @@ jobs:
build_darwin:
name: Build on Darwin (clang, simulated)
- runs-on: macos-26
+ runs-on: namespace-profile-macos-26
if: github.actor != 'restyled-io[bot]' && inputs.run-codeql != true
steps:
@@ -518,7 +522,7 @@ jobs:
env:
TSAN_OPTIONS: "halt_on_error=1 suppressions=scripts/tests/chiptest/tsan-linux-suppressions.txt"
-
+
if: github.actor != 'restyled-io[bot]' && inputs.run-codeql != true
# [SL-ONLY] Use public runner on our ci
runs-on: ubuntu-latest
@@ -546,6 +550,8 @@ jobs:
apt-get update
apt-get install -y --no-install-recommends gnupg
- name: Upload coverage reports to Codecov with GitHub Action
- uses: codecov/codecov-action@v5
+ uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
+ with:
+ fail_ci_if_error: true
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
diff --git a/.github/workflows/check-data-model-directory-updates.yaml b/.github/workflows/check-data-model-directory-updates.yaml
index f97625bb7af..111056f4c7f 100644
--- a/.github/workflows/check-data-model-directory-updates.yaml
+++ b/.github/workflows/check-data-model-directory-updates.yaml
@@ -70,6 +70,11 @@ jobs:
run: |
scripts/run_in_python_env.sh out/venv 'python3 scripts/dm_xml_ci_change_enforcement.py data_model/1.5'
+ - name: Check for changes to the 1.6 data_model directory without a SHA update
+ if: (!contains(github.event.pull_request.labels.*.name, 'data-model-file-structural-change-dm-tt-use-only'))
+ run: |
+ scripts/run_in_python_env.sh out/venv 'python3 scripts/dm_xml_ci_change_enforcement.py data_model/1.6'
+
check-data_model-build-file:
name: Check that all data_model files are listed in the data_model_xmls.gni build file
runs-on: ubuntu-latest
diff --git a/.github/workflows/chef.yaml b/.github/workflows/chef.yaml
index f0f84a450ca..affcb901c20 100644
--- a/.github/workflows/chef.yaml
+++ b/.github/workflows/chef.yaml
@@ -145,7 +145,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-telink:181
+ image: ghcr.io/project-chip/chip-build-telink:185
volumes:
- "/:/runner-root-volume"
options: --user root
diff --git a/.github/workflows/darwin-tests.yaml b/.github/workflows/darwin-tests.yaml
index ae80605b600..e4aa128f61e 100644
--- a/.github/workflows/darwin-tests.yaml
+++ b/.github/workflows/darwin-tests.yaml
@@ -38,7 +38,7 @@ jobs:
strategy:
matrix:
include:
- - os: macos-26
+ - os: macos-26 # NOTE: must match `runs-on`
arch: arm64 # observed, not configured
dry-run: true
build_variant: no-ble-no-shell-asan-clang
@@ -56,7 +56,11 @@ jobs:
LSAN_OPTIONS: detect_leaks=1 malloc_context_size=40 suppressions=scripts/tests/chiptest/lsan-mac-suppressions.txt
if: github.actor != 'restyled-io[bot]'
- runs-on: ${{matrix.os}}
+ # Namespace MacOS 26 profile is configured as "26.3 with Xcode 26.2" currently
+ # This is not yet enabled since namespace still has high concurrency limit: we have
+ # 48 cores and are forced to 6 cores minimum.
+ # runs-on: namespace-profile-macos-26
+ runs-on: macos-26
steps:
- name: Checkout
diff --git a/.github/workflows/examples-bouffalolab.yaml b/.github/workflows/examples-bouffalolab.yaml
index 5b7d7cc2a6d..5853d1451c1 100644
--- a/.github/workflows/examples-bouffalolab.yaml
+++ b/.github/workflows/examples-bouffalolab.yaml
@@ -54,85 +54,99 @@ jobs:
if: ${{ !env.ACT }}
with:
gh-context: ${{ toJson(github) }}
+
- name: Build example BL602 Lighting App
run: |
./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py \
- --target bouffalolab-bl602dk-light-wifi-littlefs-mfd-rpc \
- build \
- --copy-artifacts-to out/artifacts \
- "
- - name: Prepare some bloat report from the previous builds
- run: |
+ "./scripts/build/build_examples.py --target bouffalolab-bl602dk-light-wifi-littlefs-mfd-rpc build"
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
bl602 bl602+mfd+littlefs+rpc lighting-app \
- out/artifacts/bouffalolab-bl602dk-light-wifi-littlefs-mfd-rpc/chip-bl602-lighting-example.out \
+ out/bouffalolab-bl602dk-light-wifi-littlefs-mfd-rpc/chip-bl602-lighting-example.out \
/tmp/bloat_reports/
- - name: Clean out build output
- run: rm -rf ./out
+ rm -rf ./out
- - name: Build example BL702 Lighting App
+ - name: Build example BL702 Lighting App (Ethernet)
+ if: github.event_name != 'pull_request'
run: |
./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py \
- --target bouffalolab-bl706dk-light-ethernet-easyflash \
- --target bouffalolab-bl706dk-light-wifi-littlefs \
- --target bouffalolab-bl706dk-light-thread-littlefs-mfd-rpc \
- build \
- --copy-artifacts-to out/artifacts \
- "
- - name: Prepare some bloat report from the previous builds
- run: |
+ "./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-ethernet-easyflash build "
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
bl702 bl702+eth lighting-app \
- out/artifacts/bouffalolab-bl706dk-light-ethernet-easyflash/chip-bl702-lighting-example.out \
+ out/bouffalolab-bl706dk-light-ethernet-easyflash/chip-bl702-lighting-example.out \
/tmp/bloat_reports/
+ rm -rf ./out
+
+ - name: Build example BL702 Lighting App (Wi-Fi)
+ run: |
+ ./scripts/run_in_build_env.sh \
+ "./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-wifi-littlefs-shell build "
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- bl702 bl702+wifi lighting-app \
- out/artifacts/bouffalolab-bl706dk-light-wifi-littlefs/chip-bl702-lighting-example.out \
+ bl702 bl702+eth lighting-app \
+ out/bouffalolab-bl706dk-light-wifi-littlefs-shell/chip-bl702-lighting-example.out \
/tmp/bloat_reports/
+ rm -rf ./out
+
+ - name: Build example BL702 Lighting App (Thread)
+ run: |
+ ./scripts/run_in_build_env.sh \
+ "./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-thread-littlefs-mfd-rpc build "
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- bl702 bl706+mfd+rpc+littlefs lighting-app \
- out/artifacts/bouffalolab-bl706dk-light-thread-littlefs-mfd-rpc/chip-bl702-lighting-example.out \
+ bl702 bl702+eth lighting-app \
+ out/bouffalolab-bl706dk-light-thread-littlefs-mfd-rpc/chip-bl702-lighting-example.out \
/tmp/bloat_reports/
- - name: Clean out build output
- run: rm -rf ./out
+ rm -rf ./out
- name: Build example BL702L Lighting App
- timeout-minutes: 30
+ if: github.event_name != 'pull_request'
run: |
./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py \
- --target bouffalolab-bl704ldk-light-thread-littlefs-mfd \
- build \
- --copy-artifacts-to out/artifacts \
- "
- - name: Prepare some bloat report from the previous builds
- run: |
+ "./scripts/build/build_examples.py --target bouffalolab-bl704ldk-light-thread-littlefs-mfd build "
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
bl702l bl702l+mfd+littlefs lighting-app \
- out/artifacts/bouffalolab-bl704ldk-light-thread-littlefs-mfd/chip-bl702l-lighting-example.out \
+ out/bouffalolab-bl704ldk-light-thread-littlefs-mfd/chip-bl702l-lighting-example.out \
/tmp/bloat_reports/
- - name: Clean out build output
- run: rm -rf ./out
+ rm -rf ./out
- name: Build example BL702L Contact Sensor
- timeout-minutes: 30
run: |
./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py \
- --target bouffalolab-bl704ldk-contact-sensor-thread-mtd-littlefs-mfd \
- build \
- --copy-artifacts-to out/artifacts \
- "
- - name: Prepare some bloat report from the previous builds
- run: |
+ "./scripts/build/build_examples.py --target bouffalolab-bl704ldk-contact-sensor-thread-mtd-littlefs-mfd build"
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
bl702l bl702l+mfd+littlefs contact-sensor-app \
- out/artifacts/bouffalolab-bl704ldk-contact-sensor-thread-mtd-littlefs-mfd/chip-bl702l-contact-sensor-example.out \
+ out/bouffalolab-bl704ldk-contact-sensor-thread-mtd-littlefs-mfd/chip-bl702l-contact-sensor-example.out \
+ /tmp/bloat_reports/
+ rm -rf ./out
+
+ - name: Build example BL616 Lighting App (Ethernet)
+ if: github.event_name != 'pull_request'
+ run: |
+ ./scripts/run_in_build_env.sh \
+ "./scripts/build/build_examples.py --target bouffalolab-bl616dk-light-ethernet-littlefs-mfd build "
+ .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
+ bl616 bl616+ethernet lighting-app \
+ out/bouffalolab-bl616dk-light-ethernet-littlefs-mfd/chip-bl616-lighting-example.out \
+ /tmp/bloat_reports/
+ rm -rf ./out
+
+ - name: Build example BL616 Lighting App (Wi-Fi)
+ run: |
+ ./scripts/run_in_build_env.sh \
+ "./scripts/build/build_examples.py --target bouffalolab-bl616dk-light-wifi-littlefs-mfd-shell build"
+ .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
+ bl616 bl616+wifi+shell lighting-app \
+ out/bouffalolab-bl616dk-light-wifi-littlefs-mfd-shell/chip-bl616-lighting-example.out \
+ /tmp/bloat_reports/
+ rm -rf ./out
+
+ - name: Build example BL616 Lighting App (Thread)
+ run: |
+ ./scripts/run_in_build_env.sh \
+ "./scripts/build/build_examples.py --target bouffalolab-bl616dk-light-thread-littlefs-mfd build"
+ .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
+ bl616 bl616+thread lighting-app \
+ out/bouffalolab-bl616dk-light-thread-littlefs-mfd/chip-bl616-lighting-example.out \
/tmp/bloat_reports/
- - name: Clean out build output
- run: rm -rf ./out
+ rm -rf ./out
- name: Uploading Size Reports
uses: ./.github/actions/upload-size-reports
diff --git a/.github/workflows/examples-esp32.yaml b/.github/workflows/examples-esp32.yaml
index 51d186dc701..054ae344bdf 100644
--- a/.github/workflows/examples-esp32.yaml
+++ b/.github/workflows/examples-esp32.yaml
@@ -156,6 +156,11 @@ jobs:
scripts/examples/esp_example.sh lighting-app sdkconfig.ext_plat.defaults
rm -rf examples/lighting-app/esp32/{build,managed_components}
+ - name: Build example All Devices App
+ run: |
+ scripts/examples/esp_example.sh all-devices-app sdkconfig.defaults
+ rm -rf examples/all-devices-app/esp32/{build,managed_components}
+
- name: Build example Energy Gateway App
if: steps.changed_paths.outputs.energy_gateway == 'true'
run: |
@@ -203,9 +208,6 @@ jobs:
- name: Build example Bridge App
run: scripts/examples/esp_example.sh bridge-app
- - name: Build example All Devices App
- run: scripts/examples/esp_example.sh all-devices-app sdkconfig.defaults
-
- name: Build example Persistent Storage App
run: scripts/examples/esp_example.sh persistent-storage sdkconfig.defaults
diff --git a/.github/workflows/examples-nxp.yaml b/.github/workflows/examples-nxp.yaml
index 0b375ca69fc..633f0f08a74 100644
--- a/.github/workflows/examples-nxp.yaml
+++ b/.github/workflows/examples-nxp.yaml
@@ -181,6 +181,7 @@ jobs:
./scripts/build/build_examples.py \
--target nxp-rw61x-zephyr-all-clusters \
--target nxp-rw61x-zephyr-thermostat \
+ --target nxp-rw61x-zephyr-thermostat-thread \
--target nxp-rw61x-zephyr-laundry-washer-factory \
build \
"
diff --git a/.github/workflows/examples-telink.yaml b/.github/workflows/examples-telink.yaml
index d99f06446cf..467893f95fc 100644
--- a/.github/workflows/examples-telink.yaml
+++ b/.github/workflows/examples-telink.yaml
@@ -39,7 +39,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-telink:181
+ image: ghcr.io/project-chip/chip-build-telink:185
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
@@ -142,12 +142,19 @@ jobs:
- name: Build example Telink (W91) Lighting App with OTA, Factory Data
# Run test for master and all PRs
+ #
+ # TODO: full logging is not enabled here; logging is reduced to progress/error
+ # (via the *-log-progress target) because with full logging this runs
+ # out of flash. This is generally NOT expected/intentional.
+ # At the time this was checked:
+ # - a 4K flash increase occurred due to the group cast cluster
+ # - flash runs out by about 1.2K
run: |
./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py --target 'telink-tlsr9118bdk40d-light-ota-factory-data' build"
+ "./scripts/build/build_examples.py --target 'telink-tlsr9118bdk40d-light-ota-factory-data-log-progress' build"
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
telink tlsr9118bdk40d lighting-app-ota-factory-data \
- out/telink-tlsr9118bdk40d-light-ota-factory-data/zephyr/zephyr.elf \
+ out/telink-tlsr9118bdk40d-light-ota-factory-data-log-progress/zephyr/zephyr.elf \
/tmp/bloat_reports/
- name: clean out build output (keep tools)
@@ -192,14 +199,14 @@ jobs:
- name: clean out build output (keep tools)
run: rm -rf ./out/telink*
- - name: Build example Telink (tl721x) Lighting App with OTA, Shell, Factory Data
+ - name: Build example Telink (tl721x) Lighting App with OTA (LZMA), Shell, Factory Data
# Run test for master and all PRs
run: |
./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py --target 'telink-tl7218x-light-ota-shell-factory-data' build"
+ "./scripts/build/build_examples.py --target 'telink-tl7218x-light-ota-compress-lzma-shell-factory-data' build"
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- telink tl7218x light-app-ota-shell-factory-data \
- out/telink-tl7218x-light-ota-shell-factory-data/zephyr/zephyr.elf \
+ telink tl7218x light-app-ota-compress-lzma-shell-factory-data \
+ out/telink-tl7218x-light-ota-compress-lzma-shell-factory-data/zephyr/zephyr.elf \
/tmp/bloat_reports/
- name: clean out build output (keep tools)
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index afd0834c711..29de30d592b 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -923,16 +923,16 @@ jobs:
- name: Build linux-x64-jf-control-app
run: >-
./scripts/run_in_build_env.sh "./scripts/build/build_examples.py
- --target linux-x64-jf-control-app
+ --target linux-x64-jf-control-app-${BUILD_VARIANT}-asan-clang
--pw-command-launcher=ccache build --copy-artifacts-to objdir-clone
- && rm -rf out/linux-x64-jf-control-app"
+ && rm -rf out/linux-x64-jf-control-app-${BUILD_VARIANT}-asan-clang"
- name: Build linux-x64-jf-admin-app
run: >-
./scripts/run_in_build_env.sh "./scripts/build/build_examples.py
- --target linux-x64-jf-admin-app
+ --target linux-x64-jf-admin-app-${BUILD_VARIANT}-asan-clang
--pw-command-launcher=ccache build --copy-artifacts-to objdir-clone
- && rm -rf out/linux-x64-jf-admin-app"
+ && rm -rf out/linux-x64-jf-admin-app-${BUILD_VARIANT}-asan-clang"
- name: ccache stats
run: ccache -s
@@ -1070,8 +1070,8 @@ jobs:
echo "FABRIC_ADMIN_APP: objdir-clone/linux-x64-fabric-admin-rpc-${BUILD_VARIANT}-clang/fabric-admin" >> /tmp/test_env.yaml
echo "FABRIC_BRIDGE_APP: objdir-clone/linux-x64-fabric-bridge-rpc-${BUILD_VARIANT}-clang/fabric-bridge-app" >> /tmp/test_env.yaml
echo "FABRIC_SYNC_APP: objdir-clone/linux-x64-fabric-sync-${BUILD_VARIANT}-clang/fabric-sync" >> /tmp/test_env.yaml
- echo "JF_ADMIN_APP: objdir-clone/linux-x64-jf-admin-app/jfa-app" >> /tmp/test_env.yaml
- echo "JF_CONTROL_APP: objdir-clone/linux-x64-jf-control-app/jfc-app" >> /tmp/test_env.yaml
+ echo "JF_ADMIN_APP: objdir-clone/linux-x64-jf-admin-app-${BUILD_VARIANT}-asan-clang/jfa-app" >> /tmp/test_env.yaml
+ echo "JF_CONTROL_APP: objdir-clone/linux-x64-jf-control-app-${BUILD_VARIANT}-asan-clang/jfc-app" >> /tmp/test_env.yaml
echo "LIGHTING_APP_NO_UNIQUE_ID: objdir-clone/linux-x64-light-data-model-no-unique-id-${BUILD_VARIANT}-clang/chip-lighting-app" >> /tmp/test_env.yaml
echo "LIT_ICD_APP: objdir-clone/linux-x64-lit-icd-${BUILD_VARIANT}-tsan-clang-test/lit-icd-app" >> /tmp/test_env.yaml
echo "NETWORK_MANAGEMENT_APP: objdir-clone/linux-x64-network-manager-${BUILD_VARIANT}-tsan-clang-test/matter-network-manager-app" >> /tmp/test_env.yaml
@@ -1110,6 +1110,7 @@ jobs:
scripts/run_in_python_env.sh out/venv 'python3 src/python_testing/test_testing/TestSpecParsingNamespace.py'
scripts/run_in_python_env.sh out/venv 'python3 src/python_testing/test_testing/TestSpecParsingSelection.py'
scripts/run_in_python_env.sh out/venv 'python3 src/python_testing/test_testing/TestSpecParsingSupport.py'
+ scripts/run_in_python_env.sh out/venv 'scripts/tests/run_python_test.py --load-from-env /tmp/test_env.yaml --script src/python_testing/test_testing/TestFactoryResetRequests.py'
scripts/run_in_python_env.sh out/venv 'PYTHONPATH=src/python_testing:$PYTHONPATH python3 -m unittest discover -s src/python_testing/mdns_discovery/tests -p "test_*.py"'
- name: Run Tests (individual)
if: ${{matrix.filter == ''}}
diff --git a/.gitmodules b/.gitmodules
index 986da0122d5..c365b017f31 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -227,6 +227,7 @@
url = https://github.com/bouffalolab/bl_iot_sdk_tiny.git
branch = main
platforms = bouffalolab
+ recursive = true
[submodule "third_party/libwebsockets/repo"]
path = third_party/libwebsockets/repo
url = https://github.com/warmcat/libwebsockets
@@ -348,6 +349,11 @@
path = third_party/uriparser/repo
url = https://github.com/uriparser/uriparser.git
branch = uriparser-1.0.0
+[submodule "third_party/bouffalolab/repo_bouffalo_sdk"]
+ path = third_party/bouffalolab/repo_bouffalo_sdk
+ url = https://github.com/bouffalolab/bouffalo_sdk.git
+ branch = main
+ platforms = bouffalolab
[submodule "third_party/silabs/aws_ota_sdk/ota-for-aws-iot-embedded-sdk"]
path = third_party/silabs/aws_ota_sdk/ota-for-aws-iot-embedded-sdk
url = https://github.com/aws/ota-for-aws-iot-embedded-sdk.git
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index d5c33b8525b..3e6ddc51331 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -447,11 +447,15 @@ config("runtime_default") {
config("sanitize_address") {
defines = []
cflags = [
- "-fsanitize-coverage=inline-8bit-counters,trace-cmp",
- "-fno-sanitize-coverage=pc-table",
"-fsanitize=address",
"-fno-omit-frame-pointer",
]
+ if (is_clang) {
+ cflags += [
+ "-fsanitize-coverage=inline-8bit-counters,trace-cmp",
+ "-fno-sanitize-coverage=pc-table",
+ ]
+ }
ldflags = cflags
if ((target_os == "mac" || target_os == "ios") && !is_clang) {
@@ -478,6 +482,7 @@ config("sanitize_undefined_behavior") {
"-fvisibility=hidden",
"-fsanitize=undefined",
"-fsanitize=float-divide-by-zero",
+ "-fsanitize=integer-divide-by-zero",
]
if (is_clang) {
cflags += [
diff --git a/config/common/cmake/Kconfig b/config/common/cmake/Kconfig
index 291d18b3a18..2ff099c1c2b 100644
--- a/config/common/cmake/Kconfig
+++ b/config/common/cmake/Kconfig
@@ -382,6 +382,30 @@ choice CHIP_CRYPTO
endchoice
+choice CHIP_CRYPTO_SPAKE2P
+ prompt "CHIP Crypto SPAKE2+ Selection"
+ default CHIP_CRYPTO_SPAKE2P_MBEDTLS
+
+ config CHIP_CRYPTO_SPAKE2P_MBEDTLS
+ bool "SPAKE2+ default mbedtls"
+ help
+ Enables the implementation of the SPAKE2+ protocol
+ based on the mbedTLS crypto API.
+
+ config CHIP_CRYPTO_SPAKE2P_PSA
+ bool "SPAKE2+ default PSA"
+ help
+ Enables the implementation of the SPAKE2+ protocol
+ based on the PSA API.
+
+ config CHIP_CRYPTO_SPAKE2P_CUSTOM
+ bool "SPAKE2+ custom"
+ help
+ Enables the implementation of the SPAKE2+ protocol
+ based on custom API.
+
+endchoice
+
config CHIP_CRYPTO_PSA_AEAD_SINGLE_PART
bool "Use PSA AEAD single-part API"
depends on CHIP_CRYPTO_PSA
diff --git a/config/common/cmake/chip_gn_kconfig_defaults.cmake b/config/common/cmake/chip_gn_kconfig_defaults.cmake
index 29dae8faffa..ad87b499dea 100644
--- a/config/common/cmake/chip_gn_kconfig_defaults.cmake
+++ b/config/common/cmake/chip_gn_kconfig_defaults.cmake
@@ -30,7 +30,7 @@ matter_add_gn_arg_bool("chip_inet_config_enable_tcp_endpoint" CONFIG_CHIP_INET_E
matter_add_gn_arg_bool("chip_error_logging" CONFIG_MATTER_LOG_LEVEL GREATER_EQUAL 1)
matter_add_gn_arg_bool("chip_progress_logging" CONFIG_MATTER_LOG_LEVEL GREATER_EQUAL 3)
matter_add_gn_arg_bool("chip_detail_logging" CONFIG_MATTER_LOG_LEVEL GREATER_EQUAL 4)
-matter_add_gn_arg_bool("chip_automation_logging" FALSE)
+matter_add_gn_arg_bool("chip_automation_logging" CONFIG_MATTER_LOG_LEVEL GREATER_EQUAL 5)
matter_add_gn_arg_bool("chip_malloc_sys_heap" CONFIG_CHIP_MALLOC_SYS_HEAP)
matter_add_gn_arg_bool("chip_enable_wifi" CONFIG_CHIP_WIFI)
matter_add_gn_arg_bool("chip_enable_ethernet" CONFIG_CHIP_ETHERNET)
@@ -50,6 +50,7 @@ if(CONFIG_NET_L2_OPENTHREAD)
matter_add_gn_arg("chip_device_config_thread_network_endpoint_id" ${CONFIG_CHIP_THREAD_NETWORK_ENDPOINT_ID})
matter_add_gn_arg_bool("chip_openthread_ftd" CONFIG_CHIP_OPENTHREAD_FTD)
matter_add_gn_arg_bool("chip_system_config_use_openthread_inet_endpoints" CONFIG_CHIP_USE_OT_ENDPOINT)
+ matter_add_gn_arg_bool ("chip_system_config_use_sockets" NOT CONFIG_CHIP_USE_OT_ENDPOINT AND NOT CONFIG_CHIP_WITH_LWIP)
endif()
if(CONFIG_DEBUG)
@@ -74,6 +75,14 @@ elseif(CONFIG_CHIP_CRYPTO_PSA)
matter_add_gn_arg_string("chip_crypto" "psa")
endif()
+if(CONFIG_CHIP_CRYPTO_SPAKE2P_MBEDTLS)
+ matter_add_gn_arg_string("chip_crypto_spake2p" "mbedtls")
+elseif(CONFIG_CHIP_CRYPTO_SPAKE2P_PSA)
+ matter_add_gn_arg_string("chip_crypto_spake2p" "psa")
+elseif(CONFIG_CHIP_CRYPTO_SPAKE2P_CUSTOM)
+ matter_add_gn_arg_string("chip_crypto_spake2p" "custom")
+endif()
+
if(NOT CONFIG_CHIP_DEBUG_SYMBOLS)
matter_add_gn_arg_string("symbol_level" "0")
endif()
diff --git a/config/nrfconnect/chip-module/CMakeLists.txt b/config/nrfconnect/chip-module/CMakeLists.txt
index 205391c8b19..2337e292f3e 100644
--- a/config/nrfconnect/chip-module/CMakeLists.txt
+++ b/config/nrfconnect/chip-module/CMakeLists.txt
@@ -192,11 +192,15 @@ endif()
if (CONFIG_CHIP_CRYPTO_PSA)
matter_add_gn_arg_string("chip_crypto" "psa")
- matter_add_gn_arg_bool ("chip_crypto_psa_spake2p" CONFIG_PSA_WANT_ALG_SPAKE2P_MATTER)
matter_add_gn_arg_bool ("chip_crypto_psa_aead_single_part" CONFIG_CHIP_CRYPTO_PSA_AEAD_SINGLE_PART)
matter_add_gn_arg_bool ("chip_use_cracen_kmu" CONFIG_CHIP_STORE_KEYS_IN_KMU)
endif()
+
+if(CONFIG_CHIP_CRYPTO_PSA AND CONFIG_PSA_WANT_ALG_SPAKE2P_MATTER)
+ matter_add_gn_arg_string("chip_crypto_spake2p" "psa")
+endif()
+
if (BOARD STREQUAL "native_sim")
matter_add_gn_arg_string("target_cpu" "x86")
elseif (BOARD STREQUAL "native_sim/native/64")
diff --git a/config/nxp/chip-cmake-freertos/Kconfig b/config/nxp/chip-cmake-freertos/Kconfig
index ace3c5512bb..80c93763e71 100644
--- a/config/nxp/chip-cmake-freertos/Kconfig
+++ b/config/nxp/chip-cmake-freertos/Kconfig
@@ -159,37 +159,32 @@ config CHIP_SE05X_RND_GEN
help
Enable SE05x Secure element for offloading random number generation.
-config CHIP_SE05X_GENERATE_EC_KEY
- bool "Enable SE05x Secure element for EC key Generate"
- default y
- help
- Enable SE05x Secure element for EC key Generate.
-
-config CHIP_SE05X_ECDSA_VERIFY
- bool "Enable SE05x Secure element for ECDSA Verify"
- default y
- help
- Enable SE05x Secure element for ECDSA Verify.
-
-config CHIP_SE05X_PBKDF2_SHA256
- bool "Enable SE05x Secure element for PBKDF2_SHA256"
+config CHIP_SE05X_DEVICE_ATTESTATION
+ bool "Enable SE05x Secure element for offloading Device attestation Sign"
help
- Enable SE05x Secure element for PBKDF2_SHA256.
+ Enable SE05x Secure element for offloading Device attestation Sign.
-config CHIP_SE05X_HKDF_SHA256
- bool "Enable SE05x Secure element for HKDF_SHA256"
+config CHIP_SE05X_SPAKE_VERIFIER_USE_TP_VALUES
+ bool "Enable SE05x Secure element for offloading spake verifier and use the trust provisioned w0 and L values"
+ depends on CHIP_SE05X_SPAKE_VERIFIER
+ depends on CHIP_FACTORY_DATA
+ default n
help
- Enable SE05x Secure element for HKDF_SHA256.
+ Enable SE05x Secure element for offloading spake verifier and use the trust provisioned w0 and L values. This
+ should be enable only if factory data is configured.
-config CHIP_SE05X_HMAC_SHA256
- bool "Enable SE05x Secure element for HMAC_SHA256"
+config CHIP_SE05X_SPAKE_VERIFIER_TP_SET_NO
+ int "SE05x Trust Provisioned spake verifier set number"
+ default 1
+ range 1 3
help
- Enable SE05x Secure element for HMAC_SHA256.
+ SE05x Trust Provisioned spake verifier set number.
-config CHIP_SE05X_DEVICE_ATTESTATION
- bool "Enable SE05x Secure element for offloading Device attestation Sign"
+config CHIP_SE05X_SPAKE_VERIFIER_TP_ITER_CNT
+ int "SE05x Trust Provisioned spake verifier iteration count"
+ default 1000
help
- Enable SE05x Secure element for offloading Device attestation Sign.
+ SE05x Trust Provisioned spake verifier iteration count.
endif # CHIP_SE05X
diff --git a/config/nxp/chip-cmake-freertos/Kconfig.defaults b/config/nxp/chip-cmake-freertos/Kconfig.defaults
index 4cac8e3e95b..e4983a6041b 100644
--- a/config/nxp/chip-cmake-freertos/Kconfig.defaults
+++ b/config/nxp/chip-cmake-freertos/Kconfig.defaults
@@ -29,6 +29,10 @@ choice CHIP_CRYPTO
default CHIP_CRYPTO_MBEDTLS if CHIP_NXP_PLATFORM_RW61X || CHIP_NXP_PLATFORM_RT1170 || CHIP_NXP_PLATFORM_RT1060
endchoice
+choice CHIP_CRYPTO_SPAKE2P
+ default CHIP_CRYPTO_SPAKE2P_CUSTOM if CHIP_NXP_PLATFORM_MCXW72 && CHIP_CRYPTO_PSA
+endchoice
+
config CHIP_WIFI
default y if CHIP_NXP_PLATFORM_RW61X || CHIP_NXP_PLATFORM_RT1170 || CHIP_NXP_PLATFORM_RT1060
@@ -51,6 +55,7 @@ config CHIP_IPV4
config CHIP_TASK_STACK_SIZE
default 13000 if CHIP_SE05X # Increase is do to the additional middle-ware APDU buffers
+ default 6144 if CHIP_NXP_PLATFORM_MCXW72
default 10240
config CHIP_INET_ENABLE_TCP_ENDPOINT
diff --git a/config/nxp/chip-module/Kconfig.defaults b/config/nxp/chip-module/Kconfig.defaults
index fa4d14355bc..e069b7c6132 100644
--- a/config/nxp/chip-module/Kconfig.defaults
+++ b/config/nxp/chip-module/Kconfig.defaults
@@ -103,9 +103,23 @@ config LOG
if LOG
choice LOG_MODE
- default LOG_MODE_MINIMAL
+ default LOG_MODE_MINIMAL if !NET_L2_OPENTHREAD
+ default LOG_MODE_DEFERRED
endchoice
+if LOG_MODE_DEFERRED
+
+config LOG_BACKEND_UART
+ default y
+
+config SHELL_LOG_BACKEND
+ default n
+
+endif # LOG_MODE_DEFERRED
+
+config LOG_BUFFER_SIZE
+ default 6144 if NET_L2_OPENTHREAD
+
choice MATTER_LOG_LEVEL_CHOICE
default MATTER_LOG_LEVEL_DBG
endchoice
@@ -152,6 +166,7 @@ config POSIX_MAX_FDS
# Application stack size
config MAIN_STACK_SIZE
+ default 6144 if NET_L2_OPENTHREAD
default 3072
config INIT_STACKS
@@ -219,6 +234,60 @@ config NET_BUF_TX_COUNT
config NET_BUF_DATA_SIZE
default 256
+if NET_L2_OPENTHREAD
+
+config HDLC_RCP_IF
+ default y if SOC_FAMILY_NXP_RW
+
+config OPENTHREAD_THREAD_STACK_SIZE
+ default 6144
+
+# Use the platform-provided heap
+config OPENTHREAD_EXTERNAL_HEAP
+ default y
+
+# Enable ping sender feature
+config OPENTHREAD_PING_SENDER
+ default y
+
+# Enable SLAAC feature for IPv6 address auto-configuration
+config OPENTHREAD_SLAAC
+ default y
+
+# Increase number of message buffers in the buffer pool
+config OPENTHREAD_NUM_MESSAGE_BUFFERS
+ default 256
+
+# Enable IPv6 fragmentation support
+config OPENTHREAD_IP6_FRAGM
+ default y
+
+choice OPENTHREAD_LOG_LEVEL_CHOICE
+ default OPENTHREAD_LOG_LEVEL_DEBG
+endchoice
+
+choice OPENTHREAD_STACK_VERSION
+ default OPENTHREAD_THREAD_VERSION_1_4
+endchoice
+
+config OPENTHREAD_PARENT_SEARCH
+ default y
+
+if OPENTHREAD_PARENT_SEARCH
+
+config OPENTHREAD_PARENT_SEARCH_RSS_THRESHOLD
+ default -45
+
+endif # OPENTHREAD_PARENT_SEARCH
+
+config OPENTHREAD_MLE_INFORM_PREVIOUS_PARENT_ON_REATTACH
+ default y
+
+config CHIP_USE_OT_ENDPOINT
+ default y
+
+endif # NET_L2_OPENTHREAD
+
# Bluetooth Low Energy configs
config BT
@@ -271,6 +340,7 @@ config BT_BUF_ACL_TX_SIZE
default 251
config BT_RX_STACK_SIZE
+ default 2560 if NET_L2_OPENTHREAD
default 2048 if NO_OPTIMIZATIONS && DEBUG
default 1700
@@ -371,9 +441,6 @@ config WIFI_NM_WPA_SUPPLICANT_WQ_STACK_SIZE
config WIFI_NM_WPA_SUPPLICANT_INF_MON
default n
-config SYSTEM_WORKQUEUE_STACK_SIZE
- default 2048
-
config NET_TCP_WORKQ_STACK_SIZE
default 2048
@@ -413,28 +480,31 @@ config NET_MAX_ROUTERS
config NET_MAX_CONN
default 10
+config ETH_DRIVER
+ default n
+
+endif
+
config SHELL_STACK_SIZE
default 1536
+config LOG_PROCESS_THREAD_STACK_SIZE
+ default 1536
+
config HEAP_MEM_POOL_SIZE
default 122880
config CHIP_MALLOC_SYS_HEAP_SIZE
default 28672 # 28 kB
-config ETH_DRIVER
- default n
-
-endif
-
-if CHIP_ETHERNET || CHIP_WIFI
+config SYSTEM_WORKQUEUE_STACK_SIZE
+ default 3072 if NET_L2_OPENTHREAD
+ default 2048 if CHIP_WIFI
choice LIBC_IMPLEMENTATION
default NEWLIB_LIBC
endchoice
-endif
-
if CHIP_ETHERNET
config NET_SOCKETS_POLL_MAX
diff --git a/config/nxp/chip-module/Kconfig.features b/config/nxp/chip-module/Kconfig.features
index e389a91a47b..7cc7e7d2dcf 100644
--- a/config/nxp/chip-module/Kconfig.features
+++ b/config/nxp/chip-module/Kconfig.features
@@ -21,7 +21,7 @@ if CHIP
# See config/common/cmake/Kconfig for full definition
config CHIP_WIFI
- default y
+ default y if !NET_L2_OPENTHREAD
select WIFI
select WIFI_NXP
select WIFI_NM_WPA_SUPPLICANT
diff --git a/config/nxp/cmake/Kconfig.matter.nxp b/config/nxp/cmake/Kconfig.matter.nxp
index bbdf7ff3d25..661090e86ca 100644
--- a/config/nxp/cmake/Kconfig.matter.nxp
+++ b/config/nxp/cmake/Kconfig.matter.nxp
@@ -116,6 +116,16 @@ config CHIP_ENABLE_SECURE_WHOLE_FACTORY_DATA
help
This mode allows to protect the matter factory dataset with a AES key protected in the secure element.
+config CHIP_FACTORY_DATA_PROVIDER_CUSTOM_SINGLETON_IMPL
+ bool "Custom factory data provider singleton implementation"
+ default y if CHIP_SE05X_SPAKE_VERIFIER_USE_TP_VALUES || CHIP_SE05X_DEVICE_ATTESTATION
+ help
+ Allows to use a custom factory data provider singleton implementation.
+ If enabled, the user must define a custom singleton implementation.
+ Such feature is useful when an application needs to customize the factory data provider behavior.
+ The application can provide its own singleton, for example by creating
+ a class that inherits from FactoryDataProviderImpl and overrides only the methods that need customization.
+
endif
if CHIP_FACTORY_DATA_BUILD
diff --git a/config/telink/chip-module/CMakeLists.txt b/config/telink/chip-module/CMakeLists.txt
index fb2d0606e3b..459d2a9aae2 100644
--- a/config/telink/chip-module/CMakeLists.txt
+++ b/config/telink/chip-module/CMakeLists.txt
@@ -132,6 +132,29 @@ if (CONFIG_CHIP_ROTATING_DEVICE_ID)
matter_add_gn_arg_bool("chip_enable_additional_data_advertising" TRUE)
endif()
+if(${TLNK_LOG_LEVEL} MATCHES all)
+ matter_add_gn_arg_bool("chip_logging" TRUE)
+ matter_add_gn_arg_bool("chip_error_logging" TRUE)
+ matter_add_gn_arg_bool("chip_progress_logging" TRUE)
+ matter_add_gn_arg_bool("chip_detail_logging" TRUE)
+ matter_add_gn_arg_bool("chip_automation_logging" TRUE)
+elseif(${TLNK_LOG_LEVEL} MATCHES progress)
+ matter_add_gn_arg_bool("chip_logging" TRUE)
+ matter_add_gn_arg_bool("chip_error_logging" TRUE)
+ matter_add_gn_arg_bool("chip_progress_logging" TRUE)
+ matter_add_gn_arg_bool("chip_detail_logging" FALSE)
+ matter_add_gn_arg_bool("chip_automation_logging" FALSE)
+elseif(${TLNK_LOG_LEVEL} MATCHES error)
+ matter_add_gn_arg_bool("chip_logging" TRUE)
+ matter_add_gn_arg_bool("chip_error_logging" TRUE)
+ matter_add_gn_arg_bool("chip_progress_logging" FALSE)
+ matter_add_gn_arg_bool("chip_detail_logging" FALSE)
+ matter_add_gn_arg_bool("chip_automation_logging" FALSE)
+elseif(${TLNK_LOG_LEVEL} MATCHES none)
+ matter_add_gn_arg_bool("chip_logging" FALSE)
+endif()
+
+
if (CONFIG_WIFI_W91)
matter_add_gn_arg_string("chip_mdns" "minimal")
elseif (CONFIG_NET_L2_OPENTHREAD)
diff --git a/config/zephyr/Kconfig b/config/zephyr/Kconfig
index 3534cbdb391..7c876c58d71 100644
--- a/config/zephyr/Kconfig
+++ b/config/zephyr/Kconfig
@@ -51,6 +51,7 @@ config CHIP_OTA_REQUESTOR_REBOOT_ON_APPLY
# See config/common/cmake/Kconfig for full definition
config CHIP_LIB_SHELL
imply SHELL
+ imply OPENTHREAD_SHELL if NET_L2_OPENTHREAD
if NET_L2_OPENTHREAD
diff --git a/data_model/1.6/clusters/ACL-Cluster.xml b/data_model/1.6/clusters/ACL-Cluster.xml
new file mode 100644
index 00000000000..8ec0876b756
--- /dev/null
+++ b/data_model/1.6/clusters/ACL-Cluster.xml
@@ -0,0 +1,452 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/AccountLogin.xml b/data_model/1.6/clusters/AccountLogin.xml
new file mode 100644
index 00000000000..30d19b20517
--- /dev/null
+++ b/data_model/1.6/clusters/AccountLogin.xml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ActionsCluster.xml b/data_model/1.6/clusters/ActionsCluster.xml
new file mode 100644
index 00000000000..d60bcd1e2d9
--- /dev/null
+++ b/data_model/1.6/clusters/ActionsCluster.xml
@@ -0,0 +1,413 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/AdminCommissioningCluster.xml b/data_model/1.6/clusters/AdminCommissioningCluster.xml
new file mode 100644
index 00000000000..dc059a4cceb
--- /dev/null
+++ b/data_model/1.6/clusters/AdminCommissioningCluster.xml
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/AirQuality.xml b/data_model/1.6/clusters/AirQuality.xml
new file mode 100644
index 00000000000..1146fff31a5
--- /dev/null
+++ b/data_model/1.6/clusters/AirQuality.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/AlarmBase.xml b/data_model/1.6/clusters/AlarmBase.xml
new file mode 100644
index 00000000000..a8ac0426a74
--- /dev/null
+++ b/data_model/1.6/clusters/AlarmBase.xml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ApplicationBasic.xml b/data_model/1.6/clusters/ApplicationBasic.xml
new file mode 100644
index 00000000000..8ea20956843
--- /dev/null
+++ b/data_model/1.6/clusters/ApplicationBasic.xml
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ApplicationLauncher.xml b/data_model/1.6/clusters/ApplicationLauncher.xml
new file mode 100644
index 00000000000..82450d0e4cc
--- /dev/null
+++ b/data_model/1.6/clusters/ApplicationLauncher.xml
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/AudioOutput.xml b/data_model/1.6/clusters/AudioOutput.xml
new file mode 100644
index 00000000000..4d2b2e7f68d
--- /dev/null
+++ b/data_model/1.6/clusters/AudioOutput.xml
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/BasicInformationCluster.xml b/data_model/1.6/clusters/BasicInformationCluster.xml
new file mode 100644
index 00000000000..cee3b216466
--- /dev/null
+++ b/data_model/1.6/clusters/BasicInformationCluster.xml
@@ -0,0 +1,492 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Binding-Cluster.xml b/data_model/1.6/clusters/Binding-Cluster.xml
new file mode 100644
index 00000000000..81e96e25bb3
--- /dev/null
+++ b/data_model/1.6/clusters/Binding-Cluster.xml
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/BooleanState.xml b/data_model/1.6/clusters/BooleanState.xml
new file mode 100644
index 00000000000..ed2e8933a20
--- /dev/null
+++ b/data_model/1.6/clusters/BooleanState.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/BooleanStateConfiguration.xml b/data_model/1.6/clusters/BooleanStateConfiguration.xml
new file mode 100644
index 00000000000..dc035c6b87b
--- /dev/null
+++ b/data_model/1.6/clusters/BooleanStateConfiguration.xml
@@ -0,0 +1,262 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/BridgedDeviceBasicInformationCluster.xml b/data_model/1.6/clusters/BridgedDeviceBasicInformationCluster.xml
new file mode 100644
index 00000000000..6464fb90566
--- /dev/null
+++ b/data_model/1.6/clusters/BridgedDeviceBasicInformationCluster.xml
@@ -0,0 +1,522 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/CameraAVSettingsUserLevelManagement.xml b/data_model/1.6/clusters/CameraAVSettingsUserLevelManagement.xml
new file mode 100644
index 00000000000..70c42a322c4
--- /dev/null
+++ b/data_model/1.6/clusters/CameraAVSettingsUserLevelManagement.xml
@@ -0,0 +1,552 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ multiply
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ multiply
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ multiply
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/CameraAVStreamManagement.xml b/data_model/1.6/clusters/CameraAVStreamManagement.xml
new file mode 100644
index 00000000000..1b2f249d4b0
--- /dev/null
+++ b/data_model/1.6/clusters/CameraAVStreamManagement.xml
@@ -0,0 +1,1164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Channel.xml b/data_model/1.6/clusters/Channel.xml
new file mode 100644
index 00000000000..d51713fc67d
--- /dev/null
+++ b/data_model/1.6/clusters/Channel.xml
@@ -0,0 +1,537 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Chime.xml b/data_model/1.6/clusters/Chime.xml
new file mode 100644
index 00000000000..b21e16789d9
--- /dev/null
+++ b/data_model/1.6/clusters/Chime.xml
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ClosureControl.xml b/data_model/1.6/clusters/ClosureControl.xml
new file mode 100644
index 00000000000..b7e3bfd50fe
--- /dev/null
+++ b/data_model/1.6/clusters/ClosureControl.xml
@@ -0,0 +1,390 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ClosureDimension.xml b/data_model/1.6/clusters/ClosureDimension.xml
new file mode 100644
index 00000000000..020c81ae6a5
--- /dev/null
+++ b/data_model/1.6/clusters/ClosureDimension.xml
@@ -0,0 +1,464 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ColorControl.xml b/data_model/1.6/clusters/ColorControl.xml
new file mode 100644
index 00000000000..b6108945d6b
--- /dev/null
+++ b/data_model/1.6/clusters/ColorControl.xml
@@ -0,0 +1,1361 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/CommissionerControlCluster.xml b/data_model/1.6/clusters/CommissionerControlCluster.xml
new file mode 100644
index 00000000000..6082e2f905d
--- /dev/null
+++ b/data_model/1.6/clusters/CommissionerControlCluster.xml
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/CommodityMetering.xml b/data_model/1.6/clusters/CommodityMetering.xml
new file mode 100644
index 00000000000..785d9112663
--- /dev/null
+++ b/data_model/1.6/clusters/CommodityMetering.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/CommodityPrice.xml b/data_model/1.6/clusters/CommodityPrice.xml
new file mode 100644
index 00000000000..56ee9dc642d
--- /dev/null
+++ b/data_model/1.6/clusters/CommodityPrice.xml
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/CommodityTariff.xml b/data_model/1.6/clusters/CommodityTariff.xml
new file mode 100644
index 00000000000..4638a72546c
--- /dev/null
+++ b/data_model/1.6/clusters/CommodityTariff.xml
@@ -0,0 +1,604 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ConcentrationMeasurement.xml b/data_model/1.6/clusters/ConcentrationMeasurement.xml
new file mode 100644
index 00000000000..190ffa82d2b
--- /dev/null
+++ b/data_model/1.6/clusters/ConcentrationMeasurement.xml
@@ -0,0 +1,301 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ContentAppObserver.xml b/data_model/1.6/clusters/ContentAppObserver.xml
new file mode 100644
index 00000000000..d7fa594a328
--- /dev/null
+++ b/data_model/1.6/clusters/ContentAppObserver.xml
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ContentControl.xml b/data_model/1.6/clusters/ContentControl.xml
new file mode 100644
index 00000000000..7f4237f66bf
--- /dev/null
+++ b/data_model/1.6/clusters/ContentControl.xml
@@ -0,0 +1,517 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ContentLauncher.xml b/data_model/1.6/clusters/ContentLauncher.xml
new file mode 100644
index 00000000000..588ff7f34b0
--- /dev/null
+++ b/data_model/1.6/clusters/ContentLauncher.xml
@@ -0,0 +1,401 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Descriptor-Cluster.xml b/data_model/1.6/clusters/Descriptor-Cluster.xml
new file mode 100644
index 00000000000..475dd6f8d57
--- /dev/null
+++ b/data_model/1.6/clusters/Descriptor-Cluster.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/DeviceEnergyManagement.xml b/data_model/1.6/clusters/DeviceEnergyManagement.xml
new file mode 100644
index 00000000000..87946abe764
--- /dev/null
+++ b/data_model/1.6/clusters/DeviceEnergyManagement.xml
@@ -0,0 +1,710 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/DiagnosticLogsCluster.xml b/data_model/1.6/clusters/DiagnosticLogsCluster.xml
new file mode 100644
index 00000000000..74031d793ba
--- /dev/null
+++ b/data_model/1.6/clusters/DiagnosticLogsCluster.xml
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/DiagnosticsEthernet.xml b/data_model/1.6/clusters/DiagnosticsEthernet.xml
new file mode 100644
index 00000000000..dcbb3b8c5d6
--- /dev/null
+++ b/data_model/1.6/clusters/DiagnosticsEthernet.xml
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/DiagnosticsGeneral.xml b/data_model/1.6/clusters/DiagnosticsGeneral.xml
new file mode 100644
index 00000000000..f3dc8ab851a
--- /dev/null
+++ b/data_model/1.6/clusters/DiagnosticsGeneral.xml
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/DiagnosticsSoftware.xml b/data_model/1.6/clusters/DiagnosticsSoftware.xml
new file mode 100644
index 00000000000..e5331844a66
--- /dev/null
+++ b/data_model/1.6/clusters/DiagnosticsSoftware.xml
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/DiagnosticsThread.xml b/data_model/1.6/clusters/DiagnosticsThread.xml
new file mode 100644
index 00000000000..c14db197e1c
--- /dev/null
+++ b/data_model/1.6/clusters/DiagnosticsThread.xml
@@ -0,0 +1,768 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/DiagnosticsWiFi.xml b/data_model/1.6/clusters/DiagnosticsWiFi.xml
new file mode 100644
index 00000000000..71b69525b88
--- /dev/null
+++ b/data_model/1.6/clusters/DiagnosticsWiFi.xml
@@ -0,0 +1,269 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/DishwasherAlarm.xml b/data_model/1.6/clusters/DishwasherAlarm.xml
new file mode 100644
index 00000000000..0df7564b04a
--- /dev/null
+++ b/data_model/1.6/clusters/DishwasherAlarm.xml
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/DoorLock.xml b/data_model/1.6/clusters/DoorLock.xml
new file mode 100644
index 00000000000..f8353b20d18
--- /dev/null
+++ b/data_model/1.6/clusters/DoorLock.xml
@@ -0,0 +1,2118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/EcosystemInformationCluster.xml b/data_model/1.6/clusters/EcosystemInformationCluster.xml
new file mode 100644
index 00000000000..8a2e5e934a0
--- /dev/null
+++ b/data_model/1.6/clusters/EcosystemInformationCluster.xml
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ElectricalEnergyMeasurement.xml b/data_model/1.6/clusters/ElectricalEnergyMeasurement.xml
new file mode 100644
index 00000000000..5a6f1707e25
--- /dev/null
+++ b/data_model/1.6/clusters/ElectricalEnergyMeasurement.xml
@@ -0,0 +1,467 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ElectricalGridConditions.xml b/data_model/1.6/clusters/ElectricalGridConditions.xml
new file mode 100644
index 00000000000..11317fc3657
--- /dev/null
+++ b/data_model/1.6/clusters/ElectricalGridConditions.xml
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ElectricalPowerMeasurement.xml b/data_model/1.6/clusters/ElectricalPowerMeasurement.xml
new file mode 100644
index 00000000000..3349108215d
--- /dev/null
+++ b/data_model/1.6/clusters/ElectricalPowerMeasurement.xml
@@ -0,0 +1,645 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/EnergyEVSE.xml b/data_model/1.6/clusters/EnergyEVSE.xml
new file mode 100644
index 00000000000..8951f4228c7
--- /dev/null
+++ b/data_model/1.6/clusters/EnergyEVSE.xml
@@ -0,0 +1,637 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/EnergyPreference.xml b/data_model/1.6/clusters/EnergyPreference.xml
new file mode 100644
index 00000000000..3ee60dc5be5
--- /dev/null
+++ b/data_model/1.6/clusters/EnergyPreference.xml
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/FanControl.xml b/data_model/1.6/clusters/FanControl.xml
new file mode 100644
index 00000000000..cb10bc88925
--- /dev/null
+++ b/data_model/1.6/clusters/FanControl.xml
@@ -0,0 +1,322 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/FixedLabel-Cluster.xml b/data_model/1.6/clusters/FixedLabel-Cluster.xml
new file mode 100644
index 00000000000..12bec55222c
--- /dev/null
+++ b/data_model/1.6/clusters/FixedLabel-Cluster.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/FlowMeasurement.xml b/data_model/1.6/clusters/FlowMeasurement.xml
new file mode 100644
index 00000000000..e001c80913c
--- /dev/null
+++ b/data_model/1.6/clusters/FlowMeasurement.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/GeneralCommissioningCluster.xml b/data_model/1.6/clusters/GeneralCommissioningCluster.xml
new file mode 100644
index 00000000000..a68c4e1510d
--- /dev/null
+++ b/data_model/1.6/clusters/GeneralCommissioningCluster.xml
@@ -0,0 +1,328 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Group-Key-Management-Cluster.xml b/data_model/1.6/clusters/Group-Key-Management-Cluster.xml
new file mode 100644
index 00000000000..d8955ae939e
--- /dev/null
+++ b/data_model/1.6/clusters/Group-Key-Management-Cluster.xml
@@ -0,0 +1,278 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Groupcast.xml b/data_model/1.6/clusters/Groupcast.xml
new file mode 100644
index 00000000000..bc84aa2f06f
--- /dev/null
+++ b/data_model/1.6/clusters/Groupcast.xml
@@ -0,0 +1,385 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Groups.xml b/data_model/1.6/clusters/Groups.xml
new file mode 100644
index 00000000000..4fbe5cf443b
--- /dev/null
+++ b/data_model/1.6/clusters/Groups.xml
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ICDManagement.xml b/data_model/1.6/clusters/ICDManagement.xml
new file mode 100644
index 00000000000..7f01cd5dae6
--- /dev/null
+++ b/data_model/1.6/clusters/ICDManagement.xml
@@ -0,0 +1,356 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Identify.xml b/data_model/1.6/clusters/Identify.xml
new file mode 100644
index 00000000000..a919486e30f
--- /dev/null
+++ b/data_model/1.6/clusters/Identify.xml
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/IlluminanceMeasurement.xml b/data_model/1.6/clusters/IlluminanceMeasurement.xml
new file mode 100644
index 00000000000..89e74089a4e
--- /dev/null
+++ b/data_model/1.6/clusters/IlluminanceMeasurement.xml
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/JointFabricAdministratorCluster.xml b/data_model/1.6/clusters/JointFabricAdministratorCluster.xml
new file mode 100644
index 00000000000..0424d873f98
--- /dev/null
+++ b/data_model/1.6/clusters/JointFabricAdministratorCluster.xml
@@ -0,0 +1,282 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/JointFabricDatastoreCluster.xml b/data_model/1.6/clusters/JointFabricDatastoreCluster.xml
new file mode 100644
index 00000000000..5af24d1cf97
--- /dev/null
+++ b/data_model/1.6/clusters/JointFabricDatastoreCluster.xml
@@ -0,0 +1,874 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/KeypadInput.xml b/data_model/1.6/clusters/KeypadInput.xml
new file mode 100644
index 00000000000..faded2ff95b
--- /dev/null
+++ b/data_model/1.6/clusters/KeypadInput.xml
@@ -0,0 +1,367 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Label-Cluster.xml b/data_model/1.6/clusters/Label-Cluster.xml
new file mode 100644
index 00000000000..e116355b67e
--- /dev/null
+++ b/data_model/1.6/clusters/Label-Cluster.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/LaundryDryerControls.xml b/data_model/1.6/clusters/LaundryDryerControls.xml
new file mode 100644
index 00000000000..37cf87d481b
--- /dev/null
+++ b/data_model/1.6/clusters/LaundryDryerControls.xml
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/LaundryWasherControls.xml b/data_model/1.6/clusters/LaundryWasherControls.xml
new file mode 100644
index 00000000000..00cc966b119
--- /dev/null
+++ b/data_model/1.6/clusters/LaundryWasherControls.xml
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/LevelControl.xml b/data_model/1.6/clusters/LevelControl.xml
new file mode 100644
index 00000000000..0e1214fb52a
--- /dev/null
+++ b/data_model/1.6/clusters/LevelControl.xml
@@ -0,0 +1,391 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/LocalizationConfiguration.xml b/data_model/1.6/clusters/LocalizationConfiguration.xml
new file mode 100644
index 00000000000..02860ea80d4
--- /dev/null
+++ b/data_model/1.6/clusters/LocalizationConfiguration.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/LocalizationTimeFormat.xml b/data_model/1.6/clusters/LocalizationTimeFormat.xml
new file mode 100644
index 00000000000..946d553194d
--- /dev/null
+++ b/data_model/1.6/clusters/LocalizationTimeFormat.xml
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/LocalizationUnit.xml b/data_model/1.6/clusters/LocalizationUnit.xml
new file mode 100644
index 00000000000..8e1d50a5a5c
--- /dev/null
+++ b/data_model/1.6/clusters/LocalizationUnit.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/LowPower.xml b/data_model/1.6/clusters/LowPower.xml
new file mode 100644
index 00000000000..f92019ed2b9
--- /dev/null
+++ b/data_model/1.6/clusters/LowPower.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/MediaInput.xml b/data_model/1.6/clusters/MediaInput.xml
new file mode 100644
index 00000000000..1a60d075716
--- /dev/null
+++ b/data_model/1.6/clusters/MediaInput.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/MediaPlayback.xml b/data_model/1.6/clusters/MediaPlayback.xml
new file mode 100644
index 00000000000..8971950ddb4
--- /dev/null
+++ b/data_model/1.6/clusters/MediaPlayback.xml
@@ -0,0 +1,525 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Messages.xml b/data_model/1.6/clusters/Messages.xml
new file mode 100644
index 00000000000..186e4cf81a6
--- /dev/null
+++ b/data_model/1.6/clusters/Messages.xml
@@ -0,0 +1,328 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/MeterIdentification.xml b/data_model/1.6/clusters/MeterIdentification.xml
new file mode 100644
index 00000000000..ebb0bcf7e78
--- /dev/null
+++ b/data_model/1.6/clusters/MeterIdentification.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/MicrowaveOvenControl.xml b/data_model/1.6/clusters/MicrowaveOvenControl.xml
new file mode 100644
index 00000000000..11ade34f267
--- /dev/null
+++ b/data_model/1.6/clusters/MicrowaveOvenControl.xml
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ModeBase.xml b/data_model/1.6/clusters/ModeBase.xml
new file mode 100644
index 00000000000..f0fb5498f67
--- /dev/null
+++ b/data_model/1.6/clusters/ModeBase.xml
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ModeSelect.xml b/data_model/1.6/clusters/ModeSelect.xml
new file mode 100644
index 00000000000..32ce055135f
--- /dev/null
+++ b/data_model/1.6/clusters/ModeSelect.xml
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Mode_DeviceEnergyManagement.xml b/data_model/1.6/clusters/Mode_DeviceEnergyManagement.xml
new file mode 100644
index 00000000000..0dce72ebf11
--- /dev/null
+++ b/data_model/1.6/clusters/Mode_DeviceEnergyManagement.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Mode_Dishwasher.xml b/data_model/1.6/clusters/Mode_Dishwasher.xml
new file mode 100644
index 00000000000..6ded4ff2d51
--- /dev/null
+++ b/data_model/1.6/clusters/Mode_Dishwasher.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Mode_EVSE.xml b/data_model/1.6/clusters/Mode_EVSE.xml
new file mode 100644
index 00000000000..2571699e619
--- /dev/null
+++ b/data_model/1.6/clusters/Mode_EVSE.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Mode_LaundryWasher.xml b/data_model/1.6/clusters/Mode_LaundryWasher.xml
new file mode 100644
index 00000000000..7c1262bb8f3
--- /dev/null
+++ b/data_model/1.6/clusters/Mode_LaundryWasher.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Mode_MicrowaveOven.xml b/data_model/1.6/clusters/Mode_MicrowaveOven.xml
new file mode 100644
index 00000000000..e8c7f8a0145
--- /dev/null
+++ b/data_model/1.6/clusters/Mode_MicrowaveOven.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Mode_Oven.xml b/data_model/1.6/clusters/Mode_Oven.xml
new file mode 100644
index 00000000000..669560acb02
--- /dev/null
+++ b/data_model/1.6/clusters/Mode_Oven.xml
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Mode_RVCClean.xml b/data_model/1.6/clusters/Mode_RVCClean.xml
new file mode 100644
index 00000000000..3a27a4f7702
--- /dev/null
+++ b/data_model/1.6/clusters/Mode_RVCClean.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Mode_RVCRun.xml b/data_model/1.6/clusters/Mode_RVCRun.xml
new file mode 100644
index 00000000000..e4c4540ba42
--- /dev/null
+++ b/data_model/1.6/clusters/Mode_RVCRun.xml
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Mode_Refrigerator.xml b/data_model/1.6/clusters/Mode_Refrigerator.xml
new file mode 100644
index 00000000000..49ac574a03c
--- /dev/null
+++ b/data_model/1.6/clusters/Mode_Refrigerator.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Mode_WaterHeater.xml b/data_model/1.6/clusters/Mode_WaterHeater.xml
new file mode 100644
index 00000000000..b5ba06b62ad
--- /dev/null
+++ b/data_model/1.6/clusters/Mode_WaterHeater.xml
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/NetworkCommissioningCluster.xml b/data_model/1.6/clusters/NetworkCommissioningCluster.xml
new file mode 100644
index 00000000000..2aafb791546
--- /dev/null
+++ b/data_model/1.6/clusters/NetworkCommissioningCluster.xml
@@ -0,0 +1,708 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/NetworkIdentityManagement.xml b/data_model/1.6/clusters/NetworkIdentityManagement.xml
new file mode 100644
index 00000000000..d8495dd7b69
--- /dev/null
+++ b/data_model/1.6/clusters/NetworkIdentityManagement.xml
@@ -0,0 +1,260 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/OTAProvider.xml b/data_model/1.6/clusters/OTAProvider.xml
new file mode 100644
index 00000000000..cc1bbb2e2fb
--- /dev/null
+++ b/data_model/1.6/clusters/OTAProvider.xml
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/OTARequestor.xml b/data_model/1.6/clusters/OTARequestor.xml
new file mode 100644
index 00000000000..5bb76b5e32e
--- /dev/null
+++ b/data_model/1.6/clusters/OTARequestor.xml
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/OccupancySensing.xml b/data_model/1.6/clusters/OccupancySensing.xml
new file mode 100644
index 00000000000..70ae0287b6e
--- /dev/null
+++ b/data_model/1.6/clusters/OccupancySensing.xml
@@ -0,0 +1,498 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/OnOff.xml b/data_model/1.6/clusters/OnOff.xml
new file mode 100644
index 00000000000..3927fe6a7b2
--- /dev/null
+++ b/data_model/1.6/clusters/OnOff.xml
@@ -0,0 +1,252 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/OperationalCredentialCluster.xml b/data_model/1.6/clusters/OperationalCredentialCluster.xml
new file mode 100644
index 00000000000..e2550060f71
--- /dev/null
+++ b/data_model/1.6/clusters/OperationalCredentialCluster.xml
@@ -0,0 +1,485 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/OperationalState.xml b/data_model/1.6/clusters/OperationalState.xml
new file mode 100644
index 00000000000..d4520a072e6
--- /dev/null
+++ b/data_model/1.6/clusters/OperationalState.xml
@@ -0,0 +1,270 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/OperationalState_Oven.xml b/data_model/1.6/clusters/OperationalState_Oven.xml
new file mode 100644
index 00000000000..c49426d6026
--- /dev/null
+++ b/data_model/1.6/clusters/OperationalState_Oven.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/OperationalState_RVC.xml b/data_model/1.6/clusters/OperationalState_RVC.xml
new file mode 100644
index 00000000000..a4e1110d28a
--- /dev/null
+++ b/data_model/1.6/clusters/OperationalState_RVC.xml
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/PowerSourceCluster.xml b/data_model/1.6/clusters/PowerSourceCluster.xml
new file mode 100644
index 00000000000..a90b69a7756
--- /dev/null
+++ b/data_model/1.6/clusters/PowerSourceCluster.xml
@@ -0,0 +1,872 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/PowerSourceConfigurationCluster.xml b/data_model/1.6/clusters/PowerSourceConfigurationCluster.xml
new file mode 100644
index 00000000000..6fdce527526
--- /dev/null
+++ b/data_model/1.6/clusters/PowerSourceConfigurationCluster.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/PowerTopology.xml b/data_model/1.6/clusters/PowerTopology.xml
new file mode 100644
index 00000000000..09c20f78208
--- /dev/null
+++ b/data_model/1.6/clusters/PowerTopology.xml
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/PressureMeasurement.xml b/data_model/1.6/clusters/PressureMeasurement.xml
new file mode 100644
index 00000000000..31296b89da1
--- /dev/null
+++ b/data_model/1.6/clusters/PressureMeasurement.xml
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/PumpConfigurationControl.xml b/data_model/1.6/clusters/PumpConfigurationControl.xml
new file mode 100644
index 00000000000..ceda5550b5a
--- /dev/null
+++ b/data_model/1.6/clusters/PumpConfigurationControl.xml
@@ -0,0 +1,458 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/PushAVStreamTransport.xml b/data_model/1.6/clusters/PushAVStreamTransport.xml
new file mode 100644
index 00000000000..55dc43271e9
--- /dev/null
+++ b/data_model/1.6/clusters/PushAVStreamTransport.xml
@@ -0,0 +1,710 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ divide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/RefrigeratorAlarm.xml b/data_model/1.6/clusters/RefrigeratorAlarm.xml
new file mode 100644
index 00000000000..4504d587d4d
--- /dev/null
+++ b/data_model/1.6/clusters/RefrigeratorAlarm.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ResourceMonitoring.xml b/data_model/1.6/clusters/ResourceMonitoring.xml
new file mode 100644
index 00000000000..462ad35e71f
--- /dev/null
+++ b/data_model/1.6/clusters/ResourceMonitoring.xml
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Scenes.xml b/data_model/1.6/clusters/Scenes.xml
new file mode 100644
index 00000000000..4f2303181b7
--- /dev/null
+++ b/data_model/1.6/clusters/Scenes.xml
@@ -0,0 +1,465 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ServiceArea.xml b/data_model/1.6/clusters/ServiceArea.xml
new file mode 100644
index 00000000000..897c1f33e75
--- /dev/null
+++ b/data_model/1.6/clusters/ServiceArea.xml
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/SmokeCOAlarm.xml b/data_model/1.6/clusters/SmokeCOAlarm.xml
new file mode 100644
index 00000000000..a9cb9815dd0
--- /dev/null
+++ b/data_model/1.6/clusters/SmokeCOAlarm.xml
@@ -0,0 +1,332 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/SoilMeasurement.xml b/data_model/1.6/clusters/SoilMeasurement.xml
new file mode 100644
index 00000000000..89065f9e3ba
--- /dev/null
+++ b/data_model/1.6/clusters/SoilMeasurement.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Switch.xml b/data_model/1.6/clusters/Switch.xml
new file mode 100644
index 00000000000..5c989c7d8fa
--- /dev/null
+++ b/data_model/1.6/clusters/Switch.xml
@@ -0,0 +1,339 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/TLSCertificateManagement.xml b/data_model/1.6/clusters/TLSCertificateManagement.xml
new file mode 100644
index 00000000000..1033bd89555
--- /dev/null
+++ b/data_model/1.6/clusters/TLSCertificateManagement.xml
@@ -0,0 +1,402 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/TLSClientManagement.xml b/data_model/1.6/clusters/TLSClientManagement.xml
new file mode 100644
index 00000000000..09b2435539b
--- /dev/null
+++ b/data_model/1.6/clusters/TLSClientManagement.xml
@@ -0,0 +1,252 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/TargetNavigator.xml b/data_model/1.6/clusters/TargetNavigator.xml
new file mode 100644
index 00000000000..8de38e8eee9
--- /dev/null
+++ b/data_model/1.6/clusters/TargetNavigator.xml
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/TemperatureAlarm.xml b/data_model/1.6/clusters/TemperatureAlarm.xml
new file mode 100644
index 00000000000..7b5b6f65d5e
--- /dev/null
+++ b/data_model/1.6/clusters/TemperatureAlarm.xml
@@ -0,0 +1,405 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/TemperatureControl.xml b/data_model/1.6/clusters/TemperatureControl.xml
new file mode 100644
index 00000000000..92f8be5084c
--- /dev/null
+++ b/data_model/1.6/clusters/TemperatureControl.xml
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/TemperatureMeasurement.xml b/data_model/1.6/clusters/TemperatureMeasurement.xml
new file mode 100644
index 00000000000..ccf9f909c1a
--- /dev/null
+++ b/data_model/1.6/clusters/TemperatureMeasurement.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/Thermostat.xml b/data_model/1.6/clusters/Thermostat.xml
new file mode 100644
index 00000000000..fd47111e8ef
--- /dev/null
+++ b/data_model/1.6/clusters/Thermostat.xml
@@ -0,0 +1,1528 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ThermostatUserInterfaceConfiguration.xml b/data_model/1.6/clusters/ThermostatUserInterfaceConfiguration.xml
new file mode 100644
index 00000000000..2f7b9f41fee
--- /dev/null
+++ b/data_model/1.6/clusters/ThermostatUserInterfaceConfiguration.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ThreadBorderRouterDiagnostics.xml b/data_model/1.6/clusters/ThreadBorderRouterDiagnostics.xml
new file mode 100644
index 00000000000..fa11bbba4f3
--- /dev/null
+++ b/data_model/1.6/clusters/ThreadBorderRouterDiagnostics.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ThreadBorderRouterManagement.xml b/data_model/1.6/clusters/ThreadBorderRouterManagement.xml
new file mode 100644
index 00000000000..9cc69f53df1
--- /dev/null
+++ b/data_model/1.6/clusters/ThreadBorderRouterManagement.xml
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ThreadNetworkDirectory.xml b/data_model/1.6/clusters/ThreadNetworkDirectory.xml
new file mode 100644
index 00000000000..49edc8952c0
--- /dev/null
+++ b/data_model/1.6/clusters/ThreadNetworkDirectory.xml
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/TimeSync.xml b/data_model/1.6/clusters/TimeSync.xml
new file mode 100644
index 00000000000..74c130ff526
--- /dev/null
+++ b/data_model/1.6/clusters/TimeSync.xml
@@ -0,0 +1,476 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/UserLabel-Cluster.xml b/data_model/1.6/clusters/UserLabel-Cluster.xml
new file mode 100644
index 00000000000..3f108704ce2
--- /dev/null
+++ b/data_model/1.6/clusters/UserLabel-Cluster.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ValveConfigurationControl.xml b/data_model/1.6/clusters/ValveConfigurationControl.xml
new file mode 100644
index 00000000000..dcc594bf9a4
--- /dev/null
+++ b/data_model/1.6/clusters/ValveConfigurationControl.xml
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/WakeOnLAN.xml b/data_model/1.6/clusters/WakeOnLAN.xml
new file mode 100644
index 00000000000..f684f49fcec
--- /dev/null
+++ b/data_model/1.6/clusters/WakeOnLAN.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/WaterContentMeasurement.xml b/data_model/1.6/clusters/WaterContentMeasurement.xml
new file mode 100644
index 00000000000..a1a1f07ca7e
--- /dev/null
+++ b/data_model/1.6/clusters/WaterContentMeasurement.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/WaterHeaterManagement.xml b/data_model/1.6/clusters/WaterHeaterManagement.xml
new file mode 100644
index 00000000000..1c1ca48ebfe
--- /dev/null
+++ b/data_model/1.6/clusters/WaterHeaterManagement.xml
@@ -0,0 +1,215 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/WebRTC_Provider.xml b/data_model/1.6/clusters/WebRTC_Provider.xml
new file mode 100644
index 00000000000..5d0de045bdc
--- /dev/null
+++ b/data_model/1.6/clusters/WebRTC_Provider.xml
@@ -0,0 +1,420 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/WebRTC_Requestor.xml b/data_model/1.6/clusters/WebRTC_Requestor.xml
new file mode 100644
index 00000000000..bf1783b952a
--- /dev/null
+++ b/data_model/1.6/clusters/WebRTC_Requestor.xml
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/WiFiNetworkManagement.xml b/data_model/1.6/clusters/WiFiNetworkManagement.xml
new file mode 100644
index 00000000000..10fb5f9a89f
--- /dev/null
+++ b/data_model/1.6/clusters/WiFiNetworkManagement.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/WindowCovering.xml b/data_model/1.6/clusters/WindowCovering.xml
new file mode 100644
index 00000000000..c946cfad46e
--- /dev/null
+++ b/data_model/1.6/clusters/WindowCovering.xml
@@ -0,0 +1,489 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/ZoneManagement.xml b/data_model/1.6/clusters/ZoneManagement.xml
new file mode 100644
index 00000000000..47386ef9d69
--- /dev/null
+++ b/data_model/1.6/clusters/ZoneManagement.xml
@@ -0,0 +1,404 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/clusters/cluster_ids.json b/data_model/1.6/clusters/cluster_ids.json
new file mode 100644
index 00000000000..a168357fd51
--- /dev/null
+++ b/data_model/1.6/clusters/cluster_ids.json
@@ -0,0 +1,138 @@
+{
+ "3": "Identify",
+ "4": "Groups",
+ "6": "On/Off",
+ "8": "Level Control",
+ "29": "Descriptor",
+ "30": "Binding",
+ "31": "Access Control",
+ "37": "Actions",
+ "40": "Basic Information",
+ "41": "OTA Software Update Provider",
+ "42": "OTA Software Update Requestor",
+ "43": "Localization Configuration",
+ "44": "Time Format Localization",
+ "45": "Unit Localization",
+ "46": "Power Source Configuration",
+ "47": "Power Source",
+ "48": "General Commissioning",
+ "49": "Network Commissioning",
+ "50": "Diagnostic Logs",
+ "51": "General Diagnostics",
+ "52": "Software Diagnostics",
+ "53": "Thread Network Diagnostics",
+ "54": "Wi-Fi Network Diagnostics",
+ "55": "Ethernet Network Diagnostics",
+ "56": "Time Synchronization",
+ "57": "Bridged Device Basic Information",
+ "59": "Switch",
+ "60": "Administrator Commissioning",
+ "62": "Operational Credentials",
+ "63": "Group Key Management",
+ "64": "Fixed Label",
+ "65": "User Label",
+ "69": "Boolean State",
+ "70": "ICD Management",
+ "72": "Oven Cavity Operational State",
+ "73": "Oven Mode",
+ "74": "Laundry Dryer Controls",
+ "80": "Mode Select",
+ "81": "Laundry Washer Mode",
+ "82": "Refrigerator And Temperature Controlled Cabinet Mode",
+ "83": "Laundry Washer Controls",
+ "84": "RVC Run Mode",
+ "85": "RVC Clean Mode",
+ "86": "Temperature Control",
+ "87": "Refrigerator Alarm",
+ "89": "Dishwasher Mode",
+ "91": "Air Quality",
+ "92": "Smoke CO Alarm",
+ "93": "Dishwasher Alarm",
+ "94": "Microwave Oven Mode",
+ "95": "Microwave Oven Control",
+ "96": "Operational State",
+ "97": "RVC Operational State",
+ "98": "Scenes Management",
+ "100": "Temperature Alarm",
+ "101": "Groupcast",
+ "113": "HEPA Filter Monitoring",
+ "114": "Activated Carbon Filter Monitoring",
+ "121": "Water Tank Level Monitoring",
+ "128": "Boolean State Configuration",
+ "129": "Valve Configuration and Control",
+ "144": "Electrical Power Measurement",
+ "145": "Electrical Energy Measurement",
+ "148": "Water Heater Management",
+ "149": "Commodity Price",
+ "151": "Messages",
+ "152": "Device Energy Management",
+ "153": "Energy EVSE",
+ "155": "Energy Preference",
+ "156": "Power Topology",
+ "157": "Energy EVSE Mode",
+ "158": "Water Heater Mode",
+ "159": "Device Energy Management Mode",
+ "160": "Electrical Grid Conditions",
+ "257": "Door Lock",
+ "258": "Window Covering",
+ "260": "Closure Control",
+ "261": "Closure Dimension",
+ "336": "Service Area",
+ "512": "Pump Configuration and Control",
+ "513": "Thermostat",
+ "514": "Fan Control",
+ "516": "Thermostat User Interface Configuration",
+ "768": "Color Control",
+ "1024": "Illuminance Measurement",
+ "1026": "Temperature Measurement",
+ "1027": "Pressure Measurement",
+ "1028": "Flow Measurement",
+ "1029": "Relative Humidity Measurement",
+ "1030": "Occupancy Sensing",
+ "1036": "Carbon Monoxide Concentration Measurement",
+ "1037": "Carbon Dioxide Concentration Measurement",
+ "1043": "Nitrogen Dioxide Concentration Measurement",
+ "1045": "Ozone Concentration Measurement",
+ "1066": "PM2.5 Concentration Measurement",
+ "1067": "Formaldehyde Concentration Measurement",
+ "1068": "PM1 Concentration Measurement",
+ "1069": "PM10 Concentration Measurement",
+ "1070": "Total Volatile Organic Compounds Concentration Measurement",
+ "1071": "Radon Concentration Measurement",
+ "1072": "Soil Measurement",
+ "1104": "Network Identity Management",
+ "1105": "Wi-Fi Network Management",
+ "1106": "Thread Border Router Management",
+ "1107": "Thread Network Directory",
+ "1108": "Thread Border Router Diagnostics",
+ "1283": "Wake On LAN",
+ "1284": "Channel",
+ "1285": "Target Navigator",
+ "1286": "Media Playback",
+ "1287": "Media Input",
+ "1288": "Low Power",
+ "1289": "Keypad Input",
+ "1290": "Content Launcher",
+ "1291": "Audio Output",
+ "1292": "Application Launcher",
+ "1293": "Application Basic",
+ "1294": "Account Login",
+ "1295": "Content Control",
+ "1296": "Content App Observer",
+ "1360": "Zone Management",
+ "1361": "Camera AV Stream Management",
+ "1362": "Camera AV Settings User Level Management",
+ "1363": "WebRTC Transport Provider",
+ "1364": "WebRTC Transport Requestor",
+ "1365": "Push AV Stream Transport",
+ "1366": "Chime",
+ "1792": "Commodity Tariff",
+ "1872": "Ecosystem Information",
+ "1873": "Commissioner Control",
+ "1874": "Joint Fabric Datastore",
+ "1875": "Joint Fabric Administrator",
+ "2049": "TLS Certificate Management",
+ "2050": "TLS Client Management",
+ "2822": "Meter Identification",
+ "2823": "Commodity Metering"
+}
diff --git a/data_model/1.6/device_types/Aggregator.xml b/data_model/1.6/device_types/Aggregator.xml
new file mode 100644
index 00000000000..c61f62e816e
--- /dev/null
+++ b/data_model/1.6/device_types/Aggregator.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/AirPurifier.xml b/data_model/1.6/device_types/AirPurifier.xml
new file mode 100644
index 00000000000..9791d46d7f7
--- /dev/null
+++ b/data_model/1.6/device_types/AirPurifier.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/AirQualitySensor.xml b/data_model/1.6/device_types/AirQualitySensor.xml
new file mode 100644
index 00000000000..61763636f40
--- /dev/null
+++ b/data_model/1.6/device_types/AirQualitySensor.xml
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/AmbientContextSensor.xml b/data_model/1.6/device_types/AmbientContextSensor.xml
new file mode 100644
index 00000000000..e14a19b8f52
--- /dev/null
+++ b/data_model/1.6/device_types/AmbientContextSensor.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/AudioDoorbell.xml b/data_model/1.6/device_types/AudioDoorbell.xml
new file mode 100644
index 00000000000..2069cfbd93e
--- /dev/null
+++ b/data_model/1.6/device_types/AudioDoorbell.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/BaseDeviceType.xml b/data_model/1.6/device_types/BaseDeviceType.xml
new file mode 100644
index 00000000000..931834bc2b2
--- /dev/null
+++ b/data_model/1.6/device_types/BaseDeviceType.xml
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/BasicVideoPlayer.xml b/data_model/1.6/device_types/BasicVideoPlayer.xml
new file mode 100644
index 00000000000..5f2872c2bb7
--- /dev/null
+++ b/data_model/1.6/device_types/BasicVideoPlayer.xml
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/BatteryStorage.xml b/data_model/1.6/device_types/BatteryStorage.xml
new file mode 100644
index 00000000000..0bcb110f5f8
--- /dev/null
+++ b/data_model/1.6/device_types/BatteryStorage.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/BridgedNode.xml b/data_model/1.6/device_types/BridgedNode.xml
new file mode 100644
index 00000000000..c1c1770ca9e
--- /dev/null
+++ b/data_model/1.6/device_types/BridgedNode.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Camera.xml b/data_model/1.6/device_types/Camera.xml
new file mode 100644
index 00000000000..efed03dc6bf
--- /dev/null
+++ b/data_model/1.6/device_types/Camera.xml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/CameraController.xml b/data_model/1.6/device_types/CameraController.xml
new file mode 100644
index 00000000000..85529ff5609
--- /dev/null
+++ b/data_model/1.6/device_types/CameraController.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/CastingVideoClient.xml b/data_model/1.6/device_types/CastingVideoClient.xml
new file mode 100644
index 00000000000..e166b1df0e9
--- /dev/null
+++ b/data_model/1.6/device_types/CastingVideoClient.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/CastingVideoPlayer.xml b/data_model/1.6/device_types/CastingVideoPlayer.xml
new file mode 100644
index 00000000000..9b498538b91
--- /dev/null
+++ b/data_model/1.6/device_types/CastingVideoPlayer.xml
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Chime.xml b/data_model/1.6/device_types/Chime.xml
new file mode 100644
index 00000000000..b78db333719
--- /dev/null
+++ b/data_model/1.6/device_types/Chime.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Closure.xml b/data_model/1.6/device_types/Closure.xml
new file mode 100644
index 00000000000..89b88a69295
--- /dev/null
+++ b/data_model/1.6/device_types/Closure.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ClosureController.xml b/data_model/1.6/device_types/ClosureController.xml
new file mode 100644
index 00000000000..5524b184079
--- /dev/null
+++ b/data_model/1.6/device_types/ClosureController.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ClosurePanel.xml b/data_model/1.6/device_types/ClosurePanel.xml
new file mode 100644
index 00000000000..5d621ba877e
--- /dev/null
+++ b/data_model/1.6/device_types/ClosurePanel.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ColorDimmerSwitch.xml b/data_model/1.6/device_types/ColorDimmerSwitch.xml
new file mode 100644
index 00000000000..0c6007c020f
--- /dev/null
+++ b/data_model/1.6/device_types/ColorDimmerSwitch.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ColorTemperatureLight.xml b/data_model/1.6/device_types/ColorTemperatureLight.xml
new file mode 100644
index 00000000000..cb3b25dc431
--- /dev/null
+++ b/data_model/1.6/device_types/ColorTemperatureLight.xml
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ContactSensor.xml b/data_model/1.6/device_types/ContactSensor.xml
new file mode 100644
index 00000000000..79031c69710
--- /dev/null
+++ b/data_model/1.6/device_types/ContactSensor.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ContentApp.xml b/data_model/1.6/device_types/ContentApp.xml
new file mode 100644
index 00000000000..e43081d9a85
--- /dev/null
+++ b/data_model/1.6/device_types/ContentApp.xml
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ControlBridge.xml b/data_model/1.6/device_types/ControlBridge.xml
new file mode 100644
index 00000000000..3ec086c085d
--- /dev/null
+++ b/data_model/1.6/device_types/ControlBridge.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/CookSurface.xml b/data_model/1.6/device_types/CookSurface.xml
new file mode 100644
index 00000000000..1027efbb9ec
--- /dev/null
+++ b/data_model/1.6/device_types/CookSurface.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Cooktop.xml b/data_model/1.6/device_types/Cooktop.xml
new file mode 100644
index 00000000000..09f014328d6
--- /dev/null
+++ b/data_model/1.6/device_types/Cooktop.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/DeviceEnergyManagement.xml b/data_model/1.6/device_types/DeviceEnergyManagement.xml
new file mode 100644
index 00000000000..e4a3ee475cc
--- /dev/null
+++ b/data_model/1.6/device_types/DeviceEnergyManagement.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/DimmableLight.xml b/data_model/1.6/device_types/DimmableLight.xml
new file mode 100644
index 00000000000..342be43ee3e
--- /dev/null
+++ b/data_model/1.6/device_types/DimmableLight.xml
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/DimmablePlug-InUnit.xml b/data_model/1.6/device_types/DimmablePlug-InUnit.xml
new file mode 100644
index 00000000000..5b239731c06
--- /dev/null
+++ b/data_model/1.6/device_types/DimmablePlug-InUnit.xml
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/DimmerSwitch.xml b/data_model/1.6/device_types/DimmerSwitch.xml
new file mode 100644
index 00000000000..b2b86798fa9
--- /dev/null
+++ b/data_model/1.6/device_types/DimmerSwitch.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Dishwasher.xml b/data_model/1.6/device_types/Dishwasher.xml
new file mode 100644
index 00000000000..d45194910ba
--- /dev/null
+++ b/data_model/1.6/device_types/Dishwasher.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/DoorLock.xml b/data_model/1.6/device_types/DoorLock.xml
new file mode 100644
index 00000000000..de978b4c0c6
--- /dev/null
+++ b/data_model/1.6/device_types/DoorLock.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/DoorLockController.xml b/data_model/1.6/device_types/DoorLockController.xml
new file mode 100644
index 00000000000..7a192576d6c
--- /dev/null
+++ b/data_model/1.6/device_types/DoorLockController.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Doorbell.xml b/data_model/1.6/device_types/Doorbell.xml
new file mode 100644
index 00000000000..f5907a52a10
--- /dev/null
+++ b/data_model/1.6/device_types/Doorbell.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/EVSE.xml b/data_model/1.6/device_types/EVSE.xml
new file mode 100644
index 00000000000..4d440608f76
--- /dev/null
+++ b/data_model/1.6/device_types/EVSE.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ElectricalEnergyTariff.xml b/data_model/1.6/device_types/ElectricalEnergyTariff.xml
new file mode 100644
index 00000000000..6ec2a784c36
--- /dev/null
+++ b/data_model/1.6/device_types/ElectricalEnergyTariff.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ElectricalMeter.xml b/data_model/1.6/device_types/ElectricalMeter.xml
new file mode 100644
index 00000000000..ee31dc4c9f8
--- /dev/null
+++ b/data_model/1.6/device_types/ElectricalMeter.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ElectricalSensor.xml b/data_model/1.6/device_types/ElectricalSensor.xml
new file mode 100644
index 00000000000..d4a1f892e1a
--- /dev/null
+++ b/data_model/1.6/device_types/ElectricalSensor.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ElectricalUtilityMeter.xml b/data_model/1.6/device_types/ElectricalUtilityMeter.xml
new file mode 100644
index 00000000000..5693b741880
--- /dev/null
+++ b/data_model/1.6/device_types/ElectricalUtilityMeter.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ExtendedColorLight.xml b/data_model/1.6/device_types/ExtendedColorLight.xml
new file mode 100644
index 00000000000..415f4902e44
--- /dev/null
+++ b/data_model/1.6/device_types/ExtendedColorLight.xml
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ExtractorHood.xml b/data_model/1.6/device_types/ExtractorHood.xml
new file mode 100644
index 00000000000..c55bc9abd16
--- /dev/null
+++ b/data_model/1.6/device_types/ExtractorHood.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Fan.xml b/data_model/1.6/device_types/Fan.xml
new file mode 100644
index 00000000000..d8c832b0f43
--- /dev/null
+++ b/data_model/1.6/device_types/Fan.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/FloodlightCamera.xml b/data_model/1.6/device_types/FloodlightCamera.xml
new file mode 100644
index 00000000000..feb4927739d
--- /dev/null
+++ b/data_model/1.6/device_types/FloodlightCamera.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/FlowSensor.xml b/data_model/1.6/device_types/FlowSensor.xml
new file mode 100644
index 00000000000..e27c8ab5830
--- /dev/null
+++ b/data_model/1.6/device_types/FlowSensor.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/GenericSwitch.xml b/data_model/1.6/device_types/GenericSwitch.xml
new file mode 100644
index 00000000000..cf6ce4f3452
--- /dev/null
+++ b/data_model/1.6/device_types/GenericSwitch.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/HeatPump.xml b/data_model/1.6/device_types/HeatPump.xml
new file mode 100644
index 00000000000..778d66f2e4a
--- /dev/null
+++ b/data_model/1.6/device_types/HeatPump.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/HumiditySensor.xml b/data_model/1.6/device_types/HumiditySensor.xml
new file mode 100644
index 00000000000..f05948b9e55
--- /dev/null
+++ b/data_model/1.6/device_types/HumiditySensor.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Intercom.xml b/data_model/1.6/device_types/Intercom.xml
new file mode 100644
index 00000000000..85411d329d8
--- /dev/null
+++ b/data_model/1.6/device_types/Intercom.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/IrrigationSystem.xml b/data_model/1.6/device_types/IrrigationSystem.xml
new file mode 100644
index 00000000000..f7de739e013
--- /dev/null
+++ b/data_model/1.6/device_types/IrrigationSystem.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/JointFabricAdmin.xml b/data_model/1.6/device_types/JointFabricAdmin.xml
new file mode 100644
index 00000000000..a6aa0a5f7c9
--- /dev/null
+++ b/data_model/1.6/device_types/JointFabricAdmin.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/LaundryDryer.xml b/data_model/1.6/device_types/LaundryDryer.xml
new file mode 100644
index 00000000000..74cce08a250
--- /dev/null
+++ b/data_model/1.6/device_types/LaundryDryer.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/LaundryWasher.xml b/data_model/1.6/device_types/LaundryWasher.xml
new file mode 100644
index 00000000000..1aaff12b044
--- /dev/null
+++ b/data_model/1.6/device_types/LaundryWasher.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/LightSensor.xml b/data_model/1.6/device_types/LightSensor.xml
new file mode 100644
index 00000000000..41580de4400
--- /dev/null
+++ b/data_model/1.6/device_types/LightSensor.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/MeterReferencePoint.xml b/data_model/1.6/device_types/MeterReferencePoint.xml
new file mode 100644
index 00000000000..6cce132b79f
--- /dev/null
+++ b/data_model/1.6/device_types/MeterReferencePoint.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/MicrowaveOven.xml b/data_model/1.6/device_types/MicrowaveOven.xml
new file mode 100644
index 00000000000..1ce8b1e0ac9
--- /dev/null
+++ b/data_model/1.6/device_types/MicrowaveOven.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ModeSelectDeviceType.xml b/data_model/1.6/device_types/ModeSelectDeviceType.xml
new file mode 100644
index 00000000000..e14b840ea9e
--- /dev/null
+++ b/data_model/1.6/device_types/ModeSelectDeviceType.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/MountedDimmableLoadControl.xml b/data_model/1.6/device_types/MountedDimmableLoadControl.xml
new file mode 100644
index 00000000000..583b7fd2e99
--- /dev/null
+++ b/data_model/1.6/device_types/MountedDimmableLoadControl.xml
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/MountedOnOffControl.xml b/data_model/1.6/device_types/MountedOnOffControl.xml
new file mode 100644
index 00000000000..870c7d94cd4
--- /dev/null
+++ b/data_model/1.6/device_types/MountedOnOffControl.xml
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/NetworkInfraManager.xml b/data_model/1.6/device_types/NetworkInfraManager.xml
new file mode 100644
index 00000000000..6309cf7ee5e
--- /dev/null
+++ b/data_model/1.6/device_types/NetworkInfraManager.xml
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/OccupancySensor.xml b/data_model/1.6/device_types/OccupancySensor.xml
new file mode 100644
index 00000000000..8a7286963c9
--- /dev/null
+++ b/data_model/1.6/device_types/OccupancySensor.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/OnOffLight.xml b/data_model/1.6/device_types/OnOffLight.xml
new file mode 100644
index 00000000000..e418e937727
--- /dev/null
+++ b/data_model/1.6/device_types/OnOffLight.xml
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/OnOffLightSwitch.xml b/data_model/1.6/device_types/OnOffLightSwitch.xml
new file mode 100644
index 00000000000..3e62900be2a
--- /dev/null
+++ b/data_model/1.6/device_types/OnOffLightSwitch.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/OnOffPlug-inUnit.xml b/data_model/1.6/device_types/OnOffPlug-inUnit.xml
new file mode 100644
index 00000000000..b2c7d011f40
--- /dev/null
+++ b/data_model/1.6/device_types/OnOffPlug-inUnit.xml
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/OnOffSensor.xml b/data_model/1.6/device_types/OnOffSensor.xml
new file mode 100644
index 00000000000..446467f07f9
--- /dev/null
+++ b/data_model/1.6/device_types/OnOffSensor.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/OtaProvider.xml b/data_model/1.6/device_types/OtaProvider.xml
new file mode 100644
index 00000000000..f048fd9beb1
--- /dev/null
+++ b/data_model/1.6/device_types/OtaProvider.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/OtaRequestor.xml b/data_model/1.6/device_types/OtaRequestor.xml
new file mode 100644
index 00000000000..b882eda30fd
--- /dev/null
+++ b/data_model/1.6/device_types/OtaRequestor.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Oven.xml b/data_model/1.6/device_types/Oven.xml
new file mode 100644
index 00000000000..193ce51d779
--- /dev/null
+++ b/data_model/1.6/device_types/Oven.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/PowerSource.xml b/data_model/1.6/device_types/PowerSource.xml
new file mode 100644
index 00000000000..38c6f268a55
--- /dev/null
+++ b/data_model/1.6/device_types/PowerSource.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/PressureSensor.xml b/data_model/1.6/device_types/PressureSensor.xml
new file mode 100644
index 00000000000..bacc9b3b9a1
--- /dev/null
+++ b/data_model/1.6/device_types/PressureSensor.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Pump.xml b/data_model/1.6/device_types/Pump.xml
new file mode 100644
index 00000000000..70925901cfd
--- /dev/null
+++ b/data_model/1.6/device_types/Pump.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/PumpController.xml b/data_model/1.6/device_types/PumpController.xml
new file mode 100644
index 00000000000..2faa8967180
--- /dev/null
+++ b/data_model/1.6/device_types/PumpController.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/RainSensor.xml b/data_model/1.6/device_types/RainSensor.xml
new file mode 100644
index 00000000000..efe98d0c069
--- /dev/null
+++ b/data_model/1.6/device_types/RainSensor.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Refrigerator.xml b/data_model/1.6/device_types/Refrigerator.xml
new file mode 100644
index 00000000000..6d22572b3fc
--- /dev/null
+++ b/data_model/1.6/device_types/Refrigerator.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/RoboticVacuumCleaner.xml b/data_model/1.6/device_types/RoboticVacuumCleaner.xml
new file mode 100644
index 00000000000..b4561bd9ed3
--- /dev/null
+++ b/data_model/1.6/device_types/RoboticVacuumCleaner.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/RoomAirConditioner.xml b/data_model/1.6/device_types/RoomAirConditioner.xml
new file mode 100644
index 00000000000..8b8a1a38a26
--- /dev/null
+++ b/data_model/1.6/device_types/RoomAirConditioner.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/RootNodeDeviceType.xml b/data_model/1.6/device_types/RootNodeDeviceType.xml
new file mode 100644
index 00000000000..6278a752291
--- /dev/null
+++ b/data_model/1.6/device_types/RootNodeDeviceType.xml
@@ -0,0 +1,360 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/SecondaryNetworkInterface.xml b/data_model/1.6/device_types/SecondaryNetworkInterface.xml
new file mode 100644
index 00000000000..febbe65c24e
--- /dev/null
+++ b/data_model/1.6/device_types/SecondaryNetworkInterface.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/SmokeCOAlarm.xml b/data_model/1.6/device_types/SmokeCOAlarm.xml
new file mode 100644
index 00000000000..f4dc779ff59
--- /dev/null
+++ b/data_model/1.6/device_types/SmokeCOAlarm.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/SnapshotCamera.xml b/data_model/1.6/device_types/SnapshotCamera.xml
new file mode 100644
index 00000000000..f39717fcff0
--- /dev/null
+++ b/data_model/1.6/device_types/SnapshotCamera.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/SoilSensor.xml b/data_model/1.6/device_types/SoilSensor.xml
new file mode 100644
index 00000000000..4cb22c14752
--- /dev/null
+++ b/data_model/1.6/device_types/SoilSensor.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/SolarPower.xml b/data_model/1.6/device_types/SolarPower.xml
new file mode 100644
index 00000000000..d0875d1f864
--- /dev/null
+++ b/data_model/1.6/device_types/SolarPower.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Speaker.xml b/data_model/1.6/device_types/Speaker.xml
new file mode 100644
index 00000000000..62889337917
--- /dev/null
+++ b/data_model/1.6/device_types/Speaker.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/TemperatureControlledCabinet.xml b/data_model/1.6/device_types/TemperatureControlledCabinet.xml
new file mode 100644
index 00000000000..146d2709baf
--- /dev/null
+++ b/data_model/1.6/device_types/TemperatureControlledCabinet.xml
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/TemperatureSensor.xml b/data_model/1.6/device_types/TemperatureSensor.xml
new file mode 100644
index 00000000000..728edf50222
--- /dev/null
+++ b/data_model/1.6/device_types/TemperatureSensor.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/Thermostat.xml b/data_model/1.6/device_types/Thermostat.xml
new file mode 100644
index 00000000000..01c7a347aa6
--- /dev/null
+++ b/data_model/1.6/device_types/Thermostat.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ThermostatController.xml b/data_model/1.6/device_types/ThermostatController.xml
new file mode 100644
index 00000000000..d2463bf8add
--- /dev/null
+++ b/data_model/1.6/device_types/ThermostatController.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/ThreadBorderRouter.xml b/data_model/1.6/device_types/ThreadBorderRouter.xml
new file mode 100644
index 00000000000..ea6086e268f
--- /dev/null
+++ b/data_model/1.6/device_types/ThreadBorderRouter.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/VideoDoorbell.xml b/data_model/1.6/device_types/VideoDoorbell.xml
new file mode 100644
index 00000000000..37e4693966b
--- /dev/null
+++ b/data_model/1.6/device_types/VideoDoorbell.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/VideoRemoteControl.xml b/data_model/1.6/device_types/VideoRemoteControl.xml
new file mode 100644
index 00000000000..823cd861d3f
--- /dev/null
+++ b/data_model/1.6/device_types/VideoRemoteControl.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/WaterFreezeDetector.xml b/data_model/1.6/device_types/WaterFreezeDetector.xml
new file mode 100644
index 00000000000..b422f0b205e
--- /dev/null
+++ b/data_model/1.6/device_types/WaterFreezeDetector.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/WaterHeater.xml b/data_model/1.6/device_types/WaterHeater.xml
new file mode 100644
index 00000000000..5f04901b9e3
--- /dev/null
+++ b/data_model/1.6/device_types/WaterHeater.xml
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/WaterLeakDetector.xml b/data_model/1.6/device_types/WaterLeakDetector.xml
new file mode 100644
index 00000000000..7a6a1dc20e1
--- /dev/null
+++ b/data_model/1.6/device_types/WaterLeakDetector.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/WaterValve.xml b/data_model/1.6/device_types/WaterValve.xml
new file mode 100644
index 00000000000..5cecee354bf
--- /dev/null
+++ b/data_model/1.6/device_types/WaterValve.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/WindowCovering.xml b/data_model/1.6/device_types/WindowCovering.xml
new file mode 100644
index 00000000000..828b00aa763
--- /dev/null
+++ b/data_model/1.6/device_types/WindowCovering.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/WindowCoveringController.xml b/data_model/1.6/device_types/WindowCoveringController.xml
new file mode 100644
index 00000000000..03b06e3688f
--- /dev/null
+++ b/data_model/1.6/device_types/WindowCoveringController.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/device_types/device_type_ids.json b/data_model/1.6/device_types/device_type_ids.json
new file mode 100644
index 00000000000..6e60e7e42a1
--- /dev/null
+++ b/data_model/1.6/device_types/device_type_ids.json
@@ -0,0 +1,94 @@
+{
+ "10": "Door Lock",
+ "11": "Door Lock Controller",
+ "14": "Aggregator",
+ "15": "Generic Switch",
+ "17": "Power Source",
+ "18": "OTA Requestor",
+ "19": "Bridged Node",
+ "20": "OTA Provider",
+ "21": "Contact Sensor",
+ "22": "Root Node",
+ "23": "Solar Power",
+ "24": "Battery Storage",
+ "25": "Secondary Network Interface",
+ "34": "Speaker",
+ "35": "Casting Video Player",
+ "36": "Content App",
+ "39": "Mode Select",
+ "40": "Basic Video Player",
+ "41": "Casting Video Client",
+ "42": "Video Remote Control",
+ "43": "Fan",
+ "44": "Air Quality Sensor",
+ "45": "Air Purifier",
+ "64": "Irrigation System",
+ "65": "Water Freeze Detector",
+ "66": "Water Valve",
+ "67": "Water Leak Detector",
+ "68": "Rain Sensor",
+ "69": "Soil Sensor",
+ "112": "Refrigerator",
+ "113": "Temperature Controlled Cabinet",
+ "114": "Room Air Conditioner",
+ "115": "Laundry Washer",
+ "116": "Robotic Vacuum Cleaner",
+ "117": "Dishwasher",
+ "118": "Smoke CO Alarm",
+ "119": "Cook Surface",
+ "120": "Cooktop",
+ "121": "Microwave Oven",
+ "122": "Extractor Hood",
+ "123": "Oven",
+ "124": "Laundry Dryer",
+ "144": "Network Infrastructure Manager",
+ "145": "Thread Border Router",
+ "256": "On/Off Light",
+ "257": "Dimmable Light",
+ "259": "On/Off Light Switch",
+ "260": "Dimmer Switch",
+ "261": "Color Dimmer Switch",
+ "262": "Light Sensor",
+ "263": "Occupancy Sensor",
+ "266": "On/Off Plug-in Unit",
+ "267": "Dimmable Plug-In Unit",
+ "268": "Color Temperature Light",
+ "269": "Extended Color Light",
+ "271": "Mounted On/Off Control",
+ "272": "Mounted Dimmable Load Control",
+ "304": "Joint Fabric Administrator",
+ "320": "Intercom",
+ "321": "Audio Doorbell",
+ "322": "Camera",
+ "323": "Video Doorbell",
+ "324": "Floodlight Camera",
+ "325": "Snapshot Camera",
+ "326": "Chime",
+ "327": "Camera Controller",
+ "328": "Doorbell",
+ "336": "Ambient Context Sensor",
+ "514": "Window Covering",
+ "515": "Window Covering Controller",
+ "560": "Closure",
+ "561": "Closure Panel",
+ "574": "Closure Controller",
+ "769": "Thermostat",
+ "770": "Temperature Sensor",
+ "771": "Pump",
+ "772": "Pump Controller",
+ "773": "Pressure Sensor",
+ "774": "Flow Sensor",
+ "775": "Humidity Sensor",
+ "777": "Heat Pump",
+ "778": "Thermostat Controller",
+ "1292": "Energy EVSE",
+ "1293": "Device Energy Management",
+ "1295": "Water Heater",
+ "1296": "Electrical Sensor",
+ "1297": "Electrical Utility Meter",
+ "1298": "Meter Reference Point",
+ "1299": "Electrical Energy Tariff",
+ "1300": "Electrical Meter",
+ "2112": "Control Bridge",
+ "2128": "On/Off Sensor"
+}
diff --git a/data_model/1.6/globals/Bitmaps.xml b/data_model/1.6/globals/Bitmaps.xml
new file mode 100644
index 00000000000..ab815523e17
--- /dev/null
+++ b/data_model/1.6/globals/Bitmaps.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/globals/Commands.xml b/data_model/1.6/globals/Commands.xml
new file mode 100644
index 00000000000..f7a69315211
--- /dev/null
+++ b/data_model/1.6/globals/Commands.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/globals/Enums.xml b/data_model/1.6/globals/Enums.xml
new file mode 100644
index 00000000000..75539883819
--- /dev/null
+++ b/data_model/1.6/globals/Enums.xml
@@ -0,0 +1,247 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
diff --git a/data_model/1.6/globals/Structs.xml b/data_model/1.6/globals/Structs.xml
new file mode 100644
index 00000000000..8b09094aad6
--- /dev/null
+++ b/data_model/1.6/globals/Structs.xml
@@ -0,0 +1,377 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ subtract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/globals/TypeDefs.xml b/data_model/1.6/globals/TypeDefs.xml
new file mode 100644
index 00000000000..d6c6b2a73c3
--- /dev/null
+++ b/data_model/1.6/globals/TypeDefs.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Closure-Cabinet.xml b/data_model/1.6/namespaces/Namespace-Closure-Cabinet.xml
new file mode 100644
index 00000000000..3f511dbceda
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Closure-Cabinet.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+ A hinged or sliding panel used to cover the opening of a cabinet, providing access to its interior.
+
+
+ A sliding storage compartment, typically built into furniture like cabinets, desks, or dressers.
+
+
+ A hinged front or flexible cover that can be lifted or moved, providing access to its interior.
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Closure-Covering.xml b/data_model/1.6/namespaces/Namespace-Closure-Covering.xml
new file mode 100644
index 00000000000..722175b9a16
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Closure-Covering.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+ A covering made of horizontal or vertical slats that can be adjusted to control light, privacy, and airflow.
+
+
+ A protective covering, typically made of fabric or metal, that extends from a building's exterior to provide shade or shelter from the elements.
+
+
+ A hinged or sliding covering typically made of wood, metal, or vinyl, used to provide privacy, security, and light control.
+
+
+ A type of covering consisting of horizontal slats that can be adjusted to control light, privacy, and airflow.
+
+
+ A piece of fabric hung over a window to provide privacy, block light, or enhance the room’s embellishment.
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Closure-Window.xml b/data_model/1.6/namespaces/Namespace-Closure-Window.xml
new file mode 100644
index 00000000000..13dfe6abff4
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Closure-Window.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+ A window installed in a roof to provide natural light, ventilation, and sometimes access to the roof.
+
+
+ A window installed in the vertical exterior wall of a building. It allows natural light, ventilation, and views.
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Closure.xml b/data_model/1.6/namespaces/Namespace-Closure.xml
new file mode 100644
index 00000000000..bb13f60596e
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Closure.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+ Any material or treatment used to cover a window for privacy, light control, insulation, or decoration.
+
+
+ An opening in a wall, door, or roof fitted with glass or another transparent material to allow light, air, and views while providing insulation and security.
+
+
+ A physical or conceptual obstruction that prevents movement, access, or progress that serve purposes such as security, safety, privacy, control, etc.
+
+
+ A storage unit with shelves, drawers, or doors, used for organizing and protecting items.
+
+
+ A movable barrier that controls entry or exit through an opening in a fence, wall, or enclosure.
+
+
+ A large, movable barrier that provides access to a garage.
+
+
+ A movable barrier that allows entry and exit between spaces while providing security, privacy, and insulation.
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-ClosurePanel.xml b/data_model/1.6/namespaces/Namespace-ClosurePanel.xml
new file mode 100644
index 00000000000..4367b0184c0
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-ClosurePanel.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+ Refers to the upward or downward motion of an object, typically along a vertical axis.
+
+
+ Refers to the action of rotating or tilting an object or surface along a horizontal or vertical axis.
+
+
+ Refers to the smooth, horizontal motion of an object along an axis, where the object moves back and forth or side to side.
+
+
+ Refers to the circular motion of an object around a fixed point or axis, typically in a circular motion.
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-CommodityTariff-Chronology.xml b/data_model/1.6/namespaces/Namespace-CommodityTariff-Chronology.xml
new file mode 100644
index 00000000000..df5f4c97cb8
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-CommodityTariff-Chronology.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+ Represents the current Commodity Tariff
+
+
+ Represents the previous Commodity Tariff
+
+
+ Represents the upcoming Commodity Tariff
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-CommodityTariff-Commodity.xml b/data_model/1.6/namespaces/Namespace-CommodityTariff-Commodity.xml
new file mode 100644
index 00000000000..851b515b7be
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-CommodityTariff-Commodity.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-CommodityTariff-Flow.xml b/data_model/1.6/namespaces/Namespace-CommodityTariff-Flow.xml
new file mode 100644
index 00000000000..6f8461e9008
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-CommodityTariff-Flow.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-Area.xml b/data_model/1.6/namespaces/Namespace-Common-Area.xml
new file mode 100644
index 00000000000..0f13aab8dc1
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-Area.xml
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+ Also known as Restroom
+
+
+
+
+ A small room typically used for storage
+
+
+
+
+
+
+ A small room for storing clothing, linens, and other items.
+
+
+
+
+
+
+
+ A small, comfortable room for individual activities such as work or hobbies
+
+
+
+
+
+
+
+ A bathroom directly accessible from a bedroom
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Also known as Guest Restroom
+
+
+
+ Also known as Guest Bedroom
+
+
+
+
+ A cozy room containing a fireplace or other point heat source
+
+
+
+
+
+
+
+
+
+
+
+ A space used to remove soiled garments prior to entering the domicile proper
+
+
+
+
+
+
+
+ AKA a larder, a place where food is stored
+
+
+
+
+
+
+ A room centered around a pool/billiards table
+
+
+
+
+
+
+
+
+
+
+ A utility space for cleaning dishes and laundry
+
+
+
+
+
+
+
+ An informal space meant to be 'cozy', 'snug', relaxed, meant to share with family or friends
+
+
+
+
+
+
+
+
+
+
+
+
+ The innermost area of a large home
+
+
+
+ A room dedicated to a toilet; a water closet / WC
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-Closure.xml b/data_model/1.6/namespaces/Namespace-Common-Closure.xml
new file mode 100644
index 00000000000..6cc806308e3
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-Closure.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+ Move toward open position
+
+
+ Move toward closed position
+
+
+ Stop any movement
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-CompassDirection.xml b/data_model/1.6/namespaces/Namespace-Common-CompassDirection.xml
new file mode 100644
index 00000000000..4139b5ecb80
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-CompassDirection.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-CompassLocation.xml b/data_model/1.6/namespaces/Namespace-Common-CompassLocation.xml
new file mode 100644
index 00000000000..62385083080
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-CompassLocation.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-Direction.xml b/data_model/1.6/namespaces/Namespace-Common-Direction.xml
new file mode 100644
index 00000000000..8d888f32a1f
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-Direction.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-Landmark.xml b/data_model/1.6/namespaces/Namespace-Common-Landmark.xml
new file mode 100644
index 00000000000..7d1450008c7
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-Landmark.xml
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ An indoor furnishing for pets to rest or sleep inside
+
+
+
+
+
+ An area where a showerhead dispenses water for people to shower
+
+
+
+
+
+
+
+
+
+
+
+ A type of refrigerator that is shelved to hold wine bottles and (typically) display them through a glass front
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-Level.xml b/data_model/1.6/namespaces/Namespace-Common-Level.xml
new file mode 100644
index 00000000000..fb709116e8a
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-Level.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-Location.xml b/data_model/1.6/namespaces/Namespace-Common-Location.xml
new file mode 100644
index 00000000000..453ea6e1581
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-Location.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+ Element is indoors or related to indoor equipment/conditions (e.g. the "indoor" temperature).
+
+
+ Element is outdoors or related to outdoor equipment/conditions (e.g. the "outdoor" temperature).
+
+
+ Element is located inside the equipment (e.g. a sensor "inside" a cabinet).
+
+
+ Element is located outside the equipment (e.g. a sensor "outside" a cabinet).
+
+
+ Element is a part of a location divided into zones (e.g. a yard irrigation zone).
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-Number.xml b/data_model/1.6/namespaces/Namespace-Common-Number.xml
new file mode 100644
index 00000000000..2e54510f51d
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-Number.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-Position.xml b/data_model/1.6/namespaces/Namespace-Common-Position.xml
new file mode 100644
index 00000000000..0551a318cb8
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-Position.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ Numeric value provided in Label field
+
+
+ Numeric value provided in Label field
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Common-RelativePosition.xml b/data_model/1.6/namespaces/Namespace-Common-RelativePosition.xml
new file mode 100644
index 00000000000..2f86f672bdd
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Common-RelativePosition.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+ Area in proximity to the point of reference
+
+
+ The area surrounding the point the reference
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-ElectricalMeasurement.xml b/data_model/1.6/namespaces/Namespace-ElectricalMeasurement.xml
new file mode 100644
index 00000000000..84f8a192d8b
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-ElectricalMeasurement.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+ Indicates values measured for a DC load
+
+
+ Indicates values measured for a single-phase AC load, or values measured for the collective load on a polyphase AC power supply
+
+
+ Indicates values measured for an AC load on phase 1 of a polyphase power supply
+
+
+ Indicates values measured for an AC load on phase 2 of a polyphase power supply
+
+
+ Indicates values measured for an AC load on phase 3 of a polyphase power supply
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-IdentifiedHumanActivity.xml b/data_model/1.6/namespaces/Namespace-IdentifiedHumanActivity.xml
new file mode 100644
index 00000000000..fe01d952982
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-IdentifiedHumanActivity.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+ Unknown human activity is detected.
+
+
+ Human fall is detected.
+
+
+ Human sleeping is detected.
+
+
+ Human walking is detected.
+
+
+ Human workout is detected.
+
+
+ Human sitting is detected.
+
+
+ Human standing is detected.
+
+
+ Human dancing is detected.
+
+
+ Human delivery of package is detected.
+
+
+ Human retrieval of package is detected.
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-IdentifiedObject.xml b/data_model/1.6/namespaces/Namespace-IdentifiedObject.xml
new file mode 100644
index 00000000000..1a084cf3f55
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-IdentifiedObject.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+ Unknown object is detected.
+
+
+ Human adult is detected.
+
+
+ Human child is detected.
+
+
+ Person is detected.
+
+
+ Robot Vacuum Cleaner is detected.
+
+
+ Pet animal is detected.
+
+
+ Dog is detected.
+
+
+ Cat is detected.
+
+
+ Animal is detected.
+
+
+ Car is detected.
+
+
+ Vehicle is detected.
+
+
+ Package is detected.
+
+
+ Clothes are detected.
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-IdentifiedSound.xml b/data_model/1.6/namespaces/Namespace-IdentifiedSound.xml
new file mode 100644
index 00000000000..41b0831e9a0
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-IdentifiedSound.xml
@@ -0,0 +1,129 @@
+
+
+
+
+
+ Unidentifiable audio context is detected.
+
+
+ Object falling to the floor is detected.
+
+
+ Human snoring sound is detected.
+
+
+ Human coughing sound is detected.
+
+
+ Dog barking sound is detected.
+
+
+ Object shattering sound is detected.
+
+
+ Baby crying sound is detected.
+
+
+ Utility device alarming or warning sound is detected.
+
+
+ Urgent shouting sound is detected.
+
+
+ Doorbell ringing is detected.
+
+
+ Door knocking sound is detected.
+
+
+ Urgent situational siren sound is detected.
+
+
+ Faucet water running sound is detected.
+
+
+ Kettle water boiling sound is detected.
+
+
+ Hair/hand fan dryer sound is detected.
+
+
+ Hand clapping sound is detected.
+
+
+ Finger snapping sound is detected.
+
+
+ Cat meowing sound is detected.
+
+
+ Human laughing sound is detected.
+
+
+ Glass breaking sound is detected.
+
+
+ Door knocking sound is detected.
+
+
+ Person talking sound is detected.
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Laundry.xml b/data_model/1.6/namespaces/Namespace-Laundry.xml
new file mode 100644
index 00000000000..aeadaca1b63
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Laundry.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-PowerSource.xml b/data_model/1.6/namespaces/Namespace-PowerSource.xml
new file mode 100644
index 00000000000..37523a1a8b0
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-PowerSource.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+ The Power Source cluster is related to power provided from an unknown source
+
+
+ The Power Source cluster is related to power provided from the electrical grid
+
+
+ The Power Source cluster is related to power provided from a solar panel array
+
+
+ The Power Source cluster is related to power provided from a battery
+
+
+ The Power Source cluster is related to power provided from an electric vehicle
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Refrigerator.xml b/data_model/1.6/namespaces/Namespace-Refrigerator.xml
new file mode 100644
index 00000000000..d823a0016cc
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Refrigerator.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-RoomAirConditioner.xml b/data_model/1.6/namespaces/Namespace-RoomAirConditioner.xml
new file mode 100644
index 00000000000..9697586acf1
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-RoomAirConditioner.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
diff --git a/data_model/1.6/namespaces/Namespace-Switches.xml b/data_model/1.6/namespaces/Namespace-Switches.xml
new file mode 100644
index 00000000000..de727394e37
--- /dev/null
+++ b/data_model/1.6/namespaces/Namespace-Switches.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+ e.g. dim up (light)
+
+
+ e.g. dim down (light)
+
+
+ e.g. select next scene
+
+
+ e.g. select previous scene
+
+
+ Enter/OK/Select function
+
+
+ Textual description provided in Label field
+
+
+ e.g. open window covering
+
+
+ e.g. close window covering
+
+
+ e.g. stop moving window covering
+
+
+
diff --git a/data_model/1.6/scraper_version b/data_model/1.6/scraper_version
new file mode 100644
index 00000000000..af512f36feb
--- /dev/null
+++ b/data_model/1.6/scraper_version
@@ -0,0 +1 @@
+alchemy version: v1.6.9
diff --git a/data_model/1.6/spec_sha b/data_model/1.6/spec_sha
new file mode 100644
index 00000000000..252c1926515
--- /dev/null
+++ b/data_model/1.6/spec_sha
@@ -0,0 +1 @@
+1cbcdd626ab769a5584be93c5844ad3a9aa2ee44
diff --git a/data_model/1.6/spec_tag b/data_model/1.6/spec_tag
new file mode 100644
index 00000000000..eb1c2aa040c
--- /dev/null
+++ b/data_model/1.6/spec_tag
@@ -0,0 +1 @@
+0.9-summer2026
diff --git a/docs/guides/BUILDING.md b/docs/guides/BUILDING.md
index 17607b45c87..407f9d9a50b 100644
--- a/docs/guides/BUILDING.md
+++ b/docs/guides/BUILDING.md
@@ -91,7 +91,7 @@ satisfied with the following command:
sudo apt-get install git gcc g++ pkg-config cmake curl libssl-dev libdbus-1-dev \
libglib2.0-dev libavahi-client-dev ninja-build python3-venv python3-dev \
python3-pip unzip libgirepository1.0-dev libcairo2-dev libreadline-dev \
- default-jre
+ libevent-dev default-jre
```
#### Upgrading Python on Ubuntu 22.04
diff --git a/docs/guides/writing_clusters.md b/docs/guides/writing_clusters.md
index 9a6907033ff..5461a7241cf 100644
--- a/docs/guides/writing_clusters.md
+++ b/docs/guides/writing_clusters.md
@@ -85,6 +85,50 @@ cluster is a good example of this pattern.
interactions. We recommend the term `Driver` to avoid confusion with the
overloaded term `Delegate`.
+### Design Principles
+
+When designing and implementing a cluster, adhere to the following principles to
+ensure a high-quality and developer-friendly experience:
+
+#### Prioritize Easy Application Development
+
+Clusters should aim to do as much work as possible autonomously, reducing the
+burden on the application developer.
+
+- **Handle Common Logic Internally:** Implement persistence (NVM), timers, and
+ complex state machines within the cluster itself. The application should
+ only be notified of significant events or changes it needs to act upon. _For
+ example, a state machine managing a multi-step process like a firmware
+ update, door lock/unlock sequence with retries, or a calibration procedure
+ should typically reside within the cluster, rather than requiring the
+ application to manage the intermediate steps and timeouts._
+- **Provide Helper Abstractions:** If a cluster requires the application to
+ implement complex logic, consider providing helper classes or default
+ implementations that simplify the task.
+- **Encapsulate Complexity:** Avoid deferring low-level details (like raw
+ storage keys or individual timer management) to the application.
+
+#### Delegate/Driver Pattern for Validation
+
+When an application needs to be involved in a cluster operation (especially
+writes or commands), use a delegate (or driver) interface that acts as a
+"pre-check."
+
+- **Pre-Write Validation:** For writable attributes, provide a callback that
+ allows the application to accept or reject the new value _before_ it is
+ applied to the cluster's internal state or persisted.
+- **Delegate Veto:** Callbacks must return a
+ `Protocols::InteractionModel::Status`. Returning any status other than
+ Success allows the application to reject the proposed change. The cluster
+ MUST honor this by failing the operation and propagating the delegate's
+ status code to the initiator.
+- **Perform Cluster-Level Checks First:** The cluster remains responsible for
+ all spec-defined validations (e.g., range checks, constraint validations, or
+ state-based restrictions) before involving the application delegate.
+- **Avoid Redundant Notifications:** Ensure that no-op operations (e.g.,
+ writing the same value that is already present) are handled early and do not
+ trigger delegate callbacks or change notifications.
+
### Choosing the Right Implementation Pattern
When implementing a cluster, you have two primary architectural choices: a
@@ -267,22 +311,27 @@ attribute's value changes.
- For the `NotifyAttributeChangedIfSuccess` ensure that WriteImpl is
returning
[ActionReturnStatus::FixedStatus::kWriteSuccessNoOp](https://github.com/project-chip/connectedhomeip/blob/master/src/app/data-model-provider/ActionReturnStatus.h)
- when no notification should be sent (e.g. write was a `noop` because
- existing value was already the same).
+ when no notification should be sent.
+
+ **Crucial:** No-op writes (where the value remains unchanged) MUST NOT
+ trigger:
+
+ - Network attribute change notifications.
+ - Application-level delegate/driver callbacks.
Canonical example is:
```cpp
- VerifyOrReturnValue(mValue != value, ActionReturnStatus::FixedStatus::kWriteSuccessNoOp);
+ VerifyOrReturnValue(mValue != newValue, ActionReturnStatus::FixedStatus::kWriteSuccessNoOp);
```
- **OnClusterAttributeChanged Pattern:** Each cluster should implement a
centralized helper method (e.g., `OnClusterAttributeChanged(AttributeId)`)
that combines both network and application notifications.
- Call `NotifyAttributeChanged()` to notify network subscribers.
- - Call delegate callbacks to notify the application layer.
- - Invoke this method from `WriteAttribute`, `InvokeCommand`, and setter
- methods.
+ - Call delegate callbacks to notify the application layer of the _actual_
+ change.
+ - Invoke this method only when a value has truly changed.
- **Example:** See
[Boolean State Configuration](https://github.com/project-chip/connectedhomeip/blob/master/src/app/clusters/boolean-state-configuration-server/BooleanStateConfigurationCluster.h)
which declares `OnClusterAttributeChanged(AttributeId)` as a private
diff --git a/docs/ids_and_codes/spec_clusters.md b/docs/ids_and_codes/spec_clusters.md
index 2f49ea9d0cf..c65ad241862 100644
--- a/docs/ids_and_codes/spec_clusters.md
+++ b/docs/ids_and_codes/spec_clusters.md
@@ -9,145 +9,149 @@ The following markers are used in this document (matches the ID master list):
| C | Certifiable |
| P | Provisional |
-| ID (Decimal) | ID (hex) | Name | PICS Code |1.0|1.1|1.2|1.3|1.4|1.4.1|1.4.2-mve-1|1.5|0.9-winter-2026|
-|--------------|----------|----------------------------------------------------------|---------------|---|---|---|---|---|-----|-----------|---|---------------|
-|3 |0x0003 |Identify |I |C |C |C |C |C |C |C |C |C |
-|4 |0x0004 |Groups |G |C |C |C |C |C |C |C |C |C |
-|5 |0x0005 |Scenes |S |C |C |C | | | | | | |
-|6 |0x0006 |On/Off |OO |C |C |C |C |C |C |C |C |C |
-|8 |0x0008 |Level Control |LVL |C |C |C |C |C |C |C |C |C |
-|28 |0x001C |Pulse Width Modulation |PWM |C |C |C |P | | | | | |
-|29 |0x001D |Descriptor |DESC |C |C |C |C |C |C |C |C |C |
-|30 |0x001E |Binding |BIND |C |C |C |C |C |C |C |C |C |
-|31 |0x001F |Access Control |ACL |C |C |C |C |C |C |C |C |C |
-|37 |0x0025 |Actions |ACT |C |C |C |C |C |C |C |C |C |
-|40 |0x0028 |Basic Information |BINFO |C |C |C |C |C |C |C |C |C |
-|41 |0x0029 |OTA Software Update Provider |OTAP |C |C |C |C |C |C |C |C |C |
-|42 |0x002A |OTA Software Update Requestor |OTAR |C |C |C |C |C |C |C |C |C |
-|43 |0x002B |Localization Configuration |LCFG |C |C |C |C |C |C |C |C |C |
-|44 |0x002C |Time Format Localization |LTIME |C |C |C |C |C |C |C |C |C |
-|45 |0x002D |Unit Localization |LUNIT |C |C |C |C |C |C |C |C |C |
-|46 |0x002E |Power Source Configuration |PSCFG |C |C |C |C |C |C |C |C |C |
-|47 |0x002F |Power Source |PS |C |C |C |C |C |C |C |C |C |
-|48 |0x0030 |General Commissioning |CGEN |C |C |C |C |C |C |C |C |C |
-|49 |0x0031 |Network Commissioning |CNET |C |C |C |C |C |C |C |C |C |
-|50 |0x0032 |Diagnostic Logs |DLOG |C |C |C |C |C |C |C |C |C |
-|51 |0x0033 |General Diagnostics |DGGEN |C |C |C |C |C |C |C |C |C |
-|52 |0x0034 |Software Diagnostics |DGSW |C |C |C |C |C |C |C |C |C |
-|53 |0x0035 |Thread Network Diagnostics |DGTHREAD |C |C |C |C |C |C |C |C |C |
-|54 |0x0036 |Wi-Fi Network Diagnostics |DGWIFI |C |C |C |C |C |C |C |C |C |
-|55 |0x0037 |Ethernet Network Diagnostics |DGETH |C |C |C |C |C |C |C |C |C |
-|56 |0x0038 |Time Synchronization |TIMESYNC |C |C |C |C |C |C |C |C |C |
-|57 |0x0039 |Bridged Device Basic Information |BRBINFO |C |C |C |C |C |C |C |C |C |
-|59 |0x003B |Switch |SWTCH |C |C |C |C |C |C |C |C |C |
-|60 |0x003C |Administrator Commissioning |CADMIN |C |C |C |C |C |C |C |C |C |
-|62 |0x003E |Operational Credentials |OPCREDS |C |C |C |C |C |C |C |C |C |
-|63 |0x003F |Group Key Management |GRPKEY |C |C |C |C |C |C |C |C |C |
-|64 |0x0040 |Fixed Label |FLABEL |C |C |C |C |C |C |C |C |C |
-|65 |0x0041 |User Label |ULABEL |C |C |C |C |C |C |C |C |C |
-|66 |0x0042 |Proxy Configuration |PXCFG |C |C |C |P |P |P | | | |
-|67 |0x0043 |Proxy Discovery |PXDSC |C |C |C |P |P |P | | | |
-|68 |0x0044 |Valid Proxies |PXVALID |C |C |C |P |P |P | | | |
-|69 |0x0045 |Boolean State |BOOL |C |C |C |C |C |C |C |C |C |
-|70 |0x0046 |ICD Management |ICDM | | |C |C |C |C |C |C |C |
-|72 |0x0048 |Oven Cavity Operational State |OVENOPSTATE | | | |C |C |C |C |C |C |
-|73 |0x0049 |Oven Mode |OTCCM | | | |C |C |C |C |C |C |
-|74 |0x004A |Laundry Dryer Controls |DRYERCTRL | | | |C |C |C |C |C |C |
-|80 |0x0050 |Mode Select |MOD |C |C |C |C |C |C |C |C |C |
-|81 |0x0051 |Laundry Washer Mode |LWM | | |C |C |C |C |C |C |C |
-|82 |0x0052 |Refrigerator And Temperature Controlled Cabinet Mode |TCCM | | |C |C |C |C |C |C |C |
-|83 |0x0053 |Laundry Washer Controls |WASHERCTRL | | |C |C |C |C |C |C |C |
-|84 |0x0054 |RVC Run Mode |RVCRUNM | | |C |C |C |C |C |C |C |
-|85 |0x0055 |RVC Clean Mode |RVCCLEANM | | |C |C |C |C |C |C |C |
-|86 |0x0056 |Temperature Control |TCTL | | |C |C |C |C |C |C |C |
-|87 |0x0057 |Refrigerator Alarm |REFALM | | |C |C |C |C |C |C |C |
-|89 |0x0059 |Dishwasher Mode |DISHM | | |C |C |C |C |C |C |C |
-|91 |0x005B |Air Quality |AIRQUAL | | |C |C |C |C |C |C |C |
-|92 |0x005C |Smoke CO Alarm |SMOKECO | | |C |C |C |C |C |C |C |
-|93 |0x005D |Dishwasher Alarm |DISHALM | | |C |C |C |C |C |C |C |
-|94 |0x005E |Microwave Oven Mode |MWOM | | | |C |C |C |C |C |C |
-|95 |0x005F |Microwave Oven Control |MWOCTRL | | | |C |C |C |C |C |C |
-|96 |0x0060 |Operational State |OPSTATE | | |C |C |C |C |C |C |C |
-|97 |0x0061 |RVC Operational State |RVCOPSTATE | | |C |C |C |C |C |C |C |
-|98 |0x0062 |Scenes Management |S | | | |P |P |P |C |C |C |
-|113 |0x0071 |HEPA Filter Monitoring |HEPAFREMON | | |C |C |C |C |C |C |C |
-|114 |0x0072 |Activated Carbon Filter Monitoring |ACFREMON | | |C |C |C |C |C |C |C |
-|121 |0x0079 |Water Tank Level Monitoring |REPM | | | | |C |C |C |C |C |
-|128 |0x0080 |Boolean State Configuration |BOOLCFG | | | |C |C |C |C |C |C |
-|129 |0x0081 |Valve Configuration and Control |VALCC | | | |C |C |C |C |C |C |
-|144 |0x0090 |Electrical Power Measurement |EPM | | | |C |C |C |C |C |C |
-|145 |0x0091 |Electrical Energy Measurement |EEM | | | |C |C |C |C |C |C |
-|148 |0x0094 |Water Heater Management |EWATERHTR | | | | |C |C |C |C |C |
-|149 |0x0095 |Commodity Price |SEPR | | | | | | | |C |C |
-|151 |0x0097 |Messages |MESS | | | |C |C |C |C |C |C |
-|152 |0x0098 |Device Energy Management |DEM | | | |P |C |C |C |C |C |
-|153 |0x0099 |Energy EVSE |EEVSE | | | |C |C |C |C |C |C |
-|155 |0x009B |Energy Preference |EPREF | | | |P |P |P |P |P |P |
-|156 |0x009C |Power Topology |PWRTL | | | |C |C |C |C |C |C |
-|157 |0x009D |Energy EVSE Mode |EEVSEM | | | |C |C |C |C |C |C |
-|158 |0x009E |Water Heater Mode |WHM | | | | |C |C |C |C |C |
-|159 |0x009F |Device Energy Management Mode |DEMM | | | |P |C |C |C |C |C |
-|160 |0x00A0 |Electrical Grid Conditions |EGC | | | | | | | |C |C |
-|257 |0x0101 |Door Lock |DRLK |C |C |C |C |C |C |C |C |C |
-|258 |0x0102 |Window Covering |WNCV |C |C |C |C |C |C |C |C |C |
-|260 |0x0104 |Closure Control |CLCTRL | | | | | | | |C |C |
-|261 |0x0105 |Closure Dimension |CLDIM | | | | | | | |C |C |
-|336 |0x0150 |Service Area |SEAR | | | | |C |C |C |C |C |
-|512 |0x0200 |Pump Configuration and Control |PCC |C |C |C |C |C |C |C |C |C |
-|513 |0x0201 |Thermostat |TSTAT |C |C |C |C |C |C |C |C |C |
-|514 |0x0202 |Fan Control |FAN |C |C |C |C |C |C |C |C |C |
-|516 |0x0204 |Thermostat User Interface Configuration |TSUIC |C |C |C |C |C |C |C |C |C |
-|768 |0x0300 |Color Control |CC |C |C |C |C |C |C |C |C |C |
-|769 |0x0301 |Ballast Configuration |BC |C |C |C |P |P |P | | | |
-|1024 |0x0400 |Illuminance Measurement |ILL |C |C |C |C |C |C |C |C |C |
-|1026 |0x0402 |Temperature Measurement |TMP |C |C |C |C |C |C |C |C |C |
-|1027 |0x0403 |Pressure Measurement |PRS |C |C |C |C |C |C |C |C |C |
-|1028 |0x0404 |Flow Measurement |FLW |C |C |C |C |C |C |C |C |C |
-|1029 |0x0405 |Relative Humidity Measurement |RH |C |C |C |C |C |C |C |C |C |
-|1030 |0x0406 |Occupancy Sensing |OCC |C |C |C |C |C |C |C |C |C |
-|1031 |0x0407 |Leaf Wetness Measurement |RH |C |C |C | | | | | | |
-|1032 |0x0408 |Soil Moisture Measurement |RH |C |C |C | | | | | | |
-|1036 |0x040C |Carbon Monoxide Concentration Measurement |CMOCONC | | |C |C |C |C |C |C |C |
-|1037 |0x040D |Carbon Dioxide Concentration Measurement |CDOCONC | | |C |C |C |C |C |C |C |
-|1043 |0x0413 |Nitrogen Dioxide Concentration Measurement |NDOCONC | | |C |C |C |C |C |C |C |
-|1045 |0x0415 |Ozone Concentration Measurement |OZCONC | | |C |C |C |C |C |C |C |
-|1066 |0x042A |PM2.5 Concentration Measurement |PMICONC | | |C |C |C |C |C |C |C |
-|1067 |0x042B |Formaldehyde Concentration Measurement |FLDCONC | | |C |C |C |C |C |C |C |
-|1068 |0x042C |PM1 Concentration Measurement |PMHCONC | | |C |C |C |C |C |C |C |
-|1069 |0x042D |PM10 Concentration Measurement |PMKCONC | | |C |C |C |C |C |C |C |
-|1070 |0x042E |Total Volatile Organic Compounds Concentration Measurement|TVOCCONC | | |C |C |C |C |C |C |C |
-|1071 |0x042F |Radon Concentration Measurement |RNCONC | | |C |C |C |C |C |C |C |
-|1072 |0x0430 |Soil Measurement |SOIL | | | | | | | |C |C |
-|1105 |0x0451 |Wi-Fi Network Management |WIFINM | | | | |C |C |C |C |C |
-|1106 |0x0452 |Thread Border Router Management |TBRM | | | | |C |C |C |C |C |
-|1107 |0x0453 |Thread Network Directory |THNETDIR | | | | |C |C |C |C |C |
-|1283 |0x0503 |Wake On LAN |WAKEONLAN |C |C |C |C |C |C |C |C |C |
-|1284 |0x0504 |Channel |CHANNEL |C |C |C |C |C |C |C |C |C |
-|1285 |0x0505 |Target Navigator |TGTNAV |C |C |C |C |C |C |C |C |C |
-|1286 |0x0506 |Media Playback |MEDIAPLAYBACK |C |C |C |C |C |C |C |C |C |
-|1287 |0x0507 |Media Input |MEDIAINPUT |C |C |C |C |C |C |C |C |C |
-|1288 |0x0508 |Low Power |LOWPOWER |C |C |C |C |C |C |C |C |C |
-|1289 |0x0509 |Keypad Input |KEYPADINPUT |C |C |C |C |C |C |C |C |C |
-|1290 |0x050A |Content Launcher |CONTENTLAUNCHER|C |C |C |C |C |C |C |C |C |
-|1291 |0x050B |Audio Output |AUDIOOUTPUT |C |C |C |C |C |C |C |C |C |
-|1292 |0x050C |Application Launcher |APPLAUNCHER |C |C |C |C |C |C |C |C |C |
-|1293 |0x050D |Application Basic |APBSC |C |C |C |C |C |C |C |C |C |
-|1294 |0x050E |Account Login |ALOGIN |C |C |C |C |C |C |C |C |C |
-|1295 |0x050F |Content Control |CONCON | | | |P |P |P |P |P |P |
-|1296 |0x0510 |Content App Observer |APPOBSERVER | | | |C |C |C |C |C |C |
-|1360 |0x0550 |Zone Management |ZONEMGMT | | | | | | | |C |C |
-|1361 |0x0551 |Camera AV Stream Management |AVSM | | | | | | | |C |C |
-|1362 |0x0552 |Camera AV Settings User Level Management |AVSUM | | | | | | | |C |C |
-|1363 |0x0553 |WebRTC Transport Provider |WEBRTCP | | | | | | | |C |C |
-|1364 |0x0554 |WebRTC Transport Requestor |WEBRTCR | | | | | | | |C |C |
-|1365 |0x0555 |Push AV Stream Transport |PAVST | | | | | | | |C |C |
-|1366 |0x0556 |Chime |CHIME | | | | | | | |C |C |
-|1792 |0x0700 |Commodity Tariff |SETRF | | | | | | | |C |C |
-|1872 |0x0750 |Ecosystem Information |ECOINFO | | | | |C |C |C |C |C |
-|1873 |0x0751 |Commissioner Control |CCTRL | | | | |C |C |C |C |C |
-|1874 |0x0752 |Joint Fabric Datastore |JFDS | | | | |P |P |P |P |P |
-|1875 |0x0753 |Joint Fabric Administrator |JFPKI | | | | |P |P |P |P |P |
-|2049 |0x0801 |TLS Certificate Management |TLSCERT | | | | | | | |C |C |
-|2050 |0x0802 |TLS Client Management |TLSCLIENT | | | | | | | |C |C |
-|2822 |0x0B06 |Meter Identification |MTRID | | | | | | | |C |C |
-|2823 |0x0B07 |Commodity Metering |COMMTR | | | | | | | |C |C |
+| ID (Decimal) | ID (hex) | Name | PICS Code |1.0|1.1|1.2|1.3|1.4|1.4.1|1.4.2-mve-1|1.5|0.9-winter-2026|0.9-summer2026|
+|--------------|----------|----------------------------------------------------------|---------------|---|---|---|---|---|-----|-----------|---|---------------|--------------|
+|3 |0x0003 |Identify |I |C |C |C |C |C |C |C |C |C |C |
+|4 |0x0004 |Groups |G |C |C |C |C |C |C |C |C |C |C |
+|5 |0x0005 |Scenes |S |C |C |C | | | | | | | |
+|6 |0x0006 |On/Off |OO |C |C |C |C |C |C |C |C |C |C |
+|8 |0x0008 |Level Control |LVL |C |C |C |C |C |C |C |C |C |C |
+|28 |0x001C |Pulse Width Modulation |PWM |C |C |C |P | | | | | | |
+|29 |0x001D |Descriptor |DESC |C |C |C |C |C |C |C |C |C |C |
+|30 |0x001E |Binding |BIND |C |C |C |C |C |C |C |C |C |C |
+|31 |0x001F |Access Control |ACL |C |C |C |C |C |C |C |C |C |C |
+|37 |0x0025 |Actions |ACT |C |C |C |C |C |C |C |C |C |C |
+|40 |0x0028 |Basic Information |BINFO |C |C |C |C |C |C |C |C |C |C |
+|41 |0x0029 |OTA Software Update Provider |OTAP |C |C |C |C |C |C |C |C |C |C |
+|42 |0x002A |OTA Software Update Requestor |OTAR |C |C |C |C |C |C |C |C |C |C |
+|43 |0x002B |Localization Configuration |LCFG |C |C |C |C |C |C |C |C |C |C |
+|44 |0x002C |Time Format Localization |LTIME |C |C |C |C |C |C |C |C |C |C |
+|45 |0x002D |Unit Localization |LUNIT |C |C |C |C |C |C |C |C |C |C |
+|46 |0x002E |Power Source Configuration |PSCFG |C |C |C |C |C |C |C |C |C |C |
+|47 |0x002F |Power Source |PS |C |C |C |C |C |C |C |C |C |C |
+|48 |0x0030 |General Commissioning |CGEN |C |C |C |C |C |C |C |C |C |C |
+|49 |0x0031 |Network Commissioning |CNET |C |C |C |C |C |C |C |C |C |C |
+|50 |0x0032 |Diagnostic Logs |DLOG |C |C |C |C |C |C |C |C |C |C |
+|51 |0x0033 |General Diagnostics |DGGEN |C |C |C |C |C |C |C |C |C |C |
+|52 |0x0034 |Software Diagnostics |DGSW |C |C |C |C |C |C |C |C |C |C |
+|53 |0x0035 |Thread Network Diagnostics |DGTHREAD |C |C |C |C |C |C |C |C |C |C |
+|54 |0x0036 |Wi-Fi Network Diagnostics |DGWIFI |C |C |C |C |C |C |C |C |C |C |
+|55 |0x0037 |Ethernet Network Diagnostics |DGETH |C |C |C |C |C |C |C |C |C |C |
+|56 |0x0038 |Time Synchronization |TIMESYNC |C |C |C |C |C |C |C |C |C |C |
+|57 |0x0039 |Bridged Device Basic Information |BRBINFO |C |C |C |C |C |C |C |C |C |C |
+|59 |0x003B |Switch |SWTCH |C |C |C |C |C |C |C |C |C |C |
+|60 |0x003C |Administrator Commissioning |CADMIN |C |C |C |C |C |C |C |C |C |C |
+|62 |0x003E |Operational Credentials |OPCREDS |C |C |C |C |C |C |C |C |C |C |
+|63 |0x003F |Group Key Management |GRPKEY |C |C |C |C |C |C |C |C |C |C |
+|64 |0x0040 |Fixed Label |FLABEL |C |C |C |C |C |C |C |C |C |C |
+|65 |0x0041 |User Label |ULABEL |C |C |C |C |C |C |C |C |C |C |
+|66 |0x0042 |Proxy Configuration |PXCFG |C |C |C |P |P |P | | | | |
+|67 |0x0043 |Proxy Discovery |PXDSC |C |C |C |P |P |P | | | | |
+|68 |0x0044 |Valid Proxies |PXVALID |C |C |C |P |P |P | | | | |
+|69 |0x0045 |Boolean State |BOOL |C |C |C |C |C |C |C |C |C |C |
+|70 |0x0046 |ICD Management |ICDM | | |C |C |C |C |C |C |C |C |
+|72 |0x0048 |Oven Cavity Operational State |OVENOPSTATE | | | |C |C |C |C |C |C |C |
+|73 |0x0049 |Oven Mode |OTCCM | | | |C |C |C |C |C |C |C |
+|74 |0x004A |Laundry Dryer Controls |DRYERCTRL | | | |C |C |C |C |C |C |C |
+|80 |0x0050 |Mode Select |MOD |C |C |C |C |C |C |C |C |C |C |
+|81 |0x0051 |Laundry Washer Mode |LWM | | |C |C |C |C |C |C |C |C |
+|82 |0x0052 |Refrigerator And Temperature Controlled Cabinet Mode |TCCM | | |C |C |C |C |C |C |C |C |
+|83 |0x0053 |Laundry Washer Controls |WASHERCTRL | | |C |C |C |C |C |C |C |C |
+|84 |0x0054 |RVC Run Mode |RVCRUNM | | |C |C |C |C |C |C |C |C |
+|85 |0x0055 |RVC Clean Mode |RVCCLEANM | | |C |C |C |C |C |C |C |C |
+|86 |0x0056 |Temperature Control |TCTL | | |C |C |C |C |C |C |C |C |
+|87 |0x0057 |Refrigerator Alarm |REFALM | | |C |C |C |C |C |C |C |C |
+|89 |0x0059 |Dishwasher Mode |DISHM | | |C |C |C |C |C |C |C |C |
+|91 |0x005B |Air Quality |AIRQUAL | | |C |C |C |C |C |C |C |C |
+|92 |0x005C |Smoke CO Alarm |SMOKECO | | |C |C |C |C |C |C |C |C |
+|93 |0x005D |Dishwasher Alarm |DISHALM | | |C |C |C |C |C |C |C |C |
+|94 |0x005E |Microwave Oven Mode |MWOM | | | |C |C |C |C |C |C |C |
+|95 |0x005F |Microwave Oven Control |MWOCTRL | | | |C |C |C |C |C |C |C |
+|96 |0x0060 |Operational State |OPSTATE | | |C |C |C |C |C |C |C |C |
+|97 |0x0061 |RVC Operational State |RVCOPSTATE | | |C |C |C |C |C |C |C |C |
+|98 |0x0062 |Scenes Management |S | | | |P |P |P |C |C |C |C |
+|100 |0x0064 |Temperature Alarm |TEMPALM | | | | | | | | | |P |
+|101 |0x0065 |Groupcast |GC | | | | | | | | | |P |
+|113 |0x0071 |HEPA Filter Monitoring |HEPAFREMON | | |C |C |C |C |C |C |C |C |
+|114 |0x0072 |Activated Carbon Filter Monitoring |ACFREMON | | |C |C |C |C |C |C |C |C |
+|121 |0x0079 |Water Tank Level Monitoring |REPM | | | | |C |C |C |C |C |C |
+|128 |0x0080 |Boolean State Configuration |BOOLCFG | | | |C |C |C |C |C |C |C |
+|129 |0x0081 |Valve Configuration and Control |VALCC | | | |C |C |C |C |C |C |C |
+|144 |0x0090 |Electrical Power Measurement |EPM | | | |C |C |C |C |C |C |C |
+|145 |0x0091 |Electrical Energy Measurement |EEM | | | |C |C |C |C |C |C |C |
+|148 |0x0094 |Water Heater Management |EWATERHTR | | | | |C |C |C |C |C |C |
+|149 |0x0095 |Commodity Price |SEPR | | | | | | | |C |C |C |
+|151 |0x0097 |Messages |MESS | | | |C |C |C |C |C |C |C |
+|152 |0x0098 |Device Energy Management |DEM | | | |P |C |C |C |C |C |C |
+|153 |0x0099 |Energy EVSE |EEVSE | | | |C |C |C |C |C |C |C |
+|155 |0x009B |Energy Preference |EPREF | | | |P |P |P |P |P |P |P |
+|156 |0x009C |Power Topology |PWRTL | | | |C |C |C |C |C |C |C |
+|157 |0x009D |Energy EVSE Mode |EEVSEM | | | |C |C |C |C |C |C |C |
+|158 |0x009E |Water Heater Mode |WHM | | | | |C |C |C |C |C |C |
+|159 |0x009F |Device Energy Management Mode |DEMM | | | |P |C |C |C |C |C |C |
+|160 |0x00A0 |Electrical Grid Conditions |EGC | | | | | | | |C |C |C |
+|257 |0x0101 |Door Lock |DRLK |C |C |C |C |C |C |C |C |C |C |
+|258 |0x0102 |Window Covering |WNCV |C |C |C |C |C |C |C |C |C |C |
+|260 |0x0104 |Closure Control |CLCTRL | | | | | | | |C |C |C |
+|261 |0x0105 |Closure Dimension |CLDIM | | | | | | | |C |C |C |
+|336 |0x0150 |Service Area |SEAR | | | | |C |C |C |C |C |C |
+|512 |0x0200 |Pump Configuration and Control |PCC |C |C |C |C |C |C |C |C |C |C |
+|513 |0x0201 |Thermostat |TSTAT |C |C |C |C |C |C |C |C |C |C |
+|514 |0x0202 |Fan Control |FAN |C |C |C |C |C |C |C |C |C |C |
+|516 |0x0204 |Thermostat User Interface Configuration |TSUIC |C |C |C |C |C |C |C |C |C |C |
+|768 |0x0300 |Color Control |CC |C |C |C |C |C |C |C |C |C |C |
+|769 |0x0301 |Ballast Configuration |BC |C |C |C |P |P |P | | | | |
+|1024 |0x0400 |Illuminance Measurement |ILL |C |C |C |C |C |C |C |C |C |C |
+|1026 |0x0402 |Temperature Measurement |TMP |C |C |C |C |C |C |C |C |C |C |
+|1027 |0x0403 |Pressure Measurement |PRS |C |C |C |C |C |C |C |C |C |C |
+|1028 |0x0404 |Flow Measurement |FLW |C |C |C |C |C |C |C |C |C |C |
+|1029 |0x0405 |Relative Humidity Measurement |RH |C |C |C |C |C |C |C |C |C |C |
+|1030 |0x0406 |Occupancy Sensing |OCC |C |C |C |C |C |C |C |C |C |C |
+|1031 |0x0407 |Leaf Wetness Measurement |RH |C |C |C | | | | | | | |
+|1032 |0x0408 |Soil Moisture Measurement |RH |C |C |C | | | | | | | |
+|1036 |0x040C |Carbon Monoxide Concentration Measurement |CMOCONC | | |C |C |C |C |C |C |C |C |
+|1037 |0x040D |Carbon Dioxide Concentration Measurement |CDOCONC | | |C |C |C |C |C |C |C |C |
+|1043 |0x0413 |Nitrogen Dioxide Concentration Measurement |NDOCONC | | |C |C |C |C |C |C |C |C |
+|1045 |0x0415 |Ozone Concentration Measurement |OZCONC | | |C |C |C |C |C |C |C |C |
+|1066 |0x042A |PM2.5 Concentration Measurement |PMICONC | | |C |C |C |C |C |C |C |C |
+|1067 |0x042B |Formaldehyde Concentration Measurement |FLDCONC | | |C |C |C |C |C |C |C |C |
+|1068 |0x042C |PM1 Concentration Measurement |PMHCONC | | |C |C |C |C |C |C |C |C |
+|1069 |0x042D |PM10 Concentration Measurement |PMKCONC | | |C |C |C |C |C |C |C |C |
+|1070 |0x042E |Total Volatile Organic Compounds Concentration Measurement|TVOCCONC | | |C |C |C |C |C |C |C |C |
+|1071 |0x042F |Radon Concentration Measurement |RNCONC | | |C |C |C |C |C |C |C |C |
+|1072 |0x0430 |Soil Measurement |SOIL | | | | | | | |C |C |C |
+|1104 |0x0450 |Network Identity Management |NETIM | | | | | | | | | |P |
+|1105 |0x0451 |Wi-Fi Network Management |WIFINM | | | | |C |C |C |C |C |C |
+|1106 |0x0452 |Thread Border Router Management |TBRM | | | | |C |C |C |C |C |C |
+|1107 |0x0453 |Thread Network Directory |THNETDIR | | | | |C |C |C |C |C |C |
+|1108 |0x0454 |Thread Border Router Diagnostics |TBRD | | | | | | | | | |P |
+|1283 |0x0503 |Wake On LAN |WAKEONLAN |C |C |C |C |C |C |C |C |C |C |
+|1284 |0x0504 |Channel |CHANNEL |C |C |C |C |C |C |C |C |C |C |
+|1285 |0x0505 |Target Navigator |TGTNAV |C |C |C |C |C |C |C |C |C |C |
+|1286 |0x0506 |Media Playback |MEDIAPLAYBACK |C |C |C |C |C |C |C |C |C |C |
+|1287 |0x0507 |Media Input |MEDIAINPUT |C |C |C |C |C |C |C |C |C |C |
+|1288 |0x0508 |Low Power |LOWPOWER |C |C |C |C |C |C |C |C |C |C |
+|1289 |0x0509 |Keypad Input |KEYPADINPUT |C |C |C |C |C |C |C |C |C |C |
+|1290 |0x050A |Content Launcher |CONTENTLAUNCHER|C |C |C |C |C |C |C |C |C |C |
+|1291 |0x050B |Audio Output |AUDIOOUTPUT |C |C |C |C |C |C |C |C |C |C |
+|1292 |0x050C |Application Launcher |APPLAUNCHER |C |C |C |C |C |C |C |C |C |C |
+|1293 |0x050D |Application Basic |APBSC |C |C |C |C |C |C |C |C |C |C |
+|1294 |0x050E |Account Login |ALOGIN |C |C |C |C |C |C |C |C |C |C |
+|1295 |0x050F |Content Control |CONCON | | | |P |P |P |P |P |P |P |
+|1296 |0x0510 |Content App Observer |APPOBSERVER | | | |C |C |C |C |C |C |C |
+|1360 |0x0550 |Zone Management |ZONEMGMT | | | | | | | |C |C |C |
+|1361 |0x0551 |Camera AV Stream Management |AVSM | | | | | | | |C |C |C |
+|1362 |0x0552 |Camera AV Settings User Level Management |AVSUM | | | | | | | |C |C |C |
+|1363 |0x0553 |WebRTC Transport Provider |WEBRTCP | | | | | | | |C |C |C |
+|1364 |0x0554 |WebRTC Transport Requestor |WEBRTCR | | | | | | | |C |C |C |
+|1365 |0x0555 |Push AV Stream Transport |PAVST | | | | | | | |C |C |C |
+|1366 |0x0556 |Chime |CHIME | | | | | | | |C |C |C |
+|1792 |0x0700 |Commodity Tariff |SETRF | | | | | | | |C |C |C |
+|1872 |0x0750 |Ecosystem Information |ECOINFO | | | | |C |C |C |C |C |C |
+|1873 |0x0751 |Commissioner Control |CCTRL | | | | |C |C |C |C |C |C |
+|1874 |0x0752 |Joint Fabric Datastore |JFDS | | | | |P |P |P |P |P |P |
+|1875 |0x0753 |Joint Fabric Administrator |JFPKI | | | | |P |P |P |P |P |P |
+|2049 |0x0801 |TLS Certificate Management |TLSCERT | | | | | | | |C |C |C |
+|2050 |0x0802 |TLS Client Management |TLSCLIENT | | | | | | | |C |C |C |
+|2822 |0x0B06 |Meter Identification |MTRID | | | | | | | |C |C |C |
+|2823 |0x0B07 |Commodity Metering |COMMTR | | | | | | | |C |C |C |
diff --git a/docs/ids_and_codes/spec_device_types.md b/docs/ids_and_codes/spec_device_types.md
index f64e2c1073b..eb7ec2f56e5 100644
--- a/docs/ids_and_codes/spec_device_types.md
+++ b/docs/ids_and_codes/spec_device_types.md
@@ -9,97 +9,98 @@ The following markers are used in this document (matches the ID master list):
| C | Certifiable |
| P | Provisional |
-| ID (Decimal) | ID (hex) | Name |1.0|1.1|1.2|1.3|1.4|1.4.1|1.4.2-mve-1|1.5|0.9-winter-2026|
-|--------------|----------|------------------------------|---|---|---|---|---|-----|-----------|---|---------------|
-|10 |0x000A |Door Lock |C |C |C |C |C |C |C |C |C |
-|11 |0x000B |Door Lock Controller |C |C |C |C |C |C |C |C |C |
-|14 |0x000E |Aggregator |C |C |C |C |C |C |C |C |C |
-|15 |0x000F |Generic Switch |C |C |C |C |C |C |C |C |C |
-|17 |0x0011 |Power Source |C |C |C |C |C |C |C |C |C |
-|18 |0x0012 |OTA Requestor |C |C |C |C |C |C |C |C |C |
-|19 |0x0013 |Bridged Node |C |C |C |C |C |C |C |C |C |
-|20 |0x0014 |OTA Provider |C |C |C |C |C |C |C |C |C |
-|21 |0x0015 |Contact Sensor |C |C |C |C |C |C |C |C |C |
-|22 |0x0016 |Root Node |C |C |C |C |C |C |C |C |C |
-|23 |0x0017 |Solar Power | | | | |C |C |C |C |C |
-|24 |0x0018 |Battery Storage | | | | |C |C |C |C |C |
-|25 |0x0019 |Secondary Network Interface | | | | |C |C |C |C |C |
-|34 |0x0022 |Speaker |C |C |C |C |C |C |C |C |C |
-|35 |0x0023 |Casting Video Player |C |C |C |C |C |C |C |C |C |
-|36 |0x0024 |Content App |C |C |C |C |C |C |C |C |C |
-|39 |0x0027 |Mode Select |C |C |C |C |C |C |C |C |C |
-|40 |0x0028 |Basic Video Player |C |C |C |C |C |C |C |C |C |
-|41 |0x0029 |Casting Video Client |C |C |C |C |C |C |C |C |C |
-|42 |0x002A |Video Remote Control |C |C |C |C |C |C |C |C |C |
-|43 |0x002B |Fan |C |C |C |C |C |C |C |C |C |
-|44 |0x002C |Air Quality Sensor | | |C |C |C |C |C |C |C |
-|45 |0x002D |Air Purifier | | |C |C |C |C |C |C |C |
-|64 |0x0040 |Irrigation System | | | | | | | |C |C |
-|65 |0x0041 |Water Freeze Detector | | | |C |C |C |C |C |C |
-|66 |0x0042 |Water Valve | | | |C |C |C |C |C |C |
-|67 |0x0043 |Water Leak Detector | | | |C |C |C |C |C |C |
-|68 |0x0044 |Rain Sensor | | | |C |C |C |C |C |C |
-|69 |0x0045 |Soil Sensor | | | | | | | |C |C |
-|112 |0x0070 |Refrigerator | | |C |C |C |C |C |C |C |
-|113 |0x0071 |Temperature Controlled Cabinet| | |C |C |C |C |C |C |C |
-|114 |0x0072 |Room Air Conditioner | | |C |C |C |C |C |C |C |
-|115 |0x0073 |Laundry Washer | | |C |C |C |C |C |C |C |
-|116 |0x0074 |Robotic Vacuum Cleaner | | |C |C |C |C |C |C |C |
-|117 |0x0075 |Dishwasher | | |C |C |C |C |C |C |C |
-|118 |0x0076 |Smoke CO Alarm | | |C |C |C |C |C |C |C |
-|119 |0x0077 |Cook Surface | | | |C |C |C |C |C |C |
-|120 |0x0078 |Cooktop | | | |C |C |C |C |C |C |
-|121 |0x0079 |Microwave Oven | | | |C |C |C |C |C |C |
-|122 |0x007A |Extractor Hood | | | |C |C |C |C |C |C |
-|123 |0x007B |Oven | | | |C |C |C |C |C |C |
-|124 |0x007C |Laundry Dryer | | | |C |C |C |C |C |C |
-|144 |0x0090 |Network Infrastructure Manager| | | | |C |C |C |C |C |
-|145 |0x0091 |Thread Border Router | | | | |C |C |C |C |C |
-|256 |0x0100 |On/Off Light |C |C |C |C |C |C |C |C |C |
-|257 |0x0101 |Dimmable Light |C |C |C |C |C |C |C |C |C |
-|259 |0x0103 |On/Off Light Switch |C |C |C |C |C |C |C |C |C |
-|260 |0x0104 |Dimmer Switch |C |C |C |C |C |C |C |C |C |
-|261 |0x0105 |Color Dimmer Switch |C |C |C |C |C |C |C |C |C |
-|262 |0x0106 |Light Sensor |C |C |C |C |C |C |C |C |C |
-|263 |0x0107 |Occupancy Sensor |C |C |C |C |C |C |C |C |C |
-|266 |0x010A |On/Off Plug-in Unit |C |C |C |C |C |C |C |C |C |
-|267 |0x010B |Dimmable Plug-In Unit |C |C |C |C |C |C |C |C |C |
-|268 |0x010C |Color Temperature Light |C |C |C |C |C |C |C |C |C |
-|269 |0x010D |Extended Color Light |C |C |C |C |C |C |C |C |C |
-|271 |0x010F |Mounted On/Off Control | | | | |C |C |C |C |C |
-|272 |0x0110 |Mounted Dimmable Load Control | | | | |C |C |C |C |C |
-|304 |0x0130 |Joint Fabric Administrator | | | | |P |P |P |P |P |
-|320 |0x0140 |Intercom | | | | | | | |C |C |
-|321 |0x0141 |Audio Doorbell | | | | | | | |C |C |
-|322 |0x0142 |Camera | | | | | | | |C |C |
-|323 |0x0143 |Video Doorbell | | | | | | | |C |C |
-|324 |0x0144 |Floodlight Camera | | | | | | | |C |C |
-|325 |0x0145 |Snapshot Camera | | | | | | | |C |C |
-|326 |0x0146 |Chime | | | | | | | |C |C |
-|327 |0x0147 |Camera Controller | | | | | | | |C |C |
-|328 |0x0148 |Doorbell | | | | | | | |C |C |
-|514 |0x0202 |Window Covering |C |C |C |C |C |C |C |C |C |
-|515 |0x0203 |Window Covering Controller |C |C |C |C |C |C |C |C |C |
-|560 |0x0230 |Closure | | | | | | | |C |C |
-|561 |0x0231 |Closure Panel | | | | | | | |C |C |
-|574 |0x023E |Closure Controller | | | | | | | |C |C |
-|768 |0x0300 |Heating/Cooling Unit |C |C |C | | | | | | |
-|769 |0x0301 |Thermostat |C |C |C |C |C |C |C |C |C |
-|770 |0x0302 |Temperature Sensor |C |C |C |C |C |C |C |C |C |
-|771 |0x0303 |Pump |C |C |C |C |C |C |C |C |C |
-|772 |0x0304 |Pump Controller |C |C |C |C |C |C |C |C |C |
-|773 |0x0305 |Pressure Sensor |C |C |C |C |C |C |C |C |C |
-|774 |0x0306 |Flow Sensor |C |C |C |C |C |C |C |C |C |
-|775 |0x0307 |Humidity Sensor |C |C |C |C |C |C |C |C |C |
-|777 |0x0309 |Heat Pump | | | | |C |C |C |C |C |
-|778 |0x030A |Thermostat Controller | | | | | | |C |C |C |
-|1292 |0x050C |Energy EVSE | | | |C |C |C |C |C |C |
-|1293 |0x050D |Device Energy Management | | | |C |C |C |C |C |C |
-|1295 |0x050F |Water Heater | | | | |C |C |C |C |C |
-|1296 |0x0510 |Electrical Sensor | | | |C |C |C |C |C |C |
-|1297 |0x0511 |Electrical Utility Meter | | | | | | | |C |C |
-|1298 |0x0512 |Meter Reference Point | | | | | | | |C |C |
-|1299 |0x0513 |Electrical Energy Tariff | | | | | | | |C |C |
-|1300 |0x0514 |Electrical Meter | | | | | | | |C |C |
-|2112 |0x0840 |Control Bridge |C |C |C |C |C |C |C |C |C |
-|2128 |0x0850 |On/Off Sensor |C |C |C |C |C |C |C |C |C |
+| ID (Decimal) | ID (hex) | Name |1.0|1.1|1.2|1.3|1.4|1.4.1|1.4.2-mve-1|1.5|0.9-winter-2026|0.9-summer2026|
+|--------------|----------|------------------------------|---|---|---|---|---|-----|-----------|---|---------------|--------------|
+|10 |0x000A |Door Lock |C |C |C |C |C |C |C |C |C |C |
+|11 |0x000B |Door Lock Controller |C |C |C |C |C |C |C |C |C |C |
+|14 |0x000E |Aggregator |C |C |C |C |C |C |C |C |C |C |
+|15 |0x000F |Generic Switch |C |C |C |C |C |C |C |C |C |C |
+|17 |0x0011 |Power Source |C |C |C |C |C |C |C |C |C |C |
+|18 |0x0012 |OTA Requestor |C |C |C |C |C |C |C |C |C |C |
+|19 |0x0013 |Bridged Node |C |C |C |C |C |C |C |C |C |C |
+|20 |0x0014 |OTA Provider |C |C |C |C |C |C |C |C |C |C |
+|21 |0x0015 |Contact Sensor |C |C |C |C |C |C |C |C |C |C |
+|22 |0x0016 |Root Node |C |C |C |C |C |C |C |C |C |C |
+|23 |0x0017 |Solar Power | | | | |C |C |C |C |C |C |
+|24 |0x0018 |Battery Storage | | | | |C |C |C |C |C |C |
+|25 |0x0019 |Secondary Network Interface | | | | |C |C |C |C |C |C |
+|34 |0x0022 |Speaker |C |C |C |C |C |C |C |C |C |C |
+|35 |0x0023 |Casting Video Player |C |C |C |C |C |C |C |C |C |C |
+|36 |0x0024 |Content App |C |C |C |C |C |C |C |C |C |C |
+|39 |0x0027 |Mode Select |C |C |C |C |C |C |C |C |C |C |
+|40 |0x0028 |Basic Video Player |C |C |C |C |C |C |C |C |C |C |
+|41 |0x0029 |Casting Video Client |C |C |C |C |C |C |C |C |C |C |
+|42 |0x002A |Video Remote Control |C |C |C |C |C |C |C |C |C |C |
+|43 |0x002B |Fan |C |C |C |C |C |C |C |C |C |C |
+|44 |0x002C |Air Quality Sensor | | |C |C |C |C |C |C |C |C |
+|45 |0x002D |Air Purifier | | |C |C |C |C |C |C |C |C |
+|64 |0x0040 |Irrigation System | | | | | | | |C |C |C |
+|65 |0x0041 |Water Freeze Detector | | | |C |C |C |C |C |C |C |
+|66 |0x0042 |Water Valve | | | |C |C |C |C |C |C |C |
+|67 |0x0043 |Water Leak Detector | | | |C |C |C |C |C |C |C |
+|68 |0x0044 |Rain Sensor | | | |C |C |C |C |C |C |C |
+|69 |0x0045 |Soil Sensor | | | | | | | |C |C |C |
+|112 |0x0070 |Refrigerator | | |C |C |C |C |C |C |C |C |
+|113 |0x0071 |Temperature Controlled Cabinet| | |C |C |C |C |C |C |C |C |
+|114 |0x0072 |Room Air Conditioner | | |C |C |C |C |C |C |C |C |
+|115 |0x0073 |Laundry Washer | | |C |C |C |C |C |C |C |C |
+|116 |0x0074 |Robotic Vacuum Cleaner | | |C |C |C |C |C |C |C |C |
+|117 |0x0075 |Dishwasher | | |C |C |C |C |C |C |C |C |
+|118 |0x0076 |Smoke CO Alarm | | |C |C |C |C |C |C |C |C |
+|119 |0x0077 |Cook Surface | | | |C |C |C |C |C |C |C |
+|120 |0x0078 |Cooktop | | | |C |C |C |C |C |C |C |
+|121 |0x0079 |Microwave Oven | | | |C |C |C |C |C |C |C |
+|122 |0x007A |Extractor Hood | | | |C |C |C |C |C |C |C |
+|123 |0x007B |Oven | | | |C |C |C |C |C |C |C |
+|124 |0x007C |Laundry Dryer | | | |C |C |C |C |C |C |C |
+|144 |0x0090 |Network Infrastructure Manager| | | | |C |C |C |C |C |C |
+|145 |0x0091 |Thread Border Router | | | | |C |C |C |C |C |C |
+|256 |0x0100 |On/Off Light |C |C |C |C |C |C |C |C |C |C |
+|257 |0x0101 |Dimmable Light |C |C |C |C |C |C |C |C |C |C |
+|259 |0x0103 |On/Off Light Switch |C |C |C |C |C |C |C |C |C |C |
+|260 |0x0104 |Dimmer Switch |C |C |C |C |C |C |C |C |C |C |
+|261 |0x0105 |Color Dimmer Switch |C |C |C |C |C |C |C |C |C |C |
+|262 |0x0106 |Light Sensor |C |C |C |C |C |C |C |C |C |C |
+|263 |0x0107 |Occupancy Sensor |C |C |C |C |C |C |C |C |C |C |
+|266 |0x010A |On/Off Plug-in Unit |C |C |C |C |C |C |C |C |C |C |
+|267 |0x010B |Dimmable Plug-In Unit |C |C |C |C |C |C |C |C |C |C |
+|268 |0x010C |Color Temperature Light |C |C |C |C |C |C |C |C |C |C |
+|269 |0x010D |Extended Color Light |C |C |C |C |C |C |C |C |C |C |
+|271 |0x010F |Mounted On/Off Control | | | | |C |C |C |C |C |C |
+|272 |0x0110 |Mounted Dimmable Load Control | | | | |C |C |C |C |C |C |
+|304 |0x0130 |Joint Fabric Administrator | | | | |P |P |P |P |P |P |
+|320 |0x0140 |Intercom | | | | | | | |C |C |C |
+|321 |0x0141 |Audio Doorbell | | | | | | | |C |C |C |
+|322 |0x0142 |Camera | | | | | | | |C |C |C |
+|323 |0x0143 |Video Doorbell | | | | | | | |C |C |C |
+|324 |0x0144 |Floodlight Camera | | | | | | | |C |C |C |
+|325 |0x0145 |Snapshot Camera | | | | | | | |C |C |C |
+|326 |0x0146 |Chime | | | | | | | |C |C |C |
+|327 |0x0147 |Camera Controller | | | | | | | |C |C |C |
+|328 |0x0148 |Doorbell | | | | | | | |C |C |C |
+|336 |0x0150 |Ambient Context Sensor | | | | | | | | | |C |
+|514 |0x0202 |Window Covering |C |C |C |C |C |C |C |C |C |C |
+|515 |0x0203 |Window Covering Controller |C |C |C |C |C |C |C |C |C |C |
+|560 |0x0230 |Closure | | | | | | | |C |C |C |
+|561 |0x0231 |Closure Panel | | | | | | | |C |C |C |
+|574 |0x023E |Closure Controller | | | | | | | |C |C |C |
+|768 |0x0300 |Heating/Cooling Unit |C |C |C | | | | | | | |
+|769 |0x0301 |Thermostat |C |C |C |C |C |C |C |C |C |C |
+|770 |0x0302 |Temperature Sensor |C |C |C |C |C |C |C |C |C |C |
+|771 |0x0303 |Pump |C |C |C |C |C |C |C |C |C |C |
+|772 |0x0304 |Pump Controller |C |C |C |C |C |C |C |C |C |C |
+|773 |0x0305 |Pressure Sensor |C |C |C |C |C |C |C |C |C |C |
+|774 |0x0306 |Flow Sensor |C |C |C |C |C |C |C |C |C |C |
+|775 |0x0307 |Humidity Sensor |C |C |C |C |C |C |C |C |C |C |
+|777 |0x0309 |Heat Pump | | | | |C |C |C |C |C |C |
+|778 |0x030A |Thermostat Controller | | | | | | |C |C |C |C |
+|1292 |0x050C |Energy EVSE | | | |C |C |C |C |C |C |C |
+|1293 |0x050D |Device Energy Management | | | |C |C |C |C |C |C |C |
+|1295 |0x050F |Water Heater | | | | |C |C |C |C |C |C |
+|1296 |0x0510 |Electrical Sensor | | | |C |C |C |C |C |C |C |
+|1297 |0x0511 |Electrical Utility Meter | | | | | | | |C |C |C |
+|1298 |0x0512 |Meter Reference Point | | | | | | | |C |C |C |
+|1299 |0x0513 |Electrical Energy Tariff | | | | | | | |C |C |C |
+|1300 |0x0514 |Electrical Meter | | | | | | | |C |C |C |
+|2112 |0x0840 |Control Bridge |C |C |C |C |C |C |C |C |C |C |
+|2128 |0x0850 |On/Off Sensor |C |C |C |C |C |C |C |C |C |C |
diff --git a/docs/platforms/bouffalolab/getting_started.md b/docs/platforms/bouffalolab/getting_started.md
index 60aaeaf1a31..99b3b59e175 100644
--- a/docs/platforms/bouffalolab/getting_started.md
+++ b/docs/platforms/bouffalolab/getting_started.md
@@ -92,7 +92,7 @@ following command to list supports options.
The output with `bouffalolab` started likes below:
```
-bouffalolab-{bl602dk,bl704ldk,bl706dk,bl602-night-light,bl706-night-light,bl602-iot-matter-v1,xt-zb6-devkit}-{light,contact-sensor}-{ethernet,wifi,thread,thread-ftd,thread-mtd}-{easyflash,littlefs}[-shell][-mfd][-rotating_device_id][-rpc][-cdc]
+bouffalolab-{bl602-night-light,bl602dk,bl616dk,bl704ldk,bl706-night-light,bl706dk}-{contact-sensor,light}-{ethernet,thread,thread-ftd,thread-mtd,wifi}-{easyflash,littlefs}[-cdc][-coredump][-memmonitor][-mfd][-mot][-rotating_device_id][-rpc][-shell]
```
- supported board options, select one of the following options to build
@@ -104,8 +104,6 @@ bouffalolab-{bl602dk,bl704ldk,bl706dk,bl602-night-light,bl706-night-light,bl602-
- `-bl602-night-light`
- `-bl706-night-light`
- - `-bl602-iot-matter-v1`
- - `-xt-zb6-devkit`
- supported example options, select one of the following options to build
@@ -131,8 +129,9 @@ bouffalolab-{bl602dk,bl704ldk,bl706dk,bl602-night-light,bl706-night-light,bl602-
- `-easyflash`, specifies to use `easyflash` for flash access.
- > `littlefs` has different format with `easyflash`, please uses
- > `-easyflash` for your in-field production
+ > `littlefs` uses a different format than `easyflash` and they are not
+ > compatible. Please use the `-easyflash` flag if existing in-field
+ > devices were already deployed with `easyflash`.
- `-rotating_device_id`, enable rotating device id
@@ -170,6 +169,15 @@ Taking lighting app with `littlefs` supported as example :
./scripts/build/build_examples.py --target bouffalolab-bl616dk-light-wifi-littlefs build
```
+- BL706 with Wi-Fi
+
+ ```
+ ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-ethernet-littlefs build
+ ```
+
+ > This BL706 + BL602 Wi-Fi solution: BL602 runs WLAN part and BL706 runs
+ > TCP/IP stack which uses SPI for communication between these two parts.
+
- BL616 with Thread
```
@@ -194,15 +202,12 @@ Taking lighting app with `littlefs` supported as example :
./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-ethernet-littlefs build
```
-- BL706 with Wi-Fi
+- BL616 with Ethernet
```
- ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-ethernet-littlefs build
+ ./scripts/build/build_examples.py --target bouffalolab-bl616dk-light-ethernet-littlefs build
```
- > This BL706 + BL602 Wi-Fi solution: BL602 runs WLAN part and BL706 runs
- > TCP/IP stack which uses SPI for communication between these two parts.
-
# Partition table
`Bouffalo Lab` provides reference partition table files for each platform under
diff --git a/docs/platforms/nxp/nxp_se05x_guide.md b/docs/platforms/nxp/nxp_se05x_guide.md
index 968490bdd76..901d422f1f7 100644
--- a/docs/platforms/nxp/nxp_se05x_guide.md
+++ b/docs/platforms/nxp/nxp_se05x_guide.md
@@ -4,8 +4,9 @@
- [Supported Platforms](#supported_platforms)
- [SE05x Crypto Configurations](#se05x_crypto_configurations)
- [SE05x Type Configurations](#se05x_type_configurations)
-- [Device attestation](#device_attestation)
-- [SCP03](#scp03)
+- [Device Attestation](#device_attestation)
+- [SCP03 Authentication](#scp03)
+- [Using Trust Provisioned Verifiers of SE051H for SPAKE2+](#trust_prov_verifiers_se051h)
@@ -13,116 +14,209 @@
## Introduction
-The integration of SE05x Secure Element in Matter stack can be used to offload
-required crypto operations of matter to SE05x.
+The integration of SE05x Secure Element in the Matter stack enables offloading
+of cryptographic operations to the SE05x hardware security module.
-The following crypto operations are supported using SE05x,
+### Supported Crypto Operations
+
+The following cryptographic operations can be offloaded to SE05x:
- Random number generation
-- EC Key Generate
-- ECDSA Sign
-- ECDSA Verify
-- HKDF
-- HMAC
-- Spake2P
+- EC Key generation
+- ECDSA signing
+- ECDSA verification
+- HKDF (HMAC-based Key Derivation Function)
+- HMAC (Hash-based Message Authentication Code)
+- SPAKE2+ (Password Authenticated Key Exchange)
+
+The EC key generation / ECDSA Sign for the operational key is by default
+offloaded to SE05x on enabling secure element in the build. To offload other
+crypto operations to SE05x, application / matter stack changes will be required.
## Supported Platforms
-The integration of secure element is done with the following platforms
+The SE05x secure element integration is supported on the following NXP
+platforms:
+
+### NXP i.MX 8M Mini EVK and FRDM-i.MX93
+
+Integration of SE05x with i.MX 8M Mini EVK and FRDM-i.MX93 is demonstrated using
+the thermostat example.
+
+**Prerequisites:** Refer to [i.MX 8M Mini EVK](nxp_imx8m_linux_examples.md) to
+set up the build environment.
+
+#### Hardware Connections
-### NXP i.MX 8M Mini EVK
+##### i.MX 8M Mini EVK with OM-SE051ARD Board
-Integration of SE05x with i.MX 8M Mini EVK is demonstrated using the thermostat
-example. Refer [i.MX 8M Mini EVK](nxp_imx8m_linux_examples.md) to set up the
-build environment.
+| Signal | i.MX 8M Pin | OM-SE051ARD Pin |
+| ------- | ----------- | --------------- |
+| I2C SDA | J801_SDA | J2_9 |
+| I2C SCL | J801_SCL | J2_10 |
+| 3V3 | J801_VCC | J8_4 |
+| GND | J801_GND | J8_7 |
-#### Hardware connections
+##### FRDM-i.MX93 with OM-SE051ARD Board
-- Connections using OM-SE051ARD board :
+| Signal | FRDM i.MX 93 Pin | OM-SE051ARD Pin |
+| ----------------- | ----------------------- | --------------- |
+| I2C SDA | Pin 9 on P12 Connector | J2_9 |
+| I2C SCL | Pin 7 on P12 Connector | J2_10 |
+| 3V3 | Pin 1 on P12 Connector | J8_4 |
+| GND | Pin 6 on P12 Connector | J8_7 |
+| Enable (optional) | Pin 29 on P11 Connector | J1_6 |
- | Signal | i.MX 8M Pin | OM-SE051ARD Pin |
- | ------- | ----------- | --------------- |
- | I2C SDA | J801_SDA | J2_9 |
- | I2C SCL | J801_SCL | J2_10 |
- | 3V3 | J801_VCC | J8_4 |
- | GND | J801_GND | J8_7 |
+> **Note:** To control the secure element using the enable pin, ensure jumper
+> J14 on the OM-SE051ARD board is connected to pins 3-4. Also build the example
+> with `--args="chip_se05x_host_gpio=frdm_imx93"` to allow the FRDM-i.MX93 GPIO
+> to control the enable pin.
-#### Build the example as
+#### Building the Example
+```bash
+cd connectedhomeip
```
- cd connectedhomeip
- ./scripts/examples/imxlinux_example.sh -s examples/thermostat/nxp/linux-se05x/ -o out/thermostat -d
+
+```bash
+export IMX_SDK_ROOT=
+```
+
+```bash
+./scripts/examples/imxlinux_example.sh -s examples/thermostat/nxp/linux-se05x/ -o out/thermostat -d
```
-Refer [SE05x Crypto Configurations](#se05x_crypto_configurations) sections to
-control what crypto operations to be offloaded to SE05x.
+Refer to [SE05x Crypto Configurations](#se05x_crypto_configurations) to control
+which crypto operations are offloaded to SE05x.
-Refer [SE05x Type Configurations](#se05x_type_configurations) sections to select
-the correct variant of secure element connected.
+Refer to [SE05x Type Configurations](#se05x_type_configurations) to select the
+correct secure element variant.
### RW61x
-Integration of SE05x with RW61x is demonstrated using the thermostat and all
-cluster app. Refer [RW61x](nxp_rw61x_guide.md) to set up the build environment.
+Integration of SE05x with RW61x is demonstrated using the thermostat and
+all-clusters-app examples.
+
+**Prerequisites:** Refer to [RW61x](nxp_rw61x_guide.md) to set up the build
+environment.
+
+Refer to [RW61x and SE05x](./nxp_rw61x_guide.md#se05x_secure_element_with_rw61x)
+for detailed hardware connections and build instructions.
+
+Refer to [SE05x Crypto Configurations](#se05x_crypto_configurations) to control
+which crypto operations are offloaded to SE05x.
+
+Refer to [SE05x Type Configurations](#se05x_type_configurations) to select the
+correct secure element variant.
+
+#### Building the Example
+
+**With Pre-Provisioned WiFi Credentials:**
+
+```bash
+west build -d -b frdmrw612 examples/thermostat/nxp/ -DCONF_FILE_NAME=prj_wifi.conf -DCONFIG_CHIP_SE05X=y
+```
+
+**Without Pre-Provisioned WiFi Credentials:**
+
+```bash
+west build -d -b frdmrw612 examples/thermostat/nxp/ -DCONF_FILE_NAME=prj_wifi_onnetwork.conf -DCONFIG_CHIP_SE05X=y -DCONFIG_CHIP_APP_WIFI_SSID=\"\" -DCONFIG_CHIP_APP_WIFI_PASSWORD=\"\"
+```
+
+### RT1060 EVKB
+
+Integration of SE05x with RT1060 EVKB board is demonstrated using the thermostat
+and all-clusters-app examples.
+
+**Prerequisites:** Refer to [RT1060](nxp_rt1060_guide.md) to set up the build
+environment.
-#### Hardware connections and Building the example with SE05x
+Refer to
+[RT1060 and SE05x](./nxp_rt1060_guide.md#se05x_secure_element_with_rt1060) for
+detailed hardware connections and build instructions.
-Refer [RW61x and SE05x](./nxp_rw61x_guide.md#se05x_secure_element_with_rw61x)
-for hardware connections / Building.
+Refer to [SE05x Crypto Configurations](#se05x_crypto_configurations) to control
+which crypto operations are offloaded to SE05x.
-Refer [SE05x Crypto Configurations](#se05x_crypto_configurations) sections to
-control what crypto operations to be offloaded to SE05x.
+Refer to [SE05x Type Configurations](#se05x_type_configurations) to select the
+correct secure element variant.
-Refer [SE05x Type Configurations](#se05x_type_configurations) sections to select
-the correct variant of secure element connected.
+### MCXW72
+
+Integration of SE05x with MCXW72 board is demonstrated using the lighting app
+example.
+
+**Prerequisites:** Refer to [MCXW72](nxp_mcxw72_guide.md) to set up the build
+environment.
+
+Refer to
+[MCXW72 and SE05x](./nxp_mcxw72_guide.md#se05x_secure_element_with_mcxw72) for
+detailed hardware connections and build instructions.
+
+Refer to [SE05x Crypto Configurations](#se05x_crypto_configurations) to control
+which crypto operations are offloaded to SE05x.
+
+Refer to [SE05x Type Configurations](#se05x_type_configurations) to select the
+correct secure element variant.
+
+**Note:** - It is not recommended to enable random number generation from SE05x
+when using with W72.
## SE05x Crypto Configurations
-Following GN / cmake options can be used to enable / disable the crypto
-operations to be offloaded to SE05x
-
-- GN Options :
-
- | GN Options | Description | Type | Default setting |
- | ----------------------------- | ------------------------ | ------- | --------------- |
- | chip_se05x_spake_verifier | Spake2P Verifier on SE | Boolean | Disabled |
- | chip_se05x_spake_prover | Spake2P Prover on SE | Boolean | Disabled |
- | chip_se05x_rnd_gen | Random number generation | Boolean | Disabled |
- | chip_se05x_gen_ec_key | Generate EC key in SE | Boolean | Enabled |
- | chip_se05x_ecdsa_verify | ECDSA Verify | Boolean | Enabled |
- | chip_se05x_pbkdf2_sha256 | PBKDF2-SHA256 | Boolean | Disabled |
- | chip_se05x_hkdf_sha256 | HKDF-SHA256 | Boolean | Disabled |
- | chip_se05x_hmac_sha256 | HMAC-SHA256 | Boolean | Disabled |
- | chip_se05x_device_attestation | Device attestation | Boolean | Disabled |
-
-* CMAKE Options :
-
- | Kconfig Options | Description | Default setting |
- | ------------------------------------ | ------------------------ | --------------- |
- | CONFIG_CHIP_SE05X_SPAKE_VERIFIER | Spake2P Verifier on SE | Disabled |
- | CONFIG_CHIP_SE05X_SPAKE_PROVER | Spake2P Prover on SE | Disabled |
- | CONFIG_CHIP_SE05X_RND_GEN | Random number generation | Disabled |
- | CONFIG_CHIP_SE05X_GENERATE_EC_KEY | Generate EC key in SE | Enabled |
- | CONFIG_CHIP_SE05X_ECDSA_VERIFY | ECDSA Verify | Enabled |
- | CONFIG_CHIP_SE05X_PBKDF2_SHA256 | PBKDF2-SHA256 | Disabled |
- | CONFIG_CHIP_SE05X_HKDF_SHA256 | HKDF-SHA256 | Disabled |
- | CONFIG_CHIP_SE05X_HMAC_SHA256 | HMAC-SHA256 | Disabled |
- | CONFIG_CHIP_SE05X_DEVICE_ATTESTATION | Device attestation | Disabled |
+The following build options control which cryptographic operations are offloaded
+to SE05x:
+
+### GN Build Options
+
+| GN Option | Description | Type | Default |
+| ----------------------------------------- | -------------------------------------- | ------- | ------- |
+| `chip_se05x_spake_verifier` | SPAKE2+ verifier on SE | Boolean | false |
+| `chip_se05x_spake_prover` | SPAKE2+ prover on SE | Boolean | false |
+| `chip_se05x_rnd_gen` | Random number generation | Boolean | false |
+| `chip_se05x_device_attestation` | Device attestation | Boolean | false |
+| `chip_se05x_spake_verifier_use_tp_values` | SPAKE with trust provisioned verifiers | Boolean | false |
+| `chip_se05x_spake_verifier_tp_set_no` | Trust provisioned passcode set number | Integer | 1 |
+| `chip_se05x_spake_verifier_tp_iter_cnt` | SPAKE iteration count | Integer | 1000 |
+
+**Example:**
+
+```bash
+gn gen out --args="chip_se05x_device_attestation=true"
+```
+
+### CMake/Kconfig Options
+
+| Kconfig Option | Description | Default |
+| ------------------------------------------------ | -------------------------------------- | ------- |
+| `CONFIG_CHIP_SE05X_SPAKE_VERIFIER` | SPAKE2+ verifier on SE | n |
+| `CONFIG_CHIP_SE05X_SPAKE_PROVER` | SPAKE2+ prover on SE | n |
+| `CONFIG_CHIP_SE05X_RND_GEN` | Random number generation | n |
+| `CONFIG_CHIP_SE05X_DEVICE_ATTESTATION` | Device attestation | n |
+| `CONFIG_CHIP_SE05X_SPAKE_VERIFIER_USE_TP_VALUES` | SPAKE with trust provisioned verifiers | n |
+| `CONFIG_CHIP_SE05X_SPAKE_VERIFIER_TP_SET_NO` | Trust provisioned passcode set number | 1 |
+| `CONFIG_CHIP_SE05X_SPAKE_VERIFIER_TP_ITER_CNT` | SPAKE iteration count | 1000 |
+
+**Example:**
+
+```bash
+west build -d -b -DCONFIG_CHIP_SE05X_DEVICE_ATTESTATION=y
+```
## SE05x Type Configuration
-Ensure to update the SE05x feature file
-`third_party/simw-top-mini/repo/fsl_sss_ftr.h` with correct product variant.
+Configure the SE05x product variant by updating the feature file at
+`third_party/simw-top-mini/repo/fsl_sss_ftr.h`.
-SE050E is enabled by default.
+**Default Configuration:** SE051H is enabled by default.
-```
+```c
/** Compiling without any Applet Support */
#define SSS_HAVE_APPLET_NONE 0
@@ -136,51 +230,151 @@ SE050E is enabled by default.
#define SSS_HAVE_APPLET_SE05X_C 0
/** SE051 with SPAKE Support */
-#define SSS_HAVE_APPLET_SE051_H 0
+#define SSS_HAVE_APPLET_SE051_H 1
/** AUTH */
#define SSS_HAVE_APPLET_AUTH 0
/** SE050E */
-#define SSS_HAVE_APPLET_SE050_E 1
+#define SSS_HAVE_APPLET_SE050_E 0
```
+Set the appropriate variant to `1` and others to `0` based on your hardware.
+
-## Device attestation
+## Device Attestation
-To use SE05x for device attestation,
+To use SE05x for device attestation:
-1. Enable device attestation when building the example using
- `"chip_se05x_device_attestation=true"` for GN build OR
- `"-DCHIP_SE05X_DEVICE_ATTESTATION`" for cmake Build.
+### Step 1: Enable Device Attestation in Build
-2. Run the provision example (one time)
- `third_party/simw-top-mini/repo/demos/se05x_dev_attest_key_prov/` to
- provision the device attestation key at id - 0x7D300000 and device
- attestation certificate at id - 0x7D300001.
+**For GN Build:**
+```bash
+gn gen out --args="chip_se05x_device_attestation=true"
```
+
+**For CMake Build:**
+
+```bash
+west build -d -b -DCONFIG_CHIP_SE05X_DEVICE_ATTESTATION=y
+```
+
+### Step 2: Provision Device Attestation Keys (One-Time)
+
+Run the provisioning example to store the device attestation key at ID
+`0x7FFF3007` and certificate at ID `0x7FFF3003`:
+
+```bash
cd third_party/simw-top-mini/repo/demos/se05x_dev_attest_key_prov/linux
+```
+
+```bash
gn gen out
+```
+
+```bash
ninja -C out se05x_dev_attest_key_prov
+```
+
+```bash
./out/se05x_dev_attest_key_prov
```
-> [!IMPORTANT] The example is currently supported for i.MX 8M Mini EVK, FRDM
-> i.MX93 and RW61x. Adapt the above commands to the i.MX and RW612 build
-> commands accordingly.
+> **Important:** This example is currently supported for i.MX 8M Mini EVK,
+> FRDM-i.MX93, and RW61x. Adapt the commands to match your platform's build
+> system.
+
+**Reference:**
+[SE05x Device Attestation Example](https://github.com/NXP/plug-and-trust/blob/int/CHIPSE_Release/demos/se05x_dev_attest_key_prov/readme.md)
-## SCP03
+## SCP03 Authentication
-To enable SCP03 authentication with SE05x, build the example with option
+To enable SCP03 (Secure Channel Protocol 03) authentication with SE05x:
-For GN Build system -
+### GN Build
-```
+```bash
gn gen out --args="chip_se05x_auth=\"scp03\""
```
-Ensure to enable CMAC (MBEDTLS_CMAC_C) in mbedtls config file used.
+### CMake Build
+
+```bash
+west build -d -b -DCONFIG_SE05X_SCP03=y
+```
+
+> **Important:** Ensure CMAC (`MBEDTLS_CMAC_C`) is enabled in your mbedTLS
+> configuration file.
+
+
+
+## Using Trust Provisioned Verifiers of SE051H for SPAKE2+
+
+SE051H contains a binary file (ID: `0x7FFF2000`) with 3 sets of passcode and
+salt values:
+
+```
+[4 byte passcode #1] [16 byte salt #1]
+[4 byte passcode #2] [16 byte salt #2]
+[4 byte passcode #3] [16 byte salt #3]
+```
+
+Pre-calculated SPAKE2+ verifiers (w0 and L) for these passcodes, salts, and 5
+different iteration counts (1000, 5000, 10000, 50000, 100000) are
+trust-provisioned in SE051H.
+
+### Provision SE051H T4T Applet with QR Code
+
+Use SIMW tools to retrieve the trust-provisioned passcode and provision the
+corresponding QR code to the T4T applet.
+
+**Build the tools:**
+
+- [SE051H Get Passcode Example](https://github.com/NXP/plug-and-trust/blob/int/CHIPSE_Release/demos/se05x_get_passcode/readme.md)
+- [SE051H Provision Example](https://github.com/NXP/plug-and-trust/blob/int/CHIPSE_Release/demos/se051h_nfc_comm_prov/readme.md)
+
+**Execute the following commands:**
+
+```bash
+./se05x_get_passcode --tp_passcode_set_no 1
+```
+
+```bash
+./chip_tool payload generate-qrcode --setup-pin-code
+```
+
+```bash
+./se051h_nfc_comm_prov --only_t4t_provision --qrcode
+```
+
+### Build Example with Trust Provisioned Verifiers
+
+> **Note:** Refer to `platform/nxp/crypto/se05x/CHIPCryptoPALHsm_se05x_config.h`
+> for additional code changes required for this integration.
+
+**GN Build:**
+
+```bash
+gn gen out --args="chip_se05x_spake_verifier=true chip_se05x_spake_verifier_use_tp_values=true chip_se05x_spake_verifier_tp_set_no=1 chip_se05x_spake_verifier_tp_iter_cnt=1000"
+```
+
+**CMake Build:**
+
+**Note:** Factory data must be provisioned first to use Trust provisioned
+values. Refer to [NXP Manufacturing Flow](nxp_manufacturing_flow.md).
+
+```bash
+west build -d -b -DCONF_FILE_NAME=prj_wifi_fdata.conf -DCONFIG_CHIP_SE05X_SPAKE_VERIFIER=y -DCONFIG_CHIP_SE05X_SPAKE_VERIFIER_USE_TP_VALUES=y -DCONFIG_CHIP_SE05X_SPAKE_VERIFIER_TP_SET_NO=1 -DCONFIG_CHIP_SE05X_SPAKE_VERIFIER_TP_ITER_CNT=1000
+```
+
+**Running the Example:**
+
+When running the example, pass the iteration count via command line:
+
+```bash
+./thermostat-app --spake2p-iterations 1000
+```
diff --git a/docs/testing/python.md b/docs/testing/python.md
index 97648971b81..0dae313f106 100644
--- a/docs/testing/python.md
+++ b/docs/testing/python.md
@@ -894,3 +894,117 @@ for that run, e.g.:
This structured format ensures that all necessary configurations are clearly
defined and easily understood, allowing for consistent and reliable test
execution.
+
+# Test Module Guards
+
+Guards let you run test steps only when certain conditions are met (e.g., a
+cluster has a feature, attribute, or command).
+
+See below sections for usage examples please.
+
+## Cluster Guards
+
+The following are inherited from the `matter_testing` module, so they do not
+need to be imported. For more examples on these guards, see
+`src/python_testing/support_modules/binfo_attributes_verification.py`.
+
+Use these to skip a test step when the endpoint or cluster does not support the
+feature, attribute, or command under test.
+
+### Attribute Guard
+
+Runs the test step only if the endpoint and cluster contain the given attribute:
+
+Example:
+
+```python
+self.step()
+if await self.attribute_guard(endpoint=self.endpoint, attribute=attributes.OperationalState):
+ # If attribute exists then test step continues, else test step is skipped.
+```
+
+### Feature Guard
+
+Runs the test step only if the cluster on the endpoint supports the given
+feature:
+
+Example:
+
+```python
+self.step()
+if await self.feature_guard(endpoint=self.endpoint, cluster=Clusters.BooleanStateConfiguration, feature_int=Clusters.BooleanStateConfiguration.Bitmaps.Feature.kAudible):
+ # IF feature available then do test step, else test step is skipped.
+```
+
+### Command Guard
+
+Runs the test step only if the endpoint has the cluster that supports the given
+command:
+
+Example:
+
+```python
+self.step()
+if await self.command_guard(endpoint=self.endpoint, command=commands.Resume):
+ # If command available, then do test step here, else test step is skipped
+```
+
+## Additional Test Guards
+
+This section covers the PICS guard and the `run_if_endpoint_matches` decorator,
+with an example for each.
+
+### PICS Guard
+
+Inherited from `matter_testing` (no import needed). Runs the test step only if
+the given PICS key is enabled in the PICS file:
+
+Example:
+
+```python
+if self.pics_guard(self.check_pics()):
+ self.step()
+ # Do test step logic here
+else:
+ self.skip_step()
+ #skip test step
+```
+
+### run_if_endpoint_matches decorator
+
+Import the decorator and the check functions from `matter.testing.decorators`:
+
+```python
+from matter.testing.decorators import has_feature, has_command, has_attribute, has_cluster, run_if_endpoint_matches
+```
+
+Skips the whole test if the specified endpoint does not have the required
+cluster, feature, attribute, or command. Apply the decorator above the test
+function.
+
+Examples:
+
+```python
+#Feature:
+@run_if_endpoint_matches(
+ has_feature(Clusters.CameraAvStreamManagement, Clusters.CameraAvStreamManagement.Bitmaps.Feature.kSnapshot)
+ )
+async def test_TC_AVSM_2_2(self):
+ # Do test step logic if feature exists, else this test is skipped
+
+#Cluster
+@run_if_endpoint_matches(has_cluster(Clusters.AdministratorCommissioning))
+async def test_TC_CADMIN_1_3(self):
+ # Do test step logic if cluster exists, else this test is skipped
+
+#Attribute:
+@run_if_endpoint_matches(has_attribute(Clusters.AccessControl.Attributes.Extension))
+async def test_TC_ACL_2_3(self):
+ # Do test step logic if attribute exists, else this test is skipped
+
+#Command
+@run_if_endpoint_matches(has_command(Clusters.OperationalCredentials.Commands.SetVIDVerificationStatement))
+async def test_TC_OPCREDS_3_8(self):
+ # Do test step logic if command is available, else this test is skipped
+
+```
diff --git a/examples/air-purifier-app/air-purifier-common/air-purifier-app.matter b/examples/air-purifier-app/air-purifier-common/air-purifier-app.matter
index 382d2e4f118..baaf8af0a34 100644
--- a/examples/air-purifier-app/air-purifier-common/air-purifier-app.matter
+++ b/examples/air-purifier-app/air-purifier-common/air-purifier-app.matter
@@ -1281,7 +1281,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1565,7 +1564,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1574,6 +1578,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1598,12 +1603,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1630,13 +1642,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2876,7 +2888,7 @@ cluster RadonConcentrationMeasurement = 1071 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2993,6 +3005,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -3038,6 +3051,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -3400,15 +3414,15 @@ endpoint 3 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 0x8000;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 0x8000;
ram attribute maxMeasuredValue default = 0x8000;
ram attribute tolerance default = 0;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
endpoint 4 {
diff --git a/examples/air-purifier-app/air-purifier-common/air-purifier-app.zap b/examples/air-purifier-app/air-purifier-common/air-purifier-app.zap
index 39e3dba45b1..d085fd2de64 100644
--- a/examples/air-purifier-app/air-purifier-common/air-purifier-app.zap
+++ b/examples/air-purifier-app/air-purifier-common/air-purifier-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2037,6 +2053,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/air-purifier-app/air-purifier-common/include/temperature-sensor-manager.h b/examples/air-purifier-app/air-purifier-common/include/temperature-sensor-manager.h
index f7061393d76..6be6d42a56c 100644
--- a/examples/air-purifier-app/air-purifier-common/include/temperature-sensor-manager.h
+++ b/examples/air-purifier-app/air-purifier-common/include/temperature-sensor-manager.h
@@ -19,6 +19,7 @@
#pragma once
#include
+#include
#include
namespace chip {
@@ -30,22 +31,11 @@ class TemperatureSensorManager
public:
TemperatureSensorManager(EndpointId aEndpointId) : mEndpointId(aEndpointId){};
- void Init()
- {
- Protocols::InteractionModel::Status status = TemperatureMeasurement::Attributes::MinMeasuredValue::Set(mEndpointId, -500);
- VerifyOrReturn(Protocols::InteractionModel::Status::Success == status,
- ChipLogError(NotSpecified, "Failed to set TemperatureMeasurement MinMeasuredValue attribute"));
-
- status = TemperatureMeasurement::Attributes::MaxMeasuredValue::Set(mEndpointId, 6000);
- VerifyOrReturn(Protocols::InteractionModel::Status::Success == status,
- ChipLogError(NotSpecified, "Failed to set TemperatureMeasurement MaxMeasuredValue attribute"));
- }
+ void Init() { LogErrorOnFailure(TemperatureMeasurement::SetMeasuredValueRange(mEndpointId, -500, 6000)); }
void OnTemperatureChangeHandler(int16_t newValue)
{
- Protocols::InteractionModel::Status status = TemperatureMeasurement::Attributes::MeasuredValue::Set(mEndpointId, newValue);
- VerifyOrReturn(Protocols::InteractionModel::Status::Success == status,
- ChipLogError(NotSpecified, "Failed to set TemperatureMeasurement MeasuredValue attribute"));
+ LogErrorOnFailure(TemperatureMeasurement::SetMeasuredValue(mEndpointId, newValue));
ChipLogDetail(NotSpecified, "The new TemperatureMeasurement value: %d", newValue);
}
diff --git a/examples/air-purifier-app/cc32xx/main/AppTask.cpp b/examples/air-purifier-app/cc32xx/main/AppTask.cpp
index 8bc023ec08d..6673944b11d 100644
--- a/examples/air-purifier-app/cc32xx/main/AppTask.cpp
+++ b/examples/air-purifier-app/cc32xx/main/AppTask.cpp
@@ -161,14 +161,8 @@ int AppTask::Init()
;
}
- // Init ZCL Data Model and start server
- PLAT_LOG("Initialize Server");
- static chip::CommonCaseDeviceServerInitParams initParams;
- (void) initParams.InitializeStaticResourcesBeforeServerInit();
- initParams.dataModelProvider = CodegenDataModelProviderInstance(initParams.persistentStorageDelegate);
- TEMPORARY_RETURN_IGNORED chip::Server::GetInstance().Init(initParams);
-
- // Initialize device attestation config
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
PLAT_LOG("Initialize device attestation config");
#ifdef CC32XX_ATTESTATION_CREDENTIALS
SetDeviceAttestationCredentialsProvider(CC32XX::GetCC32XXDacProvider());
@@ -177,6 +171,13 @@ int AppTask::Init()
SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
#endif
+ // Init ZCL Data Model and start server
+ PLAT_LOG("Initialize Server");
+ static chip::CommonCaseDeviceServerInitParams initParams;
+ (void) initParams.InitializeStaticResourcesBeforeServerInit();
+ initParams.dataModelProvider = CodegenDataModelProviderInstance(initParams.persistentStorageDelegate);
+ TEMPORARY_RETURN_IGNORED chip::Server::GetInstance().Init(initParams);
+
// init air purifier stuff
TEMPORARY_RETURN_IGNORED SetParentEndpointForEndpoint(AIR_QUALITY_SENSOR_ENDPOINT, AIR_PURIFIER_ENDPOINT);
TEMPORARY_RETURN_IGNORED SetParentEndpointForEndpoint(TEMPERATURE_SENSOR_ENDPOINT, AIR_PURIFIER_ENDPOINT);
diff --git a/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.matter b/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.matter
index 3b07b1143ca..13208f36dad 100644
--- a/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.matter
+++ b/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.matter
@@ -1164,7 +1164,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1768,7 +1767,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1777,6 +1781,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1801,12 +1806,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1833,13 +1845,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2463,7 +2475,7 @@ cluster RadonConcentrationMeasurement = 1071 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2591,6 +2603,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2766,6 +2779,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2816,14 +2830,14 @@ endpoint 1 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue;
+ callback attribute measuredValue;
ram attribute minMeasuredValue;
ram attribute maxMeasuredValue;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
server cluster RelativeHumidityMeasurement {
diff --git a/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.zap b/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.zap
index 7500cb15adb..cadddd1440b 100644
--- a/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.zap
+++ b/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1733,6 +1733,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4073,6 +4089,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/air-quality-sensor-app/air-quality-sensor-common/icd-lit-air-quality-sensor-app.matter b/examples/air-quality-sensor-app/air-quality-sensor-common/icd-lit-air-quality-sensor-app.matter
index 885953899a0..7b9c071f27f 100644
--- a/examples/air-quality-sensor-app/air-quality-sensor-common/icd-lit-air-quality-sensor-app.matter
+++ b/examples/air-quality-sensor-app/air-quality-sensor-common/icd-lit-air-quality-sensor-app.matter
@@ -1164,7 +1164,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1768,7 +1767,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1777,6 +1781,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1801,12 +1806,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1833,13 +1845,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2560,7 +2572,7 @@ cluster RadonConcentrationMeasurement = 1071 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2670,6 +2682,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2836,6 +2849,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2905,14 +2919,14 @@ endpoint 1 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue;
+ callback attribute measuredValue;
ram attribute minMeasuredValue;
ram attribute maxMeasuredValue;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
server cluster RelativeHumidityMeasurement {
diff --git a/examples/air-quality-sensor-app/air-quality-sensor-common/icd-lit-air-quality-sensor-app.zap b/examples/air-quality-sensor-app/air-quality-sensor-common/icd-lit-air-quality-sensor-app.zap
index e67e781c6f1..db7a0db7f83 100644
--- a/examples/air-quality-sensor-app/air-quality-sensor-common/icd-lit-air-quality-sensor-app.zap
+++ b/examples/air-quality-sensor-app/air-quality-sensor-common/icd-lit-air-quality-sensor-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1452,6 +1452,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -3648,6 +3664,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/air-quality-sensor-app/air-quality-sensor-common/include/temperature-sensor-manager.h b/examples/air-quality-sensor-app/air-quality-sensor-common/include/temperature-sensor-manager.h
index 37f26e1412a..803ad2b20d4 100644
--- a/examples/air-quality-sensor-app/air-quality-sensor-common/include/temperature-sensor-manager.h
+++ b/examples/air-quality-sensor-app/air-quality-sensor-common/include/temperature-sensor-manager.h
@@ -1,7 +1,7 @@
#pragma once
#include
-
+#include
#include
namespace chip {
@@ -13,20 +13,12 @@ class TemperatureSensorManager
public:
TemperatureSensorManager(EndpointId aEndpointId) : mEndpointId(aEndpointId)
{
- Protocols::InteractionModel::Status status = TemperatureMeasurement::Attributes::MinMeasuredValue::Set(mEndpointId, -5);
- VerifyOrReturn(Protocols::InteractionModel::Status::Success == status,
- ChipLogError(NotSpecified, "Failed to set TemperatureMeasurement MinMeasuredValue attribute"));
-
- status = TemperatureMeasurement::Attributes::MaxMeasuredValue::Set(mEndpointId, 60);
- VerifyOrReturn(Protocols::InteractionModel::Status::Success == status,
- ChipLogError(NotSpecified, "Failed to set TemperatureMeasurement MaxMeasuredValue attribute"));
+ LogErrorOnFailure(TemperatureMeasurement::SetMeasuredValueRange(mEndpointId, -5, 60));
};
void OnTemperatureChangeHandler(int16_t newValue)
{
- Protocols::InteractionModel::Status status = TemperatureMeasurement::Attributes::MeasuredValue::Set(mEndpointId, newValue);
- VerifyOrReturn(Protocols::InteractionModel::Status::Success == status,
- ChipLogError(NotSpecified, "Failed to set TemperatureMeasurement MeasuredValue attribute"));
+ LogErrorOnFailure(TemperatureMeasurement::SetMeasuredValue(mEndpointId, newValue));
ChipLogDetail(NotSpecified, "The new TemperatureMeasurement value: %d", newValue);
}
diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
index 386f23a5d4e..a0fed3b80c7 100644
--- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
+++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
@@ -2102,7 +2102,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2908,7 +2907,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2917,6 +2921,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2941,12 +2946,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2973,13 +2985,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -3622,7 +3634,7 @@ cluster AirQuality = 91 {
/** This cluster provides an interface for observing and managing the state of smoke and CO alarms. */
cluster SmokeCoAlarm = 92 {
- revision 1;
+ revision 2;
enum AlarmStateEnum : enum8 {
kNormal = 0;
@@ -3652,6 +3664,7 @@ cluster SmokeCoAlarm = 92 {
kEndOfService = 6;
kInterconnectSmoke = 7;
kInterconnectCO = 8;
+ kInoperative = 9;
}
enum MuteStateEnum : enum8 {
@@ -3721,6 +3734,7 @@ cluster SmokeCoAlarm = 92 {
readonly attribute optional ContaminationStateEnum contaminationState = 10;
attribute access(write: manage) optional SensitivityEnum smokeSensitivityLevel = 11;
readonly attribute optional epoch_s expiryDate = 12;
+ provisional readonly attribute optional boolean unmounted = 13;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -7092,7 +7106,7 @@ internal cluster FaultInjection = 4294048774 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_powersource = 17, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -7315,7 +7329,7 @@ endpoint 0 {
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- callback attribute featureMap default = 2;
+ callback attribute featureMap;
callback attribute clusterRevision;
handle command TestEventTrigger;
@@ -7520,6 +7534,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -7565,7 +7580,7 @@ endpoint 0 {
}
endpoint 1 {
device type ma_powersource = 17, version 1;
- device type ma_onofflight = 256, version 1;
+ device type ma_onofflight = 256, version 4;
binding cluster OnOff;
@@ -7916,6 +7931,7 @@ endpoint 1 {
ram attribute contaminationState default = 0;
ram attribute smokeSensitivityLevel default = 1;
ram attribute expiryDate default = 0;
+ ram attribute unmounted default = 0;
ram attribute featureMap default = 3;
ram attribute clusterRevision default = 1;
@@ -8180,6 +8196,8 @@ endpoint 1 {
ram attribute minSetpointDeadBand default = 0x19;
ram attribute controlSequenceOfOperation default = 0x04;
ram attribute systemMode default = 0x01;
+ ram attribute temperatureSetpointHold default = 0;
+ ram attribute temperatureSetpointHoldDuration;
callback attribute presetTypes;
callback attribute scheduleTypes;
ram attribute numberOfPresets default = 0;
@@ -8339,12 +8357,12 @@ endpoint 1 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 0x8000;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 0x8000;
ram attribute maxMeasuredValue default = 0x8000;
ram attribute tolerance;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
server cluster PressureMeasurement {
@@ -8769,7 +8787,7 @@ endpoint 1 {
}
endpoint 2 {
device type ma_powersource = 17, version 1;
- device type ma_onofflight = 256, version 1;
+ device type ma_onofflight = 256, version 4;
server cluster Identify {
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
index b7c529106a2..a82458b2532 100644
--- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap
+++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap
@@ -62,7 +62,7 @@
],
"deviceVersions": [
1,
- 3
+ 5
],
"deviceIdentifiers": [
17,
@@ -2866,7 +2866,7 @@
"storageOption": "External",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": null,
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -5547,6 +5547,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -5973,7 +5989,7 @@
}
],
"deviceVersions": [
- 1,
+ 4,
1
],
"deviceIdentifiers": [
@@ -9949,6 +9965,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "Unmounted",
+ "code": 13,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -13405,6 +13437,38 @@
"maxInterval": 65344,
"reportableChange": 0
},
+ {
+ "name": "TemperatureSetpointHold",
+ "code": 35,
+ "mfgCode": null,
+ "side": "server",
+ "type": "TemperatureSetpointHoldEnum",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "TemperatureSetpointHoldDuration",
+ "code": 36,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "PresetTypes",
"code": 72,
@@ -21258,7 +21322,7 @@
}
],
"deviceVersions": [
- 1,
+ 4,
1
],
"deviceIdentifiers": [
diff --git a/examples/all-clusters-app/all-clusters-common/src/binding-handler.cpp b/examples/all-clusters-app/all-clusters-common/src/binding-handler.cpp
index 3ea24919eaf..8cdcf58433a 100644
--- a/examples/all-clusters-app/all-clusters-common/src/binding-handler.cpp
+++ b/examples/all-clusters-app/all-clusters-common/src/binding-handler.cpp
@@ -116,8 +116,8 @@ static void BoundDeviceContextReleaseHandler(void * context)
static void InitBindingHandlerInternal(intptr_t arg)
{
auto & server = chip::Server::GetInstance();
- TEMPORARY_RETURN_IGNORED Binding::Manager::GetInstance().Init(
- { &server.GetFabricTable(), server.GetCASESessionManager(), &server.GetPersistentStorage() });
+ LogErrorOnFailure(Binding::Manager::GetInstance().Init(
+ { &server.GetFabricTable(), server.GetCASESessionManager(), &server.GetPersistentStorage() }));
Binding::Manager::GetInstance().RegisterBoundDeviceChangedHandler(BoundDeviceChangedHandler);
Binding::Manager::GetInstance().RegisterBoundDeviceContextReleaseHandler(BoundDeviceContextReleaseHandler);
}
diff --git a/examples/all-clusters-app/all-clusters-common/src/smco-stub.cpp b/examples/all-clusters-app/all-clusters-common/src/smco-stub.cpp
index 1690ee3caac..83e5db5aad5 100644
--- a/examples/all-clusters-app/all-clusters-common/src/smco-stub.cpp
+++ b/examples/all-clusters-app/all-clusters-common/src/smco-stub.cpp
@@ -31,9 +31,9 @@ constexpr const uint16_t kSelfTestingTimeoutSec = 10;
} // namespace
static std::array sPriorityOrder = {
- ExpressedStateEnum::kSmokeAlarm, ExpressedStateEnum::kInterconnectSmoke, ExpressedStateEnum::kCOAlarm,
- ExpressedStateEnum::kInterconnectCO, ExpressedStateEnum::kHardwareFault, ExpressedStateEnum::kTesting,
- ExpressedStateEnum::kEndOfService, ExpressedStateEnum::kBatteryAlert
+ ExpressedStateEnum::kInoperative, ExpressedStateEnum::kSmokeAlarm, ExpressedStateEnum::kInterconnectSmoke,
+ ExpressedStateEnum::kCOAlarm, ExpressedStateEnum::kInterconnectCO, ExpressedStateEnum::kHardwareFault,
+ ExpressedStateEnum::kTesting, ExpressedStateEnum::kEndOfService, ExpressedStateEnum::kBatteryAlert
};
void EndSelfTestingEventHandler(System::Layer * systemLayer, void * appState)
@@ -175,6 +175,16 @@ bool HandleSmokeCOTestEventTrigger(uint64_t eventTrigger)
ChipLogProgress(Support, "[Smoke-CO-Alarm-Test-Event] => Clear Smoke Sensitivity");
SmokeCoAlarmServer::Instance().SetSmokeSensitivityLevel(1, SensitivityEnum::kStandard);
break;
+ case SmokeCOTrigger::kForceUnmountedState:
+ ChipLogProgress(Support, "[Smoke-CO-Alarm-Test-Event] => Force Unmounted State");
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetUnmountedState(1, true), true);
+ SmokeCoAlarmServer::Instance().SetExpressedStateByPriority(1, sPriorityOrder);
+ break;
+ case SmokeCOTrigger::kClearUnmountedState:
+ ChipLogProgress(Support, "[Smoke-CO-Alarm-Test-Event] => Clear Unmounted State");
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetUnmountedState(1, false), true);
+ SmokeCoAlarmServer::Instance().SetExpressedStateByPriority(1, sPriorityOrder);
+ break;
default:
return false;
diff --git a/examples/all-clusters-app/ameba/main/SmokeCOAlarmManager.cpp b/examples/all-clusters-app/ameba/main/SmokeCOAlarmManager.cpp
index 027bb055cca..657216d02e5 100644
--- a/examples/all-clusters-app/ameba/main/SmokeCOAlarmManager.cpp
+++ b/examples/all-clusters-app/ameba/main/SmokeCOAlarmManager.cpp
@@ -24,9 +24,9 @@ using namespace chip::app::Clusters::SmokeCoAlarm;
using namespace chip::DeviceLayer;
static std::array sPriorityOrder = {
- ExpressedStateEnum::kSmokeAlarm, ExpressedStateEnum::kInterconnectSmoke, ExpressedStateEnum::kCOAlarm,
- ExpressedStateEnum::kInterconnectCO, ExpressedStateEnum::kHardwareFault, ExpressedStateEnum::kTesting,
- ExpressedStateEnum::kEndOfService, ExpressedStateEnum::kBatteryAlert
+ ExpressedStateEnum::kInoperative, ExpressedStateEnum::kSmokeAlarm, ExpressedStateEnum::kInterconnectSmoke,
+ ExpressedStateEnum::kCOAlarm, ExpressedStateEnum::kInterconnectCO, ExpressedStateEnum::kHardwareFault,
+ ExpressedStateEnum::kTesting, ExpressedStateEnum::kEndOfService, ExpressedStateEnum::kBatteryAlert
};
CHIP_ERROR SmokeCoAlarmManager::Init()
@@ -162,6 +162,16 @@ bool emberAfHandleEventTrigger(uint64_t eventTrigger)
ChipLogProgress(Support, "[Smoke-CO-Alarm-Test-Event] => Clear Smoke Sensitivity");
SmokeCoAlarmServer::Instance().SetSmokeSensitivityLevel(1, SensitivityEnum::kStandard);
break;
+ case SmokeCOTrigger::kForceUnmountedState:
+ ChipLogProgress(Support, "[Smoke-CO-Alarm-Test-Event] => Force Unmounted State");
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetUnmountedState(1, true), true);
+ SmokeCoAlarmServer::Instance().SetExpressedStateByPriority(1, sPriorityOrder);
+ break;
+ case SmokeCOTrigger::kClearUnmountedState:
+ ChipLogProgress(Support, "[Smoke-CO-Alarm-Test-Event] => Clear Unmounted State");
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetUnmountedState(1, false), true);
+ SmokeCoAlarmServer::Instance().SetExpressedStateByPriority(1, sPriorityOrder);
+ break;
default:
return false;
diff --git a/examples/all-clusters-app/asr/src/AppTask.cpp b/examples/all-clusters-app/asr/src/AppTask.cpp
index a264b4e3832..861becb59b9 100644
--- a/examples/all-clusters-app/asr/src/AppTask.cpp
+++ b/examples/all-clusters-app/asr/src/AppTask.cpp
@@ -30,6 +30,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -181,14 +182,14 @@ void AppTask::AppEventHandler(AppEvent * aEvent)
switch (aEvent->Type)
{
case AppEvent::kEventType_Timer: {
- chip::app::Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Set(
- /* endpoint ID */ 1, /* temperature in 0.01*C */ int16_t(temperature));
+ LogErrorOnFailure(chip::app::Clusters::TemperatureMeasurement::SetMeasuredValue(/* endpoint ID */ 1,
+ /* temperature in 0.01*C */ temperature));
chip::app::Clusters::RelativeHumidityMeasurement::Attributes::MeasuredValue::Set(
- /* endpoint ID */ 1, /* humidity in 0.01% */ int16_t(humidity));
+ /* endpoint ID */ 1, /* humidity in 0.01% */ humidity);
chip::app::Clusters::PressureMeasurement::Attributes::MeasuredValue::Set(
- /* endpoint ID */ 1, /* pressure in 0.01 */ int16_t(pressure));
+ /* endpoint ID */ 1, /* pressure in 0.01 */ pressure);
break;
}
diff --git a/examples/all-clusters-app/esp32/main/DeviceWithDisplay.cpp b/examples/all-clusters-app/esp32/main/DeviceWithDisplay.cpp
index f9d77f1c27e..1a4be93de21 100644
--- a/examples/all-clusters-app/esp32/main/DeviceWithDisplay.cpp
+++ b/examples/all-clusters-app/esp32/main/DeviceWithDisplay.cpp
@@ -27,6 +27,7 @@
#include
#include
#include
+#include
#include
#include
@@ -196,7 +197,7 @@ class EditAttributeListModel : public TouchesMatterStackModel
if (name == "Temperature")
{
// update the temp attribute here for hardcoded endpoint 1
- chip::app::Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Set(1, static_cast(n * 100));
+ LogErrorOnFailure(app::Clusters::TemperatureMeasurement::SetMeasuredValue(1, static_cast(n * 100)));
}
else if (name == "Color Current Level")
{
@@ -219,18 +220,14 @@ class EditAttributeListModel : public TouchesMatterStackModel
else if (name == "Illuminance")
{
// update the current illuminance here for hardcoded endpoint 1
- auto illuminanceMeasurement = app::Clusters::IlluminanceMeasurement::FindClusterOnEndpoint(1);
- if (illuminanceMeasurement != nullptr)
+ CHIP_ERROR err = app::Clusters::IlluminanceMeasurement::SetMeasuredValue(1, static_cast(n));
+ if (err == CHIP_NO_ERROR)
{
- CHIP_ERROR err = illuminanceMeasurement->SetMeasuredValue(static_cast(n));
- if (err == CHIP_NO_ERROR)
- {
- ESP_LOGI(TAG, "Illuminance changed to : %d", n);
- }
- else
- {
- ESP_LOGE(TAG, "Failed to set illuminance: %" CHIP_ERROR_FORMAT, err.Format());
- }
+ ESP_LOGI(TAG, "Illuminance changed to : %d", n);
+ }
+ else
+ {
+ ESP_LOGE(TAG, "Failed to set illuminance: %" CHIP_ERROR_FORMAT, err.Format());
}
}
else if (name == "Humidity")
@@ -667,8 +664,8 @@ void SetupPretendDevices()
AddEndpoint("External");
AddCluster("Thermometer");
AddAttribute("Temperature", "21");
- // write the temp attribute
- chip::app::Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Set(1, static_cast(21 * 100));
+
+ LogErrorOnFailure(app::Clusters::TemperatureMeasurement::SetMeasuredValue(1, static_cast(21 * 100)));
AddDevice("Garage 1");
AddEndpoint("Door 1");
@@ -712,7 +709,6 @@ void SetupPretendDevices()
AddDevice("Thermostat");
AddEndpoint("1");
AddCluster("Thermostat");
- app::Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Set(1, static_cast(21 * 100));
app::Clusters::Thermostat::Attributes::LocalTemperature::Set(1, static_cast(21 * 100));
AddAttribute("SystemMode", "4");
app::Clusters::Thermostat::Attributes::SystemMode::Set(1, chip::app::Clusters::Thermostat::SystemModeEnum::kHeat);
@@ -736,11 +732,7 @@ void SetupPretendDevices()
AddCluster("Illuminance Measurement");
AddAttribute("Illuminance", "1000");
- auto illuminanceMeasurement = app::Clusters::IlluminanceMeasurement::FindClusterOnEndpoint(1);
- if (illuminanceMeasurement != nullptr)
- {
- LogErrorOnFailure(illuminanceMeasurement->SetMeasuredValue(static_cast(1000)));
- }
+ LogErrorOnFailure(app::Clusters::IlluminanceMeasurement::SetMeasuredValue(1, static_cast(1000)));
AddDevice("Color Light");
AddEndpoint("1");
diff --git a/examples/all-clusters-app/infineon/psoc6/include/CHIPProjectConfig.h b/examples/all-clusters-app/infineon/psoc6/include/CHIPProjectConfig.h
index 45ca2959e20..9c74b115d25 100644
--- a/examples/all-clusters-app/infineon/psoc6/include/CHIPProjectConfig.h
+++ b/examples/all-clusters-app/infineon/psoc6/include/CHIPProjectConfig.h
@@ -109,6 +109,11 @@
// CHIP_CONFIG_MAX_GROUPS_PER_FABRIC is properly configured.
#define CHIP_CONFIG_MAX_GROUP_ENDPOINTS_PER_FABRIC 3
+// Temporary set MaxMembershipCount to 24 for all-cluster-app due to hardcoded TestGroupKeyManagementCluster.yaml
+// Where 12 group are created on a single fabric with the group clusters.
+// TODO cleanup this config #43166
+#define CHIP_CONFIG_MAX_GROUPCAST_MEMBERSHIP_COUNT 24
+
// Enable `Extension` attribute of ACL Cluster
#ifndef CHIP_CONFIG_ENABLE_ACL_EXTENSIONS
#define CHIP_CONFIG_ENABLE_ACL_EXTENSIONS 1
diff --git a/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp b/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp
index e0844ab7f3c..3be00567b4e 100644
--- a/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp
+++ b/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp
@@ -127,6 +127,10 @@ void NetWorkCommissioningInstInit()
static void InitServer(intptr_t context)
{
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
+ SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+
// Init ZCL Data Model
static chip::CommonCaseDeviceServerInitParams initParams;
(void) initParams.InitializeStaticResourcesBeforeServerInit();
@@ -139,8 +143,6 @@ static void InitServer(intptr_t context)
gExampleDeviceInfoProvider.SetStorageDelegate(&Server::GetInstance().GetPersistentStorage());
chip::DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider);
- // Initialize device attestation config
- SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
GetAppTask().InitOTARequestor();
#endif
diff --git a/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp b/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp
index d233b9f718e..657c88ed6cb 100644
--- a/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp
+++ b/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp
@@ -20,6 +20,8 @@
#include
#include
+#include
+#include
#include
#include
#include
@@ -546,13 +548,14 @@ void AllClustersAppCommandHandler::HandleCommand(intptr_t context)
}
else if (name == "SimulateConfigurationVersionChange")
{
- uint32_t configurationVersion = 0;
- TEMPORARY_RETURN_IGNORED ConfigurationMgr().GetConfigurationVersion(configurationVersion);
- configurationVersion++;
-
- if (ConfigurationMgr().StoreConfigurationVersion(configurationVersion + 1) != CHIP_NO_ERROR)
+ Clusters::BasicInformationCluster * cluster = Clusters::BasicInformation::GetClusterInstance();
+ if (cluster == nullptr)
+ {
+ ChipLogError(NotSpecified, "No basic information cluster available. Invalid state.");
+ }
+ else
{
- ChipLogError(NotSpecified, "Failed to store configuration version:%d", configurationVersion);
+ LogErrorOnFailure(cluster->IncreaseConfigurationVersion());
}
}
else if (name == "SetSimulatedSoilMoisture")
@@ -606,6 +609,38 @@ void AllClustersAppCommandHandler::HandleCommand(intptr_t context)
self->OnBooleanStateChangeHandler(endpointId, newState);
}
+ else if (name == "SetBooleanStateSensorFault")
+ {
+ bool hasEndpointId = HasNumericField(self->mJsonValue, "EndpointId");
+ bool hasSensorFault = HasNumericField(self->mJsonValue, "SensorFault");
+
+ if (!hasEndpointId || !hasSensorFault)
+ {
+ std::string inputJson = self->mJsonValue.toStyledString();
+ ChipLogError(NotSpecified, "Missing or invalid value for EndpointId or SensorFault in %s", inputJson.c_str());
+ return;
+ }
+
+ auto endpointId = static_cast(self->mJsonValue["EndpointId"].asUInt());
+ auto sensorFault = static_cast(self->mJsonValue["SensorFault"].asUInt());
+
+ self->OnBooleanStateSensorFaultHandler(endpointId, sensorFault);
+ }
+ else if (name == "SetUnmounted")
+ {
+ uint8_t unmounted = static_cast(self->mJsonValue["Unmounted"].asUInt());
+ EndpointId endpoint = static_cast(self->mJsonValue["EndpointId"].asUInt());
+ SmokeCoAlarmServer::Instance().SetInoperativeWhenUnmounted(true);
+ if (1 == unmounted || 0 == unmounted)
+ {
+ VerifyOrReturn(SmokeCoAlarmServer::Instance().SetUnmountedState(endpoint, static_cast(unmounted)),
+ ChipLogError(NotSpecified, "Error setting unmounted state."));
+ }
+ else
+ {
+ ChipLogError(NotSpecified, "Invalid Unmounted state to set.");
+ }
+ }
else
{
ChipLogError(NotSpecified, "Unhandled command '%s': this should never happen", name.c_str());
@@ -1027,6 +1062,18 @@ void AllClustersAppCommandHandler::OnBooleanStateChangeHandler(chip::EndpointId
}
}
+void AllClustersAppCommandHandler::OnBooleanStateSensorFaultHandler(chip::EndpointId endpointId, uint16_t sensorFault)
+{
+ BitMask fault(sensorFault);
+ CHIP_ERROR err = BooleanStateConfiguration::EmitSensorFault(endpointId, fault);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(NotSpecified, "Failed to emit SensorFault on endpoint %d: %" CHIP_ERROR_FORMAT, endpointId, err.Format());
+ return;
+ }
+ ChipLogProgress(NotSpecified, "SensorFault set to 0x%04x on endpoint %d", sensorFault, endpointId);
+}
+
void AllClustersCommandDelegate::OnEventCommandReceived(const char * json)
{
auto handler = AllClustersAppCommandHandler::FromJSON(json);
diff --git a/examples/all-clusters-app/linux/AllClustersCommandDelegate.h b/examples/all-clusters-app/linux/AllClustersCommandDelegate.h
index c0f1377ed1a..b048677f234 100644
--- a/examples/all-clusters-app/linux/AllClustersCommandDelegate.h
+++ b/examples/all-clusters-app/linux/AllClustersCommandDelegate.h
@@ -135,6 +135,11 @@ class AllClustersAppCommandHandler
* Should be called when it is necessary to change the BooleanState cluster StateValue attribute.
*/
void OnBooleanStateChangeHandler(chip::EndpointId endpointId, bool newState);
+
+ /**
+ * Should be called when it is necessary to trigger or clear a sensor fault on the BooleanStateConfiguration cluster.
+ */
+ void OnBooleanStateSensorFaultHandler(chip::EndpointId endpointId, uint16_t sensorFault);
};
class AllClustersCommandDelegate : public NamedPipeCommandDelegate
diff --git a/examples/all-clusters-app/linux/AppOptions.cpp b/examples/all-clusters-app/linux/AppOptions.cpp
index b1c616771d2..63102668f5c 100644
--- a/examples/all-clusters-app/linux/AppOptions.cpp
+++ b/examples/all-clusters-app/linux/AppOptions.cpp
@@ -65,7 +65,7 @@ struct MockClock : public ClockBase
}
public:
- MockClock() : mRealClock(SystemClock()) { Clock::Internal::SetSystemClockForTesting(this); }
+ MockClock() : mRealClock(SystemClock()), mOffset(Clock::kZero) { Clock::Internal::SetSystemClockForTesting(this); }
~MockClock() { Clock::Internal::SetSystemClockForTesting(&mRealClock); }
void SetUTCTime(Microseconds64 aOverride) { TEMPORARY_RETURN_IGNORED GetOffsetFrom(mRealClock, aOverride, mOffset); }
diff --git a/examples/all-clusters-app/linux/BUILD.gn b/examples/all-clusters-app/linux/BUILD.gn
index 76b404c0198..1b7bdd16856 100644
--- a/examples/all-clusters-app/linux/BUILD.gn
+++ b/examples/all-clusters-app/linux/BUILD.gn
@@ -77,6 +77,7 @@ source_set("chip-all-clusters-common") {
"${chip_root}/examples/all-clusters-app/all-clusters-common",
"${chip_root}/examples/platform/linux:app-main",
"${chip_root}/src/app:attribute-persistence",
+ "${chip_root}/src/app/clusters/groupcast",
"${chip_root}/src/app/clusters/identify-server",
"${chip_root}/src/app/clusters/software-diagnostics-server:software-fault-listener",
"${chip_root}/src/app/clusters/valve-configuration-and-control-server:valve-configuration-and-control-server",
diff --git a/examples/all-clusters-app/linux/include/CHIPProjectAppConfig.h b/examples/all-clusters-app/linux/include/CHIPProjectAppConfig.h
index 77bc3eb0425..cb727c89fe9 100644
--- a/examples/all-clusters-app/linux/include/CHIPProjectAppConfig.h
+++ b/examples/all-clusters-app/linux/include/CHIPProjectAppConfig.h
@@ -39,6 +39,11 @@
// CHIP_CONFIG_MAX_GROUPS_PER_FABRIC is properly configured.
#define CHIP_CONFIG_MAX_GROUP_ENDPOINTS_PER_FABRIC 3
+// Temporary set MaxMembershipCount to 24 for all-cluster-app due to hardcoded TestGroupKeyManagementCluster.yaml
+// Where 12 group are created on a single fabric with the group clusters.
+// TODO cleanup this config #43166
+#define CHIP_CONFIG_MAX_GROUPCAST_MEMBERSHIP_COUNT 24
+
// Allows app options (ports) to be configured on launch of app
#define CHIP_DEVICE_ENABLE_PORT_PARAMS 1
diff --git a/examples/all-clusters-app/linux/main-common.cpp b/examples/all-clusters-app/linux/main-common.cpp
index 5125a7f3d1d..e7a22f07153 100644
--- a/examples/all-clusters-app/linux/main-common.cpp
+++ b/examples/all-clusters-app/linux/main-common.cpp
@@ -43,6 +43,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -177,6 +178,8 @@ RegisteredServerCluster
.WithIdentifyType(Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator)
.WithDelegate(&sIdentifyDelegate));
+LazyRegisteredServerCluster gGroupcastCluster;
+
} // namespace
#ifdef MATTER_DM_PLUGIN_DISHWASHER_ALARM_SERVER
@@ -214,6 +217,17 @@ void ApplicationInit()
VerifyOrDie(CodegenDataModelProvider::Instance().Registry().Register(gIdentifyCluster3.Registration()) == CHIP_NO_ERROR);
VerifyOrDie(CodegenDataModelProvider::Instance().Registry().Register(gIdentifyCluster4.Registration()) == CHIP_NO_ERROR);
+ gGroupcastCluster.Create(
+ Clusters::GroupcastContext{
+ .fabricTable = Server::GetInstance().GetFabricTable(),
+ .groupDataProvider = *Credentials::GetGroupDataProvider(),
+ .timerDelegate = sTimerDelegate,
+ },
+ BitFlags(Clusters::Groupcast::Feature::kListener, Clusters::Groupcast::Feature::kSender,
+ Clusters::Groupcast::Feature::kPerGroup));
+
+ VerifyOrDie(CodegenDataModelProvider::Instance().Registry().Register(gGroupcastCluster.Registration()) == CHIP_NO_ERROR);
+
TEMPORARY_RETURN_IGNORED SetTagList(/* endpoint= */ 0,
Span(gEp0TagList));
TEMPORARY_RETURN_IGNORED SetTagList(/* endpoint= */ 1,
diff --git a/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h b/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h
index 058e2f2ceae..23a72770975 100644
--- a/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h
+++ b/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h
@@ -30,4 +30,9 @@
// CHIP_CONFIG_MAX_GROUPS_PER_FABRIC is properly configured.
#define CHIP_CONFIG_MAX_GROUP_ENDPOINTS_PER_FABRIC 3
+// Temporary set MaxMembershipCount to 24 for all-cluster-app due to hardcoded TestGroupKeyManagementCluster.yaml
+// Where 12 group are created on a single fabric with the group clusters.
+// TODO cleanup this config #43166
+#define CHIP_CONFIG_MAX_GROUPCAST_MEMBERSHIP_COUNT 24
+
#define CHIP_CONFIG_ENABLE_ACL_EXTENSIONS 1
diff --git a/examples/all-clusters-app/nxp/zephyr/main/include/CHIPProjectConfig.h b/examples/all-clusters-app/nxp/zephyr/main/include/CHIPProjectConfig.h
index ac0493e59bd..2c577abb93c 100644
--- a/examples/all-clusters-app/nxp/zephyr/main/include/CHIPProjectConfig.h
+++ b/examples/all-clusters-app/nxp/zephyr/main/include/CHIPProjectConfig.h
@@ -30,4 +30,9 @@
// CHIP_CONFIG_MAX_GROUPS_PER_FABRIC is properly configured.
#define CHIP_CONFIG_MAX_GROUP_ENDPOINTS_PER_FABRIC 3
+// Temporary set MaxMembershipCount to 24 for all-cluster-app due to hardcoded TestGroupKeyManagementCluster.yaml
+// Where 12 group are created on a single fabric with the group clusters.
+// TODO cleanup this config #43166
+#define CHIP_CONFIG_MAX_GROUPCAST_MEMBERSHIP_COUNT 24
+
#define CHIP_CONFIG_ENABLE_ACL_EXTENSIONS 1
diff --git a/examples/all-clusters-app/realtek/data_model/all-clusters-app.matter b/examples/all-clusters-app/realtek/data_model/all-clusters-app.matter
index 5de0aca3f91..4109bb8ac9d 100644
--- a/examples/all-clusters-app/realtek/data_model/all-clusters-app.matter
+++ b/examples/all-clusters-app/realtek/data_model/all-clusters-app.matter
@@ -2102,7 +2102,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2908,7 +2907,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2917,6 +2921,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2941,12 +2946,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2973,13 +2985,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -3719,7 +3731,7 @@ cluster AirQuality = 91 {
/** This cluster provides an interface for observing and managing the state of smoke and CO alarms. */
cluster SmokeCoAlarm = 92 {
- revision 1;
+ revision 2;
enum AlarmStateEnum : enum8 {
kNormal = 0;
@@ -3749,6 +3761,7 @@ cluster SmokeCoAlarm = 92 {
kEndOfService = 6;
kInterconnectSmoke = 7;
kInterconnectCO = 8;
+ kInoperative = 9;
}
enum MuteStateEnum : enum8 {
@@ -3818,6 +3831,7 @@ cluster SmokeCoAlarm = 92 {
readonly attribute optional ContaminationStateEnum contaminationState = 10;
attribute access(write: manage) optional SensitivityEnum smokeSensitivityLevel = 11;
readonly attribute optional epoch_s expiryDate = 12;
+ provisional readonly attribute optional boolean unmounted = 13;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -7827,7 +7841,7 @@ internal cluster FaultInjection = 4294048774 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_powersource = 17, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -8042,6 +8056,7 @@ endpoint 0 {
callback attribute activeRadioFaults;
callback attribute activeNetworkFaults;
callback attribute testEventTriggersEnabled;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -8250,6 +8265,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -8308,7 +8324,7 @@ endpoint 0 {
}
endpoint 1 {
device type ma_powersource = 17, version 1;
- device type ma_onofflight = 256, version 1;
+ device type ma_onofflight = 256, version 4;
binding cluster OnOff;
@@ -8646,6 +8662,7 @@ endpoint 1 {
ram attribute contaminationState default = 0;
ram attribute smokeSensitivityLevel default = 1;
ram attribute expiryDate default = 0;
+ ram attribute unmounted default = 0;
ram attribute featureMap default = 3;
ram attribute clusterRevision default = 1;
@@ -9244,12 +9261,12 @@ endpoint 1 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 0x8000;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 0x8000;
ram attribute maxMeasuredValue default = 0x8000;
ram attribute tolerance;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
server cluster PressureMeasurement {
@@ -9614,7 +9631,7 @@ endpoint 1 {
}
endpoint 2 {
device type ma_powersource = 17, version 1;
- device type ma_onofflight = 256, version 1;
+ device type ma_onofflight = 256, version 4;
server cluster Identify {
diff --git a/examples/all-clusters-app/realtek/data_model/all-clusters-app.zap b/examples/all-clusters-app/realtek/data_model/all-clusters-app.zap
index bcff72d9c22..136f1d0c4f3 100644
--- a/examples/all-clusters-app/realtek/data_model/all-clusters-app.zap
+++ b/examples/all-clusters-app/realtek/data_model/all-clusters-app.zap
@@ -62,7 +62,7 @@
],
"deviceVersions": [
1,
- 3
+ 5
],
"deviceIdentifiers": [
17,
@@ -2728,6 +2728,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -5467,6 +5483,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -6063,7 +6095,7 @@
}
],
"deviceVersions": [
- 1,
+ 4,
1
],
"deviceIdentifiers": [
@@ -9941,6 +9973,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "Unmounted",
+ "code": 13,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -22671,7 +22719,7 @@
}
],
"deviceVersions": [
- 1,
+ 4,
1
],
"deviceIdentifiers": [
diff --git a/examples/all-clusters-app/telink/include/CHIPProjectConfig.h b/examples/all-clusters-app/telink/include/CHIPProjectConfig.h
index 71241bc29c1..b6e5a1e6d58 100644
--- a/examples/all-clusters-app/telink/include/CHIPProjectConfig.h
+++ b/examples/all-clusters-app/telink/include/CHIPProjectConfig.h
@@ -35,4 +35,9 @@
// CHIP_CONFIG_MAX_GROUPS_PER_FABRIC is properly configured.
#define CHIP_CONFIG_MAX_GROUP_ENDPOINTS_PER_FABRIC 3
+// Temporary set MaxMembershipCount to 24 for all-cluster-app due to hardcoded TestGroupKeyManagementCluster.yaml
+// Where 12 group are created on a single fabric with the group clusters.
+// TODO cleanup this config #43166
+#define CHIP_CONFIG_MAX_GROUPCAST_MEMBERSHIP_COUNT 24
+
#define CHIP_CONFIG_ENABLE_ACL_EXTENSIONS 1
diff --git a/examples/all-clusters-app/tizen/include/CHIPProjectAppConfig.h b/examples/all-clusters-app/tizen/include/CHIPProjectAppConfig.h
index 3d67773217a..6a86a78c9b9 100644
--- a/examples/all-clusters-app/tizen/include/CHIPProjectAppConfig.h
+++ b/examples/all-clusters-app/tizen/include/CHIPProjectAppConfig.h
@@ -34,6 +34,11 @@
// CHIP_CONFIG_MAX_GROUPS_PER_FABRIC is properly configured.
#define CHIP_CONFIG_MAX_GROUP_ENDPOINTS_PER_FABRIC 3
+// Temporary set MaxMembershipCount to 24 for all-cluster-app due to hardcoded TestGroupKeyManagementCluster.yaml
+// Where 12 group are created on a single fabric with the group clusters.
+// TODO cleanup this config #43166
+#define CHIP_CONFIG_MAX_GROUPCAST_MEMBERSHIP_COUNT 24
+
// Claim a device type while advertising that matches the device type on our
// endpoint 1. 0x0101 is the "Dimmable Light" device type.
#define CHIP_DEVICE_CONFIG_DEVICE_TYPE 0x0101
diff --git a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter
index 19f13e4e740..b822e9538dc 100644
--- a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter
+++ b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter
@@ -2019,7 +2019,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2678,7 +2677,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2687,6 +2691,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2711,12 +2716,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2743,13 +2755,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -6465,7 +6477,7 @@ internal cluster UnitTesting = 4294048773 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_powersource = 17, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -6648,6 +6660,7 @@ endpoint 0 {
callback attribute rebootCount;
callback attribute upTime;
callback attribute testEventTriggersEnabled;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -6756,6 +6769,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -6790,7 +6804,7 @@ endpoint 0 {
}
endpoint 1 {
device type ma_powersource = 17, version 1;
- device type ma_onofflight = 256, version 1;
+ device type ma_onofflight = 256, version 4;
server cluster Identify {
@@ -7074,11 +7088,11 @@ endpoint 1 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 0x8000;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 0x8000;
ram attribute maxMeasuredValue default = 0x8000;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
server cluster PressureMeasurement {
@@ -7331,7 +7345,7 @@ endpoint 1 {
}
endpoint 2 {
device type ma_powersource = 17, version 1;
- device type ma_onofflight = 256, version 1;
+ device type ma_onofflight = 256, version 4;
server cluster Identify {
diff --git a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap
index 9dd18842d3c..2cf30f1f17e 100644
--- a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap
+++ b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap
@@ -62,7 +62,7 @@
],
"deviceVersions": [
1,
- 3
+ 5
],
"deviceIdentifiers": [
17,
@@ -2337,6 +2337,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3679,6 +3695,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3996,7 +4028,7 @@
}
],
"deviceVersions": [
- 1,
+ 4,
1
],
"deviceIdentifiers": [
@@ -10273,7 +10305,7 @@
}
],
"deviceVersions": [
- 1,
+ 4,
1
],
"deviceIdentifiers": [
diff --git a/examples/all-clusters-minimal-app/esp32/main/DeviceWithDisplay.cpp b/examples/all-clusters-minimal-app/esp32/main/DeviceWithDisplay.cpp
index 89e632a71c6..86dc793edc7 100644
--- a/examples/all-clusters-minimal-app/esp32/main/DeviceWithDisplay.cpp
+++ b/examples/all-clusters-minimal-app/esp32/main/DeviceWithDisplay.cpp
@@ -26,6 +26,7 @@
#include
#include
#include
+#include
#include
#include
@@ -161,7 +162,7 @@ class EditAttributeListModel : public TouchesMatterStackModel
if (name == "Temperature")
{
// update the temp attribute here for hardcoded endpoint 1
- chip::app::Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Set(1, static_cast(n * 100));
+ LogErrorOnFailure(chip::app::Clusters::TemperatureMeasurement::SetMeasuredValue(1, static_cast(n * 100)));
}
else if (name == "Color Current Level")
{
@@ -184,18 +185,14 @@ class EditAttributeListModel : public TouchesMatterStackModel
else if (name == "Illuminance")
{
// update the current illuminance here for hardcoded endpoint 1
- auto illuminanceMeasurement = app::Clusters::IlluminanceMeasurement::FindClusterOnEndpoint(1);
- if (illuminanceMeasurement != nullptr)
+ CHIP_ERROR err = app::Clusters::IlluminanceMeasurement::SetMeasuredValue(1, static_cast(n));
+ if (err == CHIP_NO_ERROR)
{
- CHIP_ERROR err = illuminanceMeasurement->SetMeasuredValue(static_cast(n));
- if (err == CHIP_NO_ERROR)
- {
- ESP_LOGI(TAG, "Illuminance changed to : %d", n);
- }
- else
- {
- ESP_LOGE(TAG, "Failed to set illuminance: %" CHIP_ERROR_FORMAT, err.Format());
- }
+ ESP_LOGI(TAG, "Illuminance changed to : %d", n);
+ }
+ else
+ {
+ ESP_LOGE(TAG, "Failed to set illuminance: %" CHIP_ERROR_FORMAT, err.Format());
}
}
else if (name == "Humidity")
@@ -525,8 +522,8 @@ void SetupPretendDevices()
AddEndpoint("External");
AddCluster("Thermometer");
AddAttribute("Temperature", "21");
- // write the temp attribute
- chip::app::Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Set(1, static_cast(21 * 100));
+
+ LogErrorOnFailure(chip::app::Clusters::TemperatureMeasurement::SetMeasuredValue(1, static_cast(21 * 100)));
AddDevice("Door Lock");
AddEndpoint("Default");
@@ -578,7 +575,6 @@ void SetupPretendDevices()
AddDevice("Thermostat");
AddEndpoint("1");
AddCluster("Thermostat");
- app::Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Set(1, static_cast(21 * 100));
app::Clusters::Thermostat::Attributes::LocalTemperature::Set(1, static_cast(21 * 100));
AddAttribute("SystemMode", "4");
app::Clusters::Thermostat::Attributes::SystemMode::Set(1, app::Clusters::Thermostat::SystemModeEnum::kHeat);
@@ -598,11 +594,7 @@ void SetupPretendDevices()
AddCluster("Illuminance Measurement");
AddAttribute("Illuminance", "1000");
- auto illuminanceMeasurement = app::Clusters::IlluminanceMeasurement::FindClusterOnEndpoint(1);
- if (illuminanceMeasurement != nullptr)
- {
- LogErrorOnFailure(illuminanceMeasurement->SetMeasuredValue(static_cast(1000)));
- }
+ LogErrorOnFailure(app::Clusters::IlluminanceMeasurement::SetMeasuredValue(1, static_cast(1000)));
AddDevice("Color Light");
AddEndpoint("1");
diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp b/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp
index 98a860f15f4..a3feff098ef 100644
--- a/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp
+++ b/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp
@@ -125,6 +125,10 @@ void NetWorkCommissioningInstInit()
static void InitServer(intptr_t context)
{
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
+ SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+
// Init ZCL Data Model
static chip::CommonCaseDeviceServerInitParams initParams;
(void) initParams.InitializeStaticResourcesBeforeServerInit();
@@ -137,8 +141,6 @@ static void InitServer(intptr_t context)
gExampleDeviceInfoProvider.SetStorageDelegate(&Server::GetInstance().GetPersistentStorage());
chip::DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider);
- // Initialize device attestation config
- SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
GetAppTask().InitOTARequestor();
#endif
diff --git a/examples/all-devices-app/all-devices-common/devices/boolean-state-sensor/BooleanStateSensorDevice.cpp b/examples/all-devices-app/all-devices-common/devices/boolean-state-sensor/BooleanStateSensorDevice.cpp
index a2e514c19db..df99933b09d 100644
--- a/examples/all-devices-app/all-devices-common/devices/boolean-state-sensor/BooleanStateSensorDevice.cpp
+++ b/examples/all-devices-app/all-devices-common/devices/boolean-state-sensor/BooleanStateSensorDevice.cpp
@@ -34,7 +34,7 @@ CHIP_ERROR BooleanStateSensorDevice::Register(chip::EndpointId endpoint, CodeDri
return provider.AddEndpoint(mEndpointRegistration);
}
-void BooleanStateSensorDevice::UnRegister(CodeDrivenDataModelProvider & provider)
+void BooleanStateSensorDevice::Unregister(CodeDrivenDataModelProvider & provider)
{
SingleEndpointUnregistration(provider);
if (mBooleanStateCluster.IsConstructed())
diff --git a/examples/all-devices-app/all-devices-common/devices/boolean-state-sensor/BooleanStateSensorDevice.h b/examples/all-devices-app/all-devices-common/devices/boolean-state-sensor/BooleanStateSensorDevice.h
index e42110304ad..f1f713d4ff8 100644
--- a/examples/all-devices-app/all-devices-common/devices/boolean-state-sensor/BooleanStateSensorDevice.h
+++ b/examples/all-devices-app/all-devices-common/devices/boolean-state-sensor/BooleanStateSensorDevice.h
@@ -40,7 +40,7 @@ class BooleanStateSensorDevice : public SingleEndpointDevice
CHIP_ERROR Register(chip::EndpointId endpoint, CodeDrivenDataModelProvider & provider,
EndpointId parentId = kInvalidEndpointId) override;
- void UnRegister(CodeDrivenDataModelProvider & provider) override;
+ void Unregister(CodeDrivenDataModelProvider & provider) override;
Clusters::BooleanStateCluster & BooleanState() { return mBooleanStateCluster.Cluster(); }
diff --git a/examples/all-devices-app/all-devices-common/devices/chime/ChimeDevice.cpp b/examples/all-devices-app/all-devices-common/devices/chime/ChimeDevice.cpp
index 1851e17fb6e..635a2f955cc 100644
--- a/examples/all-devices-app/all-devices-common/devices/chime/ChimeDevice.cpp
+++ b/examples/all-devices-app/all-devices-common/devices/chime/ChimeDevice.cpp
@@ -46,7 +46,7 @@ CHIP_ERROR ChimeDevice::Register(chip::EndpointId endpoint, CodeDrivenDataModelP
return provider.AddEndpoint(mEndpointRegistration);
}
-void ChimeDevice::UnRegister(CodeDrivenDataModelProvider & provider)
+void ChimeDevice::Unregister(CodeDrivenDataModelProvider & provider)
{
SingleEndpointUnregistration(provider);
if (mChimeCluster.IsConstructed())
diff --git a/examples/all-devices-app/all-devices-common/devices/chime/ChimeDevice.h b/examples/all-devices-app/all-devices-common/devices/chime/ChimeDevice.h
index ee499a1d255..548cc98c214 100644
--- a/examples/all-devices-app/all-devices-common/devices/chime/ChimeDevice.h
+++ b/examples/all-devices-app/all-devices-common/devices/chime/ChimeDevice.h
@@ -33,7 +33,7 @@ class ChimeDevice : public SingleEndpointDevice
CHIP_ERROR Register(chip::EndpointId endpoint, CodeDrivenDataModelProvider & provider,
EndpointId parentId = kInvalidEndpointId) override;
- void UnRegister(CodeDrivenDataModelProvider & provider) override;
+ void Unregister(CodeDrivenDataModelProvider & provider) override;
Clusters::ChimeCluster & ChimeCluster();
diff --git a/examples/all-devices-app/all-devices-common/devices/interface/DeviceInterface.h b/examples/all-devices-app/all-devices-common/devices/interface/DeviceInterface.h
index 421fb696b70..597193f4f6c 100644
--- a/examples/all-devices-app/all-devices-common/devices/interface/DeviceInterface.h
+++ b/examples/all-devices-app/all-devices-common/devices/interface/DeviceInterface.h
@@ -42,8 +42,8 @@ class DeviceInterface : public EndpointInterface
/// Removes a device's clusters from the given provider. This
/// must only be called when register has succeeded before. Expected
/// usage of this function is for when the device is no longer needed
- /// (for example, on shutown), to destory the device's clusters.
- virtual void UnRegister(CodeDrivenDataModelProvider & provider) = 0;
+ /// (for example, on shutdown), to destroy the device's clusters.
+ virtual void Unregister(CodeDrivenDataModelProvider & provider) = 0;
// Endpoint interface implementation
CHIP_ERROR DeviceTypes(ReadOnlyBufferBuilder & out) const override;
diff --git a/examples/all-devices-app/all-devices-common/devices/interface/SingleEndpointDevice.h b/examples/all-devices-app/all-devices-common/devices/interface/SingleEndpointDevice.h
index 1492d97e589..f179421442c 100644
--- a/examples/all-devices-app/all-devices-common/devices/interface/SingleEndpointDevice.h
+++ b/examples/all-devices-app/all-devices-common/devices/interface/SingleEndpointDevice.h
@@ -51,8 +51,8 @@ class SingleEndpointDevice : public DeviceInterface
CHIP_ERROR SingleEndpointRegistration(EndpointId endpoint, CodeDrivenDataModelProvider & provider, EndpointId parentId);
/// Internal function to unregister a single endpoint device. This will destroy the clusters part of
- /// this class, and must be called in a subclass' device-specific UnRegister() function. This allows
- /// for the destruction of the general SingleEndpointDevice clusters and device-specifc clusters from
+ /// this class, and must be called in a subclass' device-specific Unregister() function. This allows
+ /// for the destruction of the general SingleEndpointDevice clusters and device-specific clusters from
/// the subclass, as well as removal of the device endpoint from the provider to happen together.
void SingleEndpointUnregistration(CodeDrivenDataModelProvider & provider);
diff --git a/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/OccupancySensorDevice.cpp b/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/OccupancySensorDevice.cpp
index fd21d72afcf..55805987781 100644
--- a/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/OccupancySensorDevice.cpp
+++ b/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/OccupancySensorDevice.cpp
@@ -46,7 +46,7 @@ CHIP_ERROR OccupancySensorDevice::Register(chip::EndpointId endpoint, CodeDriven
return provider.AddEndpoint(mEndpointRegistration);
}
-void OccupancySensorDevice::UnRegister(CodeDrivenDataModelProvider & provider)
+void OccupancySensorDevice::Unregister(CodeDrivenDataModelProvider & provider)
{
SingleEndpointUnregistration(provider);
if (mOccupancySensingCluster.IsConstructed())
diff --git a/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/OccupancySensorDevice.h b/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/OccupancySensorDevice.h
index c12af9a140c..a172df5da4b 100644
--- a/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/OccupancySensorDevice.h
+++ b/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/OccupancySensorDevice.h
@@ -34,7 +34,7 @@ class OccupancySensorDevice : public SingleEndpointDevice
CHIP_ERROR Register(chip::EndpointId endpoint, CodeDrivenDataModelProvider & provider,
EndpointId parentId = kInvalidEndpointId) override;
- void UnRegister(CodeDrivenDataModelProvider & provider) override;
+ void Unregister(CodeDrivenDataModelProvider & provider) override;
Clusters::OccupancySensingCluster & OccupancySensingCluster() { return mOccupancySensingCluster.Cluster(); }
diff --git a/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/impl/TogglingOccupancySensorDevice.cpp b/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/impl/TogglingOccupancySensorDevice.cpp
index e551b399f14..7821d7a5b50 100644
--- a/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/impl/TogglingOccupancySensorDevice.cpp
+++ b/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/impl/TogglingOccupancySensorDevice.cpp
@@ -58,10 +58,10 @@ CHIP_ERROR TogglingOccupancySensorDevice::Register(EndpointId endpoint, CodeDriv
return mTimerDelegate.StartTimer(this, kOccupancyStateChangeIntervalSec);
}
-void TogglingOccupancySensorDevice::UnRegister(CodeDrivenDataModelProvider & provider)
+void TogglingOccupancySensorDevice::Unregister(CodeDrivenDataModelProvider & provider)
{
mTimerDelegate.CancelTimer(this);
- OccupancySensorDevice::UnRegister(provider);
+ OccupancySensorDevice::Unregister(provider);
}
void TogglingOccupancySensorDevice::OnOccupancyChanged(bool occupied)
diff --git a/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/impl/TogglingOccupancySensorDevice.h b/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/impl/TogglingOccupancySensorDevice.h
index b2edd870989..4f4bf9ccb18 100644
--- a/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/impl/TogglingOccupancySensorDevice.h
+++ b/examples/all-devices-app/all-devices-common/devices/occupancy-sensor/impl/TogglingOccupancySensorDevice.h
@@ -39,7 +39,7 @@ class TogglingOccupancySensorDevice : public OccupancySensorDevice, public Clust
CHIP_ERROR Register(EndpointId endpoint, CodeDrivenDataModelProvider & provider,
EndpointId parentId = kInvalidEndpointId) override;
- void UnRegister(CodeDrivenDataModelProvider & provider) override;
+ void Unregister(CodeDrivenDataModelProvider & provider) override;
// OccupancySensingDelegate
void OnOccupancyChanged(bool occupied) override;
diff --git a/examples/all-devices-app/all-devices-common/devices/on-off-light/LoggingOnOffLightDevice.cpp b/examples/all-devices-app/all-devices-common/devices/on-off-light/LoggingOnOffLightDevice.cpp
index ad894c7bbbd..c5fbfb371a8 100644
--- a/examples/all-devices-app/all-devices-common/devices/on-off-light/LoggingOnOffLightDevice.cpp
+++ b/examples/all-devices-app/all-devices-common/devices/on-off-light/LoggingOnOffLightDevice.cpp
@@ -170,7 +170,7 @@ CHIP_ERROR LoggingOnOffLightDevice::Register(chip::EndpointId endpoint, CodeDriv
return provider.AddEndpoint(mEndpointRegistration);
}
-void LoggingOnOffLightDevice::UnRegister(CodeDrivenDataModelProvider & provider)
+void LoggingOnOffLightDevice::Unregister(CodeDrivenDataModelProvider & provider)
{
SingleEndpointUnregistration(provider);
diff --git a/examples/all-devices-app/all-devices-common/devices/on-off-light/LoggingOnOffLightDevice.h b/examples/all-devices-app/all-devices-common/devices/on-off-light/LoggingOnOffLightDevice.h
index d4ea25c3fb0..01bfbaf227e 100644
--- a/examples/all-devices-app/all-devices-common/devices/on-off-light/LoggingOnOffLightDevice.h
+++ b/examples/all-devices-app/all-devices-common/devices/on-off-light/LoggingOnOffLightDevice.h
@@ -45,7 +45,7 @@ class LoggingOnOffLightDevice : public SingleEndpointDevice
CHIP_ERROR Register(chip::EndpointId endpoint, CodeDrivenDataModelProvider & provider,
EndpointId parentId = kInvalidEndpointId) override;
- void UnRegister(CodeDrivenDataModelProvider & provider) override;
+ void Unregister(CodeDrivenDataModelProvider & provider) override;
private:
class OnOffDelegate : public Clusters::OnOffDelegate
diff --git a/examples/all-devices-app/all-devices-common/devices/root-node/BUILD.gn b/examples/all-devices-app/all-devices-common/devices/root-node/BUILD.gn
index 31e350fe718..b420e923402 100644
--- a/examples/all-devices-app/all-devices-common/devices/root-node/BUILD.gn
+++ b/examples/all-devices-app/all-devices-common/devices/root-node/BUILD.gn
@@ -30,6 +30,7 @@ source_set("root-node") {
"${chip_root}/src/app/clusters/general-commissioning-server:bread-crumb-tracker",
"${chip_root}/src/app/clusters/general-diagnostics-server",
"${chip_root}/src/app/clusters/group-key-mgmt-server",
+ "${chip_root}/src/app/clusters/groupcast",
"${chip_root}/src/app/clusters/operational-credentials-server",
"${chip_root}/src/app/clusters/software-diagnostics-server",
"${chip_root}/src/data-model-providers/codedriven",
diff --git a/examples/all-devices-app/all-devices-common/devices/root-node/RootNodeDevice.cpp b/examples/all-devices-app/all-devices-common/devices/root-node/RootNodeDevice.cpp
index b6b6c87b40e..4e796465678 100644
--- a/examples/all-devices-app/all-devices-common/devices/root-node/RootNodeDevice.cpp
+++ b/examples/all-devices-app/all-devices-common/devices/root-node/RootNodeDevice.cpp
@@ -19,6 +19,8 @@
#include
#include
#include
+#include
+#include
#include
#include
#include
@@ -48,9 +50,12 @@ CHIP_ERROR RootNodeDevice::Register(EndpointId endpointId, CodeDrivenDataModelPr
mBasicInformationCluster.Create(
optionalAttributeSet,
- BasicInformationCluster::Context{ .deviceInstanceInfoProvider = mContext.deviceInstanceInfoProvider,
- .configurationManager = mContext.configurationManager,
- .platformManager = mContext.platformManager });
+ BasicInformationCluster::Context{
+ .deviceInstanceInfoProvider = mContext.deviceInstanceInfoProvider,
+ .configurationManager = mContext.configurationManager,
+ .platformManager = mContext.platformManager,
+ .subscriptionsPerFabric = InteractionModelEngine::GetInstance()->GetMinGuaranteedSubscriptionsPerFabric(),
+ });
ReturnErrorOnFailure(provider.AddCluster(mBasicInformationCluster.Registration()));
mGeneralCommissioningCluster.Create(
@@ -92,6 +97,15 @@ CHIP_ERROR RootNodeDevice::Register(EndpointId endpointId, CodeDrivenDataModelPr
});
ReturnErrorOnFailure(provider.AddCluster(mGroupKeyManagementCluster.Registration()));
+ mGroupcastCluster.Create(
+ GroupcastContext{
+ .fabricTable = mContext.fabricTable,
+ .groupDataProvider = mContext.groupDataProvider,
+ .timerDelegate = mContext.timerDelegate,
+ },
+ BitFlags{ Groupcast::Feature::kListener });
+ ReturnErrorOnFailure(provider.AddCluster(mGroupcastCluster.Registration()));
+
mSoftwareDiagnosticsServerCluster.Create(SoftwareDiagnosticsServerCluster::OptionalAttributeSet{},
mContext.diagnosticDataProvider);
ReturnErrorOnFailure(provider.AddCluster(mSoftwareDiagnosticsServerCluster.Registration()));
@@ -110,54 +124,67 @@ CHIP_ERROR RootNodeDevice::Register(EndpointId endpointId, CodeDrivenDataModelPr
.sessionManager = mContext.sessionManager,
.dnssdServer = mContext.dnssdServer,
.commissioningWindowManager = mContext.commissioningWindowManager,
+ .dacProvider = mContext.dacProvider,
+ .groupDataProvider = mContext.groupDataProvider,
+ .accessControl = mContext.accessControl,
+ .platformManager = mContext.platformManager,
+ .eventManagement = mContext.eventManagement,
+
});
ReturnErrorOnFailure(provider.AddCluster(mOperationalCredentialsCluster.Registration()));
return provider.AddEndpoint(mEndpointRegistration);
}
-void RootNodeDevice::UnRegister(CodeDrivenDataModelProvider & provider)
+void RootNodeDevice::Unregister(CodeDrivenDataModelProvider & provider)
{
SingleEndpointUnregistration(provider);
- if (mBasicInformationCluster.IsConstructed())
+
+ // De-init in reverse order as init, in case there were data dependencies.
+ if (mOperationalCredentialsCluster.IsConstructed())
{
- LogErrorOnFailure(provider.RemoveCluster(&mBasicInformationCluster.Cluster()));
- mBasicInformationCluster.Destroy();
+ LogErrorOnFailure(provider.RemoveCluster(&mOperationalCredentialsCluster.Cluster()));
+ mOperationalCredentialsCluster.Destroy();
}
- if (mGeneralCommissioningCluster.IsConstructed())
+ if (mAccessControlCluster.IsConstructed())
{
- LogErrorOnFailure(provider.RemoveCluster(&mGeneralCommissioningCluster.Cluster()));
- mGeneralCommissioningCluster.Destroy();
+ LogErrorOnFailure(provider.RemoveCluster(&mAccessControlCluster.Cluster()));
+ mAccessControlCluster.Destroy();
}
- if (mAdministratorCommissioningCluster.IsConstructed())
+ if (mSoftwareDiagnosticsServerCluster.IsConstructed())
{
- LogErrorOnFailure(provider.RemoveCluster(&mAdministratorCommissioningCluster.Cluster()));
- mAdministratorCommissioningCluster.Destroy();
+ LogErrorOnFailure(provider.RemoveCluster(&mSoftwareDiagnosticsServerCluster.Cluster()));
+ mSoftwareDiagnosticsServerCluster.Destroy();
}
- if (mGeneralDiagnosticsCluster.IsConstructed())
+ if (mGroupcastCluster.IsConstructed())
{
- LogErrorOnFailure(provider.RemoveCluster(&mGeneralDiagnosticsCluster.Cluster()));
- mGeneralDiagnosticsCluster.Destroy();
+ LogErrorOnFailure(provider.RemoveCluster(&mGroupcastCluster.Cluster()));
+ mGroupcastCluster.Destroy();
}
if (mGroupKeyManagementCluster.IsConstructed())
{
LogErrorOnFailure(provider.RemoveCluster(&mGroupKeyManagementCluster.Cluster()));
mGroupKeyManagementCluster.Destroy();
}
- if (mSoftwareDiagnosticsServerCluster.IsConstructed())
+ if (mGeneralDiagnosticsCluster.IsConstructed())
{
- LogErrorOnFailure(provider.RemoveCluster(&mSoftwareDiagnosticsServerCluster.Cluster()));
- mSoftwareDiagnosticsServerCluster.Destroy();
+ LogErrorOnFailure(provider.RemoveCluster(&mGeneralDiagnosticsCluster.Cluster()));
+ mGeneralDiagnosticsCluster.Destroy();
}
- if (mAccessControlCluster.IsConstructed())
+ if (mAdministratorCommissioningCluster.IsConstructed())
{
- LogErrorOnFailure(provider.RemoveCluster(&mAccessControlCluster.Cluster()));
- mAccessControlCluster.Destroy();
+ LogErrorOnFailure(provider.RemoveCluster(&mAdministratorCommissioningCluster.Cluster()));
+ mAdministratorCommissioningCluster.Destroy();
}
- if (mOperationalCredentialsCluster.IsConstructed())
+ if (mGeneralCommissioningCluster.IsConstructed())
{
- LogErrorOnFailure(provider.RemoveCluster(&mOperationalCredentialsCluster.Cluster()));
- mOperationalCredentialsCluster.Destroy();
+ LogErrorOnFailure(provider.RemoveCluster(&mGeneralCommissioningCluster.Cluster()));
+ mGeneralCommissioningCluster.Destroy();
+ }
+ if (mBasicInformationCluster.IsConstructed())
+ {
+ LogErrorOnFailure(provider.RemoveCluster(&mBasicInformationCluster.Cluster()));
+ mBasicInformationCluster.Destroy();
}
}
diff --git a/examples/all-devices-app/all-devices-common/devices/root-node/RootNodeDevice.h b/examples/all-devices-app/all-devices-common/devices/root-node/RootNodeDevice.h
index 586b75a59f9..cd1a85c874d 100644
--- a/examples/all-devices-app/all-devices-common/devices/root-node/RootNodeDevice.h
+++ b/examples/all-devices-app/all-devices-common/devices/root-node/RootNodeDevice.h
@@ -26,12 +26,14 @@
#include
#include
#include
+#include
#include
#include
#include
#include
#include
#include
+#include
#include
namespace chip {
@@ -57,8 +59,10 @@ class RootNodeDevice : public SingleEndpointDevice
DeviceLoadStatusProvider & deviceLoadStatusProvider;
DeviceLayer::DiagnosticDataProvider & diagnosticDataProvider;
TestEventTriggerDelegate * testEventTriggerDelegate;
+ Credentials::DeviceAttestationCredentialsProvider & dacProvider;
+ EventManagement & eventManagement;
SafeAttributePersistenceProvider & safeAttributePersistenceProvider;
-
+ TimerDelegate & timerDelegate;
#if CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
TermsAndConditionsProvider & termsAndConditionsProvider;
#endif // CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
@@ -71,7 +75,7 @@ class RootNodeDevice : public SingleEndpointDevice
CHIP_ERROR Register(EndpointId endpoint, CodeDrivenDataModelProvider & provider,
EndpointId parentId = kInvalidEndpointId) override;
- void UnRegister(CodeDrivenDataModelProvider & provider) override;
+ void Unregister(CodeDrivenDataModelProvider & provider) override;
protected:
Context mContext;
@@ -84,6 +88,7 @@ class RootNodeDevice : public SingleEndpointDevice
mAdministratorCommissioningCluster;
LazyRegisteredServerCluster mGeneralDiagnosticsCluster;
LazyRegisteredServerCluster mGroupKeyManagementCluster;
+ LazyRegisteredServerCluster mGroupcastCluster;
LazyRegisteredServerCluster mSoftwareDiagnosticsServerCluster;
LazyRegisteredServerCluster mAccessControlCluster;
LazyRegisteredServerCluster mOperationalCredentialsCluster;
diff --git a/examples/all-devices-app/all-devices-common/devices/root-node/WifiRootNodeDevice.cpp b/examples/all-devices-app/all-devices-common/devices/root-node/WifiRootNodeDevice.cpp
index 953a24e6098..cc5b7491484 100644
--- a/examples/all-devices-app/all-devices-common/devices/root-node/WifiRootNodeDevice.cpp
+++ b/examples/all-devices-app/all-devices-common/devices/root-node/WifiRootNodeDevice.cpp
@@ -47,9 +47,9 @@ CHIP_ERROR WifiRootNodeDevice::Register(EndpointId endpointId, CodeDrivenDataMod
return CHIP_NO_ERROR;
}
-void WifiRootNodeDevice::UnRegister(CodeDrivenDataModelProvider & provider)
+void WifiRootNodeDevice::Unregister(CodeDrivenDataModelProvider & provider)
{
- RootNodeDevice::UnRegister(provider);
+ RootNodeDevice::Unregister(provider);
if (mNetworkCommissioningCluster.IsConstructed())
{
LogErrorOnFailure(provider.RemoveCluster(&mNetworkCommissioningCluster.Cluster()));
diff --git a/examples/all-devices-app/all-devices-common/devices/root-node/WifiRootNodeDevice.h b/examples/all-devices-app/all-devices-common/devices/root-node/WifiRootNodeDevice.h
index 36435335e00..ccc939d48c9 100644
--- a/examples/all-devices-app/all-devices-common/devices/root-node/WifiRootNodeDevice.h
+++ b/examples/all-devices-app/all-devices-common/devices/root-node/WifiRootNodeDevice.h
@@ -39,7 +39,7 @@ class WifiRootNodeDevice : public RootNodeDevice
CHIP_ERROR Register(EndpointId endpoint, CodeDrivenDataModelProvider & provider,
EndpointId parentId = kInvalidEndpointId) override;
- void UnRegister(CodeDrivenDataModelProvider & provider) override;
+ void Unregister(CodeDrivenDataModelProvider & provider) override;
private:
LazyRegisteredServerCluster mNetworkCommissioningCluster;
diff --git a/examples/all-devices-app/all-devices-common/devices/speaker/SpeakerDevice.cpp b/examples/all-devices-app/all-devices-common/devices/speaker/SpeakerDevice.cpp
index b6cf0f14bfe..9427b80d256 100644
--- a/examples/all-devices-app/all-devices-common/devices/speaker/SpeakerDevice.cpp
+++ b/examples/all-devices-app/all-devices-common/devices/speaker/SpeakerDevice.cpp
@@ -66,7 +66,7 @@ CHIP_ERROR SpeakerDevice::Register(chip::EndpointId endpoint, CodeDrivenDataMode
return provider.AddEndpoint(mEndpointRegistration);
}
-void SpeakerDevice::UnRegister(CodeDrivenDataModelProvider & provider)
+void SpeakerDevice::Unregister(CodeDrivenDataModelProvider & provider)
{
SingleEndpointUnregistration(provider);
if (mLevelControlCluster.IsConstructed())
diff --git a/examples/all-devices-app/all-devices-common/devices/speaker/SpeakerDevice.h b/examples/all-devices-app/all-devices-common/devices/speaker/SpeakerDevice.h
index 786b444796b..79ea2fe11fd 100644
--- a/examples/all-devices-app/all-devices-common/devices/speaker/SpeakerDevice.h
+++ b/examples/all-devices-app/all-devices-common/devices/speaker/SpeakerDevice.h
@@ -37,7 +37,7 @@ class SpeakerDevice : public SingleEndpointDevice
CHIP_ERROR Register(chip::EndpointId endpoint, CodeDrivenDataModelProvider & provider,
EndpointId parentId = kInvalidEndpointId) override;
- void UnRegister(CodeDrivenDataModelProvider & provider) override;
+ void Unregister(CodeDrivenDataModelProvider & provider) override;
// Accessors for subclasses/implementations to interact with clusters
Clusters::OnOffCluster & OnOffCluster();
diff --git a/examples/all-devices-app/all-devices-common/devices/speaker/impl/LoggingSpeakerDevice.cpp b/examples/all-devices-app/all-devices-common/devices/speaker/impl/LoggingSpeakerDevice.cpp
index d2e8877714b..6e49940fc2f 100644
--- a/examples/all-devices-app/all-devices-common/devices/speaker/impl/LoggingSpeakerDevice.cpp
+++ b/examples/all-devices-app/all-devices-common/devices/speaker/impl/LoggingSpeakerDevice.cpp
@@ -15,6 +15,7 @@
* limitations under the License.
*/
#include
+#include
#include
using namespace chip::app::Clusters;
@@ -30,7 +31,10 @@ LoggingSpeakerDevice::~LoggingSpeakerDevice() {}
void LoggingSpeakerDevice::OnLevelChanged(uint8_t value)
{
- ChipLogProgress(AppServer, "LoggingSpeakerDevice: Volume set to %u", value);
+ uint8_t min = LevelControlCluster().GetMinLevel();
+ uint8_t max = LevelControlCluster().GetMaxLevel();
+ uint32_t pct = (max > min) ? (static_cast(value - min) * 100) / (max - min) : 0;
+ ChipLogProgress(AppServer, "LoggingSpeakerDevice: Volume set to %u (%" PRIu32 "%%)", value, pct);
}
void LoggingSpeakerDevice::OnOptionsChanged(BitMask value)
diff --git a/examples/all-devices-app/esp32/main/CMakeLists.txt b/examples/all-devices-app/esp32/main/CMakeLists.txt
index bee0e023d48..15875429f9a 100644
--- a/examples/all-devices-app/esp32/main/CMakeLists.txt
+++ b/examples/all-devices-app/esp32/main/CMakeLists.txt
@@ -15,7 +15,7 @@
# limitations under the License.
#
-get_filename_component(CHIP_ROOT ${CMAKE_SOURCE_DIR}/third_party/connectedhomeip REALPATH)
+get_filename_component(CHIP_ROOT "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip" REALPATH)
get_filename_component(ALL_DEVICES_COMMON_DIR ${CHIP_ROOT}/examples/all-devices-app/all-devices-common REALPATH)
set(PRIV_INCLUDE_DIRS_LIST
@@ -24,110 +24,39 @@ set(PRIV_INCLUDE_DIRS_LIST
"${CHIP_ROOT}/examples/providers"
)
-# Application sources
-set(APP_SRCS
- "${CMAKE_CURRENT_LIST_DIR}/main.cpp"
- "${CMAKE_CURRENT_LIST_DIR}/DeviceShellCommands.cpp"
-
- # All-devices common sources
- # keep-sorted: start
- "${ALL_DEVICES_COMMON_DIR}/devices/boolean-state-sensor/BooleanStateSensorDevice.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/chime/ChimeDevice.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/chime/impl/LoggingChimeDevice.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/interface/DeviceInterface.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/interface/SingleEndpointDevice.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/occupancy-sensor/impl/TogglingOccupancySensorDevice.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/occupancy-sensor/OccupancySensorDevice.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/on-off-light/LoggingOnOffLightDevice.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/root-node/RootNodeDevice.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/root-node/WifiRootNodeDevice.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/speaker/SpeakerDevice.cpp"
- "${ALL_DEVICES_COMMON_DIR}/devices/speaker/impl/LoggingSpeakerDevice.cpp"
- # keep-sorted: end
-
- # Providers
- "${CHIP_ROOT}/examples/providers/DeviceInfoProviderImpl.cpp"
-
- # Shell extension
- "${CHIP_ROOT}/examples/platform/esp32/shell_extension/launch.cpp"
-)
-
-# Code-driven data model provider sources
-set(CODE_DRIVEN_SRCS
- "${CHIP_ROOT}/src/data-model-providers/codedriven/CodeDrivenDataModelProvider.cpp"
- "${CHIP_ROOT}/src/data-model-providers/codedriven/endpoint/EndpointInterfaceRegistry.cpp"
- "${CHIP_ROOT}/src/data-model-providers/codedriven/endpoint/SpanEndpoint.cpp"
-)
-
-# Server and core app sources
-set(SERVER_SRCS
+# Keep top-level src/app files explicit to avoid pulling unrelated src/app/*.cpp.
+set(APP_TOPLEVEL_EXTRA_SRCS
"${CHIP_ROOT}/src/app/SafeAttributePersistenceProvider.cpp"
"${CHIP_ROOT}/src/app/StorageDelegateWrapper.cpp"
- "${CHIP_ROOT}/src/app/server/AclStorage.cpp"
- "${CHIP_ROOT}/src/app/server/CommissioningWindowManager.cpp"
- "${CHIP_ROOT}/src/app/server/DefaultAclStorage.cpp"
- "${CHIP_ROOT}/src/app/server/DefaultTermsAndConditionsProvider.cpp"
- "${CHIP_ROOT}/src/app/server/Dnssd.cpp"
- "${CHIP_ROOT}/src/app/server/EchoHandler.cpp"
- "${CHIP_ROOT}/src/app/server/Server.cpp"
- "${CHIP_ROOT}/src/app/server/TermsAndConditionsManager.cpp"
- "${CHIP_ROOT}/src/app/server/JointFabricAdministrator.cpp"
- "${CHIP_ROOT}/src/app/server/JointFabricDatastore.cpp"
)
-# Persistence sources
-set(PERSISTENCE_SRCS
- "${CHIP_ROOT}/src/app/persistence/AttributePersistence.cpp"
- "${CHIP_ROOT}/src/app/persistence/AttributePersistenceProviderInstance.cpp"
- "${CHIP_ROOT}/src/app/persistence/DefaultAttributePersistenceProvider.cpp"
- "${CHIP_ROOT}/src/app/persistence/DeferredAttributePersistenceProvider.cpp"
- "${CHIP_ROOT}/src/app/persistence/String.cpp"
-)
+set(SRC_DIRS_LIST
+ "${CMAKE_CURRENT_LIST_DIR}"
+ "${CHIP_ROOT}/examples/providers"
+ "${CHIP_ROOT}/examples/platform/esp32/shell_extension"
+ "${CHIP_ROOT}/src/data-model-providers/codedriven"
+ "${CHIP_ROOT}/src/data-model-providers/codedriven/endpoint"
+ "${CHIP_ROOT}/src/app/server"
+ "${CHIP_ROOT}/src/app/persistence"
+ "${CHIP_ROOT}/src/app/server-cluster"
-# Server cluster infrastructure
-set(SERVER_CLUSTER_SRCS
- "${CHIP_ROOT}/src/app/server-cluster/AttributeListBuilder.cpp"
- "${CHIP_ROOT}/src/app/server-cluster/DefaultServerCluster.cpp"
- "${CHIP_ROOT}/src/app/server-cluster/ServerClusterInterface.cpp"
- "${CHIP_ROOT}/src/app/server-cluster/ServerClusterInterfaceRegistry.cpp"
- "${CHIP_ROOT}/src/app/server-cluster/SingleEndpointServerClusterRegistry.cpp"
-)
-
-# Cluster implementations (new-style, excluding CodegenIntegration.cpp files)
-set(CLUSTER_SRCS
- # keep-sorted: start
- "${CHIP_ROOT}/src/app/clusters/access-control-server/access-control-cluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/access-control-server/ArlEncoder.cpp"
- "${CHIP_ROOT}/src/app/clusters/administrator-commissioning-server/AdministratorCommissioningCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/administrator-commissioning-server/AdministratorCommissioningLogic.cpp"
- "${CHIP_ROOT}/src/app/clusters/basic-information/BasicInformationCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/boolean-state-server/BooleanStateCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/chime-server/ChimeCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/descriptor/DescriptorCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/general-commissioning-server/GeneralCommissioningCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/general-diagnostics-server/GeneralDiagnosticsCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/group-key-mgmt-server/GroupKeyManagementCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/groups-server/GroupsCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/identify-server/IdentifyCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/level-control/LevelControlCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/network-commissioning/NetworkCommissioningCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/network-commissioning/WifiScanResponse.cpp"
- "${CHIP_ROOT}/src/app/clusters/occupancy-sensor-server/OccupancySensingCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/on-off-server/OnOffCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/on-off-server/OnOffLightingCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/operational-credentials-server/OperationalCredentialsCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/scenes-server/ExtensionFieldSetsImpl.cpp"
- "${CHIP_ROOT}/src/app/clusters/scenes-server/SceneHandlerImpl.cpp"
- "${CHIP_ROOT}/src/app/clusters/scenes-server/ScenesManagementCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/scenes-server/SceneTableImpl.cpp"
- "${CHIP_ROOT}/src/app/clusters/software-diagnostics-server/SoftwareDiagnosticsCluster.cpp"
- "${CHIP_ROOT}/src/app/clusters/software-diagnostics-server/software-fault-listener.cpp"
- "${CHIP_ROOT}/src/app/clusters/wifi-network-diagnostics-server/WiFiNetworkDiagnosticsCluster.cpp"
- # keep-sorted: end
+ # all-devices-common device modules
+ "${ALL_DEVICES_COMMON_DIR}/devices/boolean-state-sensor"
+ "${ALL_DEVICES_COMMON_DIR}/devices/chime"
+ "${ALL_DEVICES_COMMON_DIR}/devices/chime/impl"
+ "${ALL_DEVICES_COMMON_DIR}/devices/interface"
+ "${ALL_DEVICES_COMMON_DIR}/devices/occupancy-sensor"
+ "${ALL_DEVICES_COMMON_DIR}/devices/occupancy-sensor/impl"
+ "${ALL_DEVICES_COMMON_DIR}/devices/on-off-light"
+ "${ALL_DEVICES_COMMON_DIR}/devices/root-node"
+ "${ALL_DEVICES_COMMON_DIR}/devices/speaker"
+ "${ALL_DEVICES_COMMON_DIR}/devices/speaker/impl"
)
idf_component_register(PRIV_INCLUDE_DIRS ${PRIV_INCLUDE_DIRS_LIST}
- SRCS ${APP_SRCS} ${CODE_DRIVEN_SRCS} ${SERVER_SRCS} ${PERSISTENCE_SRCS} ${SERVER_CLUSTER_SRCS} ${CLUSTER_SRCS})
+ SRC_DIRS ${SRC_DIRS_LIST})
+
+target_sources(${COMPONENT_LIB} PRIVATE ${APP_TOPLEVEL_EXTRA_SRCS})
target_compile_options(${COMPONENT_LIB} PRIVATE "-DCHIP_HAVE_CONFIG_H")
target_compile_options(${COMPONENT_LIB} PUBLIC
diff --git a/examples/all-devices-app/esp32/main/main.cpp b/examples/all-devices-app/esp32/main/main.cpp
index 6de1806b7f8..aa2b7d9d0b0 100644
--- a/examples/all-devices-app/esp32/main/main.cpp
+++ b/examples/all-devices-app/esp32/main/main.cpp
@@ -102,6 +102,7 @@ Credentials::GroupDataProviderImpl gGroupDataProvider;
chip::app::CodeDrivenDataModelProvider * gDataModelProvider = nullptr;
std::unique_ptr gRootNodeDevice;
std::unique_ptr gConstructedDevice;
+DefaultTimerDelegate gTimerDelegate;
void DeInitBLEIfCommissioned()
{
@@ -220,23 +221,25 @@ chip::app::DataModel::Provider * PopulateCodeDrivenDataModelProvider(PersistentS
gRootNodeDevice = std::make_unique(
RootNodeDevice::Context {
- .commissioningWindowManager = Server::GetInstance().GetCommissioningWindowManager(), //
- .configurationManager = DeviceLayer::ConfigurationMgr(), //
- .deviceControlServer = DeviceLayer::DeviceControlServer::DeviceControlSvr(), //
- .fabricTable = Server::GetInstance().GetFabricTable(), //
- .accessControl = Server::GetInstance().GetAccessControl(), //
- .persistentStorage = Server::GetInstance().GetPersistentStorage(), //
- .failSafeContext = Server::GetInstance().GetFailSafeContext(), //
- .deviceInstanceInfoProvider = *provider, //
- .platformManager = DeviceLayer::PlatformMgr(), //
- .groupDataProvider = gGroupDataProvider, //
- .sessionManager = Server::GetInstance().GetSecureSessionManager(), //
- .dnssdServer = DnssdServer::Instance(), //
- .deviceLoadStatusProvider = *InteractionModelEngine::GetInstance(), //
- .diagnosticDataProvider = DeviceLayer::GetDiagnosticDataProvider(), //
- .testEventTriggerDelegate = testEventTriggerDelegate, //
- .safeAttributePersistenceProvider = gSafeAttributePersistenceProvider, //
-
+ .commissioningWindowManager = Server::GetInstance().GetCommissioningWindowManager(), //
+ .configurationManager = DeviceLayer::ConfigurationMgr(), //
+ .deviceControlServer = DeviceLayer::DeviceControlServer::DeviceControlSvr(), //
+ .fabricTable = Server::GetInstance().GetFabricTable(), //
+ .accessControl = Server::GetInstance().GetAccessControl(), //
+ .persistentStorage = Server::GetInstance().GetPersistentStorage(), //
+ .failSafeContext = Server::GetInstance().GetFailSafeContext(), //
+ .deviceInstanceInfoProvider = *provider, //
+ .platformManager = DeviceLayer::PlatformMgr(), //
+ .groupDataProvider = gGroupDataProvider, //
+ .sessionManager = Server::GetInstance().GetSecureSessionManager(), //
+ .dnssdServer = DnssdServer::Instance(), //
+ .deviceLoadStatusProvider = *InteractionModelEngine::GetInstance(), //
+ .diagnosticDataProvider = DeviceLayer::GetDiagnosticDataProvider(), //
+ .testEventTriggerDelegate = testEventTriggerDelegate, //
+ .dacProvider = *Credentials::GetDeviceAttestationCredentialsProvider(), //
+ .eventManagement = EventManagement::GetInstance(), //
+ .safeAttributePersistenceProvider = gSafeAttributePersistenceProvider, //
+ .timerDelegate = gTimerDelegate, //
#if CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
.termsAndConditionsProvider = TermsAndConditionsManager::GetInstance(),
#endif // CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
@@ -272,11 +275,10 @@ chip::app::DataModel::Provider * PopulateCodeDrivenDataModelProvider(PersistentS
void InitServer(intptr_t context)
{
- static DefaultTimerDelegate timerDelegate;
DeviceFactory::GetInstance().Init(DeviceFactory::Context{
.groupDataProvider = gGroupDataProvider, //
.fabricTable = Server::GetInstance().GetFabricTable(), //
- .timerDelegate = timerDelegate, //
+ .timerDelegate = gTimerDelegate, //
});
static chip::CommonCaseDeviceServerInitParams initParams;
diff --git a/examples/all-devices-app/posix/app_options/AppOptions.cpp b/examples/all-devices-app/posix/app_options/AppOptions.cpp
index ef6a4cf95a7..0355e023eae 100644
--- a/examples/all-devices-app/posix/app_options/AppOptions.cpp
+++ b/examples/all-devices-app/posix/app_options/AppOptions.cpp
@@ -18,8 +18,12 @@
#include
#include
+#include
#include
+#include
+#include
+
using namespace chip;
using namespace chip::ArgParser;
@@ -28,33 +32,105 @@ constexpr uint16_t kOptionDeviceType = 0xffd0;
constexpr uint16_t kOptionEndpoint = 0xffd1;
constexpr uint16_t kOptionWiFi = 0xffd2;
-const char * AppOptions::mDeviceTypeName = "contact-sensor"; // defaulting to contact sensor if not specified
-chip::EndpointId AppOptions::mDeviceEndpoint = 1; // defaulting to endpoint 1 if not specified
-bool AppOptions::mEnableWiFi = false;
+std::vector AppOptions::mDeviceConfigs;
+bool AppOptions::mEnableWiFi = false;
+
+const std::vector & AppOptions::GetDeviceConfigs()
+{
+ if (mDeviceConfigs.empty())
+ {
+ static const std::vector kDefault = { { "contact-sensor", 1 } };
+ return kDefault;
+ }
+ return mDeviceConfigs;
+}
+
+bool AppOptions::ParseEndpointId(const char * str, chip::EndpointId & endpoint)
+{
+ char * endptr;
+ long val = strtol(str, &endptr, 10);
+
+ if (endptr == str || *endptr != '\0' || val < 0 || val > UINT16_MAX)
+ {
+ return false;
+ }
+
+ endpoint = static_cast(val);
+ return true;
+}
+
+/**
+ * Parses a device configuration string in the format "type" or "type:endpoint".
+ *
+ * Example: "speaker:2" -> type="speaker", endpoint=2
+ *
+ * @param value The string to parse.
+ * @param config The DeviceConfig structure to populate.
+ * @return true on success, false on failure (e.g. invalid format or endpoint ID).
+ */
+bool AppOptions::ParseDeviceConfig(const char * value, DeviceConfig & config)
+{
+ VerifyOrReturnValue(value != nullptr, false);
+
+ config.endpoint = 1; // Default to endpoint 1
+
+ const char * colonPos = strchr(value, ':');
+ if (colonPos != nullptr)
+ {
+ config.type.assign(value, static_cast(colonPos - value));
+
+ if (!ParseEndpointId(colonPos + 1, config.endpoint))
+ {
+ ChipLogError(Support, "Invalid endpoint ID in device config: %s\n", value);
+ return false;
+ }
+ }
+ else
+ {
+ config.type = value;
+ }
+ return true;
+}
bool AppOptions::AllDevicesAppOptionHandler(const char * program, OptionSet * options, int identifier, const char * name,
const char * value)
{
switch (identifier)
{
- case kOptionDeviceType:
- if (value == nullptr)
+ case kOptionDeviceType: {
+ DeviceConfig config;
+ if (!ParseDeviceConfig(value, config))
{
- ChipLogError(Support, "INTERNAL ERROR: No device type value passed in.\n");
return false;
}
- ChipLogProgress(AppServer, "Using the device type of %s", value);
- mDeviceTypeName = value;
+
+ ChipLogProgress(AppServer, "Adding device type %s on endpoint %d", config.type.c_str(), config.endpoint);
+ mDeviceConfigs.push_back(std::move(config));
return true;
- case kOptionEndpoint:
- if (value == nullptr)
+ }
+ case kOptionEndpoint: {
+ chip::EndpointId ep;
+ if (value == nullptr || !ParseEndpointId(value, ep))
{
- ChipLogError(Support, "INTERNAL ERROR: No endpoint ID value passed in.\n");
+ ChipLogError(Support, "Invalid endpoint ID: %s\n", value ? value : "(null)");
return false;
}
- mDeviceEndpoint = static_cast(atoi(value));
- ChipLogProgress(AppServer, "Using endpoint %d for the device.", mDeviceEndpoint);
+
+ if (mDeviceConfigs.empty())
+ {
+ ChipLogError(Support, "Warning: --endpoint specified before --device. Creating default 'contact-sensor'.");
+ DeviceConfig config;
+ config.type = "contact-sensor";
+ config.endpoint = ep;
+ mDeviceConfigs.push_back(std::move(config));
+ }
+ else
+ {
+ mDeviceConfigs.back().endpoint = ep;
+ ChipLogProgress(AppServer, "Updated last device to endpoint %d", ep);
+ }
return true;
+ }
case kOptionWiFi:
mEnableWiFi = true;
ChipLogProgress(AppServer, "WiFi usage enabled");
@@ -88,11 +164,13 @@ OptionSet * AppOptions::GetOptions()
}
result.replace(result.length() - 1, 1, ">");
result += "\n";
- result += " Select the device to start up\n\n";
+ result += " Select the device to start up. Format: 'type' or 'type:endpoint'\n";
+ result += " Can be specified multiple times for multi-endpoint devices.\n";
+ result += " Example: --device chime:1 --device speaker:2\n\n";
// rest of the help
result += " --endpoint \n";
- result += " Define the endpoint to start on (default 1)\n\n";
+ result += " Define the endpoint for the preceding device (default 1)\n\n";
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
result += " --wifi\n";
diff --git a/examples/all-devices-app/posix/app_options/AppOptions.h b/examples/all-devices-app/posix/app_options/AppOptions.h
index 251169e9826..5d358ff2585 100644
--- a/examples/all-devices-app/posix/app_options/AppOptions.h
+++ b/examples/all-devices-app/posix/app_options/AppOptions.h
@@ -22,14 +22,31 @@
#include
#include
+#include
+#include
+
class AppOptions
{
public:
+ /**
+ * @brief Configuration for a single device instance.
+ *
+ * This structure holds the device type string (e.g. "on-off-light") and the
+ * endpoint ID where this device should be instantiated.
+ */
+ struct DeviceConfig
+ {
+ std::string type;
+ chip::EndpointId endpoint;
+ };
+
static chip::ArgParser::OptionSet * GetOptions();
- static const char * GetDeviceType() { return mDeviceTypeName; }
+ static const std::vector & GetDeviceConfigs();
- static chip::EndpointId GetDeviceEndpoint() { return mDeviceEndpoint; }
+ static const char * GetDeviceType() { return GetDeviceConfigs().front().type.c_str(); }
+
+ static chip::EndpointId GetDeviceEndpoint() { return GetDeviceConfigs().front().endpoint; }
static bool EnableWiFi() { return mEnableWiFi; }
@@ -37,7 +54,9 @@ class AppOptions
static bool AllDevicesAppOptionHandler(const char * program, chip::ArgParser::OptionSet * options, int identifier,
const char * name, const char * value);
- static const char * mDeviceTypeName;
- static chip::EndpointId mDeviceEndpoint;
+ static bool ParseEndpointId(const char * str, chip::EndpointId & endpoint);
+ static bool ParseDeviceConfig(const char * value, DeviceConfig & config);
+
+ static std::vector mDeviceConfigs;
static bool mEnableWiFi;
};
diff --git a/examples/all-devices-app/posix/main.cpp b/examples/all-devices-app/posix/main.cpp
index 4bc92b6a576..1eb853e341c 100644
--- a/examples/all-devices-app/posix/main.cpp
+++ b/examples/all-devices-app/posix/main.cpp
@@ -55,6 +55,7 @@ AppMainLoopImplementation * gMainLoopImplementation = nullptr;
AllDevicesExampleDeviceInfoProviderImpl gExampleDeviceInfoProvider;
Credentials::GroupDataProviderImpl gGroupDataProvider;
chip::app::DefaultSafeAttributePersistenceProvider gSafeAttributePersistenceProvider;
+DefaultTimerDelegate gTimerDelegate;
// To hold SPAKE2+ verifier, discriminator, passcode
LinuxCommissionableDataProvider gCommissionableDataProvider;
@@ -96,8 +97,10 @@ class CodeDrivenDataModelDevices
DeviceLoadStatusProvider & deviceLoadStatusProvider;
DeviceLayer::DiagnosticDataProvider & diagnosticDataProvider;
TestEventTriggerDelegate * testEventTriggerDelegate;
+ Credentials::DeviceAttestationCredentialsProvider & dacProvider;
+ EventManagement & eventManagement;
SafeAttributePersistenceProvider & safeAttributePersistenceProvider;
-
+ TimerDelegate & timerDelegate;
#if CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
TermsAndConditionsProvider & termsAndConditionsProvider;
#endif // CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
@@ -122,8 +125,10 @@ class CodeDrivenDataModelDevices
.deviceLoadStatusProvider = mContext.deviceLoadStatusProvider, //
.diagnosticDataProvider = mContext.diagnosticDataProvider, //
.testEventTriggerDelegate = mContext.testEventTriggerDelegate, //
+ .dacProvider = mContext.dacProvider, //
+ .eventManagement = mContext.eventManagement, //
.safeAttributePersistenceProvider = mContext.safeAttributePersistenceProvider, //
-
+ .timerDelegate = mContext.timerDelegate, //
#if CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
.termsAndConditionsProvider = mContext.termsAndConditionsProvider,
#endif // CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
@@ -142,21 +147,25 @@ class CodeDrivenDataModelDevices
ReturnErrorOnFailure(mAttributePersistence.Init(&mContext.storageDelegate));
ReturnErrorOnFailure(mRootNode.RootDevice().Register(kRootEndpointId, mDataModelProvider, kInvalidEndpointId));
- mConstructedDevice = DeviceFactory::GetInstance().Create(AppOptions::GetDeviceType());
- VerifyOrReturnError(mConstructedDevice, CHIP_ERROR_NO_MEMORY);
- ReturnErrorOnFailure(mConstructedDevice->Register(AppOptions::GetDeviceEndpoint(), mDataModelProvider, kInvalidEndpointId));
+ for (const auto & config : AppOptions::GetDeviceConfigs())
+ {
+ auto device = DeviceFactory::GetInstance().Create(config.type);
+ VerifyOrReturnError(device, CHIP_ERROR_NO_MEMORY);
+ ReturnErrorOnFailure(device->Register(config.endpoint, mDataModelProvider, kInvalidEndpointId));
+ mConstructedDevices.push_back(std::move(device));
+ }
return CHIP_NO_ERROR;
}
void Shutdown()
{
- if (mConstructedDevice)
+ for (auto & device : mConstructedDevices)
{
- mConstructedDevice->UnRegister(mDataModelProvider);
- mConstructedDevice.reset();
+ device->Unregister(mDataModelProvider);
}
- mRootNode.RootDevice().UnRegister(mDataModelProvider);
+ mConstructedDevices.clear();
+ mRootNode.RootDevice().Unregister(mDataModelProvider);
}
chip::app::CodeDrivenDataModelProvider & DataModelProvider() { return mDataModelProvider; }
@@ -168,18 +177,17 @@ class CodeDrivenDataModelDevices
chip::app::CodeDrivenDataModelProvider mDataModelProvider;
AppRootNode mRootNode;
- std::unique_ptr mConstructedDevice;
+ std::vector> mConstructedDevices;
};
void RunApplication(AppMainLoopImplementation * mainLoop = nullptr)
{
gMainLoopImplementation = mainLoop;
- static DefaultTimerDelegate timerDelegate;
DeviceFactory::GetInstance().Init(DeviceFactory::Context{
.groupDataProvider = gGroupDataProvider, //
.fabricTable = Server::GetInstance().GetFabricTable(), //
- .timerDelegate = timerDelegate, //
+ .timerDelegate = gTimerDelegate, //
});
@@ -193,7 +201,7 @@ void RunApplication(AppMainLoopImplementation * mainLoop = nullptr)
DeviceLayer::DeviceInstanceInfoProvider * provider = DeviceLayer::GetDeviceInstanceInfoProvider();
if (provider == nullptr)
{
- ChipLogError(AppServer, "Failed to get the DeviceInstanceInfoProvifer.");
+ ChipLogError(AppServer, "Failed to get the DeviceInstanceInfoProvider.");
chipDie();
}
@@ -201,24 +209,31 @@ void RunApplication(AppMainLoopImplementation * mainLoop = nullptr)
SuccessOrDie(gSafeAttributePersistenceProvider.Init(initParams.persistentStorageDelegate));
SetSafeAttributePersistenceProvider(&gSafeAttributePersistenceProvider);
+ // Set the global DAC provider before server/cluster init so any integration path that
+ // snapshots the provider during construction sees a valid implementation.
+ SetDeviceAttestationCredentialsProvider(Credentials::Examples::GetExampleDACProvider());
+
static CodeDrivenDataModelDevices devices({
- .storageDelegate = *initParams.persistentStorageDelegate, //
- .commissioningWindowManager = Server::GetInstance().GetCommissioningWindowManager(), //
- .configurationManager = DeviceLayer::ConfigurationMgr(), //
- .deviceControlServer = DeviceLayer::DeviceControlServer::DeviceControlSvr(), //
- .fabricTable = Server::GetInstance().GetFabricTable(), //
- .accessControl = Server::GetInstance().GetAccessControl(), //
- .persistentStorage = Server::GetInstance().GetPersistentStorage(), //
- .failSafeContext = Server::GetInstance().GetFailSafeContext(), //
- .deviceInstanceInfoProvider = *provider, //
- .platformManager = DeviceLayer::PlatformMgr(), //
- .groupDataProvider = gGroupDataProvider, //
- .sessionManager = Server::GetInstance().GetSecureSessionManager(), //
- .dnssdServer = DnssdServer::Instance(), //
- .deviceLoadStatusProvider = *InteractionModelEngine::GetInstance(), //
- .diagnosticDataProvider = DeviceLayer::GetDiagnosticDataProvider(), //
- .testEventTriggerDelegate = initParams.testEventTriggerDelegate, //
- .safeAttributePersistenceProvider = gSafeAttributePersistenceProvider, //
+ .storageDelegate = *initParams.persistentStorageDelegate, //
+ .commissioningWindowManager = Server::GetInstance().GetCommissioningWindowManager(), //
+ .configurationManager = DeviceLayer::ConfigurationMgr(), //
+ .deviceControlServer = DeviceLayer::DeviceControlServer::DeviceControlSvr(), //
+ .fabricTable = Server::GetInstance().GetFabricTable(), //
+ .accessControl = Server::GetInstance().GetAccessControl(), //
+ .persistentStorage = Server::GetInstance().GetPersistentStorage(), //
+ .failSafeContext = Server::GetInstance().GetFailSafeContext(), //
+ .deviceInstanceInfoProvider = *provider, //
+ .platformManager = DeviceLayer::PlatformMgr(), //
+ .groupDataProvider = gGroupDataProvider, //
+ .sessionManager = Server::GetInstance().GetSecureSessionManager(), //
+ .dnssdServer = DnssdServer::Instance(), //
+ .deviceLoadStatusProvider = *InteractionModelEngine::GetInstance(), //
+ .diagnosticDataProvider = DeviceLayer::GetDiagnosticDataProvider(), //
+ .testEventTriggerDelegate = initParams.testEventTriggerDelegate, //
+ .dacProvider = *Credentials::GetDeviceAttestationCredentialsProvider(), //
+ .eventManagement = EventManagement::GetInstance(), //
+ .safeAttributePersistenceProvider = gSafeAttributePersistenceProvider, //
+ .timerDelegate = gTimerDelegate, //
#if CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
.termsAndConditionsProvider = TermsAndConditionsManager::GetInstance(),
@@ -267,8 +282,6 @@ void RunApplication(AppMainLoopImplementation * mainLoop = nullptr)
SuccessOrDie(chip::DeviceLayer::GetDeviceInstanceInfoProvider()->GetProductId(payload.productID));
PrintOnboardingCodes(payload);
- SetDeviceAttestationCredentialsProvider(Credentials::Examples::GetExampleDACProvider());
-
chip::app::SetTerminateHandler(StopSignalHandler);
// This message is used as a marker for when the application process has started.
diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/GroupSettingFragment.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/GroupSettingFragment.kt
index 512c99f0d09..eabc37808be 100644
--- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/GroupSettingFragment.kt
+++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/GroupSettingFragment.kt
@@ -260,7 +260,8 @@ class GroupSettingFragment : Fragment() {
hexStringToByteArray(epochKey1Ed.text.toString()),
epochStartTime1Ed.text.toString().toULong().toLong(),
hexStringToByteArray(epochKey2Ed.text.toString()),
- epochStartTime2Ed.text.toString().toULong().toLong()
+ epochStartTime2Ed.text.toString().toULong().toLong(),
+ 0
)
sendKeySetWrite(keySetWritestruct)
requireActivity().runOnUiThread { dialog.dismiss() }
diff --git a/examples/base-platform-app/silabs/data_model/platform-thread-app.matter b/examples/base-platform-app/silabs/data_model/platform-thread-app.matter
index 5872f6ebca6..2baa15d9d6d 100644
--- a/examples/base-platform-app/silabs/data_model/platform-thread-app.matter
+++ b/examples/base-platform-app/silabs/data_model/platform-thread-app.matter
@@ -1250,7 +1250,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1737,7 +1736,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1746,6 +1750,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1770,12 +1775,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1802,13 +1814,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
diff --git a/examples/base-platform-app/silabs/data_model/platform-thread-icd-app.matter b/examples/base-platform-app/silabs/data_model/platform-thread-icd-app.matter
index 7276ba6678d..721e05a2378 100644
--- a/examples/base-platform-app/silabs/data_model/platform-thread-icd-app.matter
+++ b/examples/base-platform-app/silabs/data_model/platform-thread-icd-app.matter
@@ -1250,7 +1250,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1737,7 +1736,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1746,6 +1750,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1770,12 +1775,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1802,13 +1814,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
diff --git a/examples/base-platform-app/silabs/data_model/platform-wifi-app.matter b/examples/base-platform-app/silabs/data_model/platform-wifi-app.matter
index 7b61e62a916..c663a9a6454 100644
--- a/examples/base-platform-app/silabs/data_model/platform-wifi-app.matter
+++ b/examples/base-platform-app/silabs/data_model/platform-wifi-app.matter
@@ -1250,7 +1250,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1646,7 +1645,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1655,6 +1659,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1679,12 +1684,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1711,13 +1723,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
diff --git a/examples/base-platform-app/silabs/data_model/platform-wifi-icd-app.matter b/examples/base-platform-app/silabs/data_model/platform-wifi-icd-app.matter
index a65c02c087f..07bf5ab0dce 100644
--- a/examples/base-platform-app/silabs/data_model/platform-wifi-icd-app.matter
+++ b/examples/base-platform-app/silabs/data_model/platform-wifi-icd-app.matter
@@ -1250,7 +1250,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1646,7 +1645,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1655,6 +1659,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1679,12 +1684,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1711,13 +1723,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
diff --git a/examples/bridge-app/bridge-common/bridge-app.matter b/examples/bridge-app/bridge-common/bridge-app.matter
index 8162416b899..b380df36545 100644
--- a/examples/bridge-app/bridge-common/bridge-app.matter
+++ b/examples/bridge-app/bridge-common/bridge-app.matter
@@ -1513,7 +1513,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2172,7 +2171,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2181,6 +2185,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2205,12 +2210,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2237,13 +2249,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2280,7 +2292,7 @@ cluster TemperatureMeasurement = 1026 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -2426,6 +2438,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2596,6 +2609,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2723,8 +2737,8 @@ endpoint 2 {
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- callback attribute featureMap default = 0;
- callback attribute clusterRevision default = 1;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
diff --git a/examples/bridge-app/bridge-common/bridge-app.zap b/examples/bridge-app/bridge-common/bridge-app.zap
index b3a411664cd..8c90fc969bc 100644
--- a/examples/bridge-app/bridge-common/bridge-app.zap
+++ b/examples/bridge-app/bridge-common/bridge-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1905,6 +1905,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4224,6 +4240,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/camera-app/camera-common/camera-app.matter b/examples/camera-app/camera-common/camera-app.matter
index 43afdf9015e..0f2c648aba8 100644
--- a/examples/camera-app/camera-common/camera-app.matter
+++ b/examples/camera-app/camera-common/camera-app.matter
@@ -1580,7 +1580,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2331,7 +2330,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2340,6 +2344,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2364,12 +2369,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2396,13 +2408,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2997,7 +3009,7 @@ internal cluster FaultInjection = 4294048774 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -3146,6 +3158,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3344,6 +3357,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/camera-app/camera-common/camera-app.zap b/examples/camera-app/camera-common/camera-app.zap
index 8fdd32cdb43..133adff037e 100644
--- a/examples/camera-app/camera-common/camera-app.zap
+++ b/examples/camera-app/camera-common/camera-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1941,6 +1941,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4595,6 +4611,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/camera-app/camera-common/src/camera-app.cpp b/examples/camera-app/camera-common/src/camera-app.cpp
index 723457bf709..b07c9c6694d 100644
--- a/examples/camera-app/camera-common/src/camera-app.cpp
+++ b/examples/camera-app/camera-common/src/camera-app.cpp
@@ -341,6 +341,13 @@ void CameraApp::ShutdownCameraDeviceClusters()
ChipLogError(Camera, "CameraAVStreamMgmt Server unregister error: %" CHIP_ERROR_FORMAT, err.Format());
}
mAVStreamMgmtServer.Destroy();
+
+ err = CodegenDataModelProvider::Instance().Registry().Unregister(&mAVSettingsUserLevelMgmtServer.Cluster());
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(Camera, "CameraAVSettingsUserLevelMgmt Server unregister error: %" CHIP_ERROR_FORMAT, err.Format());
+ }
+ mAVSettingsUserLevelMgmtServer.Destroy();
}
static constexpr EndpointId kCameraEndpointId = 1;
diff --git a/examples/chef/common/chef-pump.cpp b/examples/chef/common/chef-pump.cpp
index e5e25583d3b..a6ed26dca15 100644
--- a/examples/chef/common/chef-pump.cpp
+++ b/examples/chef/common/chef-pump.cpp
@@ -19,6 +19,7 @@
#include "chef-pump.h"
#include "DeviceTypes.h"
#include
+#include
#include
#include
#include
@@ -80,7 +81,8 @@ void updateSetPointsOnOff(EndpointId endpointId, bool onOff)
if (epIndex < kTemperatureMeasurementCount)
{
auto updatedTemperature = onOff ? TemperatureRangeMax[epIndex] : chip::app::DataModel::Nullable(0);
- TemperatureMeasurement::Attributes::MeasuredValue::Set(endpointId, updatedTemperature);
+ LogErrorOnFailure(TemperatureMeasurement::SetMeasuredValue(endpointId, updatedTemperature));
+
MatterReportingAttributeChangeCallback(endpointId, TemperatureMeasurement::Id,
TemperatureMeasurement::Attributes::MeasuredValue::Id);
}
@@ -148,7 +150,8 @@ void updateSetPointsLevel(EndpointId endpointId, DataModel::Nullable le
{
DataModel::Nullable updatedTemperature =
LevelToSetpoint(level, TemperatureRangeMin[epIndex], TemperatureRangeMax[epIndex]);
- TemperatureMeasurement::Attributes::MeasuredValue::Set(endpointId, updatedTemperature);
+ LogErrorOnFailure(TemperatureMeasurement::SetMeasuredValue(endpointId, updatedTemperature));
+
MatterReportingAttributeChangeCallback(endpointId, TemperatureMeasurement::Id,
TemperatureMeasurement::Attributes::MeasuredValue::Id);
}
@@ -281,8 +284,10 @@ void init()
epIndex = getIndexTemperatureMeasurement(endpointId);
if (epIndex < kTemperatureMeasurementCount)
{
- VerifyOrDieWithMsg(TemperatureMeasurement::Attributes::MeasuredValue::SetNull(endpointId) == Status::Success,
- DeviceLayer, "Failed to initialize Temperature Measured Value to NULL for Endpoint: %d", endpointId);
+ DataModel::Nullable temp;
+ CHIP_ERROR err = TemperatureMeasurement::SetMeasuredValue(endpointId, temp);
+ VerifyOrDieWithMsg(err == CHIP_NO_ERROR, DeviceLayer,
+ "Failed to initialize Temperature Measured Value to NULL for Endpoint: %d", endpointId);
if (TemperatureMeasurement::Attributes::MinMeasuredValue::Get(endpointId, TemperatureRangeMin[epIndex]) !=
Status::Success ||
TemperatureRangeMin[epIndex].IsNull())
diff --git a/examples/chef/devices/icd_rootnode_contactsensor_ed3b19ec55.matter b/examples/chef/devices/icd_rootnode_contactsensor_ed3b19ec55.matter
index 25d8784c29b..492e601d7ae 100644
--- a/examples/chef/devices/icd_rootnode_contactsensor_ed3b19ec55.matter
+++ b/examples/chef/devices/icd_rootnode_contactsensor_ed3b19ec55.matter
@@ -1078,7 +1078,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1682,7 +1681,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1691,6 +1695,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1715,12 +1720,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1747,13 +1759,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1892,7 +1904,7 @@ cluster IcdManagement = 70 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1993,6 +2005,7 @@ endpoint 0 {
callback attribute upTime;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2107,6 +2120,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/icd_rootnode_contactsensor_ed3b19ec55.zap b/examples/chef/devices/icd_rootnode_contactsensor_ed3b19ec55.zap
index f2771a7507f..1378ba9db50 100644
--- a/examples/chef/devices/icd_rootnode_contactsensor_ed3b19ec55.zap
+++ b/examples/chef/devices/icd_rootnode_contactsensor_ed3b19ec55.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1307,6 +1307,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2740,6 +2756,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
index 5dfb14b91fb..00f37e008e7 100644
--- a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
+++ b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
@@ -1321,7 +1321,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1925,7 +1924,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1934,6 +1938,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1958,12 +1963,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1990,13 +2002,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2074,7 +2086,7 @@ cluster OccupancySensing = 1030 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2171,6 +2183,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2337,6 +2350,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap
index 341c9b6d7b5..b1b4a72eb1a 100644
--- a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap
+++ b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1260,6 +1260,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -3456,6 +3472,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_airpurifier_73a6fe2651.matter b/examples/chef/devices/rootnode_airpurifier_73a6fe2651.matter
index 33cf98b9e6f..76af10a302e 100644
--- a/examples/chef/devices/rootnode_airpurifier_73a6fe2651.matter
+++ b/examples/chef/devices/rootnode_airpurifier_73a6fe2651.matter
@@ -1281,7 +1281,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1601,7 +1600,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1610,6 +1614,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1634,12 +1639,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1666,13 +1678,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1858,7 +1870,7 @@ cluster FanControl = 514 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1975,6 +1987,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2031,6 +2044,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_airpurifier_73a6fe2651.zap b/examples/chef/devices/rootnode_airpurifier_73a6fe2651.zap
index c0424bf1404..33cb9049b1f 100644
--- a/examples/chef/devices/rootnode_airpurifier_73a6fe2651.zap
+++ b/examples/chef/devices/rootnode_airpurifier_73a6fe2651.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2153,6 +2169,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter b/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter
index 5e9cfef89e7..7b283bde755 100644
--- a/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter
+++ b/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter
@@ -1134,7 +1134,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1418,7 +1417,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1427,6 +1431,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1451,12 +1456,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1483,13 +1495,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2729,7 +2741,7 @@ cluster RadonConcentrationMeasurement = 1071 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -2831,6 +2843,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2877,6 +2890,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -3242,15 +3256,15 @@ endpoint 3 {
}
server cluster TemperatureMeasurement {
- persist attribute measuredValue default = 0;
+ callback attribute measuredValue;
persist attribute minMeasuredValue default = -5000;
persist attribute maxMeasuredValue default = 7500;
persist attribute tolerance default = 10;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
endpoint 4 {
diff --git a/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.zap b/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.zap
index 25f4eac463d..9b1872f6604 100644
--- a/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.zap
+++ b/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1315,6 +1315,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1856,6 +1872,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter
index 1c6e49b38de..358d3ca4ba9 100644
--- a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter
+++ b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter
@@ -1468,7 +1468,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1788,7 +1787,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1797,6 +1801,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1821,12 +1826,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1853,13 +1865,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2483,7 +2495,7 @@ cluster RadonConcentrationMeasurement = 1071 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2600,6 +2612,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2656,6 +2669,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2727,15 +2741,15 @@ endpoint 1 {
}
server cluster TemperatureMeasurement {
- persist attribute measuredValue default = 0;
+ callback attribute measuredValue;
persist attribute minMeasuredValue default = -5000;
persist attribute maxMeasuredValue default = 7500;
persist attribute tolerance default = 0;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
server cluster RelativeHumidityMeasurement {
diff --git a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap
index 1997dca838a..6e35ce2baad 100644
--- a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap
+++ b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2153,6 +2169,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter
index 9f915f33aa2..a5b98aa1ccc 100644
--- a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter
+++ b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter
@@ -1404,7 +1404,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1724,7 +1723,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1733,6 +1737,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1757,12 +1762,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1789,13 +1801,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2427,7 +2439,7 @@ cluster AudioOutput = 1291 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2544,6 +2556,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2601,6 +2614,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap
index b0758160213..88845aaf244 100644
--- a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap
+++ b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
index 4e93bde4a9e..52828685e9a 100644
--- a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
+++ b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
@@ -1480,7 +1480,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1800,7 +1799,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1809,6 +1813,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1833,12 +1838,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1865,13 +1877,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2203,7 +2215,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2320,6 +2332,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2377,6 +2390,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap
index 76227658ac6..d8c0b8a001f 100644
--- a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap
+++ b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.matter b/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.matter
index 5e2f0a9aabf..707645bd021 100644
--- a/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.matter
+++ b/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.matter
@@ -1468,7 +1468,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1788,7 +1787,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1797,6 +1801,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1821,12 +1826,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1853,13 +1865,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2405,7 +2417,7 @@ internal cluster UnitTesting = 4294048773 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2522,6 +2534,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2579,6 +2592,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.zap b/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.zap
index 2ea278af7cf..cecadd0e503 100644
--- a/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.zap
+++ b/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
index 44518176ba5..a1b862b857d 100644
--- a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
+++ b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
@@ -1564,7 +1564,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1884,7 +1883,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1893,6 +1897,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1917,12 +1922,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1949,13 +1961,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1980,7 +1992,7 @@ cluster BooleanState = 69 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2097,6 +2109,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2154,6 +2167,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.zap b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.zap
index 4d8f5602198..aeacd14b3b4 100644
--- a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.zap
+++ b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_contactsensor_lightsensor_occupancysensor_temperaturesensor_pressuresensor_flowsensor_humiditysensor_airqualitysensor_powersource_367e7cea91.matter b/examples/chef/devices/rootnode_contactsensor_lightsensor_occupancysensor_temperaturesensor_pressuresensor_flowsensor_humiditysensor_airqualitysensor_powersource_367e7cea91.matter
index 2b4db686761..6daccd07c98 100644
--- a/examples/chef/devices/rootnode_contactsensor_lightsensor_occupancysensor_temperaturesensor_pressuresensor_flowsensor_humiditysensor_airqualitysensor_powersource_367e7cea91.matter
+++ b/examples/chef/devices/rootnode_contactsensor_lightsensor_occupancysensor_temperaturesensor_pressuresensor_flowsensor_humiditysensor_airqualitysensor_powersource_367e7cea91.matter
@@ -1336,7 +1336,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1656,7 +1655,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1665,6 +1669,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1689,12 +1694,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1721,13 +1733,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2504,7 +2516,7 @@ cluster RadonConcentrationMeasurement = 1071 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -2606,6 +2618,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2663,6 +2676,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2827,14 +2841,14 @@ endpoint 4 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 2350;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = -27315;
ram attribute maxMeasuredValue default = 32767;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
endpoint 5 {
diff --git a/examples/chef/devices/rootnode_contactsensor_lightsensor_occupancysensor_temperaturesensor_pressuresensor_flowsensor_humiditysensor_airqualitysensor_powersource_367e7cea91.zap b/examples/chef/devices/rootnode_contactsensor_lightsensor_occupancysensor_temperaturesensor_pressuresensor_flowsensor_humiditysensor_airqualitysensor_powersource_367e7cea91.zap
index 5c6f117842a..aa7147ee2c6 100644
--- a/examples/chef/devices/rootnode_contactsensor_lightsensor_occupancysensor_temperaturesensor_pressuresensor_flowsensor_humiditysensor_airqualitysensor_powersource_367e7cea91.zap
+++ b/examples/chef/devices/rootnode_contactsensor_lightsensor_occupancysensor_temperaturesensor_pressuresensor_flowsensor_humiditysensor_airqualitysensor_powersource_367e7cea91.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1323,6 +1323,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1980,6 +1996,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_cooktop_cooksurface_d3c174cc88.matter b/examples/chef/devices/rootnode_cooktop_cooksurface_d3c174cc88.matter
index 8a7ad6d21f2..87d9a5f6192 100644
--- a/examples/chef/devices/rootnode_cooktop_cooksurface_d3c174cc88.matter
+++ b/examples/chef/devices/rootnode_cooktop_cooksurface_d3c174cc88.matter
@@ -1125,7 +1125,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1485,7 +1484,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1494,6 +1498,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1518,12 +1523,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1550,13 +1562,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1607,7 +1619,7 @@ cluster TemperatureMeasurement = 1026 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1740,6 +1752,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1816,6 +1829,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1904,14 +1918,14 @@ endpoint 2 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 6000;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 3800;
ram attribute maxMeasuredValue default = 26000;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
diff --git a/examples/chef/devices/rootnode_cooktop_cooksurface_d3c174cc88.zap b/examples/chef/devices/rootnode_cooktop_cooksurface_d3c174cc88.zap
index 2324997b428..394fa3b7e0d 100644
--- a/examples/chef/devices/rootnode_cooktop_cooksurface_d3c174cc88.zap
+++ b/examples/chef/devices/rootnode_cooktop_cooksurface_d3c174cc88.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1738,6 +1738,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2703,6 +2719,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
index 54575549cc1..30a65b78fd3 100644
--- a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
+++ b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
@@ -1500,7 +1500,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1820,7 +1819,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1829,6 +1833,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1853,12 +1858,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1885,13 +1897,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1969,7 +1981,7 @@ cluster OccupancySensing = 1030 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2088,6 +2100,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2145,6 +2158,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap
index 624032c83b9..2cf61e177f0 100644
--- a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap
+++ b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1536,6 +1536,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2193,6 +2209,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter
index 3a31da7f5f4..cf607c0853d 100644
--- a/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter
+++ b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter
@@ -1500,7 +1500,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1820,7 +1819,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1829,6 +1833,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1853,12 +1858,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1885,13 +1897,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2123,7 +2135,7 @@ cluster OccupancySensing = 1030 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2240,6 +2252,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2296,6 +2309,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.zap b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.zap
index 4f77e50169b..a7c0fc8eabd 100644
--- a/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.zap
+++ b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1512,6 +1512,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_dishwasher_cc105034fe.matter b/examples/chef/devices/rootnode_dishwasher_cc105034fe.matter
index f86c5676b29..5efc2e3797f 100644
--- a/examples/chef/devices/rootnode_dishwasher_cc105034fe.matter
+++ b/examples/chef/devices/rootnode_dishwasher_cc105034fe.matter
@@ -1125,7 +1125,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1485,7 +1484,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1494,6 +1498,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1518,12 +1523,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1550,13 +1562,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1757,7 +1769,7 @@ cluster OperationalState = 96 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1889,6 +1901,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1967,6 +1980,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_dishwasher_cc105034fe.zap b/examples/chef/devices/rootnode_dishwasher_cc105034fe.zap
index ae32c6e0d73..81b66c31aab 100644
--- a/examples/chef/devices/rootnode_dishwasher_cc105034fe.zap
+++ b/examples/chef/devices/rootnode_dishwasher_cc105034fe.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1731,6 +1731,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2720,6 +2736,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
index 827649bbac6..c1e39447957 100644
--- a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
+++ b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
@@ -1468,7 +1468,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1788,7 +1787,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1797,6 +1801,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1821,12 +1826,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1853,13 +1865,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2515,7 +2527,7 @@ cluster DoorLock = 257 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2634,6 +2646,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2691,6 +2704,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.zap b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.zap
index c04a51f892b..ffa2556d9c1 100644
--- a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.zap
+++ b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1527,6 +1527,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2184,6 +2200,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
index f5b513a1b89..41220916017 100644
--- a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
+++ b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
@@ -1500,7 +1500,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1820,7 +1819,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1829,6 +1833,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1853,12 +1858,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1885,13 +1897,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2223,7 +2235,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2340,6 +2352,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2397,6 +2410,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap
index befda751bb7..ade52ed240e 100644
--- a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap
+++ b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_extractorhood_0359bf807d.matter b/examples/chef/devices/rootnode_extractorhood_0359bf807d.matter
index 20dcdb751bc..199326f3c8a 100644
--- a/examples/chef/devices/rootnode_extractorhood_0359bf807d.matter
+++ b/examples/chef/devices/rootnode_extractorhood_0359bf807d.matter
@@ -1149,7 +1149,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1469,7 +1468,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1478,6 +1482,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1502,12 +1507,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1534,13 +1546,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1823,7 +1835,7 @@ cluster FanControl = 514 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1939,6 +1951,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
ram attribute testEventTriggersEnabled;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2000,6 +2013,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/chef/devices/rootnode_extractorhood_0359bf807d.zap b/examples/chef/devices/rootnode_extractorhood_0359bf807d.zap
index db0d79950fc..c11b786903d 100644
--- a/examples/chef/devices/rootnode_extractorhood_0359bf807d.zap
+++ b/examples/chef/devices/rootnode_extractorhood_0359bf807d.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1629,6 +1629,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2379,6 +2395,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter b/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
index ee4be2e480c..cbedbdf5791 100644
--- a/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
+++ b/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
@@ -1357,7 +1357,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1677,7 +1676,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1686,6 +1690,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1710,12 +1715,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1742,13 +1754,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1834,7 +1846,7 @@ cluster FanControl = 514 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1951,6 +1963,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2008,6 +2021,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_fan_7N2TobIlOX.zap b/examples/chef/devices/rootnode_fan_7N2TobIlOX.zap
index f06be3c7fd6..0692f54b183 100644
--- a/examples/chef/devices/rootnode_fan_7N2TobIlOX.zap
+++ b/examples/chef/devices/rootnode_fan_7N2TobIlOX.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
index 060b20b6fa1..b7913d249de 100644
--- a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
+++ b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
@@ -1306,7 +1306,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1626,7 +1625,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1635,6 +1639,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1659,12 +1664,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1691,13 +1703,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1717,7 +1729,7 @@ cluster FlowMeasurement = 1028 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1834,6 +1846,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1891,6 +1904,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.zap b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.zap
index a426efafc4e..2782f1bc748 100644
--- a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.zap
+++ b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_genericswitch_2dfff6e516.matter b/examples/chef/devices/rootnode_genericswitch_2dfff6e516.matter
index 88e795a5d5a..c2eca242d5b 100644
--- a/examples/chef/devices/rootnode_genericswitch_2dfff6e516.matter
+++ b/examples/chef/devices/rootnode_genericswitch_2dfff6e516.matter
@@ -1316,7 +1316,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1655,7 +1654,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1664,6 +1668,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1688,12 +1693,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1720,18 +1732,18 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1833,6 +1845,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1879,6 +1892,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_genericswitch_2dfff6e516.zap b/examples/chef/devices/rootnode_genericswitch_2dfff6e516.zap
index 852deafe11b..df8696be5d7 100644
--- a/examples/chef/devices/rootnode_genericswitch_2dfff6e516.zap
+++ b/examples/chef/devices/rootnode_genericswitch_2dfff6e516.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1315,6 +1315,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1856,6 +1872,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_genericswitch_9866e35d0b.matter b/examples/chef/devices/rootnode_genericswitch_9866e35d0b.matter
index 9462b569ff6..c96ee787fe6 100644
--- a/examples/chef/devices/rootnode_genericswitch_9866e35d0b.matter
+++ b/examples/chef/devices/rootnode_genericswitch_9866e35d0b.matter
@@ -1316,7 +1316,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1655,7 +1654,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1664,6 +1668,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1688,12 +1693,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1720,18 +1732,18 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1833,6 +1845,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1879,6 +1892,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_genericswitch_9866e35d0b.zap b/examples/chef/devices/rootnode_genericswitch_9866e35d0b.zap
index 5cc87549293..b7701a835fb 100644
--- a/examples/chef/devices/rootnode_genericswitch_9866e35d0b.zap
+++ b/examples/chef/devices/rootnode_genericswitch_9866e35d0b.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1315,6 +1315,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1856,6 +1872,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_heatpump_87ivjRAECh.matter b/examples/chef/devices/rootnode_heatpump_87ivjRAECh.matter
index b9b26b86ac5..55362b8db10 100644
--- a/examples/chef/devices/rootnode_heatpump_87ivjRAECh.matter
+++ b/examples/chef/devices/rootnode_heatpump_87ivjRAECh.matter
@@ -1316,7 +1316,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1600,7 +1599,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1609,6 +1613,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1633,12 +1638,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1665,13 +1677,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2630,7 +2642,7 @@ cluster TemperatureMeasurement = 1026 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -2727,6 +2739,7 @@ endpoint 0 {
callback attribute rebootCount;
callback attribute upTime;
ram attribute testEventTriggersEnabled;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2781,6 +2794,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2925,14 +2939,14 @@ endpoint 2 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 6000;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 0;
ram attribute maxMeasuredValue default = 90;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 1;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
endpoint 3 {
@@ -2965,14 +2979,14 @@ endpoint 3 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 4000;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 0;
ram attribute maxMeasuredValue default = 90;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 1;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
diff --git a/examples/chef/devices/rootnode_heatpump_87ivjRAECh.zap b/examples/chef/devices/rootnode_heatpump_87ivjRAECh.zap
index bc858f8d7bd..aa09ae23197 100644
--- a/examples/chef/devices/rootnode_heatpump_87ivjRAECh.zap
+++ b/examples/chef/devices/rootnode_heatpump_87ivjRAECh.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1329,6 +1329,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -1997,6 +2013,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
index 004fe3b2d77..2efab28ba2b 100644
--- a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
+++ b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
@@ -1306,7 +1306,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1626,7 +1625,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1635,6 +1639,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1659,12 +1664,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1691,13 +1703,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1717,7 +1729,7 @@ cluster RelativeHumidityMeasurement = 1029 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1834,6 +1846,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1891,6 +1904,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.zap b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.zap
index 046b55fdf11..e5d0ffb0ea5 100644
--- a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.zap
+++ b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_laundrydryer_01796fe396.matter b/examples/chef/devices/rootnode_laundrydryer_01796fe396.matter
index c738d878af7..7189f43de79 100644
--- a/examples/chef/devices/rootnode_laundrydryer_01796fe396.matter
+++ b/examples/chef/devices/rootnode_laundrydryer_01796fe396.matter
@@ -1125,7 +1125,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1485,7 +1484,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1494,6 +1498,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1518,12 +1523,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1550,13 +1562,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1657,7 +1669,7 @@ cluster OperationalState = 96 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1789,6 +1801,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1867,6 +1880,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_laundrydryer_01796fe396.zap b/examples/chef/devices/rootnode_laundrydryer_01796fe396.zap
index 5b3a32cad34..0f583ec489c 100644
--- a/examples/chef/devices/rootnode_laundrydryer_01796fe396.zap
+++ b/examples/chef/devices/rootnode_laundrydryer_01796fe396.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1731,6 +1731,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2720,6 +2736,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.matter b/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.matter
index b58cce3d4df..abcbf59a5ac 100644
--- a/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.matter
+++ b/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.matter
@@ -1060,7 +1060,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1420,7 +1419,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1429,6 +1433,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1453,12 +1458,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1485,13 +1497,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1672,7 +1684,7 @@ cluster OperationalState = 96 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1794,6 +1806,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1872,6 +1885,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.zap b/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.zap
index ba75f904bec..1400107f20d 100644
--- a/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.zap
+++ b/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1609,6 +1609,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2598,6 +2614,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
index 371aecafe8b..33813f27607 100644
--- a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
+++ b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
@@ -1306,7 +1306,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1626,7 +1625,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1635,6 +1639,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1659,12 +1664,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1691,13 +1703,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1723,7 +1735,7 @@ cluster IlluminanceMeasurement = 1024 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1840,6 +1852,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1897,6 +1910,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.zap b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.zap
index ceae9083545..aa3a67a868b 100644
--- a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.zap
+++ b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_microwaveoven_37420684d3.matter b/examples/chef/devices/rootnode_microwaveoven_37420684d3.matter
index 1c5e7241c38..86029bc11fd 100644
--- a/examples/chef/devices/rootnode_microwaveoven_37420684d3.matter
+++ b/examples/chef/devices/rootnode_microwaveoven_37420684d3.matter
@@ -1133,7 +1133,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1453,7 +1452,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1462,6 +1466,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1486,12 +1491,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1518,13 +1530,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1694,7 +1706,7 @@ cluster OperationalState = 96 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1798,6 +1810,7 @@ endpoint 0 {
callback attribute activeRadioFaults;
callback attribute activeNetworkFaults;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1852,6 +1865,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_microwaveoven_37420684d3.zap b/examples/chef/devices/rootnode_microwaveoven_37420684d3.zap
index cd9ecbcf992..5cc0b84258b 100644
--- a/examples/chef/devices/rootnode_microwaveoven_37420684d3.zap
+++ b/examples/chef/devices/rootnode_microwaveoven_37420684d3.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1389,6 +1389,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2014,6 +2030,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_mounteddimmableloadcontrol_a9a1a87f2d.matter b/examples/chef/devices/rootnode_mounteddimmableloadcontrol_a9a1a87f2d.matter
index 7d1f6124f08..cb403f2409d 100644
--- a/examples/chef/devices/rootnode_mounteddimmableloadcontrol_a9a1a87f2d.matter
+++ b/examples/chef/devices/rootnode_mounteddimmableloadcontrol_a9a1a87f2d.matter
@@ -1403,7 +1403,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1723,7 +1722,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1732,6 +1736,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1756,12 +1761,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1788,18 +1800,18 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1916,6 +1928,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
ram attribute testEventTriggersEnabled;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1984,6 +1997,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/chef/devices/rootnode_mounteddimmableloadcontrol_a9a1a87f2d.zap b/examples/chef/devices/rootnode_mounteddimmableloadcontrol_a9a1a87f2d.zap
index 01448b3e37b..9fdd6ed3309 100644
--- a/examples/chef/devices/rootnode_mounteddimmableloadcontrol_a9a1a87f2d.zap
+++ b/examples/chef/devices/rootnode_mounteddimmableloadcontrol_a9a1a87f2d.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1605,6 +1605,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2446,6 +2462,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/chef/devices/rootnode_mountedonoffcontrol_ec30c757a6.matter b/examples/chef/devices/rootnode_mountedonoffcontrol_ec30c757a6.matter
index 3926d21bdc2..914e2314f0e 100644
--- a/examples/chef/devices/rootnode_mountedonoffcontrol_ec30c757a6.matter
+++ b/examples/chef/devices/rootnode_mountedonoffcontrol_ec30c757a6.matter
@@ -1280,7 +1280,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1600,7 +1599,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1609,6 +1613,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1633,12 +1638,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1665,18 +1677,18 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1793,6 +1805,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
ram attribute testEventTriggersEnabled;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1861,6 +1874,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/chef/devices/rootnode_mountedonoffcontrol_ec30c757a6.zap b/examples/chef/devices/rootnode_mountedonoffcontrol_ec30c757a6.zap
index eaffda9444f..203fe2d9049 100644
--- a/examples/chef/devices/rootnode_mountedonoffcontrol_ec30c757a6.zap
+++ b/examples/chef/devices/rootnode_mountedonoffcontrol_ec30c757a6.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1605,6 +1605,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2446,6 +2462,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
index 781626db5d3..8cfbc25456f 100644
--- a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
+++ b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
@@ -1306,7 +1306,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1626,7 +1625,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1635,6 +1639,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1659,12 +1664,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1691,13 +1703,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1775,7 +1787,7 @@ cluster OccupancySensing = 1030 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1892,6 +1904,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1949,6 +1962,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.zap b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.zap
index b425cf7cc98..b9d6034a480 100644
--- a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.zap
+++ b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
index 03132d14284..3b3f8fb6709 100644
--- a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
+++ b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
@@ -1500,7 +1500,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1820,7 +1819,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1829,6 +1833,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1853,12 +1858,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1885,18 +1897,18 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2013,6 +2025,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2070,6 +2083,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2080,7 +2094,7 @@ endpoint 0 {
}
}
endpoint 13 {
- device type ma_onofflight = 256, version 1;
+ device type ma_onofflight = 256, version 4;
binding cluster Binding;
diff --git a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap
index f6bf2f75226..6fc4fef3f00 100644
--- a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap
+++ b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2217,7 +2249,7 @@
}
],
"deviceVersions": [
- 1
+ 4
],
"deviceIdentifiers": [
256
diff --git a/examples/chef/devices/rootnode_onofflight_samplemei.matter b/examples/chef/devices/rootnode_onofflight_samplemei.matter
index a9ca94494bf..887fdb042bd 100644
--- a/examples/chef/devices/rootnode_onofflight_samplemei.matter
+++ b/examples/chef/devices/rootnode_onofflight_samplemei.matter
@@ -1500,7 +1500,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1820,7 +1819,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1829,6 +1833,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1853,12 +1858,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1885,13 +1897,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1927,7 +1939,7 @@ cluster SampleMei = 4294048800 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2044,6 +2056,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2101,6 +2114,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2111,7 +2125,7 @@ endpoint 0 {
}
}
endpoint 1 {
- device type ma_onofflight = 256, version 1;
+ device type ma_onofflight = 256, version 4;
binding cluster Binding;
diff --git a/examples/chef/devices/rootnode_onofflight_samplemei.zap b/examples/chef/devices/rootnode_onofflight_samplemei.zap
index 6b8f0b47494..fa9fce048a3 100644
--- a/examples/chef/devices/rootnode_onofflight_samplemei.zap
+++ b/examples/chef/devices/rootnode_onofflight_samplemei.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2217,7 +2249,7 @@
}
],
"deviceVersions": [
- 1
+ 4
],
"deviceIdentifiers": [
256
diff --git a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
index 6915a272a8a..02e94a1083a 100644
--- a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
+++ b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
@@ -1377,7 +1377,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1697,7 +1696,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1706,6 +1710,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1730,12 +1735,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1762,18 +1774,18 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1890,6 +1902,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1947,6 +1960,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.zap b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.zap
index 7135cd6562c..ee8ae948ef3 100644
--- a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.zap
+++ b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
index d0e8172b2ae..37b5a3ecacb 100644
--- a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
+++ b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
@@ -1377,7 +1377,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1697,7 +1696,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1706,6 +1710,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1730,12 +1735,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1762,18 +1774,18 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1890,6 +1902,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1947,6 +1960,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.zap b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.zap
index 655b057ba49..f47ff1dc821 100644
--- a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.zap
+++ b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_oven_temperaturecontrolledcabinet_cooktop_cooksurface_738dd18832.matter b/examples/chef/devices/rootnode_oven_temperaturecontrolledcabinet_cooktop_cooksurface_738dd18832.matter
index 66c1b7afbe1..f7b110f0a88 100644
--- a/examples/chef/devices/rootnode_oven_temperaturecontrolledcabinet_cooktop_cooksurface_738dd18832.matter
+++ b/examples/chef/devices/rootnode_oven_temperaturecontrolledcabinet_cooktop_cooksurface_738dd18832.matter
@@ -1125,7 +1125,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1485,7 +1484,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1494,6 +1498,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1518,12 +1523,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1550,13 +1562,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1730,7 +1742,7 @@ cluster TemperatureMeasurement = 1026 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1860,6 +1872,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1938,6 +1951,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2037,14 +2051,14 @@ endpoint 2 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 6555;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 3000;
ram attribute maxMeasuredValue default = 30000;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
endpoint 3 {
@@ -2127,14 +2141,14 @@ endpoint 4 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 0x8000;
ram attribute maxMeasuredValue default = 0x8000;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
diff --git a/examples/chef/devices/rootnode_oven_temperaturecontrolledcabinet_cooktop_cooksurface_738dd18832.zap b/examples/chef/devices/rootnode_oven_temperaturecontrolledcabinet_cooktop_cooksurface_738dd18832.zap
index e412051faf0..0fac5cd332f 100644
--- a/examples/chef/devices/rootnode_oven_temperaturecontrolledcabinet_cooktop_cooksurface_738dd18832.zap
+++ b/examples/chef/devices/rootnode_oven_temperaturecontrolledcabinet_cooktop_cooksurface_738dd18832.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1699,6 +1699,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2688,6 +2704,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
index 9d9da377a39..a73bbdcc041 100644
--- a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
+++ b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
@@ -1306,7 +1306,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1626,7 +1625,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1635,6 +1639,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1659,12 +1664,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1691,13 +1703,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1743,7 +1755,7 @@ cluster PressureMeasurement = 1027 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1860,6 +1872,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1917,6 +1930,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.zap b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.zap
index e57018b987d..daaf4708630 100644
--- a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.zap
+++ b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_pump_5f904818cc.matter b/examples/chef/devices/rootnode_pump_5f904818cc.matter
index 76bcd1aa28c..b9d396573a1 100644
--- a/examples/chef/devices/rootnode_pump_5f904818cc.matter
+++ b/examples/chef/devices/rootnode_pump_5f904818cc.matter
@@ -1232,7 +1232,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1516,7 +1515,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1525,6 +1529,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1549,12 +1554,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1581,13 +1593,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1769,7 +1781,7 @@ cluster FlowMeasurement = 1028 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1873,6 +1885,7 @@ endpoint 0 {
callback attribute rebootCount;
callback attribute upTime;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1928,6 +1941,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2020,14 +2034,14 @@ endpoint 1 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 6000;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 100;
ram attribute maxMeasuredValue default = 9000;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
server cluster PressureMeasurement {
diff --git a/examples/chef/devices/rootnode_pump_5f904818cc.zap b/examples/chef/devices/rootnode_pump_5f904818cc.zap
index 427b66f1840..e5bff284e3b 100644
--- a/examples/chef/devices/rootnode_pump_5f904818cc.zap
+++ b/examples/chef/devices/rootnode_pump_5f904818cc.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1417,6 +1417,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2093,6 +2109,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/chef/devices/rootnode_rainsensor_a7aa5d7738.matter b/examples/chef/devices/rootnode_rainsensor_a7aa5d7738.matter
index 01168fecb69..6f6dc4cf108 100644
--- a/examples/chef/devices/rootnode_rainsensor_a7aa5d7738.matter
+++ b/examples/chef/devices/rootnode_rainsensor_a7aa5d7738.matter
@@ -1316,7 +1316,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1600,7 +1599,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1609,6 +1613,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1633,12 +1638,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1665,13 +1677,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1754,7 +1766,7 @@ cluster BooleanStateConfiguration = 128 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1854,6 +1866,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1899,6 +1912,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_rainsensor_a7aa5d7738.zap b/examples/chef/devices/rootnode_rainsensor_a7aa5d7738.zap
index 0d83f42ed37..666608f0138 100644
--- a/examples/chef/devices/rootnode_rainsensor_a7aa5d7738.zap
+++ b/examples/chef/devices/rootnode_rainsensor_a7aa5d7738.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1291,6 +1291,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1824,6 +1840,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.matter b/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.matter
index 2da53f51d4b..98bb10e428f 100644
--- a/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.matter
+++ b/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.matter
@@ -989,7 +989,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1349,7 +1348,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1358,6 +1362,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1382,12 +1387,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1414,13 +1426,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1547,7 +1559,7 @@ cluster TemperatureMeasurement = 1026 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1669,6 +1681,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1747,6 +1760,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1828,14 +1842,14 @@ endpoint 2 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 200;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = -4000;
ram attribute maxMeasuredValue default = 2000;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
endpoint 3 {
@@ -1870,14 +1884,14 @@ endpoint 3 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = -1800;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = -4000;
ram attribute maxMeasuredValue default = 2000;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
diff --git a/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.zap b/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.zap
index 02589da0d98..2df7649be85 100644
--- a/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.zap
+++ b/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1609,6 +1609,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2598,6 +2614,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter b/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter
index b00c787e044..1bf66e249d5 100644
--- a/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter
+++ b/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter
@@ -1392,7 +1392,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1676,7 +1675,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1685,6 +1689,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1709,12 +1714,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1741,13 +1753,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1965,7 +1977,7 @@ cluster RvcOperationalState = 97 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -2067,6 +2079,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2113,6 +2126,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.zap b/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.zap
index 8fbfea25031..b7905c486fc 100644
--- a/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.zap
+++ b/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1315,6 +1315,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1856,6 +1872,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter
index 1c72a4d276b..83c4a1ec3d8 100644
--- a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter
+++ b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter
@@ -1205,7 +1205,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1489,7 +1488,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1498,6 +1502,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1522,12 +1527,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1554,13 +1566,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2144,7 +2156,7 @@ cluster RelativeHumidityMeasurement = 1029 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -2246,6 +2258,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2292,6 +2305,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2443,14 +2457,14 @@ endpoint 2 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 2800;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = 1500;
ram attribute maxMeasuredValue default = 4500;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 3;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
endpoint 3 {
diff --git a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap
index 3b9de7f1124..d44b31a5c26 100644
--- a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap
+++ b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1315,6 +1315,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1856,6 +1872,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.matter b/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.matter
index 98b81698569..a3ac86db8a5 100644
--- a/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.matter
+++ b/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.matter
@@ -1392,7 +1392,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1676,7 +1675,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1685,6 +1689,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1709,12 +1714,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1741,19 +1753,19 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
/** This cluster provides an interface for observing and managing the state of smoke and CO alarms. */
cluster SmokeCoAlarm = 92 {
- revision 1;
+ revision 2;
enum AlarmStateEnum : enum8 {
kNormal = 0;
@@ -1783,6 +1795,7 @@ cluster SmokeCoAlarm = 92 {
kEndOfService = 6;
kInterconnectSmoke = 7;
kInterconnectCO = 8;
+ kInoperative = 9;
}
enum MuteStateEnum : enum8 {
@@ -1852,6 +1865,7 @@ cluster SmokeCoAlarm = 92 {
readonly attribute optional ContaminationStateEnum contaminationState = 10;
attribute access(write: manage) optional SensitivityEnum smokeSensitivityLevel = 11;
readonly attribute optional epoch_s expiryDate = 12;
+ provisional readonly attribute optional boolean unmounted = 13;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1863,7 +1877,7 @@ cluster SmokeCoAlarm = 92 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1965,6 +1979,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2011,6 +2026,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2107,6 +2123,7 @@ endpoint 1 {
ram attribute contaminationState default = 0;
ram attribute smokeSensitivityLevel default = 1;
ram attribute expiryDate default = 0;
+ ram attribute unmounted default = 0;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.zap b/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.zap
index 45b5749db2e..25b014b38ce 100644
--- a/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.zap
+++ b/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1315,6 +1315,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1856,6 +1872,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2849,6 +2881,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "Unmounted",
+ "code": 13,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
index e5efaa4e36f..6e1c040e082 100644
--- a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
+++ b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
@@ -1424,7 +1424,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1744,7 +1743,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1753,6 +1757,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1777,12 +1782,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1809,18 +1821,18 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1937,6 +1949,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1994,6 +2007,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap
index 0ec1bfdf49a..7b4a5ba9343 100644
--- a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap
+++ b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
index 1c7e600c2b7..d7519aaf49e 100644
--- a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
+++ b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
@@ -1306,7 +1306,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1626,7 +1625,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1635,6 +1639,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1659,12 +1664,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1691,13 +1703,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1717,7 +1729,7 @@ cluster TemperatureMeasurement = 1026 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1834,6 +1846,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1891,6 +1904,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1931,14 +1945,14 @@ endpoint 1 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue default = 2350;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = -27315;
ram attribute maxMeasuredValue default = 32767;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 1;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
diff --git a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.zap b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.zap
index 0b5afdb682d..5c5b5b57c4e 100644
--- a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.zap
+++ b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
index c06d4a25801..9019e8ca0d4 100644
--- a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
+++ b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
@@ -1322,7 +1322,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1642,7 +1641,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1651,6 +1655,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1675,12 +1680,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1707,13 +1719,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2370,7 +2382,7 @@ cluster OccupancySensing = 1030 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2494,6 +2506,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2551,6 +2564,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.zap b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.zap
index 5305e4deaa0..a49c93bd697 100644
--- a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.zap
+++ b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1578,6 +1578,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2235,6 +2251,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_waterfreezedetector_dd94a13a16.matter b/examples/chef/devices/rootnode_waterfreezedetector_dd94a13a16.matter
index 356871234ce..e4ca4ea0ed6 100644
--- a/examples/chef/devices/rootnode_waterfreezedetector_dd94a13a16.matter
+++ b/examples/chef/devices/rootnode_waterfreezedetector_dd94a13a16.matter
@@ -1316,7 +1316,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1600,7 +1599,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1609,6 +1613,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1633,12 +1638,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1665,13 +1677,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1754,7 +1766,7 @@ cluster BooleanStateConfiguration = 128 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1854,6 +1866,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1899,6 +1912,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_waterfreezedetector_dd94a13a16.zap b/examples/chef/devices/rootnode_waterfreezedetector_dd94a13a16.zap
index 0c65a00f267..8bdf0c28b44 100644
--- a/examples/chef/devices/rootnode_waterfreezedetector_dd94a13a16.zap
+++ b/examples/chef/devices/rootnode_waterfreezedetector_dd94a13a16.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1291,6 +1291,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1824,6 +1840,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.matter b/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.matter
index fbe6613be09..bba6a316ae7 100644
--- a/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.matter
+++ b/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.matter
@@ -1392,7 +1392,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1676,7 +1675,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1685,6 +1689,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1709,12 +1714,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1741,13 +1753,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1830,7 +1842,7 @@ cluster BooleanStateConfiguration = 128 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1932,6 +1944,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1978,6 +1991,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.zap b/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.zap
index 0047f7a8e4f..213190002db 100644
--- a/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.zap
+++ b/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1323,6 +1323,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1864,6 +1880,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_watervalve_6bb39f1f67.matter b/examples/chef/devices/rootnode_watervalve_6bb39f1f67.matter
index 6be80dc2d28..db051021919 100644
--- a/examples/chef/devices/rootnode_watervalve_6bb39f1f67.matter
+++ b/examples/chef/devices/rootnode_watervalve_6bb39f1f67.matter
@@ -1316,7 +1316,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1600,7 +1599,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1609,6 +1613,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1633,12 +1638,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1665,13 +1677,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1741,7 +1753,7 @@ cluster ValveConfigurationAndControl = 129 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1843,6 +1855,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -1889,6 +1902,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_watervalve_6bb39f1f67.zap b/examples/chef/devices/rootnode_watervalve_6bb39f1f67.zap
index 4a19b68c91f..5c52fa79ee4 100644
--- a/examples/chef/devices/rootnode_watervalve_6bb39f1f67.zap
+++ b/examples/chef/devices/rootnode_watervalve_6bb39f1f67.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1323,6 +1323,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1864,6 +1880,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
index 946db88989c..678eb8c6a92 100644
--- a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
+++ b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
@@ -1306,7 +1306,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1626,7 +1625,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1635,6 +1639,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1659,12 +1664,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1691,13 +1703,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1854,7 +1866,7 @@ cluster WindowCovering = 258 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -1971,6 +1983,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2028,6 +2041,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.zap b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.zap
index 07b704f6805..5d772dbfdef 100644
--- a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.zap
+++ b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1504,6 +1504,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2161,6 +2177,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/devices/template.zap b/examples/chef/devices/template.zap
index 681a0219b66..2aef84fdebc 100644
--- a/examples/chef/devices/template.zap
+++ b/examples/chef/devices/template.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1323,6 +1323,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -1864,6 +1880,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chef/sample_app_util/test_files/sample_zap_file.zap b/examples/chef/sample_app_util/test_files/sample_zap_file.zap
index 8e37b76513b..a9f416750e0 100644
--- a/examples/chef/sample_app_util/test_files/sample_zap_file.zap
+++ b/examples/chef/sample_app_util/test_files/sample_zap_file.zap
@@ -52,7 +52,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1657,6 +1657,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -3895,6 +3911,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/chip-tool/BUILD.gn b/examples/chip-tool/BUILD.gn
index 4c19ca0d627..74d713d85c5 100644
--- a/examples/chip-tool/BUILD.gn
+++ b/examples/chip-tool/BUILD.gn
@@ -28,10 +28,6 @@ import("${chip_root}/src/crypto/crypto.gni")
assert(chip_build_tools)
-# Thread Commissioner is using newer version of mbedtls
-_enable_thread_meshcop = chip_device_platform == "linux" &&
- chip_enable_ot_commissioner && chip_crypto != "mbedtls"
-
config("config") {
include_dirs = [
".",
@@ -55,12 +51,6 @@ config("config") {
defines += [ "CONFIG_ENABLE_HTTPS_REQUESTS" ]
}
- if (_enable_thread_meshcop) {
- defines += [ "CHIP_ENABLE_OT_COMMISSIONER=1" ]
- } else {
- defines += [ "CHIP_ENABLE_OT_COMMISSIONER=0" ]
- }
-
cflags = [ "-Wconversion" ]
}
@@ -155,11 +145,6 @@ static_library("chip-tool-utils") {
[ "${chip_root}/examples/common/tracing:trace_handlers_decoder" ]
}
- if (_enable_thread_meshcop) {
- sources += [ "commands/pairing/CommissionProxy.cpp" ]
- public_deps += [ "${chip_root}/third_party/ot-commissioner" ]
- }
-
output_dir = root_out_dir
}
diff --git a/examples/chip-tool/args.gni b/examples/chip-tool/args.gni
index 30f4000365e..9c163f1cabd 100644
--- a/examples/chip-tool/args.gni
+++ b/examples/chip-tool/args.gni
@@ -31,3 +31,4 @@ matter_log_json_payload_decode_full = true
# make chip-tool very strict by default
chip_tlv_validate_char_string_on_read = true
chip_tlv_validate_char_string_on_write = true
+chip_support_thread_meshcop = true
diff --git a/examples/chip-tool/chip-tool.gni b/examples/chip-tool/chip-tool.gni
index 743164c8a5b..0bc5dcbb5cb 100644
--- a/examples/chip-tool/chip-tool.gni
+++ b/examples/chip-tool/chip-tool.gni
@@ -22,7 +22,4 @@ declare_args() {
config_enable_yaml_tests = true
config_use_local_storage = true
config_enable_https_requests = true
-
- # Disable OpenThread Commissioner if cross-compiling by default.
- chip_enable_ot_commissioner = current_cpu == host_cpu && current_os == host_os
}
diff --git a/examples/chip-tool/commands/group/Commands.h b/examples/chip-tool/commands/group/Commands.h
index b29ff959ede..d924c6ab923 100644
--- a/examples/chip-tool/commands/group/Commands.h
+++ b/examples/chip-tool/commands/group/Commands.h
@@ -23,6 +23,7 @@
#include "commands/common/CHIPCommand.h"
#include "commands/common/Command.h"
#include "commands/common/Commands.h"
+#include
class ShowControllerGroups : public CHIPCommand
{
@@ -88,6 +89,7 @@ class AddGroup : public CHIPCommand
{
AddArgument("groupName", &groupName);
AddArgument("groupId", chip::kUndefinedGroupId, UINT16_MAX, &groupId);
+ AddArgument("addressPolicy", 0, 1, &addressPolicy);
}
chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(20); }
@@ -104,6 +106,12 @@ class AddGroup : public CHIPCommand
group.SetName(groupName);
group.group_id = groupId;
+ group.flags = 0;
+ if (!addressPolicy.HasValue() ||
+ (chip::to_underlying(chip::app::Clusters::Groupcast::MulticastAddrPolicyEnum::kPerGroup) == addressPolicy.Value()))
+ {
+ group.flags |= static_cast(chip::Credentials::GroupDataProvider::GroupInfo::Flags::kMcastAddrPolicy);
+ }
ReturnErrorOnFailure(groupDataProvider->SetGroupInfo(fabricIndex, group));
SetCommandExitStatus(CHIP_NO_ERROR);
@@ -113,6 +121,7 @@ class AddGroup : public CHIPCommand
private:
char * groupName;
chip::GroupId groupId;
+ chip::Optional addressPolicy;
};
class RemoveGroup : public CHIPCommand
diff --git a/examples/chip-tool/commands/pairing/Commands.h b/examples/chip-tool/commands/pairing/Commands.h
index 55c51389c1a..3a046867670 100644
--- a/examples/chip-tool/commands/pairing/Commands.h
+++ b/examples/chip-tool/commands/pairing/Commands.h
@@ -53,6 +53,16 @@ class PairCodePase : public PairingCommand
{}
};
+#if CHIP_SUPPORT_THREAD_MESHCOP
+class PairThreadMeshcop : public PairingCommand
+{
+public:
+ PairThreadMeshcop(CredentialIssuerCommands * credsIssuerConfig) :
+ PairingCommand("thread-meshcop", PairingMode::ThreadMeshcop, PairingNetworkType::Thread, credsIssuerConfig)
+ {}
+};
+#endif
+
class PairCodeWifi : public PairingCommand
{
public:
@@ -277,6 +287,9 @@ void registerCommandsPairing(Commands & commands, CredentialIssuerCommands * cre
make_unique(credsIssuerConfig),
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
make_unique(credsIssuerConfig),
+#endif
+#if CHIP_SUPPORT_THREAD_MESHCOP
+ make_unique(credsIssuerConfig),
#endif
make_unique(credsIssuerConfig),
make_unique(credsIssuerConfig),
diff --git a/examples/chip-tool/commands/pairing/PairingCommand.cpp b/examples/chip-tool/commands/pairing/PairingCommand.cpp
index cc6ad468a7d..9fba19dd8ff 100644
--- a/examples/chip-tool/commands/pairing/PairingCommand.cpp
+++ b/examples/chip-tool/commands/pairing/PairingCommand.cpp
@@ -106,13 +106,6 @@ CHIP_ERROR PairingCommand::RunInternal(NodeId remoteId)
err = Unpair(remoteId);
break;
case PairingMode::Code:
-#if CHIP_ENABLE_OT_COMMISSIONER
- if (mThreadBaHost.HasValue() && mThreadBaPort.HasValue())
- {
- err = PairWithMeshCoP();
- break;
- }
-#endif
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
chip::DeviceLayer::ConnectivityMgr().WiFiPafSetApFreq(
mApFreqStr.HasValue() ? static_cast(std::stol(mApFreqStr.Value())) : 0);
@@ -148,6 +141,17 @@ CHIP_ERROR PairingCommand::RunInternal(NodeId remoteId)
mApFreqStr.HasValue() ? static_cast(std::stol(mApFreqStr.Value())) : 0);
err = Pair(remoteId, PeerAddress::WiFiPAF(remoteId));
break;
+#endif
+#if CHIP_SUPPORT_THREAD_MESHCOP
+ case PairingMode::ThreadMeshcop: {
+ Inet::IPAddress ipAddr;
+
+ VerifyOrReturnError(mThreadBaHost.HasValue(), CHIP_ERROR_INVALID_ARGUMENT);
+ VerifyOrReturnError(mThreadBaPort.HasValue(), CHIP_ERROR_INVALID_ARGUMENT);
+ VerifyOrReturnError(Inet::IPAddress::FromString(mThreadBaHost.Value(), ipAddr), CHIP_ERROR_INVALID_ADDRESS);
+ err = Pair(remoteId, PeerAddress::ThreadMeshcop(ipAddr, mThreadBaPort.Value()));
+ break;
+ }
#endif
case PairingMode::AlreadyDiscovered:
err = Pair(remoteId, PeerAddress::UDP(mRemoteAddr.address, mRemotePort, mRemoteAddr.interfaceId));
@@ -303,12 +307,37 @@ CHIP_ERROR PairingCommand::PairWithCode(NodeId remoteId)
CHIP_ERROR PairingCommand::Pair(NodeId remoteId, PeerAddress address)
{
- VerifyOrDieWithMsg(mSetupPINCode.has_value(), chipTool, "Using mSetupPINCode in a mode when we have not gotten one");
- auto params = RendezvousParameters().SetSetupPINCode(mSetupPINCode.value()).SetPeerAddress(address);
- if (mDiscriminator.has_value())
+ auto params = RendezvousParameters().SetPeerAddress(address);
+ if (mOnboardingPayload != nullptr)
+ {
+ SetupPayload payload;
+
+ ReturnErrorOnFailure(ParseSetupPayload(payload, mOnboardingPayload));
+ params.SetSetupPINCode(payload.setUpPINCode);
+ params.SetSetupDiscriminator(payload.discriminator);
+ }
+ else
+ {
+ VerifyOrDieWithMsg(mSetupPINCode.has_value(), chipTool, "Using mSetupPINCode in a mode when we have not gotten one");
+ params.SetSetupPINCode(mSetupPINCode.value());
+ if (mDiscriminator.has_value())
+ {
+ params.SetDiscriminator(mDiscriminator.value());
+ }
+ }
+
+#if CHIP_SUPPORT_THREAD_MESHCOP
+ if (address.GetTransportType() == Transport::Type::kThreadMeshcop)
{
- params.SetDiscriminator(mDiscriminator.value());
+ CurrentCommissioner().RegisterDeviceDiscoveryDelegate(this);
+ CommissioningParameters commissioningParams = GetCommissioningParameters();
+
+ commissioningParams.SetThreadOperationalDataset(mOperationalDataset);
+ auto error = CurrentCommissioner().PairDevice(remoteId, params, commissioningParams);
+ CurrentCommissioner().RegisterDeviceDiscoveryDelegate(nullptr);
+ return error;
}
+#endif // CHIP_SUPPORT_THREAD_MESHCOP
CHIP_ERROR err = CHIP_NO_ERROR;
if (mPaseOnly.ValueOr(false))
@@ -419,57 +448,6 @@ CHIP_ERROR PairingCommand::PairWithMdns(NodeId remoteId)
return CurrentCommissioner().DiscoverCommissionableNodes(filter);
}
-#if CHIP_ENABLE_OT_COMMISSIONER
-CHIP_ERROR PairingCommand::PairWithMeshCoP()
-{
- SetupPayload payload;
-
- ReturnErrorOnFailure(ParseSetupPayload(payload, mOnboardingPayload));
-
- if (payload.rendezvousInformation.HasValue() && !payload.rendezvousInformation.Value().Has(RendezvousInformationFlag::kThread))
- {
- // Proceed even if the device doesn't claim rendezvous over Thread MeshCoP because in-market devices may not
- // be able to update their QR Code.
- ChipLogProgress(chipTool, "WARNING: device may not support commissioning over Thread meshcop");
- }
-
- mSetupPINCode.emplace(payload.setUpPINCode);
-
- Thread::DiscoveryCode code;
- if (payload.discriminator.IsShortDiscriminator())
- {
- code = Thread::DiscoveryCode(payload.discriminator.GetShortValue());
- ChipLogProgress(chipTool, "Discovery code from short discriminator: 0x%" PRIx64, code.AsUInt64());
- }
- else
- {
- code = Thread::DiscoveryCode(payload.discriminator.GetLongValue());
- ChipLogProgress(chipTool, "Discovery code from long discriminator: 0x%" PRIx64, code.AsUInt64());
- }
-
- uint8_t pskc[Thread::kSizePSKc];
-
- {
- Thread::OperationalDatasetView dataset;
- ReturnErrorAndLogOnFailure(dataset.Init(mOperationalDataset), chipTool, "Failed to parse Thread dataset");
-
- ReturnErrorAndLogOnFailure(dataset.GetPSKc(pskc), chipTool, "Failed to retrieve PSKc");
- }
-
- {
- Dnssd::DiscoveredNodeData discoveredNodeData;
- ReturnErrorOnFailure(mCommissionProxy.Discover(pskc, mThreadBaHost.Value(), mThreadBaPort.Value(), code,
- payload.discriminator, discoveredNodeData, mTimeout.ValueOr(30)));
-
- CurrentCommissioner().RegisterDeviceDiscoveryDelegate(this);
- CurrentCommissioner().OnNodeDiscovered(discoveredNodeData);
- }
-
- ChipLogProgress(chipTool, "Joiner discovered");
- return CHIP_NO_ERROR;
-}
-#endif // CHIP_ENABLE_OT_COMMISSIONER
-
CHIP_ERROR PairingCommand::Unpair(NodeId remoteId)
{
mCurrentFabricRemover = Platform::MakeUnique(&CurrentCommissioner());
diff --git a/examples/chip-tool/commands/pairing/PairingCommand.h b/examples/chip-tool/commands/pairing/PairingCommand.h
index 86ffbbd12ff..b50201dadb2 100644
--- a/examples/chip-tool/commands/pairing/PairingCommand.h
+++ b/examples/chip-tool/commands/pairing/PairingCommand.h
@@ -19,9 +19,6 @@
#pragma once
#include "../common/CHIPCommand.h"
-#if CHIP_ENABLE_OT_COMMISSIONER
-#include "CommissionProxy.h"
-#endif
#include
#include
@@ -47,6 +44,9 @@ enum class PairingMode
AlreadyDiscoveredByIndexWithCode,
OnNetwork,
Nfc,
+#if CHIP_SUPPORT_THREAD_MESHCOP
+ ThreadMeshcop,
+#endif
};
enum class PairingNetworkType
@@ -109,6 +109,12 @@ class PairingCommand : public CHIPCommand,
{
case PairingMode::None:
break;
+#if CHIP_SUPPORT_THREAD_MESHCOP
+ case PairingMode::ThreadMeshcop:
+ AddArgument("thread-ba-host", &mThreadBaHost, "Thread Border Agent host");
+ AddArgument("thread-ba-port", 0, UINT16_MAX, &mThreadBaPort, "Thread Border Agent port");
+ FALLTHROUGH;
+#endif
case PairingMode::Code:
AddArgument("skip-commissioning-complete", 0, 1, &mSkipCommissioningComplete);
AddArgument("dcl-hostname", &mDCLHostName,
@@ -119,10 +125,6 @@ class PairingCommand : public CHIPCommand,
case PairingMode::CodePaseOnly:
AddArgument("payload", &mOnboardingPayload);
AddArgument("discover-once", 0, 1, &mDiscoverOnce);
-#if CHIP_ENABLE_OT_COMMISSIONER
- AddArgument("thread-ba-host", &mThreadBaHost, "Thread Border Agent host");
- AddArgument("thread-ba-port", 0, UINT16_MAX, &mThreadBaPort, "Thread Border Agent port");
-#endif
AddArgument("use-only-onnetwork-discovery", 0, 1, &mUseOnlyOnNetworkDiscovery,
"Whether to only use DNS-SD for discovery. The default is true if no network credentials are provided, "
"false otherwise.");
@@ -270,9 +272,6 @@ class PairingCommand : public CHIPCommand,
CHIP_ERROR RunInternal(NodeId remoteId);
CHIP_ERROR Pair(NodeId remoteId, PeerAddress address);
CHIP_ERROR PairWithMdns(NodeId remoteId);
-#if CHIP_ENABLE_OT_COMMISSIONER
- CHIP_ERROR PairWithMeshCoP();
-#endif
CHIP_ERROR PairWithCode(NodeId remoteId);
CHIP_ERROR PaseWithCode(NodeId remoteId);
CHIP_ERROR PairWithMdnsOrBleByIndex(NodeId remoteId, uint16_t index);
@@ -341,10 +340,9 @@ class PairingCommand : public CHIPCommand,
static void OnCurrentFabricRemove(void * context, NodeId remoteNodeId, CHIP_ERROR status);
void PersistIcdInfo();
-#if CHIP_ENABLE_OT_COMMISSIONER
+#if CHIP_SUPPORT_THREAD_MESHCOP
chip::Optional mThreadBaHost;
chip::Optional mThreadBaPort;
- CommissionProxy mCommissionProxy;
#endif
std::optional mPrompterThread;
diff --git a/examples/closure-app/closure-common/closure-app.matter b/examples/closure-app/closure-common/closure-app.matter
index 5b49c03c4f1..119240f9562 100644
--- a/examples/closure-app/closure-common/closure-app.matter
+++ b/examples/closure-app/closure-common/closure-app.matter
@@ -1164,7 +1164,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1768,7 +1767,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1777,6 +1781,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1801,12 +1806,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1833,13 +1845,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2202,7 +2214,7 @@ provisional cluster ClosureDimension = 261 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 4;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2326,6 +2338,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2498,6 +2511,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/closure-app/closure-common/closure-app.zap b/examples/closure-app/closure-common/closure-app.zap
index c37ba2ad7b7..a4836bf5edc 100644
--- a/examples/closure-app/closure-common/closure-app.zap
+++ b/examples/closure-app/closure-common/closure-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 4
+ 5
],
"deviceIdentifiers": [
22
@@ -1701,6 +1701,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4023,6 +4039,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/closure-app/silabs/data_model/closure-thread-app.matter b/examples/closure-app/silabs/data_model/closure-thread-app.matter
index b70960424b1..addb9ef9fdc 100644
--- a/examples/closure-app/silabs/data_model/closure-thread-app.matter
+++ b/examples/closure-app/silabs/data_model/closure-thread-app.matter
@@ -1164,7 +1164,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1651,7 +1650,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1660,6 +1664,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1684,12 +1689,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1716,13 +1728,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2085,7 +2097,7 @@ provisional cluster ClosureDimension = 261 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 4;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2209,6 +2221,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2344,6 +2357,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/closure-app/silabs/data_model/closure-thread-app.zap b/examples/closure-app/silabs/data_model/closure-thread-app.zap
index 0d6199b8dfc..0da6f9611ad 100644
--- a/examples/closure-app/silabs/data_model/closure-thread-app.zap
+++ b/examples/closure-app/silabs/data_model/closure-thread-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 4
+ 5
],
"deviceIdentifiers": [
22
@@ -1701,6 +1701,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3554,6 +3570,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/closure-app/silabs/data_model/closure-wifi-app.matter b/examples/closure-app/silabs/data_model/closure-wifi-app.matter
index 29e777d6ac0..578a86a3d91 100644
--- a/examples/closure-app/silabs/data_model/closure-wifi-app.matter
+++ b/examples/closure-app/silabs/data_model/closure-wifi-app.matter
@@ -1164,7 +1164,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1560,7 +1559,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1569,6 +1573,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1593,12 +1598,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1625,13 +1637,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1994,7 +2006,7 @@ provisional cluster ClosureDimension = 261 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 4;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2118,6 +2130,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2206,6 +2219,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/closure-app/silabs/data_model/closure-wifi-app.zap b/examples/closure-app/silabs/data_model/closure-wifi-app.zap
index b14a842424d..f809186c3a5 100644
--- a/examples/closure-app/silabs/data_model/closure-wifi-app.zap
+++ b/examples/closure-app/silabs/data_model/closure-wifi-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 4
+ 5
],
"deviceIdentifiers": [
22
@@ -1701,6 +1701,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2777,6 +2793,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/closure-app/silabs/src/ClosureManager.cpp b/examples/closure-app/silabs/src/ClosureManager.cpp
index 51cf3364e62..4897f3e8e81 100644
--- a/examples/closure-app/silabs/src/ClosureManager.cpp
+++ b/examples/closure-app/silabs/src/ClosureManager.cpp
@@ -123,7 +123,10 @@ void ClosureManager::Init()
if (pTestEventDelegate != nullptr)
{
CHIP_ERROR err = pTestEventDelegate->AddHandler(&mClosureEndpoint1.GetDelegate());
- ChipLogFailure(err, AppServer, "Failed to add handler for delegate");
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(AppServer, "Failed to add handler for delegate: %" CHIP_ERROR_FORMAT, err.Format());
+ }
}
else
{
diff --git a/examples/contact-sensor-app/bouffalolab/bl702l/app_pds.cpp b/examples/contact-sensor-app/bouffalolab/bl702l/app_pds.cpp
index eea5a730874..3775c8258c4 100644
--- a/examples/contact-sensor-app/bouffalolab/bl702l/app_pds.cpp
+++ b/examples/contact-sensor-app/bouffalolab/bl702l/app_pds.cpp
@@ -95,8 +95,6 @@ void app_pds_fastboot_done_callback(void)
bl_psram_init();
- // app_pds_config_pin();
-
app_pds_wakeup_source = bl_pds_get_wakeup_source();
app_pds_wakeup_pin = bl_pds_get_wakeup_gpio();
}
@@ -107,6 +105,7 @@ int app_pds_before_sleep_callback(void)
{
bl_pds_set_psram_retention(1);
lmac154_sleepStoreRegs(low_power_pds_lmac154_backup);
+ L1C_Cache_Flush();
return 0;
}
@@ -125,6 +124,7 @@ void app_pds_after_sleep_callback(void)
zb_timer_restore_events(true);
+ lmac154_enableCoex();
bl_irq_enable(M154_IRQn);
}
bl_sec_init();
diff --git a/examples/contact-sensor-app/bouffalolab/bl702l/args.gni b/examples/contact-sensor-app/bouffalolab/bl702l/args.gni
index 2720935eb60..50a62a09c3b 100644
--- a/examples/contact-sensor-app/bouffalolab/bl702l/args.gni
+++ b/examples/contact-sensor-app/bouffalolab/bl702l/args.gni
@@ -21,7 +21,7 @@ bl_iot_sdk_target = get_label_info(":sdk", "label_no_toolchain")
chip_detail_logging = false
is_debug = false
-chip_progress_logging = true
+chip_progress_logging = false
chip_error_logging = true
chip_enable_icd_server = true
diff --git a/examples/contact-sensor-app/bouffalolab/common/AppTask.cpp b/examples/contact-sensor-app/bouffalolab/common/AppTask.cpp
index a23a5d46e18..8604498afd7 100644
--- a/examples/contact-sensor-app/bouffalolab/common/AppTask.cpp
+++ b/examples/contact-sensor-app/bouffalolab/common/AppTask.cpp
@@ -73,7 +73,7 @@ void AppTask::AppShellTask(void * args)
Shell::Engine::Root().RunMainLoop();
}
-CHIP_ERROR AppTask::StartAppShellTask()
+void AppTask::StartAppShellTask()
{
static TaskHandle_t shellTask;
@@ -82,8 +82,6 @@ CHIP_ERROR AppTask::StartAppShellTask()
cmd_misc_init();
xTaskCreate(AppTask::AppShellTask, "chip_shell", 1024 / sizeof(configSTACK_DEPTH_TYPE), NULL, APP_TASK_PRIORITY, &shellTask);
-
- return CHIP_NO_ERROR;
}
#endif
diff --git a/examples/contact-sensor-app/bouffalolab/common/AppTask.h b/examples/contact-sensor-app/bouffalolab/common/AppTask.h
index 92b3ba7c45d..b28442ced6c 100644
--- a/examples/contact-sensor-app/bouffalolab/common/AppTask.h
+++ b/examples/contact-sensor-app/bouffalolab/common/AppTask.h
@@ -107,7 +107,7 @@ class AppTask
static void AppTaskMain(void * pvParameter);
#if CONFIG_ENABLE_CHIP_SHELL
- static CHIP_ERROR StartAppShellTask();
+ static void StartAppShellTask();
static void AppShellTask(void * args);
#endif
diff --git a/examples/contact-sensor-app/bouffalolab/data_model/contact-sensor-app.matter b/examples/contact-sensor-app/bouffalolab/data_model/contact-sensor-app.matter
index 3bc5de8ce77..f1feffda420 100644
--- a/examples/contact-sensor-app/bouffalolab/data_model/contact-sensor-app.matter
+++ b/examples/contact-sensor-app/bouffalolab/data_model/contact-sensor-app.matter
@@ -1286,7 +1286,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1773,7 +1772,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1782,6 +1786,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1806,12 +1811,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1838,13 +1850,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2056,7 +2068,7 @@ cluster OccupancySensing = 1030 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2187,6 +2199,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2314,6 +2327,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/contact-sensor-app/bouffalolab/data_model/contact-sensor-app.zap b/examples/contact-sensor-app/bouffalolab/data_model/contact-sensor-app.zap
index 076fd3d1118..85588c06f40 100644
--- a/examples/contact-sensor-app/bouffalolab/data_model/contact-sensor-app.zap
+++ b/examples/contact-sensor-app/bouffalolab/data_model/contact-sensor-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1659,6 +1659,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -3376,6 +3392,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter b/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter
index 2aa78bc5567..1803b7ef128 100644
--- a/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter
+++ b/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter
@@ -1210,7 +1210,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1814,7 +1813,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1823,6 +1827,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1847,12 +1852,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1879,13 +1891,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1927,7 +1939,7 @@ cluster BooleanState = 69 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2050,6 +2062,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2216,6 +2229,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.zap b/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.zap
index 411831192b0..cadd9de26d4 100644
--- a/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.zap
+++ b/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1593,6 +1593,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -3789,6 +3805,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.matter b/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.matter
index 6fe5bb84bd7..ade8d16f86a 100644
--- a/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.matter
+++ b/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.matter
@@ -1210,7 +1210,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1697,7 +1696,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1706,6 +1710,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1730,12 +1735,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1762,13 +1774,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1890,7 +1902,7 @@ cluster IcdManagement = 70 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2022,6 +2034,7 @@ endpoint 0 {
callback attribute rebootCount;
callback attribute upTime;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2157,6 +2170,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.zap b/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.zap
index d8b408f0ef2..749cccc168d 100644
--- a/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.zap
+++ b/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1744,6 +1744,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3597,6 +3613,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.matter b/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.matter
index f1d1270a9fa..955558b7251 100644
--- a/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.matter
+++ b/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.matter
@@ -1210,7 +1210,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1697,7 +1696,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1706,6 +1710,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1730,12 +1735,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1762,13 +1774,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1890,7 +1902,7 @@ cluster IcdManagement = 70 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2022,6 +2034,7 @@ endpoint 0 {
callback attribute rebootCount;
callback attribute upTime;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2157,6 +2170,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.zap b/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.zap
index 3fc19102242..9f1ef7c4da8 100644
--- a/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.zap
+++ b/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1744,6 +1744,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3597,6 +3613,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter b/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter
index 0f2b9e7fe61..24ec8521e5c 100644
--- a/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter
+++ b/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter
@@ -1134,7 +1134,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1494,7 +1493,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1503,6 +1507,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1527,12 +1532,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1559,13 +1571,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1635,7 +1647,7 @@ cluster OperationalState = 96 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Groups {
@@ -1770,6 +1782,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1847,6 +1860,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/dishwasher-app/dishwasher-common/dishwasher-app.zap b/examples/dishwasher-app/dishwasher-common/dishwasher-app.zap
index db2e22d7d4e..768e4b56c8c 100644
--- a/examples/dishwasher-app/dishwasher-common/dishwasher-app.zap
+++ b/examples/dishwasher-app/dishwasher-common/dishwasher-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1749,6 +1749,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2730,6 +2746,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/dishwasher-app/silabs/data_model/dishwasher-thread-app.matter b/examples/dishwasher-app/silabs/data_model/dishwasher-thread-app.matter
index a1287bad6ed..04266a21ba0 100644
--- a/examples/dishwasher-app/silabs/data_model/dishwasher-thread-app.matter
+++ b/examples/dishwasher-app/silabs/data_model/dishwasher-thread-app.matter
@@ -1272,7 +1272,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1759,7 +1758,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1768,6 +1772,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1792,12 +1797,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1824,13 +1836,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2421,7 +2433,7 @@ provisional cluster DeviceEnergyManagementMode = 159 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2565,6 +2577,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2702,6 +2715,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/dishwasher-app/silabs/data_model/dishwasher-thread-app.zap b/examples/dishwasher-app/silabs/data_model/dishwasher-thread-app.zap
index 695f9aa03fc..9120b05bd53 100644
--- a/examples/dishwasher-app/silabs/data_model/dishwasher-thread-app.zap
+++ b/examples/dishwasher-app/silabs/data_model/dishwasher-thread-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1903,6 +1903,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3773,6 +3789,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -5937,4 +5969,4 @@
"parentEndpointIdentifier": null
}
]
-}
+}
\ No newline at end of file
diff --git a/examples/dishwasher-app/silabs/data_model/dishwasher-wifi-app.matter b/examples/dishwasher-app/silabs/data_model/dishwasher-wifi-app.matter
index 40fb7ec18f0..952a4f96bac 100644
--- a/examples/dishwasher-app/silabs/data_model/dishwasher-wifi-app.matter
+++ b/examples/dishwasher-app/silabs/data_model/dishwasher-wifi-app.matter
@@ -1272,7 +1272,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1668,7 +1667,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1677,6 +1681,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1701,12 +1706,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1733,13 +1745,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2330,7 +2342,7 @@ provisional cluster DeviceEnergyManagementMode = 159 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2473,6 +2485,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2560,6 +2573,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/dishwasher-app/silabs/data_model/dishwasher-wifi-app.zap b/examples/dishwasher-app/silabs/data_model/dishwasher-wifi-app.zap
index 6b4091a0715..b7c432e8662 100644
--- a/examples/dishwasher-app/silabs/data_model/dishwasher-wifi-app.zap
+++ b/examples/dishwasher-app/silabs/data_model/dishwasher-wifi-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1887,6 +1887,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2957,6 +2973,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -5275,4 +5307,4 @@
"parentEndpointIdentifier": null
}
]
-}
+}
\ No newline at end of file
diff --git a/examples/energy-gateway-app/energy-gateway-common/energy-gateway-app.matter b/examples/energy-gateway-app/energy-gateway-common/energy-gateway-app.matter
index fbeeab5298f..faa8ffc04fa 100644
--- a/examples/energy-gateway-app/energy-gateway-common/energy-gateway-app.matter
+++ b/examples/energy-gateway-app/energy-gateway-common/energy-gateway-app.matter
@@ -1206,7 +1206,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1490,7 +1489,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1499,6 +1503,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1523,12 +1528,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1555,13 +1567,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1906,7 +1918,7 @@ provisional cluster CommodityMetering = 2823 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2033,6 +2045,7 @@ endpoint 0 {
callback attribute rebootCount;
callback attribute upTime;
ram attribute testEventTriggersEnabled;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2087,6 +2100,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/energy-gateway-app/energy-gateway-common/energy-gateway-app.zap b/examples/energy-gateway-app/energy-gateway-common/energy-gateway-app.zap
index a97f84560ca..f8fe104b6bb 100644
--- a/examples/energy-gateway-app/energy-gateway-common/energy-gateway-app.zap
+++ b/examples/energy-gateway-app/energy-gateway-common/energy-gateway-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1727,6 +1727,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2395,6 +2411,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/energy-management/electrical-sensor/BUILD.gn b/examples/energy-management/electrical-sensor/BUILD.gn
index f568722c369..13e0fdb4a57 100644
--- a/examples/energy-management/electrical-sensor/BUILD.gn
+++ b/examples/energy-management/electrical-sensor/BUILD.gn
@@ -21,8 +21,8 @@ config("config") {
static_library("electrical-sensor") {
sources = [
- "${chip_root}/examples/energy-management/electrical-sensor/src/ElectricalPowerMeasurementDelegate.cpp",
- "${chip_root}/examples/energy-management/electrical-sensor/src/PowerTopologyDelegate.cpp",
+ "${chip_root}/examples/energy-management/electrical-sensor/src/ElectricalPowerMeasurementDelegateImpl.cpp",
+ "${chip_root}/examples/energy-management/electrical-sensor/src/PowerTopologyDelegateImpl.cpp",
]
public_configs = [ ":config" ]
diff --git a/examples/energy-management/electrical-sensor/include/ElectricalPowerMeasurementDelegate.h b/examples/energy-management/electrical-sensor/include/ElectricalPowerMeasurementDelegateImpl.h
similarity index 98%
rename from examples/energy-management/electrical-sensor/include/ElectricalPowerMeasurementDelegate.h
rename to examples/energy-management/electrical-sensor/include/ElectricalPowerMeasurementDelegateImpl.h
index ec5554e7166..0abded9fe10 100644
--- a/examples/energy-management/electrical-sensor/include/ElectricalPowerMeasurementDelegate.h
+++ b/examples/energy-management/electrical-sensor/include/ElectricalPowerMeasurementDelegateImpl.h
@@ -17,7 +17,7 @@
*/
#pragma once
-#include
+#include
#include
#include
diff --git a/examples/energy-management/electrical-sensor/include/PowerTopologyDelegate.h b/examples/energy-management/electrical-sensor/include/PowerTopologyDelegateImpl.h
similarity index 100%
rename from examples/energy-management/electrical-sensor/include/PowerTopologyDelegate.h
rename to examples/energy-management/electrical-sensor/include/PowerTopologyDelegateImpl.h
diff --git a/examples/energy-management/electrical-sensor/src/ElectricalPowerMeasurementDelegate.cpp b/examples/energy-management/electrical-sensor/src/ElectricalPowerMeasurementDelegateImpl.cpp
similarity index 99%
rename from examples/energy-management/electrical-sensor/src/ElectricalPowerMeasurementDelegate.cpp
rename to examples/energy-management/electrical-sensor/src/ElectricalPowerMeasurementDelegateImpl.cpp
index 045668e26a0..c25dcf69b91 100644
--- a/examples/energy-management/electrical-sensor/src/ElectricalPowerMeasurementDelegate.cpp
+++ b/examples/energy-management/electrical-sensor/src/ElectricalPowerMeasurementDelegateImpl.cpp
@@ -16,8 +16,9 @@
* limitations under the License.
*/
-#include
+#include
#include
+#include
namespace chip {
namespace app {
diff --git a/examples/energy-management/electrical-sensor/src/PowerTopologyDelegate.cpp b/examples/energy-management/electrical-sensor/src/PowerTopologyDelegateImpl.cpp
similarity index 98%
rename from examples/energy-management/electrical-sensor/src/PowerTopologyDelegate.cpp
rename to examples/energy-management/electrical-sensor/src/PowerTopologyDelegateImpl.cpp
index 758373df5f5..d4620d68684 100644
--- a/examples/energy-management/electrical-sensor/src/PowerTopologyDelegate.cpp
+++ b/examples/energy-management/electrical-sensor/src/PowerTopologyDelegateImpl.cpp
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-#include
+#include
namespace chip {
namespace app {
diff --git a/examples/evse-app/evse-common/evse-app.matter b/examples/evse-app/evse-common/evse-app.matter
index 56c36e1d591..50a133820de 100644
--- a/examples/evse-app/evse-common/evse-app.matter
+++ b/examples/evse-app/evse-common/evse-app.matter
@@ -1464,7 +1464,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1748,7 +1747,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1757,6 +1761,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1781,12 +1786,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1813,13 +1825,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2565,7 +2577,7 @@ provisional cluster DeviceEnergyManagementMode = 159 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2693,6 +2705,7 @@ endpoint 0 {
callback attribute rebootCount;
callback attribute upTime;
ram attribute testEventTriggersEnabled;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2747,6 +2760,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/evse-app/evse-common/evse-app.zap b/examples/evse-app/evse-common/evse-app.zap
index c4263544f75..68ec776367b 100644
--- a/examples/evse-app/evse-common/evse-app.zap
+++ b/examples/evse-app/evse-common/evse-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1743,6 +1743,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2411,6 +2427,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/evse-app/evse-common/include/EVSEManufacturerImpl.h b/examples/evse-app/evse-common/include/EVSEManufacturerImpl.h
index 1b551ab77eb..f775ac08a1c 100644
--- a/examples/evse-app/evse-common/include/EVSEManufacturerImpl.h
+++ b/examples/evse-app/evse-common/include/EVSEManufacturerImpl.h
@@ -20,9 +20,9 @@
#include
#include
-#include
+#include
#include
-#include
+#include
using chip::Protocols::InteractionModel::Status;
namespace chip {
diff --git a/examples/evse-app/evse-common/src/EVSEManufacturerImpl.cpp b/examples/evse-app/evse-common/src/EVSEManufacturerImpl.cpp
index ebf331541e7..a4250662cd3 100644
--- a/examples/evse-app/evse-common/src/EVSEManufacturerImpl.cpp
+++ b/examples/evse-app/evse-common/src/EVSEManufacturerImpl.cpp
@@ -465,7 +465,7 @@ CHIP_ERROR EVSEManufacturer::InitializePowerSourceCluster(chip::EndpointId endpo
Span endpointList = Span(endpointArray);
// Note per API - we do not need to maintain the span after the SetEndpointList has been called
- // since it takes a copy (see power-source-server.cpp)
+ // since it takes a copy (see power-source-server/CodegenIntegration.cpp)
return PowerSourceServer::Instance().SetEndpointList(endpointId, endpointList);
}
diff --git a/examples/evse-app/evse-common/src/EnergyEvseMain.cpp b/examples/evse-app/evse-common/src/EnergyEvseMain.cpp
index 1de5e741024..4511d3be7f3 100644
--- a/examples/evse-app/evse-common/src/EnergyEvseMain.cpp
+++ b/examples/evse-app/evse-common/src/EnergyEvseMain.cpp
@@ -21,23 +21,20 @@
#include
#include
#include
-#include
+#include
#include
#include
-#include
+#include
#include
#include
#include
#include
#include
-#include
-#include
#include
#include
#include
#include
-#include
using namespace chip;
using namespace chip::app;
@@ -51,6 +48,22 @@ using namespace chip::app::Clusters::PowerTopology;
namespace {
+const ElectricalEnergyMeasurement::Structs::MeasurementAccuracyRangeStruct::Type kMeasurementAccuracyRanges[] = {
+ { .rangeMin = 0,
+ .rangeMax = 1'000'000'000'000'000, // 1 million Mwh
+ .percentMax = MakeOptional(static_cast(500)),
+ .percentMin = MakeOptional(static_cast(50)) }
+};
+
+const ElectricalEnergyMeasurement::Structs::MeasurementAccuracyStruct::Type kMeasurementAccuracy = {
+ .measurementType = MeasurementTypeEnum::kElectricalEnergy,
+ .measured = true,
+ .minMeasuredValue = 0,
+ .maxMeasuredValue = 1'000'000'000'000'000, // 1 million Mwh
+ .accuracyRanges = DataModel::List(
+ kMeasurementAccuracyRanges)
+};
+
// Common cluster instances
std::unique_ptr gDEMDelegate;
std::unique_ptr gDEMInstance;
@@ -256,22 +269,6 @@ void emberAfElectricalEnergyMeasurementClusterInitCallback(chip::EndpointId endp
BitMask(
ElectricalEnergyMeasurement::OptionalAttributes::kOptionalAttributeCumulativeEnergyReset));
- ElectricalEnergyMeasurement::Structs::MeasurementAccuracyRangeStruct::Type energyAccuracyRanges[] = {
- { .rangeMin = 0,
- .rangeMax = 1'000'000'000'000'000, // 1 million Mwh
- .percentMax = MakeOptional(static_cast(500)),
- .percentMin = MakeOptional(static_cast(50)) }
- };
-
- ElectricalEnergyMeasurement::Structs::MeasurementAccuracyStruct::Type accuracy = {
- .measurementType = MeasurementTypeEnum::kElectricalEnergy,
- .measured = true,
- .minMeasuredValue = 0,
- .maxMeasuredValue = 1'000'000'000'000'000,
- .accuracyRanges =
- DataModel::List(energyAccuracyRanges)
- };
-
ElectricalEnergyMeasurement::Structs::CumulativeEnergyResetStruct::Type resetStruct = {
.importedResetTimestamp = MakeOptional(MakeNullable(static_cast(0))),
.exportedResetTimestamp = MakeOptional(MakeNullable(static_cast(0))),
@@ -282,7 +279,7 @@ void emberAfElectricalEnergyMeasurementClusterInitCallback(chip::EndpointId endp
if (gEEMAttrAccess)
{
TEMPORARY_RETURN_IGNORED gEEMAttrAccess->Init();
- TEMPORARY_RETURN_IGNORED SetMeasurementAccuracy(endpointId, accuracy);
+ TEMPORARY_RETURN_IGNORED SetMeasurementAccuracy(endpointId, kMeasurementAccuracy);
TEMPORARY_RETURN_IGNORED SetCumulativeReset(endpointId, MakeOptional(resetStruct));
}
}
diff --git a/examples/evse-app/silabs/src/AppTask.cpp b/examples/evse-app/silabs/src/AppTask.cpp
index 22c50bfe533..3145b367298 100644
--- a/examples/evse-app/silabs/src/AppTask.cpp
+++ b/examples/evse-app/silabs/src/AppTask.cpp
@@ -217,7 +217,6 @@ void AppTask::AppTaskMain(void * pvParameter)
void AppTask::EnergyManagementActionEventHandler(AppEvent * aEvent)
{
- bool initiated = false;
int32_t actor;
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -231,13 +230,7 @@ void AppTask::EnergyManagementActionEventHandler(AppEvent * aEvent)
err = APP_ERROR_UNHANDLED_EVENT;
}
- if (err == CHIP_NO_ERROR)
- {
- if (!initiated)
- {
- SILABS_LOG("Action is already in progress or active.");
- }
- }
+ // TODO: Implement evse action here (ex: Simulate car just plugged in or call event trigger)
}
void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction)
diff --git a/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.matter b/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.matter
index dd27ad79228..5369b5913e9 100644
--- a/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.matter
+++ b/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.matter
@@ -1195,7 +1195,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1799,7 +1798,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1808,6 +1812,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1832,12 +1837,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1864,13 +1876,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1923,7 +1935,7 @@ cluster CommissionerControl = 1873 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster AccessControl;
@@ -2040,6 +2052,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2210,6 +2223,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.zap b/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.zap
index 21b790ff962..e13d5c4ca38 100644
--- a/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.zap
+++ b/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1547,6 +1547,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3866,6 +3882,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/fan-control-app/silabs/data_model/fan-control-thread-app.matter b/examples/fan-control-app/silabs/data_model/fan-control-thread-app.matter
index 989f777ed93..90717d0cfc6 100644
--- a/examples/fan-control-app/silabs/data_model/fan-control-thread-app.matter
+++ b/examples/fan-control-app/silabs/data_model/fan-control-thread-app.matter
@@ -1299,7 +1299,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1786,7 +1785,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1795,6 +1799,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1819,12 +1824,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1851,13 +1863,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
diff --git a/examples/fan-control-app/silabs/data_model/fan-control-wifi-app.matter b/examples/fan-control-app/silabs/data_model/fan-control-wifi-app.matter
index 2380041a676..fa41d310e60 100644
--- a/examples/fan-control-app/silabs/data_model/fan-control-wifi-app.matter
+++ b/examples/fan-control-app/silabs/data_model/fan-control-wifi-app.matter
@@ -1299,7 +1299,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1695,7 +1694,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1704,6 +1708,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1728,12 +1733,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1760,13 +1772,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
diff --git a/examples/jf-admin-app/jfa-common/jfa-app.matter b/examples/jf-admin-app/jfa-common/jfa-app.matter
index 27f6ce8c66b..978952775bb 100644
--- a/examples/jf-admin-app/jfa-common/jfa-app.matter
+++ b/examples/jf-admin-app/jfa-common/jfa-app.matter
@@ -1496,7 +1496,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2100,7 +2099,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2109,6 +2113,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2133,12 +2138,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2165,13 +2177,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2893,7 +2905,7 @@ provisional cluster JointFabricAdministrator = 1875 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -3042,6 +3054,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3216,6 +3229,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/jf-admin-app/jfa-common/jfa-app.zap b/examples/jf-admin-app/jfa-common/jfa-app.zap
index 7cb083efd2f..a028f2b350e 100644
--- a/examples/jf-admin-app/jfa-common/jfa-app.zap
+++ b/examples/jf-admin-app/jfa-common/jfa-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1914,6 +1914,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4267,6 +4283,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/jf-admin-app/linux/AppOptions.cpp b/examples/jf-admin-app/linux/AppOptions.cpp
new file mode 100644
index 00000000000..56cb1c405e4
--- /dev/null
+++ b/examples/jf-admin-app/linux/AppOptions.cpp
@@ -0,0 +1,69 @@
+/*
+ *
+ * Copyright (c) 2026 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 "AppOptions.h"
+
+#include
+#include
+
+using chip::ArgParser::OptionDef;
+using chip::ArgParser::OptionSet;
+using chip::ArgParser::PrintArgError;
+
+constexpr uint16_t kOptionMinCommissioningTimeout = 0xFF02;
+
+bool AppOptions::HandleOptions(const char * program, OptionSet * options, int identifier, const char * name, const char * value)
+{
+ bool retval = true;
+ switch (identifier)
+ {
+ case kOptionMinCommissioningTimeout: {
+ uint16_t timeout;
+ if (!chip::ArgParser::ParseInt(value, timeout))
+ {
+ chip::ArgParser::PrintArgError("%s: Invalid value for %s: %s\n", program, name, value);
+ retval = false;
+ break;
+ }
+ auto & commissionMgr = chip::Server::GetInstance().GetCommissioningWindowManager();
+ commissionMgr.OverrideMinCommissioningTimeout(chip::System::Clock::Seconds16(timeout));
+ break;
+ }
+ default:
+ PrintArgError("%s: INTERNAL ERROR: Unhandled option: %s\n", program, name);
+ retval = false;
+ break;
+ }
+
+ return retval;
+}
+
+OptionSet * AppOptions::GetOptions()
+{
+ static OptionDef optionsDef[] = {
+ { "min_commissioning_timeout", chip::ArgParser::kArgumentRequired, kOptionMinCommissioningTimeout },
+ {},
+ };
+
+ static OptionSet options = {
+ AppOptions::HandleOptions, optionsDef, "PROGRAM OPTIONS",
+ " --min_commissioning_timeout \n"
+ " The minimum time in seconds during which commissioning session establishment is allowed by the Node.\n"
+ };
+ return &options;
+}
diff --git a/examples/jf-admin-app/linux/AppOptions.h b/examples/jf-admin-app/linux/AppOptions.h
new file mode 100644
index 00000000000..c2d7db8b5d4
--- /dev/null
+++ b/examples/jf-admin-app/linux/AppOptions.h
@@ -0,0 +1,31 @@
+/*
+ *
+ * Copyright (c) 2026 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 "AppMain.h"
+
+class AppOptions
+{
+public:
+ static chip::ArgParser::OptionSet * GetOptions();
+
+private:
+ static bool HandleOptions(const char * program, chip::ArgParser::OptionSet * options, int identifier, const char * name,
+ const char * value);
+};
diff --git a/examples/jf-admin-app/linux/BUILD.gn b/examples/jf-admin-app/linux/BUILD.gn
index c94663b032a..ba0acb06d86 100644
--- a/examples/jf-admin-app/linux/BUILD.gn
+++ b/examples/jf-admin-app/linux/BUILD.gn
@@ -36,6 +36,8 @@ config("includes") {
executable("jfa-app") {
sources = [
+ "AppOptions.cpp",
+ "AppOptions.h",
"JFADatastoreSync.cpp",
"JFAManager.cpp",
"include/CHIPProjectAppConfig.h",
diff --git a/examples/jf-admin-app/linux/JFADatastoreSync.cpp b/examples/jf-admin-app/linux/JFADatastoreSync.cpp
index 4cd4c614dba..38eda804acf 100644
--- a/examples/jf-admin-app/linux/JFADatastoreSync.cpp
+++ b/examples/jf-admin-app/linux/JFADatastoreSync.cpp
@@ -37,12 +37,12 @@ using namespace chip::app::Clusters::JointFabricDatastore;
extern DeviceCommissioner * GetDeviceCommissioner();
-constexpr uint8_t kJFAvailableShift = 0;
-constexpr uint8_t kJFAdminShift = 1;
-constexpr uint8_t kJFAnchorShift = 2;
-constexpr uint8_t kJFDatastoreShift = 3;
+[[maybe_unused]] constexpr uint8_t kJFAvailableShift = 0;
+[[maybe_unused]] constexpr uint8_t kJFAdminShift = 1;
+[[maybe_unused]] constexpr uint8_t kJFAnchorShift = 2;
+[[maybe_unused]] constexpr uint8_t kJFDatastoreShift = 3;
-static constexpr EndpointId kJFDatastoreClusterEndpointId = 1;
+[[maybe_unused]] static constexpr EndpointId kJFDatastoreClusterEndpointId = 1;
JFADatastoreSync JFADatastoreSync::sJFDS;
diff --git a/examples/jf-admin-app/linux/main.cpp b/examples/jf-admin-app/linux/main.cpp
index bc0b003bdf4..14729bd0871 100644
--- a/examples/jf-admin-app/linux/main.cpp
+++ b/examples/jf-admin-app/linux/main.cpp
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+#include "AppOptions.h"
#include "JFADatastoreSync.h"
#include "JFAManager.h"
#include "rpc/RpcServer.h"
@@ -120,7 +121,7 @@ int main(int argc, char * argv[])
{
LinuxDeviceOptions::GetInstance().rpcServerPort = RPC_SERVER_PORT;
- if (ChipLinuxAppInit(argc, argv) != 0)
+ if (ChipLinuxAppInit(argc, argv, AppOptions::GetOptions()) != 0)
{
return -1;
}
diff --git a/examples/jf-control-app/args.gni b/examples/jf-control-app/args.gni
index 3801ef04cc3..3db324d4b6d 100644
--- a/examples/jf-control-app/args.gni
+++ b/examples/jf-control-app/args.gni
@@ -38,3 +38,4 @@ chip_tlv_validate_char_string_on_write = true
# enable Joint Fabric features in the core SDK code
# (e.g.: commissioner related code from src/controller)
chip_device_config_enable_joint_fabric = true
+chip_support_thread_meshcop = false
diff --git a/examples/jf-control-app/commands/pairing/PairingCommand.h b/examples/jf-control-app/commands/pairing/PairingCommand.h
index d97df7b6770..f1f8109c97d 100644
--- a/examples/jf-control-app/commands/pairing/PairingCommand.h
+++ b/examples/jf-control-app/commands/pairing/PairingCommand.h
@@ -31,8 +31,10 @@
#include
-using namespace ::chip;
-using namespace ::chip::Credentials;
+using ::chip::ByteSpan;
+using ::chip::NodeId;
+using ::chip::VendorId;
+using ::chip::Credentials::CertificateKeyId;
using JCMDeviceCommissioner = chip::Controller::JCM::DeviceCommissioner;
using JCMTrustVerificationStateMachine = chip::Credentials::JCM::TrustVerificationStateMachine;
@@ -265,9 +267,10 @@ class PairingCommand : public CHIPCommand,
/////////// JCMTrustVerificationDelegate /////////
void OnProgressUpdate(JCMTrustVerificationStateMachine & stateMachine, JCMTrustVerificationStage stage,
- JCMTrustVerificationInfo & info, JCMTrustVerificationError error);
- void OnAskUserForConsent(JCMTrustVerificationStateMachine & stateMachine, JCMTrustVerificationInfo & info);
- CHIP_ERROR OnLookupOperationalTrustAnchor(VendorId vendorID, CertificateKeyId & subjectKeyId, ByteSpan & globallyTrustedRoot);
+ JCMTrustVerificationInfo & info, JCMTrustVerificationError error) override;
+ void OnAskUserForConsent(JCMTrustVerificationStateMachine & stateMachine, JCMTrustVerificationInfo & info) override;
+ CHIP_ERROR OnLookupOperationalTrustAnchor(VendorId vendorID, CertificateKeyId & subjectKeyId,
+ ByteSpan & globallyTrustedRoot) override;
private:
CHIP_ERROR RunInternal(NodeId remoteId);
diff --git a/examples/laundry-washer-app/nxp/zap/laundry-washer-app.matter b/examples/laundry-washer-app/nxp/zap/laundry-washer-app.matter
index c857ae543a4..b379f4494a1 100644
--- a/examples/laundry-washer-app/nxp/zap/laundry-washer-app.matter
+++ b/examples/laundry-washer-app/nxp/zap/laundry-washer-app.matter
@@ -1419,7 +1419,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1815,7 +1814,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1824,6 +1828,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1848,12 +1853,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1880,13 +1892,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2084,7 +2096,7 @@ cluster OperationalState = 96 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2235,6 +2247,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2329,6 +2342,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/laundry-washer-app/nxp/zap/laundry-washer-app.zap b/examples/laundry-washer-app/nxp/zap/laundry-washer-app.zap
index 4f08628afa7..d678b94f99a 100644
--- a/examples/laundry-washer-app/nxp/zap/laundry-washer-app.zap
+++ b/examples/laundry-washer-app/nxp/zap/laundry-washer-app.zap
@@ -62,7 +62,7 @@
],
"deviceVersions": [
1,
- 3
+ 5
],
"deviceIdentifiers": [
18,
@@ -1982,6 +1982,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3154,6 +3170,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/light-switch-app/asr/src/BindingHandler.cpp b/examples/light-switch-app/asr/src/BindingHandler.cpp
index 2aafe895a4e..584d90fe463 100644
--- a/examples/light-switch-app/asr/src/BindingHandler.cpp
+++ b/examples/light-switch-app/asr/src/BindingHandler.cpp
@@ -242,8 +242,8 @@ void BindingHandler::InitInternal(intptr_t arg)
{
ASR_LOG("Initialize binding Handler");
auto & server = chip::Server::GetInstance();
- TEMPORARY_RETURN_IGNORED Binding::Manager::GetInstance().Init(
- { &server.GetFabricTable(), server.GetCASESessionManager(), &server.GetPersistentStorage() });
+ LogErrorOnFailure(Binding::Manager::GetInstance().Init(
+ { &server.GetFabricTable(), server.GetCASESessionManager(), &server.GetPersistentStorage() }));
Binding::Manager::GetInstance().RegisterBoundDeviceChangedHandler(LightSwitchChangedHandler);
Binding::Manager::GetInstance().RegisterBoundDeviceContextReleaseHandler(LightSwitchContextReleaseHandler);
BindingHandler::GetInstance().PrintBindingTable();
diff --git a/examples/light-switch-app/genio/src/AppTask.cpp b/examples/light-switch-app/genio/src/AppTask.cpp
index 503e4baf5f6..1f57114551d 100644
--- a/examples/light-switch-app/genio/src/AppTask.cpp
+++ b/examples/light-switch-app/genio/src/AppTask.cpp
@@ -122,15 +122,16 @@ CHIP_ERROR AppTask::Init()
sWiFiNetworkCommissioningInstance.Init();
#endif
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
+ SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+
// Init ZCL Data Model and start server
static chip::CommonCaseDeviceServerInitParams initParams;
(void) initParams.InitializeStaticResourcesBeforeServerInit();
initParams.dataModelProvider = chip::app::CodegenDataModelProviderInstance(initParams.persistentStorageDelegate);
chip::Server::GetInstance().Init(initParams);
- // Initialize device attestation config
- SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
-
// Create FreeRTOS sw timer for Function Selection.
sFunctionTimer = xTimerCreate("FnTmr", // Just a text name, not used by the RTOS kernel
1, // == default timer period (mS)
diff --git a/examples/light-switch-app/light-switch-common/icd-lit-light-switch-app.matter b/examples/light-switch-app/light-switch-common/icd-lit-light-switch-app.matter
index 4c63ca29f83..7992dc435e9 100644
--- a/examples/light-switch-app/light-switch-common/icd-lit-light-switch-app.matter
+++ b/examples/light-switch-app/light-switch-common/icd-lit-light-switch-app.matter
@@ -1426,7 +1426,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2232,7 +2231,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2241,6 +2245,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2265,12 +2270,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2297,13 +2309,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2903,7 +2915,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -3044,6 +3056,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3249,6 +3262,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/light-switch-app/light-switch-common/icd-lit-light-switch-app.zap b/examples/light-switch-app/light-switch-common/icd-lit-light-switch-app.zap
index e7c77a716de..28bce7f8cdc 100644
--- a/examples/light-switch-app/light-switch-common/icd-lit-light-switch-app.zap
+++ b/examples/light-switch-app/light-switch-common/icd-lit-light-switch-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1851,6 +1851,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4552,6 +4568,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/light-switch-app/light-switch-common/light-switch-app.matter b/examples/light-switch-app/light-switch-common/light-switch-app.matter
index edab9aef9e8..5a668188865 100644
--- a/examples/light-switch-app/light-switch-common/light-switch-app.matter
+++ b/examples/light-switch-app/light-switch-common/light-switch-app.matter
@@ -1549,7 +1549,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2355,7 +2354,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2364,6 +2368,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2388,12 +2393,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2420,13 +2432,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -3026,7 +3038,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -3167,6 +3179,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3372,6 +3385,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/light-switch-app/light-switch-common/light-switch-app.zap b/examples/light-switch-app/light-switch-common/light-switch-app.zap
index 15283added3..dcda1de9359 100644
--- a/examples/light-switch-app/light-switch-common/light-switch-app.zap
+++ b/examples/light-switch-app/light-switch-common/light-switch-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1851,6 +1851,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4552,6 +4568,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/light-switch-app/qpg/zap/switch.matter b/examples/light-switch-app/qpg/zap/switch.matter
index d3deaf8f232..5e8e69cb9b8 100644
--- a/examples/light-switch-app/qpg/zap/switch.matter
+++ b/examples/light-switch-app/qpg/zap/switch.matter
@@ -1807,7 +1807,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2349,7 +2348,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2358,6 +2362,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2382,12 +2387,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2414,13 +2426,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2866,7 +2878,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_powersource = 17, version 1;
device type ma_otarequestor = 18, version 1;
@@ -3029,6 +3041,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3170,6 +3183,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/light-switch-app/qpg/zap/switch.zap b/examples/light-switch-app/qpg/zap/switch.zap
index 5e790fba598..e8813b6d21d 100644
--- a/examples/light-switch-app/qpg/zap/switch.zap
+++ b/examples/light-switch-app/qpg/zap/switch.zap
@@ -68,7 +68,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1,
1
],
@@ -2156,6 +2156,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4118,6 +4134,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/light-switch-app/realtek/data_model/icd-lit-light-switch-app.matter b/examples/light-switch-app/realtek/data_model/icd-lit-light-switch-app.matter
index 8b8f0afae5b..984533e2539 100644
--- a/examples/light-switch-app/realtek/data_model/icd-lit-light-switch-app.matter
+++ b/examples/light-switch-app/realtek/data_model/icd-lit-light-switch-app.matter
@@ -1485,7 +1485,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2174,7 +2173,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2183,6 +2187,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2207,12 +2212,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2239,13 +2251,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2382,7 +2394,7 @@ cluster IcdManagement = 70 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2525,6 +2537,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2681,6 +2694,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/light-switch-app/realtek/data_model/icd-lit-light-switch-app.zap b/examples/light-switch-app/realtek/data_model/icd-lit-light-switch-app.zap
index 705e10ebb19..cb6b14455b1 100644
--- a/examples/light-switch-app/realtek/data_model/icd-lit-light-switch-app.zap
+++ b/examples/light-switch-app/realtek/data_model/icd-lit-light-switch-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1813,6 +1813,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -3859,6 +3875,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_11.matter b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_11.matter
index 8bb4807dd8c..64eddfb9ab0 100644
--- a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_11.matter
+++ b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_11.matter
@@ -1350,7 +1350,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2039,7 +2038,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2048,6 +2052,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2072,12 +2077,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2104,13 +2116,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2556,7 +2568,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2700,6 +2712,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2866,6 +2879,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_11.zap b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_11.zap
index e5f0e5fa179..00ff43336bf 100644
--- a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_11.zap
+++ b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_11.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1890,6 +1890,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4112,6 +4128,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_2.matter b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_2.matter
index 166df43fa0d..a890dec0e99 100644
--- a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_2.matter
+++ b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_2.matter
@@ -1350,7 +1350,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2156,7 +2155,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2165,6 +2169,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2189,12 +2194,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2221,13 +2233,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2673,7 +2685,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2817,6 +2829,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3022,6 +3035,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_2.zap b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_2.zap
index a2632ee01d3..92c09dc23c8 100644
--- a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_2.zap
+++ b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_2.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1890,6 +1890,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4591,6 +4607,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_8.matter b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_8.matter
index d9a7dac158d..c69bc7ceb64 100644
--- a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_8.matter
+++ b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_8.matter
@@ -1350,7 +1350,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2156,7 +2155,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2165,6 +2169,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2189,12 +2194,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2221,13 +2233,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2673,7 +2685,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2817,6 +2829,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3022,6 +3035,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_8.zap b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_8.zap
index e7c7419f0d4..7eaa07cce86 100644
--- a/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_8.zap
+++ b/examples/light-switch-app/realtek/data_model/light-switch-app-1_to_8.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1890,6 +1890,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4591,6 +4607,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/light-switch-app/realtek/data_model/light-switch-app.matter b/examples/light-switch-app/realtek/data_model/light-switch-app.matter
index 586d42e72fb..cac5e71dd62 100644
--- a/examples/light-switch-app/realtek/data_model/light-switch-app.matter
+++ b/examples/light-switch-app/realtek/data_model/light-switch-app.matter
@@ -1427,7 +1427,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1969,7 +1968,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1978,6 +1982,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2002,12 +2007,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2034,13 +2046,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2504,7 +2516,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 4;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2636,6 +2648,7 @@ endpoint 0 {
callback attribute upTime;
callback attribute totalOperationalHours;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2771,6 +2784,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/light-switch-app/realtek/data_model/light-switch-app.zap b/examples/light-switch-app/realtek/data_model/light-switch-app.zap
index 0949d84ccff..329d36b2dfb 100644
--- a/examples/light-switch-app/realtek/data_model/light-switch-app.zap
+++ b/examples/light-switch-app/realtek/data_model/light-switch-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 4,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1750,6 +1750,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3603,6 +3619,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/light-switch-app/silabs/src/BindingHandler.cpp b/examples/light-switch-app/silabs/src/BindingHandler.cpp
index d1edcdabbbe..99e907d99a4 100644
--- a/examples/light-switch-app/silabs/src/BindingHandler.cpp
+++ b/examples/light-switch-app/silabs/src/BindingHandler.cpp
@@ -391,8 +391,8 @@ void LightSwitchContextReleaseHandler(void * context)
void InitBindingHandlerInternal(intptr_t arg)
{
auto & server = chip::Server::GetInstance();
- TEMPORARY_RETURN_IGNORED Binding::Manager::GetInstance().Init(
- { &server.GetFabricTable(), server.GetCASESessionManager(), &server.GetPersistentStorage() });
+ LogErrorOnFailure(Binding::Manager::GetInstance().Init(
+ { &server.GetFabricTable(), server.GetCASESessionManager(), &server.GetPersistentStorage() }));
Binding::Manager::GetInstance().RegisterBoundDeviceChangedHandler(LightSwitchChangedHandler);
Binding::Manager::GetInstance().RegisterBoundDeviceContextReleaseHandler(LightSwitchContextReleaseHandler);
}
diff --git a/examples/light-switch-app/telink/src/binding-handler.cpp b/examples/light-switch-app/telink/src/binding-handler.cpp
index e87e518a621..1732d95324d 100644
--- a/examples/light-switch-app/telink/src/binding-handler.cpp
+++ b/examples/light-switch-app/telink/src/binding-handler.cpp
@@ -435,8 +435,8 @@ static void RegisterSwitchCommands()
void InitBindingHandlerInternal(intptr_t arg)
{
auto & server = chip::Server::GetInstance();
- TEMPORARY_RETURN_IGNORED Binding::Manager::GetInstance().Init(
- { &server.GetFabricTable(), server.GetCASESessionManager(), &server.GetPersistentStorage() });
+ LogErrorOnFailure(Binding::Manager::GetInstance().Init(
+ { &server.GetFabricTable(), server.GetCASESessionManager(), &server.GetPersistentStorage() }));
Binding::Manager::GetInstance().RegisterBoundDeviceChangedHandler(LightSwitchChangedHandler);
Binding::Manager::GetInstance().RegisterBoundDeviceContextReleaseHandler(LightSwitchContextReleaseHandler);
}
diff --git a/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.matter b/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.matter
index 35a732f089b..54d553b7b15 100644
--- a/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.matter
+++ b/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.matter
@@ -1480,7 +1480,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2139,7 +2138,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2148,6 +2152,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2172,12 +2177,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2204,13 +2216,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2713,7 +2725,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2832,6 +2844,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -3006,6 +3019,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.zap b/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.zap
index b95345f14cf..926d1681f00 100644
--- a/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.zap
+++ b/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1488,6 +1488,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -3788,6 +3804,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/lighting-app/beken/main/chipinterface.cpp b/examples/lighting-app/beken/main/chipinterface.cpp
index 61d067bbe54..3167d2613c8 100644
--- a/examples/lighting-app/beken/main/chipinterface.cpp
+++ b/examples/lighting-app/beken/main/chipinterface.cpp
@@ -187,8 +187,10 @@ extern "C" void _init(void)
static void InitServer(intptr_t context)
{
- BekenAppServer::Init();
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+ BekenAppServer::Init();
OTAHelpers::Instance().InitOTARequestor();
PrintOnboardingCodes(chip::RendezvousInformationFlags(chip::RendezvousInformationFlag::kBLE));
}
diff --git a/examples/lighting-app/bouffalolab/bl602/BUILD.gn b/examples/lighting-app/bouffalolab/bl602/BUILD.gn
index 02c7a899b67..77f44c92b2f 100644
--- a/examples/lighting-app/bouffalolab/bl602/BUILD.gn
+++ b/examples/lighting-app/bouffalolab/bl602/BUILD.gn
@@ -109,10 +109,6 @@ bouffalolab_executable("lighting_app") {
defines +=
[ "CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE=${chip_enable_factory_data}" ]
- if (enable_lwip_pbuf_ram) {
- defines += [ "CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_RAM=1" ]
- }
-
bl_plat_name = "bl602"
sources = [
"${examples_plat_dir}/common/route_hook/bl_route_hook.c",
@@ -232,10 +228,6 @@ bouffalolab_executable("lighting_app") {
inputs = [ ldscript ]
if (chip_print_memory_usage) {
- if (enable_lwip_pbuf_ram) {
- ldflags += [ "-Wl,--defsym=__RAM_PBUF_POOL=0" ]
- }
-
ldflags += [
"-Wl,--print-memory-usage",
"-fstack-usage",
diff --git a/examples/lighting-app/bouffalolab/bl616/BUILD.gn b/examples/lighting-app/bouffalolab/bl616/BUILD.gn
index de07ab76f33..ff4fd15b148 100644
--- a/examples/lighting-app/bouffalolab/bl616/BUILD.gn
+++ b/examples/lighting-app/bouffalolab/bl616/BUILD.gn
@@ -54,6 +54,10 @@ declare_args() {
board = "BL616DK"
module_type = "BL616"
baudrate = 2000000
+
+ app_ver_x = 2
+ app_ver_y = 1
+ app_ver_z = 0
}
bouffalo_sdk("sdk") {
@@ -72,8 +76,18 @@ bouffalo_sdk("sdk") {
"OTA_PERIODIC_TIMEOUT=${ota_periodic_query_timeout_seconds}",
"OTA_AUTO_REBOOT_DELAY=${ota_auto_reboot_delay_seconds}",
"CHIP_UART_BAUDRATE=${baudrate}",
+ "APP_VER_X=${app_ver_x}",
+ "APP_VER_Y=${app_ver_y}",
+ "APP_VER_Z=${app_ver_z}",
]
+ if (chip_enable_ethernet) {
+ include_dirs += [ "${example_dir}/bl616/ethernet" ]
+ } else if (chip_enable_wifi) {
+ include_dirs += [ "${example_dir}/bl616/wifi" ]
+ }
+ defines += [ "CHIP_DEVICE_CONFIG_ENABLE_ETHERNET=${chip_enable_ethernet}" ]
+
defines += [ "PW_RPC_ENABLED=${chip_enable_pw_rpc}" ]
if (chip_enable_pw_rpc) {
include_dirs += [ "${examples_plat_dir}/common/rpc" ]
@@ -121,12 +135,7 @@ bouffalolab_executable("lighting_app") {
defines += [ "BOOT_PIN_RESET=2" ]
}
- if (enable_lwip_pbuf_ram) {
- defines += [ "CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_RAM=1" ]
- }
-
defines += [ "BL616DK" ]
-
sources = [
"${chip_root}/examples/providers/DeviceInfoProviderImpl.cpp",
"${example_dir}/common/AppTask.cpp",
diff --git a/examples/lighting-app/bouffalolab/bl616/FreeRTOSConfig.h b/examples/lighting-app/bouffalolab/bl616/FreeRTOSConfig.h
index 609c13605a9..f44f67839e9 100644
--- a/examples/lighting-app/bouffalolab/bl616/FreeRTOSConfig.h
+++ b/examples/lighting-app/bouffalolab/bl616/FreeRTOSConfig.h
@@ -103,10 +103,6 @@ to exclude the API function. */
#define INCLUDE_xTaskGetHandle 1
#define INCLUDE_xSemaphoreGetMutexHolder 1
-/* Normal assert() semantics without relying on the provision of an assert.h
-header file. */
-void vApplicationMallocFailedHook(void);
-
#if __cplusplus
extern "C" void vAssertCalled(void);
#else
diff --git a/examples/platform/bouffalolab/bl616/bl616_lwip_hooks.h b/examples/lighting-app/bouffalolab/bl616/bl616_lwip_hooks.h
similarity index 100%
rename from examples/platform/bouffalolab/bl616/bl616_lwip_hooks.h
rename to examples/lighting-app/bouffalolab/bl616/bl616_lwip_hooks.h
diff --git a/examples/lighting-app/bouffalolab/bl616/ethernet/lwipopts_user.h b/examples/lighting-app/bouffalolab/bl616/ethernet/lwipopts_user.h
new file mode 100644
index 00000000000..a0e80b5f41e
--- /dev/null
+++ b/examples/lighting-app/bouffalolab/bl616/ethernet/lwipopts_user.h
@@ -0,0 +1,270 @@
+/**
+ * Copyright (c) 2022 Bouffalolab team
+ * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels
+ ******************************************************************************
+ */
+
+#ifndef LWIP_HDR_LWIPOPTS_H__
+#define LWIP_HDR_LWIPOPTS_H__
+
+#define LWIP_NETIF_API 1
+
+/* ---------- Memory options ---------- */
+/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
+ lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
+ byte alignment -> define MEM_ALIGNMENT to 2. */
+#define MEM_ALIGNMENT 4
+
+/* MEM_SIZE: the size of the heap memory. If the application will send
+a lot of data that needs to be copied, this should be set high. */
+#define MEM_SIZE (32 * 1024)
+
+/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
+ sends a lot of data out of ROM (or other static memory), this
+ should be set high. */
+#define MEMP_NUM_PBUF 20
+/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
+ per active UDP "connection". */
+#define MEMP_NUM_UDP_PCB 16
+/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
+ connections. */
+#define MEMP_NUM_TCP_PCB 6
+/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
+ connections. */
+#define MEMP_NUM_TCP_PCB_LISTEN 5
+/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
+ timeouts. */
+#define MEMP_NUM_SYS_TIMEOUT (LWIP_NUM_SYS_TIMEOUT_INTERNAL + 8 + 3)
+
+/* ---------- IPv4 options ---------- */
+#define LWIP_IPV4 1
+
+/* ---------- TCP options ---------- */
+#define LWIP_TCP 1
+#define TCP_TTL 255
+
+/* Controls if TCP should queue segments that arrive out of
+ order. Define to 0 if your device is low on memory. */
+#define TCP_QUEUE_OOSEQ 0
+
+/* TCP Maximum segment size. */
+#define TCP_MSS (1500 - 40) /* TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */
+
+/* TCP sender buffer space (bytes). */
+#define TCP_SND_BUF (16 * TCP_MSS)
+
+/* TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
+ as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */
+
+#define TCP_SND_QUEUELEN (8 * TCP_SND_BUF / TCP_MSS)
+
+/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
+ segments. */
+#define MEMP_NUM_TCP_SEG TCP_SND_QUEUELEN
+
+/* TCP receive window. */
+#define TCP_WND (4 * TCP_MSS)
+
+/* ---------- Pbuf options ---------- */
+/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
+ @ note: used to allocate Tx pbufs only
+ mix pbuf size is (TCP_WND / TCP_MSS) */
+#define PBUF_POOL_SIZE (2 * TCP_WND / TCP_MSS)
+
+/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
+#define PBUF_POOL_BUFSIZE 1524
+
+/* LWIP_SUPPORT_CUSTOM_PBUF == 1: to pass directly MAC Rx buffers to the stack
+ no copy is needed */
+#define LWIP_SUPPORT_CUSTOM_PBUF 1
+
+/* ---------- ICMP options ---------- */
+#define LWIP_ICMP 1
+
+/* ---------- DHCP options ---------- */
+#define LWIP_DHCP 1
+
+/* ---------- UDP options ---------- */
+#define LWIP_UDP 1
+#define UDP_TTL 255
+
+#define LWIP_NETIF_LOOPBACK 1
+#define LWIP_HAVE_LOOPIF 1
+#define LWIP_LOOPBACK_MAX_PBUFS 0
+
+#define LWIP_RAW 1
+#define LWIP_MULTICAST_TX_OPTIONS 1
+#define SO_REUSE 1
+
+#define LWIP_IGMP 1
+#define LWIP_IPV6 1
+#define LWIP_IPV6_DHCP6 1
+#define LWIP_IPV6_SCOPES 0
+#define LWIP_IPV6_MLD 1
+#define MEMP_NUM_MLD6_GROUP 10
+
+/* ---------- Statistics options ---------- */
+#define LWIP_STATS 0
+
+#define LWIP_TIMEVAL_PRIVATE 0 // use sys/time.h for struct timeval
+
+#define LWIP_ERRNO_STDINCLUDE 1
+#define LWIP_SOCKET_SET_ERRNO 1
+
+#ifdef __cplusplus
+extern "C" int * __errno(void);
+#else
+extern int * __errno(void);
+#endif
+#define errno (*__errno())
+#define LWIP_RAND() ((u32_t) random())
+
+/* ---------- link callback options ---------- */
+/* LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface
+ * whenever the link changes (i.e., link down)
+ */
+#define LWIP_NETIF_LINK_CALLBACK 1
+#define LWIP_NETIF_STATUS_CALLBACK 1
+#define LWIP_NETIF_API 1
+#define LWIP_NETIF_EXT_STATUS_CALLBACK 1
+
+/*
+ --------------------------------------
+ ---------- Checksum options ----------
+ --------------------------------------
+*/
+/* LWIP_CHECKSUM_ON_COPY==1: Calculate checksum when copying data from application buffers to pbufs. */
+#define LWIP_CHECKSUM_ON_COPY 0
+
+#ifdef CHECKSUM_BY_HARDWARE
+/* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
+#define CHECKSUM_GEN_IP 0
+/* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
+#define CHECKSUM_GEN_UDP 0
+/* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
+#define CHECKSUM_GEN_TCP 0
+/* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
+#define CHECKSUM_CHECK_IP 0
+/* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
+#define CHECKSUM_CHECK_UDP 0
+/* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
+#define CHECKSUM_CHECK_TCP 0
+/* CHECKSUM_CHECK_ICMP==0: Check checksums by hardware for incoming ICMP packets.*/
+#define CHECKSUM_GEN_ICMP 0
+#else
+/* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
+#define CHECKSUM_GEN_IP 1
+/* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
+#define CHECKSUM_GEN_UDP 1
+/* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
+#define CHECKSUM_GEN_TCP 1
+/* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
+#define CHECKSUM_CHECK_IP 1
+/* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
+#define CHECKSUM_CHECK_UDP 1
+/* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
+#define CHECKSUM_CHECK_TCP 1
+/* CHECKSUM_CHECK_ICMP==1: Check checksums by hardware for incoming ICMP packets.*/
+#define CHECKSUM_GEN_ICMP 1
+#define CHECKSUM_CHECK_ICMP 1
+#endif
+
+/*
+ ----------------------------------------------
+ ---------- Sequential layer options ----------
+ ----------------------------------------------
+*/
+/**
+ * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
+ */
+#define LWIP_NETCONN 1
+
+/*
+ ------------------------------------
+ ---------- Socket options ----------
+ ------------------------------------
+*/
+/**
+ * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c)
+ */
+#define LWIP_SOCKET 1
+
+/* ---------------- httpd options --------------- */
+#define HTTPD_USE_CUSTOM_FSDATA 0
+
+/*
+ ----------------------------------------
+ ---------- Lwip Debug options ----------
+ ----------------------------------------
+*/
+#define LWIP_DEBUG LWIP_DBG_OFF
+#define ETHARP_DEBUG LWIP_DBG_OFF
+#define ICMP_DEBUG LWIP_DBG_OFF
+#define TCPIP_DEBUG LWIP_DBG_OFF
+#define TCP_DEBUG LWIP_DBG_OFF
+#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF
+#define UDP_DEBUG LWIP_DBG_OFF
+#define SOCKET_DEBUG LWIP_DBG_OFF
+#define API_LIB_DEBUG LWIP_DBG_OFF
+#define HTTPD_DEBUG LWIP_DBG_OFF
+#define PBUF_DEBUG LWIP_DBG_OFF
+#define IP_DEBUG LWIP_DBG_OFF
+
+/*
+ ---------------------------------
+ ---------- OS options ----------
+ ---------------------------------
+*/
+
+#define osPriorityIdle 2 //< priority: idle (lowest)
+#define osPriorityLow 5 //< priority: low
+#define osPriorityBelowNormal 10 //< priority: below normal
+#define osPriorityNormal 15 //< priority: normal (default)
+#define osPriorityAboveNormal 20 //< priority: above normal
+#define osPriorityHigh 25 //< priority: high
+#define osPriorityRealtime 29 //< priority: realtime (highest)
+
+#define TCPIP_THREAD_NAME "TCP/IP"
+#define TCPIP_THREAD_STACKSIZE 1024
+#define TCPIP_MBOX_SIZE 100
+#define DEFAULT_UDP_RECVMBOX_SIZE 100
+#define DEFAULT_TCP_RECVMBOX_SIZE 100
+#define DEFAULT_ACCEPTMBOX_SIZE 100
+#define DEFAULT_THREAD_STACKSIZE 512
+#define TCPIP_THREAD_PRIO osPriorityHigh
+
+/* no wifi ram */
+#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u8_t variable_name[LWIP_MEM_ALIGN_BUFFER(size)]
+
+#define LWIP_DNS_SERVER 0
+
+#endif /* LWIP_HDR_LWIPOPTS_H__ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/examples/lighting-app/bouffalolab/bl616/wifi/lwipopts_user.h b/examples/lighting-app/bouffalolab/bl616/wifi/lwipopts_user.h
new file mode 100644
index 00000000000..3bce440b83f
--- /dev/null
+++ b/examples/lighting-app/bouffalolab/bl616/wifi/lwipopts_user.h
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Simon Goldschmidt
+ *
+ */
+#ifndef LWIP_HDR_LWIPOPTS_H__
+#define LWIP_HDR_LWIPOPTS_H__
+
+#define LWIP_NETIF_API 1
+#define LWIP_DEBUG 1
+#define LWIP_STATS_DISPLAY 1
+#define SOCKETS_DEBUG LWIP_DBG_OFF
+#ifdef BL616_DHCP_DEBUG
+#define DHCP_DEBUG LWIP_DBG_ON
+#else
+#define DHCP_DEBUG LWIP_DBG_OFF
+#endif
+#define ICMP_DEBUG LWIP_DBG_OFF
+#define ETHARP_DEBUG LWIP_DBG_OFF
+#define LWIP_MULTICAST_PING 1
+#define LWIP_BROADCAST_PING 1
+
+#define TCPIP_MBOX_SIZE 64
+#define TCPIP_THREAD_STACKSIZE 1024
+#define TCPIP_THREAD_PRIO 28
+
+#define DEFAULT_THREAD_STACKSIZE 1024
+#define DEFAULT_THREAD_PRIO 1
+#define DEFAULT_RAW_RECVMBOX_SIZE 32
+#define DEFAULT_UDP_RECVMBOX_SIZE 64
+#define DEFAULT_TCP_RECVMBOX_SIZE 64
+#define DEFAULT_ACCEPTMBOX_SIZE 32
+
+#define LWIP_NETIF_LOOPBACK 1
+#define LWIP_HAVE_LOOPIF 1
+#define LWIP_LOOPBACK_MAX_PBUFS 0
+
+#define LWIP_CHKSUM_ALGORITHM 3
+#define LWIP_TCPIP_CORE_LOCKING_INPUT 1
+
+#define PBUF_LINK_ENCAPSULATION_HLEN 388
+
+#define MEMP_NUM_NETBUF 32
+#define MEMP_NUM_NETCONN 16
+#define MEMP_NUM_UDP_PCB 16
+
+#define MAC_TXQ_DEPTH 32
+#define MAC_RXQ_DEPTH 12
+
+#define IP_REASS_MAX_PBUFS (2 * MAC_RXQ_DEPTH - 2)
+#define MEMP_NUM_REASSDATA LWIP_MIN((IP_REASS_MAX_PBUFS), 5)
+
+#define TCP_MSS (1500 - 40)
+#define TCP_WND (2 * MAC_RXQ_DEPTH * TCP_MSS)
+#define TCP_SND_BUF (4 * TCP_MSS)
+
+#define TCP_QUEUE_OOSEQ 1
+#define MEMP_NUM_TCP_SEG ((4 * TCP_SND_BUF) / TCP_MSS)
+#define MEMP_NUM_PBUF (TCP_SND_BUF / TCP_MSS)
+#define PBUF_POOL_SIZE 0
+#define LWIP_WND_SCALE 1
+#define TCP_RCV_SCALE 2
+#define TCP_SNDLOWAT LWIP_MIN(LWIP_MAX(((TCP_SND_BUF) / 4), (2 * TCP_MSS) + 1), (TCP_SND_BUF) -1)
+
+#define MEM_MIN_TCP (2300 + MEMP_NUM_PBUF * (100 + PBUF_LINK_ENCAPSULATION_HLEN))
+#define MEM_MIN MEM_MIN_TCP
+#define MEM_ALIGNMENT 4
+
+#if (defined(BL602))
+#define LWIP_HEAP_SIZE (14 * 1024)
+#else
+#define LWIP_HEAP_SIZE (18 * 1024)
+#endif
+
+#ifdef LWIP_HEAP_SIZE
+#define MEM_SIZE LWIP_HEAP_SIZE
+#else
+#if MEM_MIN > 8192
+#define MEM_SIZE MEM_MIN
+#else
+#define MEM_SIZE 8192
+#endif
+#endif
+
+#define LWIP_HOOK_FILENAME "bl616_lwip_hooks.h"
+
+#define LWIP_RAW 1
+#define LWIP_MULTICAST_TX_OPTIONS 1
+
+#define LWIP_TIMEVAL_PRIVATE 0 // use sys/time.h for struct timeval
+
+// #define LWIP_PROVIDE_ERRNO 1
+#define LWIP_ERRNO_STDINCLUDE 1
+#define LWIP_SOCKET_SET_ERRNO 1
+
+#define LWIP_DHCP 1
+#define LWIP_DNS 1
+#define LWIP_IGMP 0
+#define LWIP_SO_RCVTIMEO 1
+#define LWIP_SO_SNDTIMEO 1
+#define SO_REUSE 1
+#define LWIP_TCP_KEEPALIVE 1
+
+#define LWIP_IPV6 1
+#define LWIP_IPV6_DHCP6 1
+#define LWIP_IPV6_SCOPES 0
+#define LWIP_IPV6_MLD 1
+#define MEMP_NUM_MLD6_GROUP 10
+#define MEMP_NUM_SYS_TIMEOUT (LWIP_NUM_SYS_TIMEOUT_INTERNAL + 8 + 3)
+
+#define LWIP_NETIF_STATUS_CALLBACK 1
+#define LWIP_NETIF_API 1
+#define LWIP_NETIF_EXT_STATUS_CALLBACK 1
+
+#define ETHARP_SUPPORT_STATIC_ENTRIES 1
+
+#define LWIP_SUPPORT_CUSTOM_PBUF 1
+#ifdef HIGH_PERFORMANCE_PBUF
+#define LWIP_NETIF_TX_SINGLE_PBUF 0
+#else
+#define LWIP_NETIF_TX_SINGLE_PBUF 1
+#endif
+#define LWIP_RAND() ((u32_t) random())
+
+#ifdef __cplusplus
+extern "C" int * __errno(void);
+#else
+extern int * __errno(void);
+#endif
+#define errno (*__errno())
+
+#endif /* LWIP_HDR_LWIPOPTS_H__ */
diff --git a/examples/lighting-app/bouffalolab/common/AppTask.cpp b/examples/lighting-app/bouffalolab/common/AppTask.cpp
index 6c7c18ac35e..0c672a4d38e 100644
--- a/examples/lighting-app/bouffalolab/common/AppTask.cpp
+++ b/examples/lighting-app/bouffalolab/common/AppTask.cpp
@@ -23,7 +23,7 @@
#include
#include
#include
-#include
+#include
#include
#include
#include
@@ -106,15 +106,13 @@ void StartAppTask(void)
#if CONFIG_ENABLE_CHIP_SHELL
#if CHIP_DEVICE_LAYER_TARGET_BL616
-CHIP_ERROR AppTask::StartAppShellTask()
+void AppTask::StartAppShellTask()
{
Engine::Root().Init();
cmd_misc_init();
Engine::Root().RunMainLoop();
-
- return CHIP_NO_ERROR;
}
#else
void AppTask::AppShellTask(void * args)
@@ -122,7 +120,7 @@ void AppTask::AppShellTask(void * args)
Engine::Root().RunMainLoop();
}
-CHIP_ERROR AppTask::StartAppShellTask()
+void AppTask::StartAppShellTask()
{
static TaskHandle_t shellTask;
@@ -131,8 +129,6 @@ CHIP_ERROR AppTask::StartAppShellTask()
cmd_misc_init();
xTaskCreate(AppTask::AppShellTask, "chip_shell", 1024 / sizeof(configSTACK_DEPTH_TYPE), NULL, APP_TASK_PRIORITY, &shellTask);
-
- return CHIP_NO_ERROR;
}
#endif
#endif
@@ -164,8 +160,8 @@ void AppTask::AppTaskMain(void * pvParameter)
ButtonInit();
#else
uint32_t resetCnt = 0;
- Internal::BLConfig::ReadConfigValue(APP_REBOOT_RESET_COUNT_KEY, resetCnt);
- Internal::BLConfig::WriteConfigValue(APP_REBOOT_RESET_COUNT_KEY, resetCnt);
+ Internal::BflbConfig::ReadConfigValue(APP_REBOOT_RESET_COUNT_KEY, resetCnt);
+ Internal::BflbConfig::WriteConfigValue(APP_REBOOT_RESET_COUNT_KEY, resetCnt);
GetAppTask().mButtonPressedTime = System::SystemClock().GetMonotonicMilliseconds64().count();
ChipLogProgress(NotSpecified, "AppTaskMain %lld, resetCnt %ld", GetAppTask().mButtonPressedTime, resetCnt);
#endif
@@ -238,7 +234,7 @@ void AppTask::AppTaskMain(void * pvParameter)
}
ChipLogProgress(NotSpecified, "APP_REBOOT_RESET_COUNT_KEY resetCnt %ld", resetCnt);
resetCnt = 0;
- Internal::BLConfig::WriteConfigValue(APP_REBOOT_RESET_COUNT_KEY, resetCnt);
+ Internal::BflbConfig::WriteConfigValue(APP_REBOOT_RESET_COUNT_KEY, resetCnt);
}
#endif
if (APP_EVENT_IDENTIFY_MASK & appEvent)
diff --git a/examples/lighting-app/bouffalolab/common/AppTask.h b/examples/lighting-app/bouffalolab/common/AppTask.h
index 37f8678e050..4a72af3db0f 100644
--- a/examples/lighting-app/bouffalolab/common/AppTask.h
+++ b/examples/lighting-app/bouffalolab/common/AppTask.h
@@ -122,7 +122,7 @@ class AppTask
static void ScheduleInit(intptr_t arg);
static void AppTaskMain(void * pvParameter);
- static CHIP_ERROR StartAppShellTask();
+ static void StartAppShellTask();
static void AppShellTask(void * args);
EndpointId mEndpointId = (EndpointId) 1;
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter
index ec014bd4444..db6b6f911c4 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter
@@ -1480,7 +1480,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1841,7 +1840,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1850,6 +1854,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1874,12 +1879,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1906,13 +1918,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2261,7 +2273,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2385,6 +2397,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2457,6 +2470,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap
index 948584cf001..2b92d11c38a 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1559,6 +1559,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2417,6 +2433,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
index 0c2a3fa8cef..0f188331e01 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
@@ -1480,7 +1480,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1967,7 +1966,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1976,6 +1980,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2000,12 +2005,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2032,13 +2044,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2387,7 +2399,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2508,6 +2520,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2633,6 +2646,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap
index 7e52aa955ec..4ffb12fe235 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1511,6 +1511,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -3239,6 +3255,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
index 8c975b36dab..bdbba589214 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
@@ -1480,7 +1480,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1876,7 +1875,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1885,6 +1889,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1909,12 +1914,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1941,13 +1953,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2296,7 +2308,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2417,6 +2429,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2494,6 +2507,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap
index f7b2ab8fbde..7dfade64606 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1511,6 +1511,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2446,6 +2462,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/lighting-app/esp32/data_model/lighting-app.matter b/examples/lighting-app/esp32/data_model/lighting-app.matter
index cf9232fa38f..0ee3c0e00fa 100644
--- a/examples/lighting-app/esp32/data_model/lighting-app.matter
+++ b/examples/lighting-app/esp32/data_model/lighting-app.matter
@@ -1480,7 +1480,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2084,7 +2083,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2093,6 +2097,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2117,12 +2122,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2149,13 +2161,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2504,7 +2516,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2643,6 +2655,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2815,6 +2828,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/lighting-app/esp32/data_model/lighting-app.zap b/examples/lighting-app/esp32/data_model/lighting-app.zap
index a97a228f80c..44d36c9faf3 100644
--- a/examples/lighting-app/esp32/data_model/lighting-app.zap
+++ b/examples/lighting-app/esp32/data_model/lighting-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1792,6 +1792,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4121,6 +4137,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/lighting-app/genio/src/AppTask.cpp b/examples/lighting-app/genio/src/AppTask.cpp
index 742d0a13d11..dd4e526c81b 100644
--- a/examples/lighting-app/genio/src/AppTask.cpp
+++ b/examples/lighting-app/genio/src/AppTask.cpp
@@ -323,15 +323,16 @@ CHIP_ERROR AppTask::Init()
sWiFiNetworkCommissioningInstance.Init();
#endif
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
+ SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+
// Init ZCL Data Model and start server
static chip::CommonCaseDeviceServerInitParams initParams;
(void) initParams.InitializeStaticResourcesBeforeServerInit();
initParams.dataModelProvider = chip::app::CodegenDataModelProviderInstance(initParams.persistentStorageDelegate);
chip::Server::GetInstance().Init(initParams);
- // Initialize device attestation config
- SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
-
// Create FreeRTOS sw timer for Function Selection.
sFunctionTimer = xTimerCreate("FnTmr", // Just a text name, not used by the RTOS kernel
1, // == default timer period (mS)
diff --git a/examples/lighting-app/infineon/psoc6/src/AppTask.cpp b/examples/lighting-app/infineon/psoc6/src/AppTask.cpp
index 5f0e8a3d710..97510a593b5 100644
--- a/examples/lighting-app/infineon/psoc6/src/AppTask.cpp
+++ b/examples/lighting-app/infineon/psoc6/src/AppTask.cpp
@@ -141,6 +141,10 @@ static Identify gIdentify1 = {
static void InitServer(intptr_t context)
{
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
+ SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+
// Init ZCL Data Model
static chip::CommonCaseDeviceServerInitParams initParams;
(void) initParams.InitializeStaticResourcesBeforeServerInit();
@@ -150,8 +154,6 @@ static void InitServer(intptr_t context)
gExampleDeviceInfoProvider.SetStorageDelegate(&Server::GetInstance().GetPersistentStorage());
chip::DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider);
- // Initialize device attestation config
- SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
GetAppTask().InitOTARequestor();
#endif
diff --git a/examples/lighting-app/lighting-common/lighting-app.matter b/examples/lighting-app/lighting-common/lighting-app.matter
index 13656f4929a..f18f42e6bcc 100644
--- a/examples/lighting-app/lighting-common/lighting-app.matter
+++ b/examples/lighting-app/lighting-common/lighting-app.matter
@@ -1480,7 +1480,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2084,7 +2083,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2093,6 +2097,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2117,12 +2122,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2149,13 +2161,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2176,6 +2188,116 @@ cluster UserLabel = 65 {
readonly attribute int16u clusterRevision = 65533;
}
+/** The Groupcast cluster manages the content of the node-wide multicast Group membership that is part of the underlying interaction layer. */
+provisional cluster Groupcast = 101 {
+ revision 1;
+
+ enum GroupcastTestResultEnum : enum8 {
+ kSuccess = 0;
+ kGeneralError = 1;
+ kMessageReplay = 2;
+ kFailedAuth = 3;
+ kNoAvailableKey = 4;
+ kSendFailure = 5;
+ }
+
+ enum GroupcastTestingEnum : enum8 {
+ kDisableTesting = 0;
+ kEnableListenerTesting = 1;
+ kEnableSenderTesting = 2;
+ }
+
+ enum MulticastAddrPolicyEnum : enum8 {
+ kIanaAddr = 0;
+ kPerGroup = 1;
+ }
+
+ bitmap Feature : bitmap32 {
+ kListener = 0x1;
+ kSender = 0x2;
+ kPerGroup = 0x4;
+ }
+
+ fabric_scoped struct MembershipStruct {
+ group_id groupID = 0;
+ optional endpoint_no endpoints[] = 1;
+ fabric_sensitive int16u keySetID = 2;
+ optional boolean hasAuxiliaryACL = 3;
+ MulticastAddrPolicyEnum mcastAddrPolicy = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_sensitive info event access(read: administer) GroupcastTesting = 0 {
+ optional octet_string sourceIpAddress = 0;
+ optional octet_string destinationIpAddress = 1;
+ optional group_id groupID = 2;
+ optional endpoint_no endpointID = 3;
+ optional cluster_id clusterID = 4;
+ optional int32u elementID = 5;
+ optional boolean accessAllowed = 6;
+ GroupcastTestResultEnum groupcastTestResult = 7;
+ fabric_idx fabricIndex = 254;
+ }
+
+ readonly attribute MembershipStruct membership[] = 0;
+ readonly attribute int16u maxMembershipCount = 1;
+ readonly attribute int16u maxMcastAddrCount = 2;
+ readonly attribute int16u usedMcastAddrCount = 3;
+ readonly attribute fabric_idx fabricUnderTest = 4;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct JoinGroupRequest {
+ group_id groupID = 0;
+ endpoint_no endpoints[] = 1;
+ int16u keySetID = 2;
+ optional octet_string<16> key = 3;
+ optional boolean useAuxiliaryACL = 4;
+ optional boolean replaceEndpoints = 5;
+ optional MulticastAddrPolicyEnum mcastAddrPolicy = 6;
+ }
+
+ request struct LeaveGroupRequest {
+ group_id groupID = 0;
+ optional endpoint_no endpoints[] = 1;
+ }
+
+ response struct LeaveGroupResponse = 2 {
+ group_id groupID = 0;
+ endpoint_no endpoints[] = 1;
+ }
+
+ request struct UpdateGroupKeyRequest {
+ group_id groupID = 0;
+ int16u keySetID = 1;
+ optional octet_string<16> key = 2;
+ }
+
+ request struct ConfigureAuxiliaryACLRequest {
+ group_id groupID = 0;
+ boolean useAuxiliaryACL = 1;
+ }
+
+ request struct GroupcastTestingRequest {
+ GroupcastTestingEnum testOperation = 0;
+ optional int16u durationSeconds = 1;
+ }
+
+ /** This command SHALL be used to instruct the server to join a multicast group. */
+ fabric command access(invoke: manage) JoinGroup(JoinGroupRequest): DefaultSuccess = 0;
+ /** This command SHALL allow a maintainer to request that the server withdraws itself or specific endpoints from a specific group or from all groups of this client's fabric. */
+ fabric command access(invoke: manage) LeaveGroup(LeaveGroupRequest): LeaveGroupResponse = 1;
+ /** This command SHALL allow a fabric administrator to update the OperationalGroupKey associated with the existing group identified by GroupID, which is already joined. */
+ fabric command access(invoke: manage) UpdateGroupKey(UpdateGroupKeyRequest): DefaultSuccess = 3;
+ /** This command SHALL allow an Administrator to enable or disable the generation of AuxiliaryACL entries in the Access Control Cluster based on the groups joined (see Groupcast Auxiliary ACL Handling). */
+ fabric command access(invoke: administer) ConfigureAuxiliaryACL(ConfigureAuxiliaryACLRequest): DefaultSuccess = 4;
+ /** This command SHALL allow an Administrator to configure test modes that allow validation of Groupcast communication. */
+ fabric command access(invoke: administer) GroupcastTesting(GroupcastTestingRequest): DefaultSuccess = 5;
+}
+
/** Attributes and commands for controlling the color properties of a color-capable light. */
cluster ColorControl = 768 {
revision 9;
@@ -2504,7 +2626,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2642,6 +2764,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2816,6 +2939,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2833,6 +2957,26 @@ endpoint 0 {
callback attribute featureMap;
callback attribute clusterRevision;
}
+
+ server cluster Groupcast {
+ emits event GroupcastTesting;
+ callback attribute membership;
+ callback attribute maxMembershipCount;
+ callback attribute maxMcastAddrCount;
+ callback attribute usedMcastAddrCount;
+ callback attribute fabricUnderTest;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 1;
+ callback attribute clusterRevision default = 1;
+
+ handle command JoinGroup;
+ handle command LeaveGroup;
+ handle command UpdateGroupKey;
+ handle command ConfigureAuxiliaryACL;
+ handle command GroupcastTesting;
+ }
}
endpoint 1 {
device type ma_colortemperaturelight = 268, version 4;
diff --git a/examples/lighting-app/lighting-common/lighting-app.zap b/examples/lighting-app/lighting-common/lighting-app.zap
index 6abb2bcddd8..b945a322df7 100644
--- a/examples/lighting-app/lighting-common/lighting-app.zap
+++ b/examples/lighting-app/lighting-common/lighting-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1785,6 +1785,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4138,6 +4154,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4251,10 +4283,10 @@
"side": "server",
"type": "bitmap32",
"included": 1,
- "storageOption": "RAM",
+ "storageOption": "External",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0",
+ "defaultValue": null,
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -4267,6 +4299,210 @@
"side": "server",
"type": "int16u",
"included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Groupcast",
+ "code": 101,
+ "mfgCode": null,
+ "define": "GROUPCAST_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "JoinGroup",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "LeaveGroup",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "LeaveGroupResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "UpdateGroupKey",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ConfigureAuxiliaryACL",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GroupcastTesting",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "Membership",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxMembershipCount",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxMcastAddrCount",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "UsedMcastAddrCount",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FabricUnderTest",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "fabric_idx",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
@@ -4275,6 +4511,31 @@
"minInterval": 1,
"maxInterval": 65534,
"reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "GroupcastTesting",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
}
]
}
diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.matter b/examples/lighting-app/nxp/zap/lighting-on-off.matter
index 36b1ed5c079..8b05241a861 100644
--- a/examples/lighting-app/nxp/zap/lighting-on-off.matter
+++ b/examples/lighting-app/nxp/zap/lighting-on-off.matter
@@ -1434,7 +1434,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1921,7 +1920,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1930,6 +1934,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1954,12 +1959,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1986,18 +1998,18 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2099,6 +2111,7 @@ endpoint 0 {
callback attribute rebootCount;
callback attribute upTime;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2222,6 +2235,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
@@ -2232,7 +2246,7 @@ endpoint 0 {
}
}
endpoint 1 {
- device type ma_onofflight = 256, version 1;
+ device type ma_onofflight = 256, version 4;
server cluster Identify {
diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.zap b/examples/lighting-app/nxp/zap/lighting-on-off.zap
index accc54c5187..ed432debbc5 100644
--- a/examples/lighting-app/nxp/zap/lighting-on-off.zap
+++ b/examples/lighting-app/nxp/zap/lighting-on-off.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1323,6 +1323,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2984,6 +3000,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -3040,7 +3072,7 @@
}
],
"deviceVersions": [
- 1
+ 4
],
"deviceIdentifiers": [
256
diff --git a/examples/lighting-app/qpg/zap/light.matter b/examples/lighting-app/qpg/zap/light.matter
index a83ca71074a..f771b3dc4e9 100644
--- a/examples/lighting-app/qpg/zap/light.matter
+++ b/examples/lighting-app/qpg/zap/light.matter
@@ -1738,7 +1738,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2225,7 +2224,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2234,6 +2238,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2258,12 +2263,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2290,13 +2302,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2896,7 +2908,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 1;
+ device type ma_rootdevice = 22, version 5;
device type ma_powersource = 17, version 0;
device type ma_otarequestor = 18, version 1;
@@ -3052,6 +3064,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3193,6 +3206,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/lighting-app/qpg/zap/light.zap b/examples/lighting-app/qpg/zap/light.zap
index 23540ceb276..0730669a62b 100644
--- a/examples/lighting-app/qpg/zap/light.zap
+++ b/examples/lighting-app/qpg/zap/light.zap
@@ -69,7 +69,7 @@
],
"deviceVersions": [
1,
- 1,
+ 5,
0
],
"deviceIdentifiers": [
@@ -2044,6 +2044,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4006,6 +4022,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/lighting-app/realtek/data_model/lighting-app.matter b/examples/lighting-app/realtek/data_model/lighting-app.matter
index 8d236a26dbc..cc0efbec741 100644
--- a/examples/lighting-app/realtek/data_model/lighting-app.matter
+++ b/examples/lighting-app/realtek/data_model/lighting-app.matter
@@ -1434,7 +1434,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1921,7 +1920,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1930,6 +1934,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1954,12 +1959,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1986,13 +1998,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2513,7 +2525,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 4;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2642,6 +2654,7 @@ endpoint 0 {
callback attribute upTime;
callback attribute totalOperationalHours;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2777,6 +2790,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/lighting-app/realtek/data_model/lighting-app.zap b/examples/lighting-app/realtek/data_model/lighting-app.zap
index 90874afa9a5..2f2b4e3b341 100644
--- a/examples/lighting-app/realtek/data_model/lighting-app.zap
+++ b/examples/lighting-app/realtek/data_model/lighting-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 4,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1709,6 +1709,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3583,6 +3599,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/lighting-app/silabs/data_model/lighting-thread-app.matter b/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
index 2db48cd608d..8b8a93075b5 100644
--- a/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
+++ b/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
@@ -1434,7 +1434,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1885,7 +1884,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1894,6 +1898,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1918,12 +1923,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1950,13 +1962,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2114,6 +2126,116 @@ provisional cluster ScenesManagement = 98 {
fabric command access(invoke: manage) CopyScene(CopySceneRequest): CopySceneResponse = 64;
}
+/** The Groupcast cluster manages the content of the node-wide multicast Group membership that is part of the underlying interaction layer. */
+provisional cluster Groupcast = 101 {
+ revision 1;
+
+ enum GroupcastTestResultEnum : enum8 {
+ kSuccess = 0;
+ kGeneralError = 1;
+ kMessageReplay = 2;
+ kFailedAuth = 3;
+ kNoAvailableKey = 4;
+ kSendFailure = 5;
+ }
+
+ enum GroupcastTestingEnum : enum8 {
+ kDisableTesting = 0;
+ kEnableListenerTesting = 1;
+ kEnableSenderTesting = 2;
+ }
+
+ enum MulticastAddrPolicyEnum : enum8 {
+ kIanaAddr = 0;
+ kPerGroup = 1;
+ }
+
+ bitmap Feature : bitmap32 {
+ kListener = 0x1;
+ kSender = 0x2;
+ kPerGroup = 0x4;
+ }
+
+ fabric_scoped struct MembershipStruct {
+ group_id groupID = 0;
+ optional endpoint_no endpoints[] = 1;
+ fabric_sensitive int16u keySetID = 2;
+ optional boolean hasAuxiliaryACL = 3;
+ MulticastAddrPolicyEnum mcastAddrPolicy = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_sensitive info event access(read: administer) GroupcastTesting = 0 {
+ optional octet_string sourceIpAddress = 0;
+ optional octet_string destinationIpAddress = 1;
+ optional group_id groupID = 2;
+ optional endpoint_no endpointID = 3;
+ optional cluster_id clusterID = 4;
+ optional int32u elementID = 5;
+ optional boolean accessAllowed = 6;
+ GroupcastTestResultEnum groupcastTestResult = 7;
+ fabric_idx fabricIndex = 254;
+ }
+
+ readonly attribute MembershipStruct membership[] = 0;
+ readonly attribute int16u maxMembershipCount = 1;
+ readonly attribute int16u maxMcastAddrCount = 2;
+ readonly attribute int16u usedMcastAddrCount = 3;
+ readonly attribute fabric_idx fabricUnderTest = 4;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct JoinGroupRequest {
+ group_id groupID = 0;
+ endpoint_no endpoints[] = 1;
+ int16u keySetID = 2;
+ optional octet_string<16> key = 3;
+ optional boolean useAuxiliaryACL = 4;
+ optional boolean replaceEndpoints = 5;
+ optional MulticastAddrPolicyEnum mcastAddrPolicy = 6;
+ }
+
+ request struct LeaveGroupRequest {
+ group_id groupID = 0;
+ optional endpoint_no endpoints[] = 1;
+ }
+
+ response struct LeaveGroupResponse = 2 {
+ group_id groupID = 0;
+ endpoint_no endpoints[] = 1;
+ }
+
+ request struct UpdateGroupKeyRequest {
+ group_id groupID = 0;
+ int16u keySetID = 1;
+ optional octet_string<16> key = 2;
+ }
+
+ request struct ConfigureAuxiliaryACLRequest {
+ group_id groupID = 0;
+ boolean useAuxiliaryACL = 1;
+ }
+
+ request struct GroupcastTestingRequest {
+ GroupcastTestingEnum testOperation = 0;
+ optional int16u durationSeconds = 1;
+ }
+
+ /** This command SHALL be used to instruct the server to join a multicast group. */
+ fabric command access(invoke: manage) JoinGroup(JoinGroupRequest): DefaultSuccess = 0;
+ /** This command SHALL allow a maintainer to request that the server withdraws itself or specific endpoints from a specific group or from all groups of this client's fabric. */
+ fabric command access(invoke: manage) LeaveGroup(LeaveGroupRequest): LeaveGroupResponse = 1;
+ /** This command SHALL allow a fabric administrator to update the OperationalGroupKey associated with the existing group identified by GroupID, which is already joined. */
+ fabric command access(invoke: manage) UpdateGroupKey(UpdateGroupKeyRequest): DefaultSuccess = 3;
+ /** This command SHALL allow an Administrator to enable or disable the generation of AuxiliaryACL entries in the Access Control Cluster based on the groups joined (see Groupcast Auxiliary ACL Handling). */
+ fabric command access(invoke: administer) ConfigureAuxiliaryACL(ConfigureAuxiliaryACLRequest): DefaultSuccess = 4;
+ /** This command SHALL allow an Administrator to configure test modes that allow validation of Groupcast communication. */
+ fabric command access(invoke: administer) GroupcastTesting(GroupcastTestingRequest): DefaultSuccess = 5;
+}
+
/** Attributes and commands for controlling the color properties of a color-capable light. */
cluster ColorControl = 768 {
revision 9;
@@ -2442,7 +2564,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 4;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2566,6 +2688,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2690,6 +2813,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2701,6 +2825,26 @@ endpoint 0 {
handle command KeySetRemove;
handle command KeySetReadAllIndices;
}
+
+ server cluster Groupcast {
+ emits event GroupcastTesting;
+ callback attribute membership;
+ callback attribute maxMembershipCount;
+ callback attribute maxMcastAddrCount;
+ callback attribute usedMcastAddrCount;
+ callback attribute fabricUnderTest;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 1;
+ callback attribute clusterRevision default = 1;
+
+ handle command JoinGroup;
+ handle command LeaveGroup;
+ handle command UpdateGroupKey;
+ handle command ConfigureAuxiliaryACL;
+ handle command GroupcastTesting;
+ }
}
endpoint 1 {
device type ma_extendedcolorlight = 269, version 4;
diff --git a/examples/lighting-app/silabs/data_model/lighting-thread-app.zap b/examples/lighting-app/silabs/data_model/lighting-thread-app.zap
index 866e1b51670..07cd4bc2d18 100644
--- a/examples/lighting-app/silabs/data_model/lighting-thread-app.zap
+++ b/examples/lighting-app/silabs/data_model/lighting-thread-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 4,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1719,6 +1719,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3456,6 +3472,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3537,6 +3569,235 @@
"reportableChange": 0
}
]
+ },
+ {
+ "name": "Groupcast",
+ "code": 101,
+ "mfgCode": null,
+ "define": "GROUPCAST_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "JoinGroup",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "LeaveGroup",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "LeaveGroupResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "UpdateGroupKey",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ConfigureAuxiliaryACL",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GroupcastTesting",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "Membership",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxMembershipCount",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxMcastAddrCount",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "UsedMcastAddrCount",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FabricUnderTest",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "fabric_idx",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "GroupcastTesting",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
}
]
},
diff --git a/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter b/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
index cb8b6885f0e..14162f525cb 100644
--- a/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
+++ b/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
@@ -1738,7 +1738,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2134,7 +2133,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2143,6 +2147,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2167,12 +2172,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2199,13 +2211,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2380,6 +2392,116 @@ provisional cluster ScenesManagement = 98 {
fabric command access(invoke: manage) CopyScene(CopySceneRequest): CopySceneResponse = 64;
}
+/** The Groupcast cluster manages the content of the node-wide multicast Group membership that is part of the underlying interaction layer. */
+provisional cluster Groupcast = 101 {
+ revision 1;
+
+ enum GroupcastTestResultEnum : enum8 {
+ kSuccess = 0;
+ kGeneralError = 1;
+ kMessageReplay = 2;
+ kFailedAuth = 3;
+ kNoAvailableKey = 4;
+ kSendFailure = 5;
+ }
+
+ enum GroupcastTestingEnum : enum8 {
+ kDisableTesting = 0;
+ kEnableListenerTesting = 1;
+ kEnableSenderTesting = 2;
+ }
+
+ enum MulticastAddrPolicyEnum : enum8 {
+ kIanaAddr = 0;
+ kPerGroup = 1;
+ }
+
+ bitmap Feature : bitmap32 {
+ kListener = 0x1;
+ kSender = 0x2;
+ kPerGroup = 0x4;
+ }
+
+ fabric_scoped struct MembershipStruct {
+ group_id groupID = 0;
+ optional endpoint_no endpoints[] = 1;
+ fabric_sensitive int16u keySetID = 2;
+ optional boolean hasAuxiliaryACL = 3;
+ MulticastAddrPolicyEnum mcastAddrPolicy = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_sensitive info event access(read: administer) GroupcastTesting = 0 {
+ optional octet_string sourceIpAddress = 0;
+ optional octet_string destinationIpAddress = 1;
+ optional group_id groupID = 2;
+ optional endpoint_no endpointID = 3;
+ optional cluster_id clusterID = 4;
+ optional int32u elementID = 5;
+ optional boolean accessAllowed = 6;
+ GroupcastTestResultEnum groupcastTestResult = 7;
+ fabric_idx fabricIndex = 254;
+ }
+
+ readonly attribute MembershipStruct membership[] = 0;
+ readonly attribute int16u maxMembershipCount = 1;
+ readonly attribute int16u maxMcastAddrCount = 2;
+ readonly attribute int16u usedMcastAddrCount = 3;
+ readonly attribute fabric_idx fabricUnderTest = 4;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct JoinGroupRequest {
+ group_id groupID = 0;
+ endpoint_no endpoints[] = 1;
+ int16u keySetID = 2;
+ optional octet_string<16> key = 3;
+ optional boolean useAuxiliaryACL = 4;
+ optional boolean replaceEndpoints = 5;
+ optional MulticastAddrPolicyEnum mcastAddrPolicy = 6;
+ }
+
+ request struct LeaveGroupRequest {
+ group_id groupID = 0;
+ optional endpoint_no endpoints[] = 1;
+ }
+
+ response struct LeaveGroupResponse = 2 {
+ group_id groupID = 0;
+ endpoint_no endpoints[] = 1;
+ }
+
+ request struct UpdateGroupKeyRequest {
+ group_id groupID = 0;
+ int16u keySetID = 1;
+ optional octet_string<16> key = 2;
+ }
+
+ request struct ConfigureAuxiliaryACLRequest {
+ group_id groupID = 0;
+ boolean useAuxiliaryACL = 1;
+ }
+
+ request struct GroupcastTestingRequest {
+ GroupcastTestingEnum testOperation = 0;
+ optional int16u durationSeconds = 1;
+ }
+
+ /** This command SHALL be used to instruct the server to join a multicast group. */
+ fabric command access(invoke: manage) JoinGroup(JoinGroupRequest): DefaultSuccess = 0;
+ /** This command SHALL allow a maintainer to request that the server withdraws itself or specific endpoints from a specific group or from all groups of this client's fabric. */
+ fabric command access(invoke: manage) LeaveGroup(LeaveGroupRequest): LeaveGroupResponse = 1;
+ /** This command SHALL allow a fabric administrator to update the OperationalGroupKey associated with the existing group identified by GroupID, which is already joined. */
+ fabric command access(invoke: manage) UpdateGroupKey(UpdateGroupKeyRequest): DefaultSuccess = 3;
+ /** This command SHALL allow an Administrator to enable or disable the generation of AuxiliaryACL entries in the Access Control Cluster based on the groups joined (see Groupcast Auxiliary ACL Handling). */
+ fabric command access(invoke: administer) ConfigureAuxiliaryACL(ConfigureAuxiliaryACLRequest): DefaultSuccess = 4;
+ /** This command SHALL allow an Administrator to configure test modes that allow validation of Groupcast communication. */
+ fabric command access(invoke: administer) GroupcastTesting(GroupcastTestingRequest): DefaultSuccess = 5;
+}
+
/** Attributes and commands for controlling the color properties of a color-capable light. */
cluster ColorControl = 768 {
revision 9;
@@ -2708,7 +2830,7 @@ cluster ColorControl = 768 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 4;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2838,6 +2960,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2924,6 +3047,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2941,6 +3065,26 @@ endpoint 0 {
callback attribute featureMap;
callback attribute clusterRevision;
}
+
+ server cluster Groupcast {
+ emits event GroupcastTesting;
+ callback attribute membership;
+ callback attribute maxMembershipCount;
+ callback attribute maxMcastAddrCount;
+ callback attribute usedMcastAddrCount;
+ callback attribute fabricUnderTest;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 1;
+ callback attribute clusterRevision default = 1;
+
+ handle command JoinGroup;
+ handle command LeaveGroup;
+ handle command UpdateGroupKey;
+ handle command ConfigureAuxiliaryACL;
+ handle command GroupcastTesting;
+ }
}
endpoint 1 {
device type ma_powersource = 17, version 1;
diff --git a/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap b/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap
index 917e9bb37ea..15a5e9bc079 100644
--- a/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap
+++ b/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 4,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1755,6 +1755,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2817,6 +2833,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2956,6 +2988,235 @@
"reportableChange": 0
}
]
+ },
+ {
+ "name": "Groupcast",
+ "code": 101,
+ "mfgCode": null,
+ "define": "GROUPCAST_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "JoinGroup",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "LeaveGroup",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "LeaveGroupResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "UpdateGroupKey",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ConfigureAuxiliaryACL",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GroupcastTesting",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "Membership",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxMembershipCount",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxMcastAddrCount",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "UsedMcastAddrCount",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FabricUnderTest",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "fabric_idx",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "GroupcastTesting",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
}
]
},
diff --git a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter
index 4f7bd7a30da..0e089efcdac 100644
--- a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter
+++ b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter
@@ -1345,7 +1345,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1913,7 +1912,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1922,6 +1926,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1946,12 +1951,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1978,13 +1990,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2123,7 +2135,7 @@ cluster IcdManagement = 70 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_powersource = 17, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2238,6 +2250,7 @@ endpoint 0 {
callback attribute rebootCount;
callback attribute upTime;
callback attribute testEventTriggersEnabled;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2340,6 +2353,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap
index 37c51cf3a93..8d41bbba7d8 100644
--- a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap
+++ b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.zap
@@ -62,7 +62,7 @@
],
"deviceVersions": [
1,
- 3
+ 5
],
"deviceIdentifiers": [
17,
@@ -1606,6 +1606,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2906,6 +2922,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/lock-app/cc32xx/main/AppTask.cpp b/examples/lock-app/cc32xx/main/AppTask.cpp
index 9abe7cc5bc7..80a6fbf4da0 100644
--- a/examples/lock-app/cc32xx/main/AppTask.cpp
+++ b/examples/lock-app/cc32xx/main/AppTask.cpp
@@ -148,14 +148,8 @@ int AppTask::Init()
;
}
- // Init ZCL Data Model and start server
- PLAT_LOG("Initialize Server");
- static chip::CommonCaseDeviceServerInitParams initParams;
- (void) initParams.InitializeStaticResourcesBeforeServerInit();
- initParams.dataModelProvider = app::CodegenDataModelProviderInstance(initParams.persistentStorageDelegate);
- TEMPORARY_RETURN_IGNORED chip::Server::GetInstance().Init(initParams);
-
- // Initialize device attestation config
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
PLAT_LOG("Initialize device attestation config");
#ifdef CC32XX_ATTESTATION_CREDENTIALS
SetDeviceAttestationCredentialsProvider(CC32XX::GetCC32XXDacProvider());
@@ -164,6 +158,13 @@ int AppTask::Init()
SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
#endif
+ // Init ZCL Data Model and start server
+ PLAT_LOG("Initialize Server");
+ static chip::CommonCaseDeviceServerInitParams initParams;
+ (void) initParams.InitializeStaticResourcesBeforeServerInit();
+ initParams.dataModelProvider = app::CodegenDataModelProviderInstance(initParams.persistentStorageDelegate);
+ TEMPORARY_RETURN_IGNORED chip::Server::GetInstance().Init(initParams);
+
// Initialize BoltLock module
PLAT_LOG("Initialize BoltLock");
BoltLockMgr().Init();
diff --git a/examples/lock-app/genio/src/AppTask.cpp b/examples/lock-app/genio/src/AppTask.cpp
index 91df6a443e7..b97291d3f91 100644
--- a/examples/lock-app/genio/src/AppTask.cpp
+++ b/examples/lock-app/genio/src/AppTask.cpp
@@ -135,15 +135,16 @@ CHIP_ERROR AppTask::Init()
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
sWiFiNetworkCommissioningInstance.Init();
#endif
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
+ SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+
// Init ZCL Data Model and start server
static chip::CommonCaseDeviceServerInitParams initParams;
(void) initParams.InitializeStaticResourcesBeforeServerInit();
initParams.dataModelProvider = app::CodegenDataModelProviderInstance(initParams.persistentStorageDelegate);
chip::Server::GetInstance().Init(initParams);
- // Initialize device attestation config
- SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
-
// Create FreeRTOS sw timer for Function Selection.
sFunctionTimer = xTimerCreate("FnTmr", // Just a text name, not used by the RTOS kernel
1, // == default timer period (mS)
diff --git a/examples/lock-app/infineon/psoc6/src/AppTask.cpp b/examples/lock-app/infineon/psoc6/src/AppTask.cpp
index d1c3d5b4152..8ad5cdc0f56 100644
--- a/examples/lock-app/infineon/psoc6/src/AppTask.cpp
+++ b/examples/lock-app/infineon/psoc6/src/AppTask.cpp
@@ -153,6 +153,14 @@ static Identify gIdentify1 = {
static void InitServer(intptr_t context)
{
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
+#if ENABLE_DEVICE_ATTESTATION
+ SetDeviceAttestationCredentialsProvider(Examples::GetExampleTrustMDACProvider());
+#else
+ SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+#endif
+
// Init ZCL Data Model
static chip::CommonCaseDeviceServerInitParams initParams;
(void) initParams.InitializeStaticResourcesBeforeServerInit();
@@ -162,13 +170,6 @@ static void InitServer(intptr_t context)
gExampleDeviceInfoProvider.SetStorageDelegate(&Server::GetInstance().GetPersistentStorage());
chip::DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider);
- // Initialize device attestation config
-#if ENABLE_DEVICE_ATTESTATION
- SetDeviceAttestationCredentialsProvider(Examples::GetExampleTrustMDACProvider());
-#else
- SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
-#endif
-
#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
GetAppTask().InitOTARequestor();
#endif
diff --git a/examples/lock-app/lock-common/lock-app.matter b/examples/lock-app/lock-common/lock-app.matter
index ef40b17f2e8..528bbdb78cf 100644
--- a/examples/lock-app/lock-common/lock-app.matter
+++ b/examples/lock-app/lock-common/lock-app.matter
@@ -1468,7 +1468,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2072,7 +2071,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2081,6 +2085,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2105,12 +2110,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2137,13 +2149,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2913,7 +2925,7 @@ cluster DoorLock = 257 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 4;
+ device type ma_rootdevice = 22, version 5;
device type ma_powersource = 17, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -3063,6 +3075,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3237,6 +3250,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/lock-app/lock-common/lock-app.zap b/examples/lock-app/lock-common/lock-app.zap
index 113d2774c5e..76c02803b30 100644
--- a/examples/lock-app/lock-common/lock-app.zap
+++ b/examples/lock-app/lock-common/lock-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 4,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1931,6 +1931,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4284,6 +4300,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/lock-app/nxp/zap/lock-app.matter b/examples/lock-app/nxp/zap/lock-app.matter
index 40254728fd2..5aadd232296 100644
--- a/examples/lock-app/nxp/zap/lock-app.matter
+++ b/examples/lock-app/nxp/zap/lock-app.matter
@@ -1226,7 +1226,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1713,7 +1712,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1722,6 +1726,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1746,12 +1751,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1778,13 +1790,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2537,7 +2549,7 @@ cluster DoorLock = 257 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
binding cluster OtaSoftwareUpdateProvider;
@@ -2679,6 +2691,7 @@ endpoint 0 {
callback attribute rebootCount;
callback attribute upTime;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2814,6 +2827,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/lock-app/nxp/zap/lock-app.zap b/examples/lock-app/nxp/zap/lock-app.zap
index d4bd873cead..c0c70ba311f 100644
--- a/examples/lock-app/nxp/zap/lock-app.zap
+++ b/examples/lock-app/nxp/zap/lock-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1873,6 +1873,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3726,6 +3742,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/lock-app/qpg/zap/lock.matter b/examples/lock-app/qpg/zap/lock.matter
index 149e82fad96..54e940674c3 100644
--- a/examples/lock-app/qpg/zap/lock.matter
+++ b/examples/lock-app/qpg/zap/lock.matter
@@ -1544,7 +1544,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2031,7 +2030,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2040,6 +2044,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2064,12 +2069,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2096,13 +2108,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2872,7 +2884,7 @@ cluster DoorLock = 257 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 1;
+ device type ma_rootdevice = 22, version 5;
device type ma_powersource = 17, version 1;
device type ma_otarequestor = 18, version 3;
@@ -3029,6 +3041,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3170,6 +3183,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/lock-app/qpg/zap/lock.zap b/examples/lock-app/qpg/zap/lock.zap
index 7d15b64a360..e8790490b12 100644
--- a/examples/lock-app/qpg/zap/lock.zap
+++ b/examples/lock-app/qpg/zap/lock.zap
@@ -70,7 +70,7 @@
"deviceVersions": [
3,
1,
- 1
+ 5
],
"deviceIdentifiers": [
18,
@@ -2051,6 +2051,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4013,6 +4029,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/lock-app/realtek/data_model/lock-app.matter b/examples/lock-app/realtek/data_model/lock-app.matter
index d5e64a0a0dd..a71e4642e12 100644
--- a/examples/lock-app/realtek/data_model/lock-app.matter
+++ b/examples/lock-app/realtek/data_model/lock-app.matter
@@ -1164,7 +1164,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1651,7 +1650,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1660,6 +1664,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1684,12 +1689,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1716,13 +1728,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2510,7 +2522,7 @@ cluster DoorLock = 257 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
device type ma_otarequestor = 18, version 1;
binding cluster OtaSoftwareUpdateProvider;
@@ -2643,6 +2655,7 @@ endpoint 0 {
callback attribute upTime;
callback attribute totalOperationalHours;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -2778,6 +2791,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/lock-app/realtek/data_model/lock-app.zap b/examples/lock-app/realtek/data_model/lock-app.zap
index 33135b67d49..b7f98964376 100644
--- a/examples/lock-app/realtek/data_model/lock-app.zap
+++ b/examples/lock-app/realtek/data_model/lock-app.zap
@@ -61,7 +61,7 @@
}
],
"deviceVersions": [
- 3,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1756,6 +1756,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -3630,6 +3646,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/lock-app/silabs/data_model/lock-app.matter b/examples/lock-app/silabs/data_model/lock-app.matter
index 1b06461a5e5..86ec198d3ba 100644
--- a/examples/lock-app/silabs/data_model/lock-app.matter
+++ b/examples/lock-app/silabs/data_model/lock-app.matter
@@ -1468,7 +1468,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -2072,7 +2071,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -2081,6 +2085,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -2105,12 +2110,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -2137,13 +2149,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2913,7 +2925,7 @@ cluster DoorLock = 257 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 4;
+ device type ma_rootdevice = 22, version 5;
device type ma_powersource = 17, version 1;
device type ma_otarequestor = 18, version 1;
@@ -3067,6 +3079,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -3241,6 +3254,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
diff --git a/examples/lock-app/silabs/data_model/lock-app.zap b/examples/lock-app/silabs/data_model/lock-app.zap
index ff859c751b8..719ce182633 100644
--- a/examples/lock-app/silabs/data_model/lock-app.zap
+++ b/examples/lock-app/silabs/data_model/lock-app.zap
@@ -69,7 +69,7 @@
],
"deviceVersions": [
1,
- 4,
+ 5,
1
],
"deviceIdentifiers": [
@@ -1997,6 +1997,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -4350,6 +4366,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
diff --git a/examples/log-source-app/linux/main.cpp b/examples/log-source-app/linux/main.cpp
index 65cb8b336fb..4c2134393d3 100644
--- a/examples/log-source-app/linux/main.cpp
+++ b/examples/log-source-app/linux/main.cpp
@@ -104,14 +104,15 @@ int main(int argc, char * argv[])
}
chip::DeviceLayer::ConfigurationMgr().LogDeviceConfig();
+ // Initialize device attestation config before server init so Operational
+ // Credentials sees the configured provider during cluster construction.
+ SetDeviceAttestationCredentialsProvider(chip::Credentials::Examples::GetExampleDACProvider());
+
static chip::CommonCaseDeviceServerInitParams initParams;
(void) initParams.InitializeStaticResourcesBeforeServerInit();
initParams.dataModelProvider = chip::app::CodegenDataModelProviderInstance(initParams.persistentStorageDelegate);
chip::Server::GetInstance().Init(initParams);
- // Initialize device attestation config
- SetDeviceAttestationCredentialsProvider(chip::Credentials::Examples::GetExampleDACProvider());
-
CommandHandlerInterfaceRegistry::Instance().RegisterCommandHandler(&GetLogProvider());
chip::DeviceLayer::PlatformMgr().RunEventLoop();
diff --git a/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.matter b/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.matter
index de329a381b4..0225bba7489 100644
--- a/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.matter
+++ b/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.matter
@@ -1012,7 +1012,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1372,7 +1371,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1381,6 +1385,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1405,12 +1410,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1437,13 +1449,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -1595,7 +1607,7 @@ cluster OperationalState = 96 {
}
endpoint 0 {
- device type ma_rootdevice = 22, version 3;
+ device type ma_rootdevice = 22, version 5;
server cluster Descriptor {
@@ -1707,6 +1719,7 @@ endpoint 0 {
callback attribute totalOperationalHours;
callback attribute bootReason;
callback attribute testEventTriggersEnabled default = false;
+ callback attribute deviceLoadStatus;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -1784,6 +1797,7 @@ endpoint 0 {
callback attribute groupTable;
callback attribute maxGroupsPerFabric;
callback attribute maxGroupKeysPerFabric;
+ callback attribute groupcastAdoption;
callback attribute featureMap;
callback attribute clusterRevision;
diff --git a/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.zap b/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.zap
index 94d1f113c1c..3915c928eb2 100644
--- a/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.zap
+++ b/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.zap
@@ -54,7 +54,7 @@
}
],
"deviceVersions": [
- 3
+ 5
],
"deviceIdentifiers": [
22
@@ -1487,6 +1487,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "DeviceLoadStatus",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "DeviceLoadStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -2468,6 +2484,22 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GroupcastAdoption",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
diff --git a/examples/multi-sensor-app/silabs/data_model/multi-sensor-thread-app.matter b/examples/multi-sensor-app/silabs/data_model/multi-sensor-thread-app.matter
index 07194f64817..9300cb229ac 100644
--- a/examples/multi-sensor-app/silabs/data_model/multi-sensor-thread-app.matter
+++ b/examples/multi-sensor-app/silabs/data_model/multi-sensor-thread-app.matter
@@ -1223,7 +1223,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1710,7 +1709,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1719,6 +1723,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1743,12 +1748,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1775,13 +1787,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2411,15 +2423,15 @@ endpoint 2 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = -1000;
ram attribute maxMeasuredValue default = 8500;
ram attribute tolerance default = 40;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
endpoint 3 {
diff --git a/examples/multi-sensor-app/silabs/data_model/multi-sensor-wifi-app.matter b/examples/multi-sensor-app/silabs/data_model/multi-sensor-wifi-app.matter
index 2ac7f5fe858..885c65bede5 100644
--- a/examples/multi-sensor-app/silabs/data_model/multi-sensor-wifi-app.matter
+++ b/examples/multi-sensor-app/silabs/data_model/multi-sensor-wifi-app.matter
@@ -1223,7 +1223,6 @@ cluster GeneralDiagnostics = 51 {
bitmap Feature : bitmap32 {
kDataModelTest = 0x1;
- kDeviceLoad = 0x2;
}
struct DeviceLoadStruct {
@@ -1619,7 +1618,12 @@ cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
cluster GroupKeyManagement = 63 {
- revision 2;
+ revision 3;
+
+ enum GroupKeyMulticastPolicyEnum : enum8 {
+ kPerGroupID = 0;
+ kAllNodes = 1;
+ }
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
@@ -1628,6 +1632,7 @@ cluster GroupKeyManagement = 63 {
bitmap Feature : bitmap32 {
kCacheAndSync = 0x1;
+ kGroupcast = 0x2;
}
fabric_scoped struct GroupInfoMapStruct {
@@ -1652,12 +1657,19 @@ cluster GroupKeyManagement = 63 {
nullable epoch_us epochStartTime1 = 5;
nullable octet_string<16> epochKey2 = 6;
nullable epoch_us epochStartTime2 = 7;
+ GroupKeyMulticastPolicyEnum groupKeyMulticastPolicy = 8;
+ }
+
+ fabric_scoped struct GroupcastAdoptionStruct {
+ boolean groupcastAdopted = 0;
+ fabric_idx fabricIndex = 254;
}
attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
readonly attribute GroupInfoMapStruct groupTable[] = 1;
readonly attribute int16u maxGroupsPerFabric = 2;
readonly attribute int16u maxGroupKeysPerFabric = 3;
+ attribute access(read: administer, write: administer) optional GroupcastAdoptionStruct groupcastAdoption[] = 4;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
@@ -1684,13 +1696,13 @@ cluster GroupKeyManagement = 63 {
int16u groupKeySetIDs[] = 0;
}
- /** Write a new set of keys for the given key set id. */
+ /** This command is used by Administrators to set the state of a given Group Key Set, including atomically updating the state of all epoch keys. */
fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
- /** Read the keys for a given key set id. */
+ /** This command is used by Administrators to read the state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
- /** Revoke a Root Key from a Group */
+ /** This command is used by Administrators to remove all state of a given Group Key Set. */
fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
- /** Return the list of Group Key Sets associated with the accessing fabric */
+ /** This command is used by Administrators to query a list of all Group Key Sets associated with the accessing fabric. */
fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
}
@@ -2251,15 +2263,15 @@ endpoint 2 {
}
server cluster TemperatureMeasurement {
- ram attribute measuredValue;
+ callback attribute measuredValue;
ram attribute minMeasuredValue default = -1000;
ram attribute maxMeasuredValue default = 8500;
ram attribute tolerance default = 40;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 4;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
}
}
endpoint 3 {
diff --git a/examples/multi-sensor-app/silabs/src/SensorManager.cpp b/examples/multi-sensor-app/silabs/src/SensorManager.cpp
index e406cbc638f..7d292af4151 100644
--- a/examples/multi-sensor-app/silabs/src/SensorManager.cpp
+++ b/examples/multi-sensor-app/silabs/src/SensorManager.cpp
@@ -31,6 +31,7 @@
#include
#include
#include
+#include
#include
#include
@@ -101,7 +102,10 @@ void SensorActionTriggered(chip::System::Layer * aLayer, void * aAppState)
RelativeHumidityMeasurement::Attributes::MaxMeasuredValue::Get(kHumiditySensorEndpoint, maxMeasuredHumidityValue);
DataModel::Nullable currentTempValue;
- TemperatureMeasurement::Attributes::MeasuredValue::Get(kTemperatureSensorEndpoint, currentTempValue);
+ if (TemperatureMeasurementCluster * cluster = TemperatureMeasurement::FindClusterOnEndpoint(kTemperatureSensorEndpoint))
+ {
+ currentTempValue = cluster->GetMeasuredValue();
+ }
if (currentTempValue.IsNull())
{
// This configures the initial value for the simulated sensor values
@@ -139,7 +143,11 @@ void SensorActionTriggered(chip::System::Layer * aLayer, void * aAppState)
mLastReportedTemperatureValue = temperature;
reportState = MarkAttributeDirty::kIfChanged;
}
- TemperatureMeasurement::Attributes::MeasuredValue::Set(kTemperatureSensorEndpoint, temperature, reportState);
+ {
+ DataModel::Nullable tempVal;
+ tempVal.SetNonNull(temperature);
+ VerifyOrReturn(TemperatureMeasurement::SetMeasuredValue(kTemperatureSensorEndpoint, tempVal) == CHIP_NO_ERROR);
+ }
// Check if humidity change requires a report - Checks if delta with last reported value is greater
// than kAttributeChangeReportThreshold. If it is, the attribute is marked as dirty.
@@ -192,8 +200,13 @@ void ButtonActionTriggered(AppEvent * aEvent)
Status GetMeasuredTemperature(chip::app::DataModel::Nullable & value)
{
- Status status = TemperatureMeasurement::Attributes::MeasuredValue::Get(kTemperatureSensorEndpoint, value);
- return status;
+ TemperatureMeasurementCluster * cluster = TemperatureMeasurement::FindClusterOnEndpoint(kTemperatureSensorEndpoint);
+ if (cluster == nullptr)
+ {
+ return Status::UnsupportedEndpoint;
+ }
+ value = cluster->GetMeasuredValue();
+ return Status::Success;
}
Status GetMaxMeasuredTemperature(chip::app::DataModel::Nullable & value)
diff --git a/examples/network-manager-app/linux/main.cpp b/examples/network-manager-app/linux/main.cpp
index 5aae41cd0b0..4568922a348 100644
--- a/examples/network-manager-app/linux/main.cpp
+++ b/examples/network-manager-app/linux/main.cpp
@@ -18,7 +18,7 @@
#include