diff --git a/.actrc b/.actrc
new file mode 100644
index 00000000000000..44367d36ab8b94
--- /dev/null
+++ b/.actrc
@@ -0,0 +1,27 @@
+# This file contains settings for local github action runner act:
+# https://github.com/nektos/act
+#
+# It is recommended to run specific jobs that you need, all jobs except those
+# running on should darwin work.
+# e.g. act -j build_linux
+#
+# It is recommended to set up a separate bridge network
+# and possibly define it in ~/.actrc like so:
+# --network=bridge
+# https://docs.docker.com/network/drivers/bridge/
+
+# Remove containers after finishing a job, comment out for debugging
+--rm
+
+# Reuse the checkout from host, otherwise act will do docker cp that makes
+# running jobs a lot longer even on SSD. Clean up your .environment before
+# running it.
+--bind
+
+# Easier to have 1:1 match between triggering jobs and reading logs when they
+# use the same name
+--log-prefix-job-id
+
+# Default runner image does not include enough.
+# https://github.com/nektos/act#default-runners-are-intentionally-incomplete
+-P ubuntu-latest=catthehacker/ubuntu:full-latest
diff --git a/.github/actions/checkout-submodules-and-bootstrap/action.yaml b/.github/actions/checkout-submodules-and-bootstrap/action.yaml
index 892cf93716cb8d..8ddaec14e7bc47 100644
--- a/.github/actions/checkout-submodules-and-bootstrap/action.yaml
+++ b/.github/actions/checkout-submodules-and-bootstrap/action.yaml
@@ -17,6 +17,8 @@ runs:
steps:
- name: Dump disk info
uses: ./.github/actions/dump-disk-info
+ - name: Set git safe directory for local act runs
+ uses: ./.github/actions/git-safe-directory
- name: Checkout submodules
uses: ./.github/actions/checkout-submodules
with:
diff --git a/.github/actions/git-safe-directory/action.yaml b/.github/actions/git-safe-directory/action.yaml
new file mode 100644
index 00000000000000..1308c4ea1bf524
--- /dev/null
+++ b/.github/actions/git-safe-directory/action.yaml
@@ -0,0 +1,9 @@
+name: Git safe directory
+description: For running act with checkout owned by non-root user
+runs:
+ using: "composite"
+ steps:
+ - name: Set git safe.directory to "*"
+ if: ${{ env.ACT }}
+ shell: bash
+ run: git config --system --add safe.directory '*'
\ No newline at end of file
diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index f9e4a7a44840c5..c6fa9bcf943bef 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -105,7 +105,7 @@ labelPRBasedOnFilePath:
- src/darwin/*
efr32:
- - src/platform/efr32/*
+ - src/platform/silabs/*
esp32:
- src/platform/ESP32/*
diff --git a/.github/workflows/bloat_check.yaml b/.github/workflows/bloat_check.yaml
index 2a1dee179aa3e0..7418a53ef5fc67 100644
--- a/.github/workflows/bloat_check.yaml
+++ b/.github/workflows/bloat_check.yaml
@@ -33,7 +33,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
steps:
- name: Checkout
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 588ded31e8cbf9..ac717ef1e7b245 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -40,7 +40,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0
@@ -135,7 +135,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0
@@ -283,7 +283,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
options: --sysctl "net.ipv6.conf.all.disable_ipv6=0
@@ -343,7 +343,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
options: --sysctl "net.ipv6.conf.all.disable_ipv6=0
@@ -451,7 +451,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0
diff --git a/.github/workflows/chef.yaml b/.github/workflows/chef.yaml
index 2b5b34478b677f..e68021d143fa59 100644
--- a/.github/workflows/chef.yaml
+++ b/.github/workflows/chef.yaml
@@ -33,7 +33,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
options: --user root
steps:
@@ -54,7 +54,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-esp32:22
+ image: ghcr.io/project-chip/chip-build-esp32:26
options: --user root
steps:
@@ -75,7 +75,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-nrf-platform:22
+ image: ghcr.io/project-chip/chip-build-nrf-platform:26
options: --user root
steps:
@@ -96,7 +96,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-telink:22
+ image: ghcr.io/project-chip/chip-build-telink:26
options: --user root
steps:
@@ -106,6 +106,9 @@ jobs:
uses: ./.github/actions/checkout-submodules-and-bootstrap
with:
platform: telink
+ # - name: Update Zephyr to specific revision (for developers purpose)
+ # shell: bash
+ # run: scripts/run_in_build_env.sh "python3 scripts/tools/telink/update_zephyr.py e6a32f41ccec55c2233631406842b71ff270089d"
- name: CI Examples Telink
shell: bash
run: |
diff --git a/.github/workflows/cirque.yaml b/.github/workflows/cirque.yaml
index c19e1dd911755c..a8d18c5dec9d85 100644
--- a/.github/workflows/cirque.yaml
+++ b/.github/workflows/cirque.yaml
@@ -40,7 +40,7 @@ jobs:
# need to run with privilege, which isn't supported by job.XXX.contaner
# https://github.com/actions/container-action/issues/2
# container:
- # image: ghcr.io/project-chip/chip-build-cirque:22
+ # image: ghcr.io/project-chip/chip-build-cirque:26
# volumes:
# - "/tmp:/tmp"
# - "/dev/pts:/dev/pts"
diff --git a/.github/workflows/darwin-tests.yaml b/.github/workflows/darwin-tests.yaml
index 21f2a227be1a72..74d2f7e32deb0f 100644
--- a/.github/workflows/darwin-tests.yaml
+++ b/.github/workflows/darwin-tests.yaml
@@ -98,6 +98,7 @@ jobs:
--target darwin-x64-ota-requestor-${BUILD_VARIANT} \
--target darwin-x64-tv-app-${BUILD_VARIANT} \
--target darwin-x64-bridge-${BUILD_VARIANT} \
+ --target darwin-x64-lit-icd-${BUILD_VARIANT} \
build \
--copy-artifacts-to objdir-clone \
"
@@ -147,8 +148,8 @@ jobs:
uses: actions/upload-artifact@v3
if: ${{ failure() && !env.ACT }}
with:
- name: framework-build-log-darwin-${{BUILD_VARIANT_FRAMEWORK_TOOL}}
- path: out/darwin-x64-darwin-framework-tool-${{BUILD_VARIANT_FRAMEWORK_TOOL}}/darwin_framework_build.log
+ name: framework-build-log-darwin-${BUILD_VARIANT_FRAMEWORK_TOOL}
+ path: out/darwin-x64-darwin-framework-tool-${BUILD_VARIANT_FRAMEWORK_TOOL}/darwin_framework_build.log
- name: Uploading objdir for debugging
uses: actions/upload-artifact@v3
if: ${{ failure() && !env.ACT }}
diff --git a/.github/workflows/darwin.yaml b/.github/workflows/darwin.yaml
index 8b7e44ef82ee00..50ab4e0142eed5 100644
--- a/.github/workflows/darwin.yaml
+++ b/.github/workflows/darwin.yaml
@@ -111,10 +111,8 @@ jobs:
# -enableUndefinedBehaviorSanitizer instruments the code in Matter.framework,
# but to instrument the code in the underlying libCHIP we need to pass CHIP_IS_UBSAN=YES
TEST_RUNNER_ASAN_OPTIONS=__CURRENT_VALUE__:detect_stack_use_after_return=1 xcodebuild test -target "Matter" -scheme "Matter Framework Tests" -sdk macosx -enableAddressSanitizer YES -enableUndefinedBehaviorSanitizer YES OTHER_CFLAGS='${inherited} -Werror -Wconversion' CHIP_IS_UBSAN=YES CHIP_IS_BLE=NO GCC_PREPROCESSOR_DEFINITIONS='${inherited} MTR_NO_AVAILABILITY=1'> >(tee /tmp/darwin/framework-tests/darwin-tests-asan.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-asan-err.log >&2)
- # And the same thing, but with MTR_PER_CONTROLLER_STORAGE_ENABLED turned on.
- TEST_RUNNER_ASAN_OPTIONS=__CURRENT_VALUE__:detect_stack_use_after_return=1 xcodebuild test -target "Matter" -scheme "Matter Framework Tests" -sdk macosx -enableAddressSanitizer YES -enableUndefinedBehaviorSanitizer YES OTHER_CFLAGS='${inherited} -Werror -Wconversion' CHIP_IS_UBSAN=YES CHIP_IS_BLE=NO GCC_PREPROCESSOR_DEFINITIONS='${inherited} MTR_NO_AVAILABILITY=1 MTR_PER_CONTROLLER_STORAGE_ENABLED=1' > >(tee /tmp/darwin/framework-tests/darwin-tests-asan-controller-storage.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-asan-controller-storage-err.log >&2)
- # And the same thing, but with MTR_ENABLE_PROVISIONAL also turned on.
- TEST_RUNNER_ASAN_OPTIONS=__CURRENT_VALUE__:detect_stack_use_after_return=1 xcodebuild test -target "Matter" -scheme "Matter Framework Tests" -sdk macosx -enableAddressSanitizer YES -enableUndefinedBehaviorSanitizer YES OTHER_CFLAGS='${inherited} -Werror -Wconversion' CHIP_IS_UBSAN=YES CHIP_IS_BLE=NO GCC_PREPROCESSOR_DEFINITIONS='${inherited} MTR_NO_AVAILABILITY=1 MTR_PER_CONTROLLER_STORAGE_ENABLED=1 MTR_ENABLE_PROVISIONAL=1' > >(tee /tmp/darwin/framework-tests/darwin-tests-asan-provisional.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-asan-provisional-err.log >&2)
+ # And the same thing, but with MTR_PER_CONTROLLER_STORAGE_ENABLED turned off, so we test that it does not break for now.
+ TEST_RUNNER_ASAN_OPTIONS=__CURRENT_VALUE__:detect_stack_use_after_return=1 xcodebuild test -target "Matter" -scheme "Matter Framework Tests" -sdk macosx -enableAddressSanitizer YES -enableUndefinedBehaviorSanitizer YES OTHER_CFLAGS='${inherited} -Werror -Wconversion' CHIP_IS_UBSAN=YES CHIP_IS_BLE=NO GCC_PREPROCESSOR_DEFINITIONS='${inherited} MTR_NO_AVAILABILITY=1 MTR_PER_CONTROLLER_STORAGE_ENABLED=0' > >(tee /tmp/darwin/framework-tests/darwin-tests-asan-controller-storage.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-asan-controller-storage-err.log >&2)
# And the same thing, but with MTR_NO_AVAILABILITY not turned on. This requires -Wno-unguarded-availability-new to avoid availability errors.
TEST_RUNNER_ASAN_OPTIONS=__CURRENT_VALUE__:detect_stack_use_after_return=1 xcodebuild test -target "Matter" -scheme "Matter Framework Tests" -sdk macosx -enableAddressSanitizer YES -enableUndefinedBehaviorSanitizer YES OTHER_CFLAGS='${inherited} -Werror -Wconversion -Wno-unguarded-availability-new' CHIP_IS_UBSAN=YES CHIP_IS_BLE=NO GCC_PREPROCESSOR_DEFINITIONS='${inherited}' > >(tee /tmp/darwin/framework-tests/darwin-tests-asan-with-availability-annotations.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-asan-with-availability-annotations-err.log >&2)
# -enableThreadSanitizer instruments the code in Matter.framework,
diff --git a/.github/workflows/doxygen.yaml b/.github/workflows/doxygen.yaml
index 4e4e2abf319891..e89d26c1c335d4 100644
--- a/.github/workflows/doxygen.yaml
+++ b/.github/workflows/doxygen.yaml
@@ -81,7 +81,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: ghcr.io/project-chip/chip-build-doxygen:22
+ image: ghcr.io/project-chip/chip-build-doxygen:26
if: github.actor != 'restyled-io[bot]'
diff --git a/.github/workflows/examples-ameba.yaml b/.github/workflows/examples-ameba.yaml
index 42afb3ee37b1e7..ac1e6d01fde353 100644
--- a/.github/workflows/examples-ameba.yaml
+++ b/.github/workflows/examples-ameba.yaml
@@ -36,7 +36,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-ameba:22
+ image: ghcr.io/project-chip/chip-build-ameba:26
options: --user root
steps:
diff --git a/.github/workflows/examples-asr.yaml b/.github/workflows/examples-asr.yaml
index 7bb7e790595f10..918a5e0e67bd49 100644
--- a/.github/workflows/examples-asr.yaml
+++ b/.github/workflows/examples-asr.yaml
@@ -34,7 +34,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-asr:22
+ image: ghcr.io/project-chip/chip-build-asr:26
options: --user root
steps:
diff --git a/.github/workflows/examples-bouffalolab.yaml b/.github/workflows/examples-bouffalolab.yaml
index 53a43c267251c6..0efaf4831a91b0 100644
--- a/.github/workflows/examples-bouffalolab.yaml
+++ b/.github/workflows/examples-bouffalolab.yaml
@@ -35,7 +35,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-bouffalolab:22
+ image: ghcr.io/project-chip/chip-build-bouffalolab:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
steps:
diff --git a/.github/workflows/examples-cc13x2x7_26x2x7.yaml b/.github/workflows/examples-cc13x2x7_26x2x7.yaml
index 4229f9800f2df8..c2ad4bfef8b2a8 100644
--- a/.github/workflows/examples-cc13x2x7_26x2x7.yaml
+++ b/.github/workflows/examples-cc13x2x7_26x2x7.yaml
@@ -36,7 +36,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-ti:22
+ image: ghcr.io/project-chip/chip-build-ti:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
steps:
diff --git a/.github/workflows/examples-cc32xx.yaml b/.github/workflows/examples-cc32xx.yaml
index 5a77c801447b6e..a3a17188ae677d 100644
--- a/.github/workflows/examples-cc32xx.yaml
+++ b/.github/workflows/examples-cc32xx.yaml
@@ -37,7 +37,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-ti:22
+ image: ghcr.io/project-chip/chip-build-ti:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
steps:
diff --git a/.github/workflows/examples-efr32.yaml b/.github/workflows/examples-efr32.yaml
index 899ac288dc1c70..83c66dcf6e7bfe 100644
--- a/.github/workflows/examples-efr32.yaml
+++ b/.github/workflows/examples-efr32.yaml
@@ -38,7 +38,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-efr32:22
+ image: ghcr.io/project-chip/chip-build-efr32:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
steps:
diff --git a/.github/workflows/examples-esp32.yaml b/.github/workflows/examples-esp32.yaml
index f1b8ff3b6f20a7..48ffb63425f611 100644
--- a/.github/workflows/examples-esp32.yaml
+++ b/.github/workflows/examples-esp32.yaml
@@ -34,7 +34,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-esp32:22
+ image: ghcr.io/project-chip/chip-build-esp32:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
@@ -130,7 +130,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-esp32:22
+ image: ghcr.io/project-chip/chip-build-esp32:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
diff --git a/.github/workflows/examples-infineon.yaml b/.github/workflows/examples-infineon.yaml
index 7fc006fe8f6698..4ea2a28f61cc6f 100644
--- a/.github/workflows/examples-infineon.yaml
+++ b/.github/workflows/examples-infineon.yaml
@@ -35,7 +35,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-infineon:22
+ image: ghcr.io/project-chip/chip-build-infineon:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
steps:
diff --git a/.github/workflows/examples-k32w.yaml b/.github/workflows/examples-k32w.yaml
index 541106d618e2d5..5d811a986c757a 100644
--- a/.github/workflows/examples-k32w.yaml
+++ b/.github/workflows/examples-k32w.yaml
@@ -37,7 +37,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-k32w:22
+ image: ghcr.io/project-chip/chip-build-k32w:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
steps:
diff --git a/.github/workflows/examples-linux-arm.yaml b/.github/workflows/examples-linux-arm.yaml
index 4645b4e897d3ff..c49b8d84d75fdc 100644
--- a/.github/workflows/examples-linux-arm.yaml
+++ b/.github/workflows/examples-linux-arm.yaml
@@ -34,7 +34,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-crosscompile:22
+ image: ghcr.io/project-chip/chip-build-crosscompile:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
@@ -64,6 +64,7 @@ jobs:
--target linux-arm64-minmdns-clang \
--target linux-arm64-light-rpc-ipv6only-clang \
--target linux-arm64-thermostat-no-ble-clang \
+ --target linux-arm64-lit-icd-no-ble-clang \
build \
"
- name: Bloat report - chip-tool
diff --git a/.github/workflows/examples-linux-imx.yaml b/.github/workflows/examples-linux-imx.yaml
index e34148a8ff0a91..f5aaa654af9295 100644
--- a/.github/workflows/examples-linux-imx.yaml
+++ b/.github/workflows/examples-linux-imx.yaml
@@ -34,7 +34,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-imx:22
+ image: ghcr.io/project-chip/chip-build-imx:26
steps:
- name: Checkout
diff --git a/.github/workflows/examples-linux-standalone.yaml b/.github/workflows/examples-linux-standalone.yaml
index 8661b99d253b5f..4845ce0b235567 100644
--- a/.github/workflows/examples-linux-standalone.yaml
+++ b/.github/workflows/examples-linux-standalone.yaml
@@ -34,7 +34,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
diff --git a/.github/workflows/examples-mbed.yaml b/.github/workflows/examples-mbed.yaml
index a73d825ee444e8..7ecdfdb6f8a41f 100644
--- a/.github/workflows/examples-mbed.yaml
+++ b/.github/workflows/examples-mbed.yaml
@@ -40,7 +40,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-mbed-os:22
+ image: ghcr.io/project-chip/chip-build-mbed-os:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
diff --git a/.github/workflows/examples-mw320.yaml b/.github/workflows/examples-mw320.yaml
index b5658efdcdf687..6f87859071cb8b 100644
--- a/.github/workflows/examples-mw320.yaml
+++ b/.github/workflows/examples-mw320.yaml
@@ -37,7 +37,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
steps:
diff --git a/.github/workflows/examples-nrfconnect.yaml b/.github/workflows/examples-nrfconnect.yaml
index b1cf4cd87279f3..c8495aad304a60 100644
--- a/.github/workflows/examples-nrfconnect.yaml
+++ b/.github/workflows/examples-nrfconnect.yaml
@@ -37,7 +37,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-nrf-platform:22
+ image: ghcr.io/project-chip/chip-build-nrf-platform:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
diff --git a/.github/workflows/examples-openiotsdk.yaml b/.github/workflows/examples-openiotsdk.yaml
index de63249ee89d6a..f468341b0b84b1 100644
--- a/.github/workflows/examples-openiotsdk.yaml
+++ b/.github/workflows/examples-openiotsdk.yaml
@@ -38,7 +38,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-openiotsdk:22
+ image: ghcr.io/project-chip/chip-build-openiotsdk:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
options: --privileged
diff --git a/.github/workflows/examples-qpg.yaml b/.github/workflows/examples-qpg.yaml
index 3590b33a7c6829..027aaa80c18a87 100644
--- a/.github/workflows/examples-qpg.yaml
+++ b/.github/workflows/examples-qpg.yaml
@@ -37,7 +37,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
steps:
diff --git a/.github/workflows/examples-stm32.yaml b/.github/workflows/examples-stm32.yaml
index dce5de01d786d9..6da7ccd697fe06 100644
--- a/.github/workflows/examples-stm32.yaml
+++ b/.github/workflows/examples-stm32.yaml
@@ -38,7 +38,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
steps:
diff --git a/.github/workflows/examples-telink.yaml b/.github/workflows/examples-telink.yaml
index 225ddf16fd190b..e7b760d0cf7e53 100644
--- a/.github/workflows/examples-telink.yaml
+++ b/.github/workflows/examples-telink.yaml
@@ -36,7 +36,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-telink:22
+ image: ghcr.io/project-chip/chip-build-telink:26
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
@@ -54,13 +54,16 @@ jobs:
with:
gh-context: ${{ toJson(github) }}
- - name: Build example Telink (B92) Air Quality Sensor App
+ # - name: Update Zephyr to specific revision (for developers purpose)
+ # run: scripts/run_in_build_env.sh "python3 scripts/tools/telink/update_zephyr.py e6a32f41ccec55c2233631406842b71ff270089d"
+
+ - name: Build example Telink (B92 retention) Air Quality Sensor App
run: |
./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py --target 'telink-tlsr9528a-air-quality-sensor' build"
+ "./scripts/build/build_examples.py --target 'telink-tlsr9528a_retention-air-quality-sensor' build"
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- telink tlsr9528a air-quality-sensor-app \
- out/telink-tlsr9528a-air-quality-sensor/zephyr/zephyr.elf \
+ telink tlsr9528a_retention air-quality-sensor-app \
+ out/telink-tlsr9528a_retention-air-quality-sensor/zephyr/zephyr.elf \
/tmp/bloat_reports/
- name: clean out build output
@@ -102,13 +105,13 @@ jobs:
- name: clean out build output
run: rm -rf ./out
- - name: Build example Telink (B92) Contact Sensor App
+ - name: Build example Telink (B92 retention) Contact Sensor App
run: |
./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py --target 'telink-tlsr9528a-contact-sensor' build"
+ "./scripts/build/build_examples.py --target 'telink-tlsr9528a_retention-contact-sensor' build"
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- telink tlsr9528a contact-sensor-app \
- out/telink-tlsr9528a-contact-sensor/zephyr/zephyr.elf \
+ telink tlsr9528a_retention contact-sensor-app \
+ out/telink-tlsr9528a_retention-contact-sensor/zephyr/zephyr.elf \
/tmp/bloat_reports/
- name: clean out build output
@@ -196,15 +199,6 @@ jobs:
- name: clean out build output
run: rm -rf ./out
- - name: Build example Telink (B91) Resource Monitoring App
- run: |
- ./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py --target 'telink-tlsr9518adk80d-resource-monitoring' build"
- .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- telink tlsr9518adk80d resource-monitoring-app \
- out/telink-tlsr9518adk80d-resource-monitoring/zephyr/zephyr.elf \
- /tmp/bloat_reports/
-
- name: clean out build output
run: rm -rf ./out
@@ -220,25 +214,25 @@ jobs:
- name: clean out build output
run: rm -rf ./out
- - name: Build example Telink (B92) Smoke CO Alarm App
+ - name: Build example Telink (B92 retention) Smoke CO Alarm App
run: |
./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py --target 'telink-tlsr9528a-smoke-co-alarm' build"
+ "./scripts/build/build_examples.py --target 'telink-tlsr9528a_retention-smoke-co-alarm' build"
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- telink tlsr9528a smoke_co_alarm-app \
- out/telink-tlsr9528a-smoke-co-alarm/zephyr/zephyr.elf \
+ telink tlsr9528a_retention smoke_co_alarm-app \
+ out/telink-tlsr9528a_retention-smoke-co-alarm/zephyr/zephyr.elf \
/tmp/bloat_reports/
- name: clean out build output
run: rm -rf ./out
- - name: Build example Telink (B92) Temperature Measurement App
+ - name: Build example Telink (B91 Mars) Temperature Measurement App with OTA
run: |
./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py --target 'telink-tlsr9528a-temperature-measurement' build"
+ "./scripts/build/build_examples.py --target 'telink-tlsr9518adk80d-temperature-measurement-mars-ota' build"
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- telink tlsr9528a temperature-measurement-app \
- out/telink-tlsr9528a-temperature-measurement/zephyr/zephyr.elf \
+ telink tlsr9518adk80d temperature-measurement-app-mars-ota \
+ out/telink-tlsr9518adk80d-temperature-measurement-mars-ota/zephyr/zephyr.elf \
/tmp/bloat_reports/
- name: clean out build output
diff --git a/.github/workflows/examples-tizen.yaml b/.github/workflows/examples-tizen.yaml
index f6ca3bb793dc87..807491dc2e5871 100644
--- a/.github/workflows/examples-tizen.yaml
+++ b/.github/workflows/examples-tizen.yaml
@@ -34,7 +34,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-tizen:22
+ image: ghcr.io/project-chip/chip-build-tizen:26
options: --user root
volumes:
- "/tmp/bloat_reports:/tmp/bloat_reports"
diff --git a/.github/workflows/full-android.yaml b/.github/workflows/full-android.yaml
index a227bdd6e16d08..2cb3cc1d48e7da 100644
--- a/.github/workflows/full-android.yaml
+++ b/.github/workflows/full-android.yaml
@@ -36,7 +36,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-android:22
+ image: ghcr.io/project-chip/chip-build-android:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
diff --git a/.github/workflows/fuzzing-build.yaml b/.github/workflows/fuzzing-build.yaml
index 21ae6619fe0e73..687ff3c9a5e404 100644
--- a/.github/workflows/fuzzing-build.yaml
+++ b/.github/workflows/fuzzing-build.yaml
@@ -33,7 +33,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
diff --git a/.github/workflows/issue-labeler.yaml b/.github/workflows/issue-labeler.yaml
index b1c8e2304469bd..e7819c57f20b84 100644
--- a/.github/workflows/issue-labeler.yaml
+++ b/.github/workflows/issue-labeler.yaml
@@ -11,7 +11,7 @@ jobs:
triage:
runs-on: ubuntu-latest
steps:
- - uses: github/issue-labeler@v3.2 #May not be the latest version
+ - uses: github/issue-labeler@v3.3 #May not be the latest version
with:
configuration-path: .github/issue-labeler.yml
not-before: 2020-01-15T02:54:32Z
diff --git a/.github/workflows/java-tests.yaml b/.github/workflows/java-tests.yaml
index fe27fe9cdd4eb1..9e800ba2e7ef99 100644
--- a/.github/workflows/java-tests.yaml
+++ b/.github/workflows/java-tests.yaml
@@ -40,7 +40,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: ghcr.io/project-chip/chip-build-java:22
+ image: ghcr.io/project-chip/chip-build-java:26
options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0
net.ipv4.conf.all.forwarding=0 net.ipv6.conf.all.forwarding=0"
diff --git a/.github/workflows/kotlin-style.yaml b/.github/workflows/kotlin-style.yaml
index 9cd6717f800943..c3b15250a907ef 100644
--- a/.github/workflows/kotlin-style.yaml
+++ b/.github/workflows/kotlin-style.yaml
@@ -22,7 +22,7 @@ jobs:
uses: actions/checkout@v4
- name: "detekt"
- uses: natiginfo/action-detekt-all@1.23.1
+ uses: natiginfo/action-detekt-all@1.23.4
# Detekt seems not to like circular symlinks, so we set up
# explicit paths below
with:
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index b70ac09cb8ad5b..f7f691c7568250 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -29,7 +29,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
steps:
- name: Checkout
@@ -51,9 +51,6 @@ jobs:
# https://github.com/project-chip/connectedhomeip/issues/19176
# https://github.com/project-chip/connectedhomeip/issues/19175
# https://github.com/project-chip/connectedhomeip/issues/19173
- # https://github.com/project-chip/connectedhomeip/issues/19169
- # https://github.com/project-chip/connectedhomeip/issues/22640
- if [ "$idl_file" = './examples/all-clusters-app/all-clusters-common/all-clusters-app.matter' ]; then continue; fi
if [ "$idl_file" = './examples/log-source-app/log-source-common/log-source-app.matter' ]; then continue; fi
if [ "$idl_file" = './examples/placeholder/linux/apps/app1/config.matter' ]; then continue; fi
if [ "$idl_file" = './examples/placeholder/linux/apps/app2/config.matter' ]; then continue; fi
@@ -102,6 +99,19 @@ jobs:
run: |
git grep -n "PRI.16" -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)third_party/lwip/repo/lwip/src/include/lwip/arch.h' && exit 1 || exit 0
+ # git grep exits with 0 if it finds a match, but we want
+ # to fail (exit nonzero) on match. And we want to exclude this file,
+ # to avoid our grep regexp matching itself.
+ - name: Check for use of PRI*64, which are not supported on some libcs.
+ if: always()
+ run: |
+ # TODO: MessageDefHelper should ideally not be excluded here.
+ # TODO: chip_im_initiatore should ideally not be excluded here.
+ # TODO: TLVDebug should ideally not be excluded here.
+ # TODO: protocol_decoder.cpp should ideally not be excluded here.
+ # TODO: PersistentStorageMacros.h should ideally not be excluded here.
+ git grep -n "PRI.64" -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)examples/chip-tool' ':(exclude)examples/tv-casting-app' ':(exclude)src/app/MessageDef/MessageDefHelper.cpp' ':(exclude)src/app/tests/integration/chip_im_initiator.cpp' ':(exclude)src/lib/core/TLVDebug.cpp' ':(exclude)src/lib/dnssd/tests/TestTxtFields.cpp' ':(exclude)src/lib/format/protocol_decoder.cpp' ':(exclude)src/lib/support/PersistentStorageMacros.h' ':(exclude)src/messaging/tests/echo/echo_requester.cpp' ':(exclude)src/platform/Linux' ':(exclude)src/platform/Ameba' ':(exclude)src/platform/ESP32' ':(exclude)src/platform/webos' ':(exclude)zzz_generated/chip-tool' ':(exclude)src/tools/chip-cert/Cmd_PrintCert.cpp' && exit 1 || exit 0
+
# git grep exits with 0 if it finds a match, but we want
# to fail (exit nonzero) on match. And we want to exclude this file,
# to avoid our grep regexp matching itself.
diff --git a/.github/workflows/minimal-build.yaml b/.github/workflows/minimal-build.yaml
index 269692c1461410..58a1a67e180115 100644
--- a/.github/workflows/minimal-build.yaml
+++ b/.github/workflows/minimal-build.yaml
@@ -31,7 +31,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: ghcr.io/project-chip/chip-build-minimal:22
+ image: ghcr.io/project-chip/chip-build-minimal:26
steps:
- name: Checkout
diff --git a/.github/workflows/qemu.yaml b/.github/workflows/qemu.yaml
index ac677a83d61468..a45534cc2f15bb 100644
--- a/.github/workflows/qemu.yaml
+++ b/.github/workflows/qemu.yaml
@@ -38,7 +38,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-esp32-qemu:22
+ image: ghcr.io/project-chip/chip-build-esp32-qemu:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
@@ -76,7 +76,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-tizen-qemu:22
+ image: ghcr.io/project-chip/chip-build-tizen-qemu:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
diff --git a/.github/workflows/release_artifacts.yaml b/.github/workflows/release_artifacts.yaml
index 9baca19da32835..903c8d0acf0051 100644
--- a/.github/workflows/release_artifacts.yaml
+++ b/.github/workflows/release_artifacts.yaml
@@ -32,7 +32,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: ghcr.io/project-chip/chip-build-esp32:22
+ image: ghcr.io/project-chip/chip-build-esp32:26
steps:
- name: Checkout
@@ -68,7 +68,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: ghcr.io/project-chip/chip-build-efr32:22
+ image: ghcr.io/project-chip/chip-build-efr32:26
steps:
- name: Checkout
uses: actions/checkout@v4
diff --git a/.github/workflows/smoketest-android.yaml b/.github/workflows/smoketest-android.yaml
index ee0fe3400830ab..7791b230f5b037 100644
--- a/.github/workflows/smoketest-android.yaml
+++ b/.github/workflows/smoketest-android.yaml
@@ -37,7 +37,7 @@ jobs:
if: github.actor != 'restyled-io[bot]'
container:
- image: ghcr.io/project-chip/chip-build-android:22
+ image: ghcr.io/project-chip/chip-build-android:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index d6c580e643e9ff..e289d9823ed0b5 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -47,7 +47,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0
net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1"
@@ -114,7 +114,10 @@ jobs:
src/app/zap-templates/zcl/data-model/chip/diagnostic-logs-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/dishwasher-alarm-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/dishwasher-mode-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/microwave-oven-mode-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/microwave-oven-control-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/door-lock-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/energy-evse-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/ethernet-network-diagnostics-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/fan-control-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/fault-injection-cluster.xml \
@@ -129,6 +132,7 @@ jobs:
src/app/zap-templates/zcl/data-model/chip/illuminance-measurement-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/keypad-input-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/laundry-washer-mode-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/laundry-dryer-controls-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/level-control-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/localization-configuration-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/low-power-cluster.xml \
@@ -141,7 +145,9 @@ jobs:
src/app/zap-templates/zcl/data-model/chip/onoff-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/operational-credentials-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/operational-state-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/operational-state-oven-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/operational-state-rvc-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/oven-mode-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/pressure-measurement-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/power-source-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/power-source-configuration-cluster.xml \
@@ -167,6 +173,7 @@ jobs:
src/app/zap-templates/zcl/data-model/chip/thread-network-diagnostics-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/time-format-localization-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/time-synchronization-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/timer-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/user-label-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/unit-localization-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/wake-on-lan-cluster.xml \
@@ -194,6 +201,7 @@ jobs:
--target linux-x64-ota-requestor-${BUILD_VARIANT} \
--target linux-x64-tv-app-${BUILD_VARIANT} \
--target linux-x64-bridge-${BUILD_VARIANT} \
+ --target linux-x64-lit-icd-${BUILD_VARIANT} \
build \
--copy-artifacts-to objdir-clone \
"
@@ -213,6 +221,7 @@ jobs:
--ota-requestor-app ./out/linux-x64-ota-requestor-${BUILD_VARIANT}/chip-ota-requestor-app \
--tv-app ./out/linux-x64-tv-app-${BUILD_VARIANT}/chip-tv-app \
--bridge-app ./out/linux-x64-bridge-${BUILD_VARIANT}/chip-bridge-app \
+ --lit-icd-app ./out/linux-x64-lit-icd-${BUILD_VARIANT}/lit-icd-app \
"
- name: Run purposeful failure tests using the python parser sending commands to chip-tool
@@ -251,6 +260,7 @@ jobs:
--ota-requestor-app ./out/linux-x64-ota-requestor-${BUILD_VARIANT}/chip-ota-requestor-app \
--tv-app ./out/linux-x64-tv-app-${BUILD_VARIANT}/chip-tv-app \
--bridge-app ./out/linux-x64-bridge-${BUILD_VARIANT}/chip-bridge-app \
+ --lit-icd-app ./out/linux-x64-lit-icd-${BUILD_VARIANT}/lit-icd-app \
"
- name: Run Tests using chip-repl (including slow)
if: github.event_name == 'push'
@@ -267,6 +277,7 @@ jobs:
--ota-requestor-app ./out/linux-x64-ota-requestor-${BUILD_VARIANT}/chip-ota-requestor-app \
--tv-app ./out/linux-x64-tv-app-${BUILD_VARIANT}/chip-tv-app \
--bridge-app ./out/linux-x64-bridge-${BUILD_VARIANT}/chip-bridge-app \
+ --lit-icd-app ./out/linux-x64-lit-icd-${BUILD_VARIANT}/lit-icd-app \
"
- name: Uploading core files
uses: actions/upload-artifact@v3
@@ -332,6 +343,7 @@ jobs:
--target darwin-x64-ota-requestor-${BUILD_VARIANT} \
--target darwin-x64-tv-app-${BUILD_VARIANT} \
--target darwin-x64-bridge-${BUILD_VARIANT} \
+ --target darwin-x64-lit-icd-${BUILD_VARIANT} \
build \
--copy-artifacts-to objdir-clone \
"
@@ -352,6 +364,7 @@ jobs:
--ota-requestor-app ./out/darwin-x64-ota-requestor-${BUILD_VARIANT}/chip-ota-requestor-app \
--tv-app ./out/darwin-x64-tv-app-${BUILD_VARIANT}/chip-tv-app \
--bridge-app ./out/darwin-x64-bridge-${BUILD_VARIANT}/chip-bridge-app \
+ --lit-icd-app ./out/darwin-x64-lit-icd-${BUILD_VARIANT}/lit-icd-app \
"
- name: Run purposeful failure tests using the python parser sending commands to chip-tool
@@ -402,7 +415,7 @@ jobs:
runs-on: ubuntu-latest
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0
net.ipv4.conf.all.forwarding=0 net.ipv6.conf.all.forwarding=0"
@@ -428,6 +441,7 @@ jobs:
"./scripts/build/build_examples.py \
--target linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test \
--target linux-x64-lock-ipv6only-no-ble-no-wifi-tsan-clang-test \
+ --target linux-x64-lit-icd-ipv6only-no-ble-no-wifi-tsan-clang-test \
--target linux-x64-python-bindings \
build \
--copy-artifacts-to objdir-clone \
@@ -437,7 +451,7 @@ jobs:
mkdir -p out/trace_data
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script-args "--log-level INFO -t 3600 --disable-test ClusterObjectTests.TestTimedRequestTimeout --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_RR_1_1.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
- scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_DeviceBasicComposition.py" --script-args "--storage-path admin_storage.json --manual-code 10054912339 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
+ scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_DeviceBasicComposition.py" --script-args "--storage-path admin_storage.json --manual-code 10054912339 --PICS src/app/tests/suites/certification/ci-pics-values --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_SC_3_6.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_DA_1_7.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --bool-arg allow_sdk_dac:true --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json --enable-key 000102030405060708090a0b0c0d0e0f" --script "src/python_testing/TC_TestEventTrigger.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --bool-arg allow_sdk_dac:true --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
@@ -446,6 +460,7 @@ jobs:
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_ACE_1_3.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_CGEN_2_4.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_DA_1_2.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --PICS src/app/tests/suites/certification/ci-pics-values --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
+ scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TestGroupTableReports.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --script "src/python_testing/TC_TIMESYNC_2_1.py" --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --PICS src/app/tests/suites/certification/ci-pics-values --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --script "src/python_testing/TC_TIMESYNC_2_2.py" --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --PICS src/app/tests/suites/certification/ci-pics-values --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --script "src/python_testing/TC_TIMESYNC_2_4.py" --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --PICS src/app/tests/suites/certification/ci-pics-values --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
@@ -459,7 +474,7 @@ jobs:
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --script "src/python_testing/TC_TIMESYNC_2_12.py" --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --PICS src/app/tests/suites/certification/ci-pics-values --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --script "src/python_testing/TC_TIMESYNC_2_13.py" --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --PICS src/app/tests/suites/certification/ci-pics-values --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --script "src/python_testing/TC_TIMESYNC_3_1.py" --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
- scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_ICDM_2_1.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --PICS src/app/tests/suites/certification/ci-pics-values --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
+ scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-lit-icd-ipv6only-no-ble-no-wifi-tsan-clang-test/lit-icd-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_ICDM_2_1.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --PICS src/app/tests/suites/certification/ci-pics-values --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_DA_1_5.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --PICS src/app/tests/suites/certification/ci-pics-values --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_IDM_1_2.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 1234 --KVS kvs1 --trace-to json:out/trace_data/app-{SCRIPT_BASE_NAME}.json" --script "src/python_testing/TC_FAN_3_3.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --trace-to json:out/trace_data/test-{SCRIPT_BASE_NAME}.json --trace-to perfetto:out/trace_data/test-{SCRIPT_BASE_NAME}.perfetto"'
diff --git a/.github/workflows/unit_integration_test.yaml b/.github/workflows/unit_integration_test.yaml
index 9a365cb09c2438..0896aa4ff3a75e 100644
--- a/.github/workflows/unit_integration_test.yaml
+++ b/.github/workflows/unit_integration_test.yaml
@@ -30,14 +30,14 @@ jobs:
strategy:
matrix:
- type: [main, clang, mbedtls, rotating_device_id]
+ type: [main, clang, mbedtls, rotating_device_id, icd]
env:
BUILD_TYPE: ${{ matrix.type }}
runs-on: ubuntu-latest
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
volumes:
- "/tmp/log_output:/tmp/test_logs"
options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1"
@@ -65,6 +65,7 @@ jobs:
"clang") GN_ARGS='is_clang=true';;
"mbedtls") GN_ARGS='chip_crypto="mbedtls"';;
"rotating_device_id") GN_ARGS='chip_crypto="boringssl" chip_enable_rotating_device_id=true';;
+ "icd") GN_ARGS='chip_enable_icd_server=true';;
*) ;;
esac
diff --git a/.github/workflows/zap_regeneration.yaml b/.github/workflows/zap_regeneration.yaml
index 8ccd058de07b87..7ab698049dfb08 100644
--- a/.github/workflows/zap_regeneration.yaml
+++ b/.github/workflows/zap_regeneration.yaml
@@ -30,7 +30,7 @@ jobs:
runs-on: ubuntu-20.04
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
defaults:
run:
shell: sh
diff --git a/.github/workflows/zap_templates.yaml b/.github/workflows/zap_templates.yaml
index a83069e9468d28..61b6ddea5b807d 100644
--- a/.github/workflows/zap_templates.yaml
+++ b/.github/workflows/zap_templates.yaml
@@ -32,7 +32,7 @@ jobs:
runs-on: ubuntu-20.04
container:
- image: ghcr.io/project-chip/chip-build:22
+ image: ghcr.io/project-chip/chip-build:26
defaults:
run:
shell: sh
diff --git a/.gitmodules b/.gitmodules
index 6683ee97ecb02e..fdfac588c0eb35 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -54,7 +54,7 @@
path = third_party/freertos/repo
url = https://github.com/FreeRTOS/FreeRTOS-Kernel.git
branch = V10.3.1-kernel-only
- platforms = ameba,cc13xx_26xx,bouffalolab,efr32,esp32,k32w,infineon,qpg,cc32xx,silabs_docker
+ platforms = ameba,cc13xx_26xx,bouffalolab,esp32,k32w,infineon,qpg,cc32xx
[submodule "simw-top-mini"]
path = third_party/simw-top-mini/repo
url = https://github.com/NXP/plug-and-trust.git
@@ -72,7 +72,7 @@
path = third_party/openthread/ot-efr32
url = https://github.com/SiliconLabs/ot-efr32.git
branch = matter_sve
- platforms = efr32,silabs_docker
+ platforms = silabs,silabs_docker
[submodule "third_party/openthread/ot-ifx"]
path = third_party/openthread/ot-ifx
url = https://github.com/Infineon/ot-ifx-release.git
@@ -149,10 +149,6 @@
path = third_party/infineon/psoc6/psoc6_sdk/libs/wifi-host-driver
url = https://github.com/Infineon/wifi-host-driver
platforms = infineon
-[submodule "p6/wifi-mw-core"]
- path = third_party/infineon/psoc6/psoc6_sdk/libs/wifi-mw-core
- url = https://github.com/Infineon/wifi-mw-core
- platforms = infineon
[submodule "p6/TARGET_CY8CKIT-062S2-43012"]
path = third_party/infineon/psoc6/psoc6_sdk/libs/TARGET_CY8CKIT-062S2-43012
url = https://github.com/Infineon/TARGET_CY8CKIT-062S2-43012
@@ -239,22 +235,22 @@
path = third_party/silabs/matter_support
url = https://github.com/SiliconLabs/sdk_support.git
branch = main
- platforms = efr32,silabs_docker
+ platforms = silabs,silabs_docker
[submodule "third_party/silabs/gecko_sdk"]
path = third_party/silabs/gecko_sdk
url = https://github.com/SiliconLabs/gecko_sdk.git
branch = v4.3.2
- platforms = efr32
+ platforms = silabs
[submodule "third_party/silabs/wiseconnect-wifi-bt-sdk"]
path = third_party/silabs/wiseconnect-wifi-bt-sdk
url = https://github.com/SiliconLabs/wiseconnect-wifi-bt-sdk.git
branch = 2.8.2
- platforms = efr32,silabs_docker
+ platforms = silabs
[submodule "third_party/silabs/wifi_sdk"]
path = third_party/silabs/wifi_sdk
url = https://github.com/SiliconLabs/wiseconnect.git
branch = v3.1.0
- platforms = efr32
+ platforms = silabs
[submodule "editline"]
path = third_party/editline/repo
url = https://github.com/troglobit/editline.git
@@ -324,3 +320,7 @@
url = https://github.com/STMicroelectronics/STM32CubeWB.git
branch = v1.17.0
platforms = stm32
+[submodule "p6/lwip-network-interface-integration"]
+ path = third_party/infineon/psoc6/psoc6_sdk/libs/lwip-network-interface-integration
+ url = https://github.com/Infineon/lwip-network-interface-integration.git
+ platforms = infineon
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 371df3b0e1ee60..8822dafadbe2db 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -2,82 +2,142 @@
This Project CHIP Open Source Code of Conduct applies to all those contributing
to, participating in, or maintaining the Project CHIP open source project,
-including Zigbee Alliance members and non-members.
+including Connectivity Standards Alliance members and non-members.
+
+# Contributor Covenant Code of Conduct
## Our Pledge
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to make participation in our project and our
+We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
-size, disability, ethnicity, sex characteristics, gender identity and
-expression, level of experience, education, socio-economic status, nationality,
-personal appearance, race, religion, or sexual identity and orientation.
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, caste, color, religion, or sexual
+identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
## Our Standards
-Examples of behavior that contributes to creating a positive environment
-include:
+Examples of behavior that contributes to a positive environment for our
+community include:
-- Using welcoming and inclusive language
-- Being respectful of differing viewpoints and experiences
-- Gracefully accepting constructive criticism
-- Focusing on what is best for the community
-- Showing empathy towards other community members
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+- Focusing on what is best not just for us as individuals, but for the overall
+ community
+- Respecting people's privacy and private product plans
-Examples of unacceptable behavior by participants include:
+Examples of unacceptable behavior include:
-- The use of violent threats, abusive, discriminatory, or derogatory language
-- The use of sexualized language or imagery and unwelcome sexual attention or
- advances
-- Trolling, insulting/derogatory comments, and personal or political attacks
+- The use of sexualized language or imagery, and sexual attention or advances
+ of any kind
+- Trolling, insulting or derogatory comments, and personal or political
+ attacks
- Public or private harassment
-- Publishing others' private information, such as a physical or electronic
- address, without explicit permission
-- Posting of violent content
-- Engaging in unwanted physical contact
+- Publishing others' private information, such as a physical or email address,
+ without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
-- Advocating for or encouraging any of the above behaviors
+- Disclosure of private information, unreleased products
+- Disclosure of unreleased specification information outside of Connectivity
+ Standards Alliance approved forums
+
+## Enforcement Responsibilities
-## Our Responsibilities
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
-Project maintainers are expected to take appropriate and fair corrective action
-in response to any instances of unacceptable behavior. Project maintainers have
-the right and responsibility to remove, edit, or reject comments, commits, code,
-wiki edits, issues, and other contributions that are not aligned to this Code of
-Conduct, or to ban temporarily or permanently any contributor for other
-behaviors that they deem inappropriate, threatening, offensive, or harmful.
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
## Scope
-This Code of Conduct applies within all project spaces, and it also applies when
-an individual is representing the project or its community in public spaces.
-Examples of representing a project or community include using an official
-project e-mail address, posting via an official social media account, or acting
-as an appointed representative at an online or offline event. Representation of
-a project may be further defined and clarified by project maintainers.
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the Project CHIP open source team at [INSERT EMAIL
-ADDRESS]. All complaints will be reviewed and investigated and will result in a
-response that is deemed necessary and appropriate to the circumstances. The
-Project CHIP open source team should maintain confidentiality with regard to the
-reporter of an incident. Further details of specific enforcement policies may be
-posted separately.
+reported to the community leaders responsible for enforcement at
+help@csa-iot.org. All submissions will be reviewed and investigated promptly and
+fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by Project
-CHIP open source leadership.
+**Community Impact**: A violation through a single incident or series of
+actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or permanent
+ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within the
+community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 1.4, available at
-https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+version 2.1, available at
+[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
-[homepage]: https://www.contributor-covenant.org
+Community Impact Guidelines were inspired by [Mozilla's code of conduct
+enforcement ladder][mozilla coc].
-For answers to common questions about this code of conduct, see
-https://www.contributor-covenant.org/faq
+For answers to common questions about this code of conduct, see the FAQ at
+[https://www.contributor-covenant.org/faq][faq]. Translations are available at
+[https://www.contributor-covenant.org/translations][translations].
+
+[homepage]: https://www.contributor-covenant.org
+[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
+[mozilla coc]: https://github.com/mozilla/diversity
+[faq]: https://www.contributor-covenant.org/faq
+[translations]: https://www.contributor-covenant.org/translations
diff --git a/build/toolchain/flashable_executable.gni b/build/toolchain/flashable_executable.gni
index 97b2b44f1ac51c..6233d58382b43d 100644
--- a/build/toolchain/flashable_executable.gni
+++ b/build/toolchain/flashable_executable.gni
@@ -147,6 +147,12 @@ template("flashable_executable") {
} else {
flashing_options = []
}
+
+ # Allows to set a different image name in the flasher script
+ if (defined(invoker.flashing_image_name)) {
+ image_name = invoker.flashing_image_name
+ }
+
flashing_options += [
"--application",
rebase_path(image_name, root_out_dir, root_out_dir),
diff --git a/config/esp32/components/chip/Kconfig b/config/esp32/components/chip/Kconfig
index 00bfed5df9b124..b73398bca4c2bf 100644
--- a/config/esp32/components/chip/Kconfig
+++ b/config/esp32/components/chip/Kconfig
@@ -96,6 +96,22 @@ menu "CHIP Core"
help
Link the application against CHIP interactive shell.
+ config CHIP_SHELL_CMD_LINE_BUF_MAX_LENGTH
+ int "Maximum command line buffer length of the chip shell"
+ depends on ENABLE_CHIP_SHELL
+ default 256
+ help
+ Maximum command line buffer length of the chip shell. The command strings might be received
+ incompletely in the command handlers if they are longer than this buffer length.
+
+ config CHIP_SHELL_CMD_LINE_ARG_MAX_COUNT
+ int "Maximum command line arguments count of the chip shell"
+ depends on ENABLE_CHIP_SHELL
+ default 32
+ help
+ Maximum command line arguments count of the chip shell. The command arguments might be ignored
+ if they are more than this count.
+
config ENABLE_CHIP_CONTROLLER_BUILD
bool "Enable chip-controller build"
default n
@@ -624,6 +640,16 @@ menu "CHIP Device Layer"
When set, WoBLE advertisements will stop while a WoBLE connection is active.
+ config CHIPOBLE_ENABLE_ADVERTISING_AUTOSTART
+ int "Enable CHIPoBLE advertising start automatically after device power-up"
+ range 0 1
+ default 0
+ depends on ENABLE_CHIPOBLE
+ help
+ CHIPs device may start advertising automatically only if its all primary device
+ functions are within a CHIP network. Device providing unrelated to CHIP functionalities
+ should not start advertising automatically after power-up.
+
config USE_BLE_ONLY_FOR_COMMISSIONING
bool "Use BLE only for commissioning"
default y
diff --git a/config/nrfconnect/.nrfconnect-recommended-revision b/config/nrfconnect/.nrfconnect-recommended-revision
index 8721bbc46ad2f7..21222ceed22ae6 100644
--- a/config/nrfconnect/.nrfconnect-recommended-revision
+++ b/config/nrfconnect/.nrfconnect-recommended-revision
@@ -1 +1 @@
-v2.4.0
+v2.5.0
diff --git a/config/nrfconnect/chip-module/Kconfig b/config/nrfconnect/chip-module/Kconfig
index 95e49ac59e0262..33528638670917 100644
--- a/config/nrfconnect/chip-module/Kconfig
+++ b/config/nrfconnect/chip-module/Kconfig
@@ -16,6 +16,10 @@
rsource "../../zephyr/Kconfig"
+config CHIP
+ imply NVS_LOOKUP_CACHE
+ imply NVS_LOOKUP_CACHE_FOR_SETTINGS
+
if CHIP
config CHIP_NRF_PLATFORM
@@ -119,7 +123,6 @@ config CHIP_FACTORY_DATA_CUSTOM_BACKEND
config CHIP_FACTORY_DATA_BUILD
bool "Generate factory data contents"
- default n
help
Enables generation of the factory data contents during the building. This
option requires the factory_data partition in Partition Manager
@@ -170,6 +173,7 @@ config CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE
config CHIP_FACTORY_DATA_GENERATE_ONBOARDING_CODES
bool "Generate onboarding codes during the generation of a factory data set"
+ default y
help
Enables generation of onboarding codes (manual pairing code and QR code)
during the generation of a factory data set. You can provide the
@@ -220,7 +224,8 @@ config CHIP_FACTORY_DATA_USER_CERTS_PAI_CERT
string "Path to the PAI certificate (DER format)"
help
Provides the absolute path to the PAI certificate in the DER format.
-endif
+
+endif # CHIP_FACTORY_DATA_CERT_SOURCE_USER
# Configs for SPAKE2+ generation
config CHIP_FACTORY_DATA_GENERATE_SPAKE2_VERIFIER
@@ -235,14 +240,12 @@ config CHIP_DEVICE_GENERATE_ROTATING_DEVICE_UID
help
Enables the generation of a random Rotating device ID unique ID.
-endif #CHIP_FACTORY_DATA_BUILD
+endif # CHIP_FACTORY_DATA_BUILD
# See config/zephyr/Kconfig for full definition
config CHIP_FACTORY_RESET_ERASE_NVS
bool
- default y if CHIP_FACTORY_DATA || CHIP_FACTORY_DATA_CUSTOM_BACKEND
-
-endif
+ default y
config CHIP_LOG_SIZE_OPTIMIZATION
bool "Disable some detailed logs to decrease flash usage"
@@ -260,3 +263,14 @@ config CHIP_IPV4
If disabled, it allows to build nRF Connect SDK application
with IPv4 support independently of the Matter stack still
running over IPv6.
+
+config CHIP_OPENTHREAD_JOINER_ENABLED
+ bool "Specify whether the Thread Joiner functionality is used when it is enabled"
+ default n
+ depends on NET_L2_OPENTHREAD
+ depends on OPENTHREAD_JOINER
+ help
+ If disabled, it allows to optimize memory usage even if Thread Joiner
+ support is enabled.
+
+endif # CHIP
diff --git a/config/nrfconnect/chip-module/Kconfig.defaults b/config/nrfconnect/chip-module/Kconfig.defaults
index 30611686b1e41a..8684adb2be3c52 100644
--- a/config/nrfconnect/chip-module/Kconfig.defaults
+++ b/config/nrfconnect/chip-module/Kconfig.defaults
@@ -65,6 +65,18 @@ config FPU
config SHELL
default y
+config SHELL_MINIMAL
+ default y
+
+# Enable getting reboot reasons information
+config HWINFO
+ bool
+ default y
+
+config HWINFO_SHELL
+ bool
+ default n
+
config PTHREAD_IPC
bool
default n
@@ -75,7 +87,7 @@ config POSIX_MAX_FDS
# Application stack size
config MAIN_STACK_SIZE
- default 8192
+ default 6144
config INIT_STACKS
default y
@@ -88,16 +100,16 @@ config NET_IF_MCAST_IPV6_ADDR_COUNT
# Network buffers
config NET_PKT_RX_COUNT
- default 16
+ default 8
config NET_PKT_TX_COUNT
- default 16
+ default 8
config NET_BUF_RX_COUNT
- default 80
+ default 16
config NET_BUF_TX_COUNT
- default 80
+ default 16
# Bluetooth Low Energy configs
@@ -162,6 +174,14 @@ config BT_DEVICE_NAME_GATT_WRITABLE
bool
default n
+config BT_GATT_CACHING
+ bool
+ default n
+
+# Disable 2M PHY due to interoperability issues.
+config BT_CTLR_PHY_2M
+ default n
+
# Enable NFC support
config CHIP_NFC_COMMISSIONING
@@ -196,9 +216,6 @@ endif # BOARD_NRF7002DK_NRF5340_CPUAPP
config CHIP_EXTENDED_DISCOVERY
default n
-config NVS_LOOKUP_CACHE
- default y
-
config NVS_LOOKUP_CACHE_SIZE
default 512
@@ -209,6 +226,10 @@ config NET_L2_OPENTHREAD
if NET_L2_OPENTHREAD
+# Disable OpenThread shell
+config OPENTHREAD_SHELL
+ default n
+
# Disable certain parts of Zephyr IPv6 stack
config NET_IPV6_NBR_CACHE
bool
@@ -218,6 +239,9 @@ config NET_IPV6_NBR_CACHE
config IEEE802154_NRF5_RX_STACK_SIZE
default 1024
+config OPENTHREAD_THREAD_STACK_SIZE
+ default 4096
+
endif
if CHIP_WIFI
@@ -226,9 +250,40 @@ choice WPA_SUPP_LOG_LEVEL_CHOICE
default WPA_SUPP_LOG_LEVEL_ERR
endchoice
+# increase the prefixes limit to match
+# maximum number of IPv6 addresses per interface
+config NET_IF_IPV6_PREFIX_COUNT
+ default 6
+
+# it saves us 20kB of FLASH
+config WPA_SUPP_NO_DEBUG
+ default y
+
+config NRF700X_LOG_VERBOSE
+ default n
+
+choice WIFI_NRF700X_LOG_LEVEL_CHOICE
+ default WIFI_NRF700X_LOG_LEVEL_OFF
+endchoice
+
config NRF_WIFI_LOW_POWER
default n
+config NRF700X_RX_NUM_BUFS
+ default 16
+
+config NRF700X_TX_MAX_DATA_SIZE
+ default 1280
+
+config NRF700X_RX_MAX_DATA_SIZE
+ default 1280
+
+config NRF700X_MAX_TX_TOKENS
+ default 10
+
+config NRF700X_MAX_TX_AGGREGATION
+ default 1
+
config MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
default n
@@ -243,7 +298,7 @@ config NET_IF_MCAST_IPV6_ADDR_COUNT
default 8
config NET_SOCKETS_POLL_MAX
- default 4
+ default 6
config MBEDTLS_SSL_OUT_CONTENT_LEN
default 900
@@ -260,13 +315,13 @@ config SHELL_STACK_SIZE
default 2616
config HEAP_MEM_POOL_SIZE
- default 200000
-
-config CHIP_MALLOC_SYS_HEAP_SIZE
- default 28672 # 28 kB
+ default 80000
endif
+config CHIP_MALLOC_SYS_HEAP_SIZE
+ default 28672 if CHIP_WIFI
+ default 8192 if NET_L2_OPENTHREAD
# Enable mbedTLS from nrf_security library
@@ -284,10 +339,7 @@ config MBEDTLS_ENABLE_HEAP
default y
config MBEDTLS_HEAP_SIZE
- default 15360
-
-config MBEDTLS_TLS_LIBRARY
- default y
+ default 8192
config NRF_SECURITY_ADVANCED
default y
@@ -307,9 +359,6 @@ config MBEDTLS_CTR_DRBG_C
config MBEDTLS_CIPHER_MODE_CTR
default y
-config MBEDTLS_ECJPAKE_C
- default y
-
config MBEDTLS_SHA256_C
default y
@@ -351,37 +400,10 @@ config MBEDTLS_GCM_C
config MBEDTLS_RSA_C
default n
-config PSA_WANT_KEY_TYPE_CHACHA20
- default n
-
-config PSA_WANT_ALG_GCM
- default n
-
-config PSA_WANT_ALG_CHACHA20_POLY1305
- default n
-
-config PSA_WANT_ALG_SHA_1
- default n
-
-config PSA_WANT_ALG_SHA_224
- default n
-
-config PSA_WANT_ALG_SHA_384
- default n
-
-config PSA_WANT_ALG_SHA_512
- default n
-
-config PSA_WANT_ALG_RIPEMD160
- default n
-
-config PSA_WANT_ALG_MD5
- default n
-
-config PSA_WANT_ALG_CFB
+config MBEDTLS_SSL_SRV_C
default n
-config PSA_WANT_ALG_OFB
+config MBEDTLS_SSL_COOKIE_C
default n
# Disable not used shell modules
diff --git a/config/nrfconnect/chip-module/Kconfig.features b/config/nrfconnect/chip-module/Kconfig.features
index 9b5a1e7aee9029..a6c2ea99ad431d 100644
--- a/config/nrfconnect/chip-module/Kconfig.features
+++ b/config/nrfconnect/chip-module/Kconfig.features
@@ -21,7 +21,7 @@ if CHIP
config CHIP_WIFI
bool "Enable nrfconnect Wi-Fi support"
- default y if SHIELD_NRF7002EK || BOARD_NRF7002DK_NRF5340_CPUAPP
+ default y if SHIELD_NRF7002EK || BOARD_NRF7002DK_NRF5340_CPUAPP || SHIELD_NRF7002EB
select WIFI_NRF700X
select WIFI
select WPA_SUPP
@@ -73,6 +73,20 @@ config SPI_NOR_FLASH_LAYOUT_PAGE_SIZE
endif # CHIP_SPI_NOR
+config CHIP_MEMORY_PROFILING
+ bool "Enable features for tracking memory usage"
+ select CHIP_STATISTICS
+ select CHIP_MALLOC_SYS_HEAP_WATERMARKS_SUPPORT if CHIP_MALLOC_SYS_HEAP
+ select MBEDTLS_MEMORY_DEBUG if !CHIP_CRYPTO_PSA
+ select SYS_HEAP_RUNTIME_STATS if CHIP_MALLOC_SYS_HEAP
+ select KERNEL_SHELL
+ select NET_STATISTICS
+ select NET_SHELL
+ select NET_BUF_POOL_USAGE
+ select OPENTHREAD_SHELL if !CHIP_WIFI
+ help
+ Enables features for tracking memory usage in Matter.
+
config CHIP_NUS
bool "Enable Nordic UART service for Matter purposes"
select BT_NUS
@@ -270,7 +284,7 @@ endchoice
config CHIP_LAST_FABRIC_REMOVED_ACTION_DELAY
int "After removing the last fabric wait defined time [in milliseconds] to perform an action"
depends on !CHIP_LAST_FABRIC_REMOVED_NONE
- default 500
+ default 1000
help
After removing the last fabric the device will wait for the defined time and then perform
an action chosen by the CHIP_LAST_FABRIC_REMOVED_ACTION option. This schedule will allow for
diff --git a/config/nrfconnect/chip-module/Kconfig.hci_rpmsg.defaults b/config/nrfconnect/chip-module/Kconfig.hci_rpmsg.defaults
index 83290b2b492f28..17c7115e28b750 100644
--- a/config/nrfconnect/chip-module/Kconfig.hci_rpmsg.defaults
+++ b/config/nrfconnect/chip-module/Kconfig.hci_rpmsg.defaults
@@ -58,6 +58,10 @@ config BT_CTLR_ASSERT_HANDLER
config BT_HCI_RAW_RESERVE
default 1
+# Disable 2M PHY due to interoperability issues.
+config BT_CTLR_PHY_2M
+ default n
+
# Workaround: Unable to allocate command buffer when using K_NO_WAIT since
# Host number of completed commands does not follow normal flow control.
config BT_BUF_CMD_TX_COUNT
diff --git a/config/nrfconnect/chip-module/Kconfig.mcuboot.defaults b/config/nrfconnect/chip-module/Kconfig.mcuboot.defaults
index 72169ca50afd8e..31759beba22ffc 100644
--- a/config/nrfconnect/chip-module/Kconfig.mcuboot.defaults
+++ b/config/nrfconnect/chip-module/Kconfig.mcuboot.defaults
@@ -43,6 +43,10 @@ config FLASH
config FPROTECT
default y
+choice LIBC_IMPLEMENTATION
+ default MINIMAL_LIBC
+endchoice
+
# nRF7002DK uses SPI NOR external flash
if BOARD_NRF7002DK_NRF5340_CPUAPP
@@ -140,6 +144,9 @@ config FLASH_SIMULATOR_STATS
config ENABLE_MGMT_PERUSER
default y
+config ZCBOR
+ default y
+
config BOOT_MGMT_CUSTOM_STORAGE_ERASE
default y
diff --git a/config/nrfconnect/chip-module/Kconfig.multiprotocol_rpmsg.defaults b/config/nrfconnect/chip-module/Kconfig.multiprotocol_rpmsg.defaults
index eb0b01e2664ce7..3d40e47429a074 100644
--- a/config/nrfconnect/chip-module/Kconfig.multiprotocol_rpmsg.defaults
+++ b/config/nrfconnect/chip-module/Kconfig.multiprotocol_rpmsg.defaults
@@ -58,6 +58,10 @@ config BT_CTLR_ASSERT_HANDLER
config BT_HCI_RAW_RESERVE
default 1
+# Disable 2M PHY due to interoperability issues.
+config BT_CTLR_PHY_2M
+ default n
+
# Workaround: Unable to allocate command buffer when using K_NO_WAIT since
# Host number of completed commands does not follow normal flow control.
config BT_BUF_CMD_TX_COUNT
diff --git a/config/nrfconnect/chip-module/generate_factory_data.cmake b/config/nrfconnect/chip-module/generate_factory_data.cmake
index 491411cb6a3dd4..dc1794562d89cf 100644
--- a/config/nrfconnect/chip-module/generate_factory_data.cmake
+++ b/config/nrfconnect/chip-module/generate_factory_data.cmake
@@ -180,7 +180,7 @@ endfunction()
#
function(nrfconnect_generate_factory_data)
-find_package(Python REQUIRED)
+find_package(Python3 REQUIRED)
# CHIP_ROOT must be provided as a reference set all localization of scripts
if(NOT CHIP_ROOT)
diff --git a/config/telink/chip-module/CMakeLists.txt b/config/telink/chip-module/CMakeLists.txt
index e9d506e538f131..8e798c058525c6 100644
--- a/config/telink/chip-module/CMakeLists.txt
+++ b/config/telink/chip-module/CMakeLists.txt
@@ -143,10 +143,11 @@ set_property(GLOBAL APPEND PROPERTY ZEPHYR_INTERFACE_LIBS chip)
# Define 'chip-ota-image' target for building CHIP OTA image
# ==============================================================================
+string(REPLACE "_retention" "" BASE_BOARD ${BOARD})
if(${TLNK_USB_DONGLE} MATCHES y)
- if(EXISTS "${CHIP_ROOT}/src/platform/telink/${BOARD}_usb_boot.overlay")
- set(USB_BOOT_DTC_OVERLAY_FILE "${CHIP_ROOT}/src/platform/telink/${BOARD}_usb_boot.overlay")
+ if(EXISTS "${CHIP_ROOT}/src/platform/telink/${BASE_BOARD}_usb_boot.overlay")
+ set(USB_BOOT_DTC_OVERLAY_FILE "${CHIP_ROOT}/src/platform/telink/${BASE_BOARD}_usb_boot.overlay")
else()
unset(USB_BOOT_DTC_OVERLAY_FILE)
endif()
@@ -154,8 +155,18 @@ else()
unset(USB_BOOT_DTC_OVERLAY_FILE)
endif()
-if(EXISTS "${CHIP_ROOT}/src/platform/telink/${BOARD}.overlay")
- set(GLOBAL_DTC_OVERLAY_FILE "${CHIP_ROOT}/src/platform/telink/${BOARD}.overlay")
+if(${TLNK_MARS_BOARD} MATCHES y)
+ if(EXISTS "${CHIP_ROOT}/src/platform/telink/${BASE_BOARD}_mars_boot.overlay")
+ set(MARS_BOOT_DTC_OVERLAY_FILE "${CHIP_ROOT}/src/platform/telink/${BASE_BOARD}_mars_boot.overlay")
+ else()
+ unset(MARS_BOOT_DTC_OVERLAY_FILE)
+ endif()
+else()
+ unset(MARS_CONF_OVERLAY_FILE)
+endif()
+
+if(EXISTS "${CHIP_ROOT}/src/platform/telink/${BASE_BOARD}.overlay")
+ set(GLOBAL_DTC_OVERLAY_FILE "${CHIP_ROOT}/src/platform/telink/${BASE_BOARD}.overlay")
else()
unset(GLOBAL_DTC_OVERLAY_FILE)
endif()
@@ -184,8 +195,8 @@ math(EXPR boot_blocks "${mcuboot_size} / ${BLOCK_SIZE}" OUTPUT_FORMAT DECIMAL)
if (CONFIG_BOOTLOADER_MCUBOOT)
add_custom_target(build_mcuboot ALL
COMMAND
- west build -b ${BOARD} -d build_mcuboot ${ZEPHYR_BASE}/../bootloader/mcuboot/boot/zephyr
- -- -DOVERLAY_CONFIG=${GLOBAL_BOOTLOADER_CONF_OVERLAY_FILE} -DDTC_OVERLAY_FILE="${GLOBAL_DTC_OVERLAY_FILE};${FLASH_DTC_OVERLAY_FILE};${USB_BOOT_DTC_OVERLAY_FILE}"
+ west build -b ${BASE_BOARD} -d build_mcuboot ${ZEPHYR_BASE}/../bootloader/mcuboot/boot/zephyr
+ -- -DOVERLAY_CONFIG=${GLOBAL_BOOTLOADER_CONF_OVERLAY_FILE} -DDTC_OVERLAY_FILE="${GLOBAL_DTC_OVERLAY_FILE};${FLASH_DTC_OVERLAY_FILE};${USB_BOOT_DTC_OVERLAY_FILE};${MARS_BOOT_DTC_OVERLAY_FILE}"
COMMAND
cp ${PROJECT_BINARY_DIR}/../modules/chip-module/build_mcuboot/zephyr/zephyr.bin ${PROJECT_BINARY_DIR}/zephyr.mcuboot.bin
)
diff --git a/config/telink/chip-module/Kconfig b/config/telink/chip-module/Kconfig
index b1bd07660937bd..93ebc31a0f426e 100644
--- a/config/telink/chip-module/Kconfig
+++ b/config/telink/chip-module/Kconfig
@@ -202,3 +202,8 @@ config CHIP_ENABLE_POWER_ON_FACTORY_RESET
Enable power on factory reset sequence. If device power triggered off during
first 5 seconds after power on and this sequence repeated 5 times - factory
reset will be involved.
+
+config CHIP_USE_MARS_SENSOR
+ bool "Use Mars board sensor"
+ depends on SOC_SERIES_RISCV_TELINK_B9X && (BOARD_TLSR9518ADK80D || BOARD_TLSR9518ADK80D_RETENTION)
+ default n
diff --git a/config/telink/chip-module/Kconfig.defaults b/config/telink/chip-module/Kconfig.defaults
index f346a2c1eeb807..54137bc281562b 100644
--- a/config/telink/chip-module/Kconfig.defaults
+++ b/config/telink/chip-module/Kconfig.defaults
@@ -64,7 +64,7 @@ config INIT_STACKS
default y
config IDLE_STACK_SIZE
- default 387 if PM
+ default 512 if PM
config ISR_STACK_SIZE
default 502 if PM
@@ -73,7 +73,7 @@ config SYSTEM_WORKQUEUE_STACK_SIZE
default 616 if PM
config HEAP_MEM_POOL_SIZE
- default 128 if PM
+ default 256
config COMMON_LIBC_MALLOC_ARENA_SIZE
default 12288
@@ -98,6 +98,9 @@ config NET_BUF_TX_COUNT
default 16 if PM
default 32
+config GPIO
+ default y
+
# Bluetooth Low Energy configs
config BT
@@ -154,6 +157,24 @@ choice B9X_BLE_CTRL_MAC_TYPE
default B9X_BLE_CTRL_MAC_TYPE_RANDOM_STATIC
endchoice
+# Board retention config
+if BOARD_TLSR9528A_RETENTION || BOARD_TLSR9518ADK80D_RETENTION
+config BOARD_TLSR9X_NON_RETENTION_RAM_CODE
+ default y if PM
+
+config TELINK_B9x_MATTER_RETENTION_LAYOUT
+ default y if PM
+
+config PWM
+ default n
+endif
+
+# Board non-retention config
+if BOARD_TLSR9528A || BOARD_TLSR9518ADK80D
+config PWM
+ default y
+endif
+
# Config dynamic interrupts to have posibility to switch between BLE/Thread radio drivers
config DYNAMIC_INTERRUPTS
default y
diff --git a/config/zephyr/Kconfig b/config/zephyr/Kconfig
index 4ebccfa2c0b0c6..bd4b52ecb7a193 100644
--- a/config/zephyr/Kconfig
+++ b/config/zephyr/Kconfig
@@ -453,6 +453,12 @@ config CHIP_MALLOC_SYS_HEAP_SIZE
the heap used by the memory allocation functions based on sys_heap from
Zephyr RTOS.
+config CHIP_MALLOC_SYS_HEAP_WATERMARKS_SUPPORT
+ bool "Enable support for heap watermarks based on Zephyr sys_heap"
+ help
+ Enables support for getting current heap high watermark and resetting
+ watermarks.
+
endif
module = MATTER
diff --git a/data_model/README.md b/data_model/README.md
index ada763cd7f2804..36f38cae0ff1f8 100644
--- a/data_model/README.md
+++ b/data_model/README.md
@@ -1,3 +1,7 @@
+---
+orphan: true
+---
+
## Contents
This folder contains a machine-readable representation of matter clusters.
diff --git a/data_model/clusters/AccountLogin.xml b/data_model/clusters/AccountLogin.xml
index 4add6f4189d279..3cd5c02590ea0a 100644
--- a/data_model/clusters/AccountLogin.xml
+++ b/data_model/clusters/AccountLogin.xml
@@ -73,9 +73,8 @@ Davis, CA 95616, USA
-
-
+
diff --git a/data_model/clusters/AlarmBase.xml b/data_model/clusters/AlarmBase.xml
index b169d4fe9be24a..834089869b21da 100644
--- a/data_model/clusters/AlarmBase.xml
+++ b/data_model/clusters/AlarmBase.xml
@@ -115,13 +115,13 @@ Davis, CA 95616, USA
-
+
-
+
-
+
diff --git a/data_model/clusters/BallastConfiguration.xml b/data_model/clusters/BallastConfiguration.xml
index a6d553ddcc6ead..416b8cd7014beb 100644
--- a/data_model/clusters/BallastConfiguration.xml
+++ b/data_model/clusters/BallastConfiguration.xml
@@ -124,12 +124,12 @@ Davis, CA 95616, USA
-
+
-
+
diff --git a/data_model/clusters/Channel.xml b/data_model/clusters/Channel.xml
index 3227cf9a5a446e..b75540d94a6baf 100644
--- a/data_model/clusters/Channel.xml
+++ b/data_model/clusters/Channel.xml
@@ -129,8 +129,9 @@ Davis, CA 95616, USA
-
+
+
diff --git a/data_model/clusters/ContentControl.xml b/data_model/clusters/ContentControl.xml
index 3642777b46a76d..ff38faf1f10909 100644
--- a/data_model/clusters/ContentControl.xml
+++ b/data_model/clusters/ContentControl.xml
@@ -79,12 +79,12 @@ Davis, CA 95616, USA
-
+
-
+
@@ -92,60 +92,66 @@ Davis, CA 95616, USA
-
+
+
-
+
+
-
-
+
+
-
+
+
-
-
+
+
-
+
+
-
+
+
-
+
+
-
+
-
+
@@ -159,13 +165,13 @@ Davis, CA 95616, USA
-
+
-
+
@@ -173,20 +179,12 @@ Davis, CA 95616, USA
-
+
-
-
-
-
-
+
-
-
-
-
@@ -194,7 +192,7 @@ Davis, CA 95616, USA
-
+
@@ -202,36 +200,44 @@ Davis, CA 95616, USA
-
+
-
-
-
-
-
+
-
+
-
-
-
-
-
+
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/clusters/DemandResponseLoadControl.xml b/data_model/clusters/DemandResponseLoadControl.xml
index caa967bb9edb1e..3a596905c8aa9d 100644
--- a/data_model/clusters/DemandResponseLoadControl.xml
+++ b/data_model/clusters/DemandResponseLoadControl.xml
@@ -317,7 +317,7 @@ Davis, CA 95616, USA
-
+
@@ -325,7 +325,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/clusters/DiagnosticsThread.xml b/data_model/clusters/DiagnosticsThread.xml
index 2f8e97b150ffc2..ddcf246e9c99c3 100644
--- a/data_model/clusters/DiagnosticsThread.xml
+++ b/data_model/clusters/DiagnosticsThread.xml
@@ -653,7 +653,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/clusters/DiagnosticsWiFi.xml b/data_model/clusters/DiagnosticsWiFi.xml
index ce0d8ae0e59c0f..97c23efb96dbe3 100644
--- a/data_model/clusters/DiagnosticsWiFi.xml
+++ b/data_model/clusters/DiagnosticsWiFi.xml
@@ -57,7 +57,7 @@ Connectivity Standards Alliance
508 Second Street, Suite 206
Davis, CA 95616, USA
-->
-
+
diff --git a/data_model/clusters/EVSE-Attributes.xml b/data_model/clusters/EVSE-Attributes.xml
index 70cada7e3a902e..2d492a27c4c0a1 100644
--- a/data_model/clusters/EVSE-Attributes.xml
+++ b/data_model/clusters/EVSE-Attributes.xml
@@ -38,7 +38,7 @@ EVSEs at home or a business is managed by backend system and outside scope of
this cluster.
Note that in many deployments the EVSE may be outside the home and may suffer
-from intermittent network connections (e.g. a weak WiFi signal). It also allows
+from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows
for a charging profile to be pre-configured, in case there is a temporary
communications loss during a charging session.
-->
diff --git a/data_model/clusters/EVSE-Classification.xml b/data_model/clusters/EVSE-Classification.xml
index 6230a083a794e7..22df357be3e9d0 100644
--- a/data_model/clusters/EVSE-Classification.xml
+++ b/data_model/clusters/EVSE-Classification.xml
@@ -38,7 +38,7 @@ EVSEs at home or a business is managed by backend system and outside scope of
this cluster.
Note that in many deployments the EVSE may be outside the home and may suffer
-from intermittent network connections (e.g. a weak WiFi signal). It also allows
+from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows
for a charging profile to be pre-configured, in case there is a temporary
communications loss during a charging session.
-->
diff --git a/data_model/clusters/EVSE-ClusterID.xml b/data_model/clusters/EVSE-ClusterID.xml
index 071dbf680e7514..6f84afeb8d04bc 100644
--- a/data_model/clusters/EVSE-ClusterID.xml
+++ b/data_model/clusters/EVSE-ClusterID.xml
@@ -38,7 +38,7 @@ EVSEs at home or a business is managed by backend system and outside scope of
this cluster.
Note that in many deployments the EVSE may be outside the home and may suffer
-from intermittent network connections (e.g. a weak WiFi signal). It also allows
+from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows
for a charging profile to be pre-configured, in case there is a temporary
communications loss during a charging session.
-->
diff --git a/data_model/clusters/EVSE-Commands.xml b/data_model/clusters/EVSE-Commands.xml
index f170a002aab7ac..030565e20f8f96 100644
--- a/data_model/clusters/EVSE-Commands.xml
+++ b/data_model/clusters/EVSE-Commands.xml
@@ -38,7 +38,7 @@ EVSEs at home or a business is managed by backend system and outside scope of
this cluster.
Note that in many deployments the EVSE may be outside the home and may suffer
-from intermittent network connections (e.g. a weak WiFi signal). It also allows
+from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows
for a charging profile to be pre-configured, in case there is a temporary
communications loss during a charging session.
-->
diff --git a/data_model/clusters/EVSE-DataTypes.xml b/data_model/clusters/EVSE-DataTypes.xml
index ec95fd5c8a4eac..790d66143c7025 100644
--- a/data_model/clusters/EVSE-DataTypes.xml
+++ b/data_model/clusters/EVSE-DataTypes.xml
@@ -38,7 +38,7 @@ EVSEs at home or a business is managed by backend system and outside scope of
this cluster.
Note that in many deployments the EVSE may be outside the home and may suffer
-from intermittent network connections (e.g. a weak WiFi signal). It also allows
+from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows
for a charging profile to be pre-configured, in case there is a temporary
communications loss during a charging session.
-->
diff --git a/data_model/clusters/EVSE-Definitions.xml b/data_model/clusters/EVSE-Definitions.xml
index 5d07abc25605cb..7ff6135a3d2976 100644
--- a/data_model/clusters/EVSE-Definitions.xml
+++ b/data_model/clusters/EVSE-Definitions.xml
@@ -38,7 +38,7 @@ EVSEs at home or a business is managed by backend system and outside scope of
this cluster.
Note that in many deployments the EVSE may be outside the home and may suffer
-from intermittent network connections (e.g. a weak WiFi signal). It also allows
+from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows
for a charging profile to be pre-configured, in case there is a temporary
communications loss during a charging session.
-->
diff --git a/data_model/clusters/EVSE-Dependencies.xml b/data_model/clusters/EVSE-Dependencies.xml
index 1797d04b915b7b..a87cb67a4623ae 100644
--- a/data_model/clusters/EVSE-Dependencies.xml
+++ b/data_model/clusters/EVSE-Dependencies.xml
@@ -38,7 +38,7 @@ EVSEs at home or a business is managed by backend system and outside scope of
this cluster.
Note that in many deployments the EVSE may be outside the home and may suffer
-from intermittent network connections (e.g. a weak WiFi signal). It also allows
+from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows
for a charging profile to be pre-configured, in case there is a temporary
communications loss during a charging session.
-->
diff --git a/data_model/clusters/EVSE-Events.xml b/data_model/clusters/EVSE-Events.xml
index 75c8a89274da20..51401775a6fe59 100644
--- a/data_model/clusters/EVSE-Events.xml
+++ b/data_model/clusters/EVSE-Events.xml
@@ -38,7 +38,7 @@ EVSEs at home or a business is managed by backend system and outside scope of
this cluster.
Note that in many deployments the EVSE may be outside the home and may suffer
-from intermittent network connections (e.g. a weak WiFi signal). It also allows
+from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows
for a charging profile to be pre-configured, in case there is a temporary
communications loss during a charging session.
-->
diff --git a/data_model/clusters/EVSE-Features.xml b/data_model/clusters/EVSE-Features.xml
index ff1feadf386690..a8b48a53b401e9 100644
--- a/data_model/clusters/EVSE-Features.xml
+++ b/data_model/clusters/EVSE-Features.xml
@@ -38,7 +38,7 @@ EVSEs at home or a business is managed by backend system and outside scope of
this cluster.
Note that in many deployments the EVSE may be outside the home and may suffer
-from intermittent network connections (e.g. a weak WiFi signal). It also allows
+from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows
for a charging profile to be pre-configured, in case there is a temporary
communications loss during a charging session.
-->
diff --git a/data_model/clusters/EVSE-RevisionHistory.xml b/data_model/clusters/EVSE-RevisionHistory.xml
index def04a641bf6f7..89ca30f749e5e1 100644
--- a/data_model/clusters/EVSE-RevisionHistory.xml
+++ b/data_model/clusters/EVSE-RevisionHistory.xml
@@ -38,7 +38,7 @@ EVSEs at home or a business is managed by backend system and outside scope of
this cluster.
Note that in many deployments the EVSE may be outside the home and may suffer
-from intermittent network connections (e.g. a weak WiFi signal). It also allows
+from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows
for a charging profile to be pre-configured, in case there is a temporary
communications loss during a charging session.
-->
diff --git a/data_model/clusters/ICDManagement.xml b/data_model/clusters/ICDManagement.xml
new file mode 100644
index 00000000000000..711b98b49b104c
--- /dev/null
+++ b/data_model/clusters/ICDManagement.xml
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/clusters/KeypadInput.xml b/data_model/clusters/KeypadInput.xml
index 81f16ec0830aef..7179ae676b65fe 100644
--- a/data_model/clusters/KeypadInput.xml
+++ b/data_model/clusters/KeypadInput.xml
@@ -72,6 +72,266 @@ Davis, CA 95616, USA
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
-
@@ -88,7 +348,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/clusters/LocalizationTimeFormat.xml b/data_model/clusters/LocalizationTimeFormat.xml
index 9c0ffa062fec58..1a7b6976a69ec6 100644
--- a/data_model/clusters/LocalizationTimeFormat.xml
+++ b/data_model/clusters/LocalizationTimeFormat.xml
@@ -103,6 +103,9 @@ Davis, CA 95616, USA
-
+ -
+
+
-
@@ -111,17 +114,20 @@ Davis, CA 95616, USA
-
+ -
+
+
-
+
-
+
-
+
-
+
diff --git a/data_model/clusters/MediaPlayback.xml b/data_model/clusters/MediaPlayback.xml
index 21001d287f6120..c53dc862808c12 100644
--- a/data_model/clusters/MediaPlayback.xml
+++ b/data_model/clusters/MediaPlayback.xml
@@ -61,10 +61,10 @@ Davis, CA 95616, USA
-
+
-
+
@@ -203,12 +203,22 @@ Davis, CA 95616, USA
+
+
+
+
+
+
+
+
+
+
diff --git a/data_model/clusters/MicrowaveOvenControl.xml b/data_model/clusters/MicrowaveOvenControl.xml
index e97821db771a77..3f127cebd90367 100644
--- a/data_model/clusters/MicrowaveOvenControl.xml
+++ b/data_model/clusters/MicrowaveOvenControl.xml
@@ -55,7 +55,7 @@ Connectivity Standards Alliance
508 Second Street, Suite 206
Davis, CA 95616, USA
-->
-
+
diff --git a/data_model/clusters/NetworkCommissioningCluster.xml b/data_model/clusters/NetworkCommissioningCluster.xml
index 0e6703b896380a..9f516bbfbb2e7b 100644
--- a/data_model/clusters/NetworkCommissioningCluster.xml
+++ b/data_model/clusters/NetworkCommissioningCluster.xml
@@ -126,7 +126,7 @@ Davis, CA 95616, USA
-
- -
+
-
-
diff --git a/data_model/clusters/OnOff.xml b/data_model/clusters/OnOff.xml
index 3c79220ecd67fc..bde1c4104ee5e6 100644
--- a/data_model/clusters/OnOff.xml
+++ b/data_model/clusters/OnOff.xml
@@ -73,7 +73,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/clusters/PowerSourceCluster.xml b/data_model/clusters/PowerSourceCluster.xml
index f7b5da82ce20fc..27caade3c634a3 100644
--- a/data_model/clusters/PowerSourceCluster.xml
+++ b/data_model/clusters/PowerSourceCluster.xml
@@ -69,24 +69,24 @@ Davis, CA 95616, USA
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/data_model/clusters/TargetNavigator.xml b/data_model/clusters/TargetNavigator.xml
index 3a49e7b5c6c838..ffb6955d27bf3c 100644
--- a/data_model/clusters/TargetNavigator.xml
+++ b/data_model/clusters/TargetNavigator.xml
@@ -75,6 +75,7 @@ Davis, CA 95616, USA
+
@@ -86,9 +87,8 @@ Davis, CA 95616, USA
-
+
-
diff --git a/data_model/clusters/TimeSync.xml b/data_model/clusters/TimeSync.xml
index c7ad7b0032aaf7..4515d44012085e 100644
--- a/data_model/clusters/TimeSync.xml
+++ b/data_model/clusters/TimeSync.xml
@@ -57,7 +57,7 @@ Connectivity Standards Alliance
508 Second Street, Suite 206
Davis, CA 95616, USA
-->
-
+
diff --git a/data_model/clusters/Timer.xml b/data_model/clusters/Timer.xml
index f4e37a2b60ceb6..ad0d864f016e92 100644
--- a/data_model/clusters/Timer.xml
+++ b/data_model/clusters/Timer.xml
@@ -119,7 +119,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/clusters/WakeOnLAN.xml b/data_model/clusters/WakeOnLAN.xml
index eede336182e6dc..799c92a03fd9b8 100644
--- a/data_model/clusters/WakeOnLAN.xml
+++ b/data_model/clusters/WakeOnLAN.xml
@@ -61,11 +61,11 @@ Davis, CA 95616, USA
-
+
-
+
diff --git a/data_model/clusters/bridge-clusters-BridgedDeviceBasicInformation.xml b/data_model/clusters/bridge-clusters-BridgedDeviceBasicInformation.xml
index 038d7a7f4112c5..da2b311a5c2e53 100644
--- a/data_model/clusters/bridge-clusters-BridgedDeviceBasicInformation.xml
+++ b/data_model/clusters/bridge-clusters-BridgedDeviceBasicInformation.xml
@@ -127,7 +127,7 @@ Davis, CA 95616, USA
-
+
diff --git a/data_model/device_types/Aggregator.xml b/data_model/device_types/Aggregator.xml
new file mode 100644
index 00000000000000..3f70f3d78ccb4b
--- /dev/null
+++ b/data_model/device_types/Aggregator.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/clusters/Mode_LaundryWasher.xml b/data_model/device_types/AirPurifier.xml
similarity index 75%
rename from data_model/clusters/Mode_LaundryWasher.xml
rename to data_model/device_types/AirPurifier.xml
index 96190a4009850c..9793cd1d36b215 100644
--- a/data_model/clusters/Mode_LaundryWasher.xml
+++ b/data_model/device_types/AirPurifier.xml
@@ -55,37 +55,27 @@ Connectivity Standards Alliance
508 Second Street, Suite 206
Davis, CA 95616, USA
-->
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/AirQualitySensor.xml b/data_model/device_types/AirQualitySensor.xml
new file mode 100644
index 00000000000000..0c96fbd60515b7
--- /dev/null
+++ b/data_model/device_types/AirQualitySensor.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/BaseDeviceType.xml b/data_model/device_types/BaseDeviceType.xml
new file mode 100644
index 00000000000000..22cec956aa6061
--- /dev/null
+++ b/data_model/device_types/BaseDeviceType.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/BasicVideoPlayer.xml b/data_model/device_types/BasicVideoPlayer.xml
new file mode 100644
index 00000000000000..f6b86091004bfe
--- /dev/null
+++ b/data_model/device_types/BasicVideoPlayer.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/BooleanSensor.xml b/data_model/device_types/BooleanSensor.xml
new file mode 100644
index 00000000000000..185fdc47176813
--- /dev/null
+++ b/data_model/device_types/BooleanSensor.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/BridgedNode.xml b/data_model/device_types/BridgedNode.xml
new file mode 100644
index 00000000000000..a383ed2b541d6b
--- /dev/null
+++ b/data_model/device_types/BridgedNode.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/CastingVideoClient.xml b/data_model/device_types/CastingVideoClient.xml
new file mode 100644
index 00000000000000..06ef2b5492f337
--- /dev/null
+++ b/data_model/device_types/CastingVideoClient.xml
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/CastingVideoPlayer.xml b/data_model/device_types/CastingVideoPlayer.xml
new file mode 100644
index 00000000000000..fd26bb675cbdf6
--- /dev/null
+++ b/data_model/device_types/CastingVideoPlayer.xml
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ColorDimmerSwitch.xml b/data_model/device_types/ColorDimmerSwitch.xml
new file mode 100644
index 00000000000000..dcd2ac18b1a912
--- /dev/null
+++ b/data_model/device_types/ColorDimmerSwitch.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ColorTemperatureLight.xml b/data_model/device_types/ColorTemperatureLight.xml
new file mode 100644
index 00000000000000..5897f0ee0b796a
--- /dev/null
+++ b/data_model/device_types/ColorTemperatureLight.xml
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ContactSensor.xml b/data_model/device_types/ContactSensor.xml
new file mode 100644
index 00000000000000..e8a7c3f343a9f4
--- /dev/null
+++ b/data_model/device_types/ContactSensor.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ContentApp.xml b/data_model/device_types/ContentApp.xml
new file mode 100644
index 00000000000000..8f927c48f44a35
--- /dev/null
+++ b/data_model/device_types/ContentApp.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ControlBridge.xml b/data_model/device_types/ControlBridge.xml
new file mode 100644
index 00000000000000..6ed528c0122d96
--- /dev/null
+++ b/data_model/device_types/ControlBridge.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/CookSurface.xml b/data_model/device_types/CookSurface.xml
new file mode 100644
index 00000000000000..34f5556234a6e5
--- /dev/null
+++ b/data_model/device_types/CookSurface.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/Cooktop.xml b/data_model/device_types/Cooktop.xml
new file mode 100644
index 00000000000000..8288f38c8a87ba
--- /dev/null
+++ b/data_model/device_types/Cooktop.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/DimmableLight.xml b/data_model/device_types/DimmableLight.xml
new file mode 100644
index 00000000000000..39f193f53e7553
--- /dev/null
+++ b/data_model/device_types/DimmableLight.xml
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/DimmablePlug-InUnit.xml b/data_model/device_types/DimmablePlug-InUnit.xml
new file mode 100644
index 00000000000000..c262abf3741d7e
--- /dev/null
+++ b/data_model/device_types/DimmablePlug-InUnit.xml
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/DimmerSwitch.xml b/data_model/device_types/DimmerSwitch.xml
new file mode 100644
index 00000000000000..a3bae868a2498b
--- /dev/null
+++ b/data_model/device_types/DimmerSwitch.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/Dishwasher.xml b/data_model/device_types/Dishwasher.xml
new file mode 100644
index 00000000000000..429e96c149abe9
--- /dev/null
+++ b/data_model/device_types/Dishwasher.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/DoorLock.xml b/data_model/device_types/DoorLock.xml
new file mode 100644
index 00000000000000..d31aaad30d8d98
--- /dev/null
+++ b/data_model/device_types/DoorLock.xml
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/DoorLockController.xml b/data_model/device_types/DoorLockController.xml
new file mode 100644
index 00000000000000..4f4efb3ea90d1c
--- /dev/null
+++ b/data_model/device_types/DoorLockController.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/EVSE.xml b/data_model/device_types/EVSE.xml
new file mode 100644
index 00000000000000..b5e57c83aa3ac1
--- /dev/null
+++ b/data_model/device_types/EVSE.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/EnergyTariff.xml b/data_model/device_types/EnergyTariff.xml
new file mode 100644
index 00000000000000..9e6e0b4c12ab36
--- /dev/null
+++ b/data_model/device_types/EnergyTariff.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/EnergyTariffCalendar.xml b/data_model/device_types/EnergyTariffCalendar.xml
new file mode 100644
index 00000000000000..3dca889b777e66
--- /dev/null
+++ b/data_model/device_types/EnergyTariffCalendar.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ExtendedColorLight.xml b/data_model/device_types/ExtendedColorLight.xml
new file mode 100644
index 00000000000000..4120226176e7a1
--- /dev/null
+++ b/data_model/device_types/ExtendedColorLight.xml
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ExtractorHood.xml b/data_model/device_types/ExtractorHood.xml
new file mode 100644
index 00000000000000..5fdbc7c84a1583
--- /dev/null
+++ b/data_model/device_types/ExtractorHood.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/Fan.xml b/data_model/device_types/Fan.xml
new file mode 100644
index 00000000000000..49538ec32097b6
--- /dev/null
+++ b/data_model/device_types/Fan.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/FlowSensor.xml b/data_model/device_types/FlowSensor.xml
new file mode 100644
index 00000000000000..8c604586481536
--- /dev/null
+++ b/data_model/device_types/FlowSensor.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/GenericSwitch.xml b/data_model/device_types/GenericSwitch.xml
new file mode 100644
index 00000000000000..7e13a7e18223ab
--- /dev/null
+++ b/data_model/device_types/GenericSwitch.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/HeatingCoolingUnit.xml b/data_model/device_types/HeatingCoolingUnit.xml
new file mode 100644
index 00000000000000..244ff14b0a15fa
--- /dev/null
+++ b/data_model/device_types/HeatingCoolingUnit.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/HumiditySensor.xml b/data_model/device_types/HumiditySensor.xml
new file mode 100644
index 00000000000000..d59ed7caf43abe
--- /dev/null
+++ b/data_model/device_types/HumiditySensor.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/LaundryDryer.xml b/data_model/device_types/LaundryDryer.xml
new file mode 100644
index 00000000000000..a7d365f22e14fe
--- /dev/null
+++ b/data_model/device_types/LaundryDryer.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/LaundryWasher.xml b/data_model/device_types/LaundryWasher.xml
new file mode 100644
index 00000000000000..07cd62a605fc9c
--- /dev/null
+++ b/data_model/device_types/LaundryWasher.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/LightSensor.xml b/data_model/device_types/LightSensor.xml
new file mode 100644
index 00000000000000..618901b398b5f8
--- /dev/null
+++ b/data_model/device_types/LightSensor.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/MicrowaveOven.xml b/data_model/device_types/MicrowaveOven.xml
new file mode 100644
index 00000000000000..8e77925b4131fc
--- /dev/null
+++ b/data_model/device_types/MicrowaveOven.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ModeSelectDeviceType.xml b/data_model/device_types/ModeSelectDeviceType.xml
new file mode 100644
index 00000000000000..748dc1bae2f0a3
--- /dev/null
+++ b/data_model/device_types/ModeSelectDeviceType.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/NetworkInfraIntro.xml b/data_model/device_types/NetworkInfraIntro.xml
new file mode 100644
index 00000000000000..22d91b6f459c6d
--- /dev/null
+++ b/data_model/device_types/NetworkInfraIntro.xml
@@ -0,0 +1,58 @@
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/NetworkInfraManager.xml b/data_model/device_types/NetworkInfraManager.xml
new file mode 100644
index 00000000000000..750a97f22cad86
--- /dev/null
+++ b/data_model/device_types/NetworkInfraManager.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/OccupancySensor.xml b/data_model/device_types/OccupancySensor.xml
new file mode 100644
index 00000000000000..bef470cc1c9ec6
--- /dev/null
+++ b/data_model/device_types/OccupancySensor.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/OnOffLight.xml b/data_model/device_types/OnOffLight.xml
new file mode 100644
index 00000000000000..1ce39e8545c84a
--- /dev/null
+++ b/data_model/device_types/OnOffLight.xml
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/OnOffLightSwitch.xml b/data_model/device_types/OnOffLightSwitch.xml
new file mode 100644
index 00000000000000..c2c324c8ee5d2a
--- /dev/null
+++ b/data_model/device_types/OnOffLightSwitch.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/OnOffPlug-inUnit.xml b/data_model/device_types/OnOffPlug-inUnit.xml
new file mode 100644
index 00000000000000..1847119e49426c
--- /dev/null
+++ b/data_model/device_types/OnOffPlug-inUnit.xml
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/OnOffSensor.xml b/data_model/device_types/OnOffSensor.xml
new file mode 100644
index 00000000000000..d2c6553fc1140c
--- /dev/null
+++ b/data_model/device_types/OnOffSensor.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/OtaProvider.xml b/data_model/device_types/OtaProvider.xml
new file mode 100644
index 00000000000000..28c4e3c70b88e9
--- /dev/null
+++ b/data_model/device_types/OtaProvider.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/OtaRequestor.xml b/data_model/device_types/OtaRequestor.xml
new file mode 100644
index 00000000000000..7f5a8ca11c58c8
--- /dev/null
+++ b/data_model/device_types/OtaRequestor.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/Oven.xml b/data_model/device_types/Oven.xml
new file mode 100644
index 00000000000000..5a13b0ec9ba053
--- /dev/null
+++ b/data_model/device_types/Oven.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/PowerSource.xml b/data_model/device_types/PowerSource.xml
new file mode 100644
index 00000000000000..05aaa56f88cf92
--- /dev/null
+++ b/data_model/device_types/PowerSource.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/PressureSensor.xml b/data_model/device_types/PressureSensor.xml
new file mode 100644
index 00000000000000..f472daaf4e39ff
--- /dev/null
+++ b/data_model/device_types/PressureSensor.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/Pump.xml b/data_model/device_types/Pump.xml
new file mode 100644
index 00000000000000..6f1b1f39aae53c
--- /dev/null
+++ b/data_model/device_types/Pump.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/PumpController.xml b/data_model/device_types/PumpController.xml
new file mode 100644
index 00000000000000..070e3a5912942b
--- /dev/null
+++ b/data_model/device_types/PumpController.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/Refrigerator.xml b/data_model/device_types/Refrigerator.xml
new file mode 100644
index 00000000000000..19a9b568872e4a
--- /dev/null
+++ b/data_model/device_types/Refrigerator.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/RoboticVacuumCleaner.xml b/data_model/device_types/RoboticVacuumCleaner.xml
new file mode 100644
index 00000000000000..4e02b17d772606
--- /dev/null
+++ b/data_model/device_types/RoboticVacuumCleaner.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/RoomAirConditioner.xml b/data_model/device_types/RoomAirConditioner.xml
new file mode 100644
index 00000000000000..86240698da6789
--- /dev/null
+++ b/data_model/device_types/RoomAirConditioner.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/RootNodeDeviceType.xml b/data_model/device_types/RootNodeDeviceType.xml
new file mode 100644
index 00000000000000..f4792a2e1f5a96
--- /dev/null
+++ b/data_model/device_types/RootNodeDeviceType.xml
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/SmokeCOAlarm.xml b/data_model/device_types/SmokeCOAlarm.xml
new file mode 100644
index 00000000000000..5888e8148f0927
--- /dev/null
+++ b/data_model/device_types/SmokeCOAlarm.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/Speaker.xml b/data_model/device_types/Speaker.xml
new file mode 100644
index 00000000000000..f8bc0ab150036e
--- /dev/null
+++ b/data_model/device_types/Speaker.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/TemperatureControlledCabinet.xml b/data_model/device_types/TemperatureControlledCabinet.xml
new file mode 100644
index 00000000000000..93c09339a65a75
--- /dev/null
+++ b/data_model/device_types/TemperatureControlledCabinet.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/TemperatureSensor.xml b/data_model/device_types/TemperatureSensor.xml
new file mode 100644
index 00000000000000..19d3fef781c717
--- /dev/null
+++ b/data_model/device_types/TemperatureSensor.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/Thermostat.xml b/data_model/device_types/Thermostat.xml
new file mode 100644
index 00000000000000..ebc43e7dbf7203
--- /dev/null
+++ b/data_model/device_types/Thermostat.xml
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ThreadBorderRouter.xml b/data_model/device_types/ThreadBorderRouter.xml
new file mode 100644
index 00000000000000..5a069e57e93243
--- /dev/null
+++ b/data_model/device_types/ThreadBorderRouter.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/ThreePhasePowerSource.xml b/data_model/device_types/ThreePhasePowerSource.xml
new file mode 100644
index 00000000000000..3a3d5a018223b4
--- /dev/null
+++ b/data_model/device_types/ThreePhasePowerSource.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/Valve.xml b/data_model/device_types/Valve.xml
new file mode 100644
index 00000000000000..4ce864b01ab246
--- /dev/null
+++ b/data_model/device_types/Valve.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/VideoRemoteControl.xml b/data_model/device_types/VideoRemoteControl.xml
new file mode 100644
index 00000000000000..c86fb3ba437a55
--- /dev/null
+++ b/data_model/device_types/VideoRemoteControl.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/WaterHeater.xml b/data_model/device_types/WaterHeater.xml
new file mode 100644
index 00000000000000..2f2f7fae235e1b
--- /dev/null
+++ b/data_model/device_types/WaterHeater.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/WaterLeakDetector.xml b/data_model/device_types/WaterLeakDetector.xml
new file mode 100644
index 00000000000000..596a9cebb2ac04
--- /dev/null
+++ b/data_model/device_types/WaterLeakDetector.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/WindowCovering.xml b/data_model/device_types/WindowCovering.xml
new file mode 100644
index 00000000000000..83f03a2a04e5ed
--- /dev/null
+++ b/data_model/device_types/WindowCovering.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/device_types/WindowCoveringController.xml b/data_model/device_types/WindowCoveringController.xml
new file mode 100644
index 00000000000000..c79d5a2279f6a8
--- /dev/null
+++ b/data_model/device_types/WindowCoveringController.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data_model/scraper_version b/data_model/scraper_version
new file mode 100644
index 00000000000000..26aaba0e86632e
--- /dev/null
+++ b/data_model/scraper_version
@@ -0,0 +1 @@
+1.2.0
diff --git a/data_model/spec_sha b/data_model/spec_sha
index c8cdb81dba2809..d0a25923c7c7b5 100644
--- a/data_model/spec_sha
+++ b/data_model/spec_sha
@@ -1 +1 @@
-6be044cb0a9bb333b70ccf9f70074afeb440b3cb
+8e4f91da4aacda4e799b9979605342a315ac7e43
diff --git a/docs/ci-cd/index.md b/docs/ci-cd/index.md
new file mode 100644
index 00000000000000..3f9f808b7d64b0
--- /dev/null
+++ b/docs/ci-cd/index.md
@@ -0,0 +1,43 @@
+# CI/CD Documentation
+
+```{toctree}
+:glob:
+
+tools/*
+```
+
+## Project Information
+
+- [Build Guide](../guides/BUILDING.html)
+- Sphinx documentation framework
+ - New directories and individual files must be added to the
+ [tree](https://github.com/project-chip/connectedhomeip/blob/master/docs/index.md)
+ - New files under directories must be added to the tree in the index file;
+ see above. Glob and regular expressions may be used to include all
+- Pull Requests
+ - Built in style and spelling checks must be satisfied
+ - Larger changes should go through an approval process; reviewers are
+ automatically added
+ - Smaller specific changes like ones to this file may be expedited with
+ the "fast track" label
+
+Work In Progress
+
+## Known Issues
+
+- Python build running out of space
+ - [Fail example](https://github.com/project-chip/connectedhomeip/actions/runs/6239660536/job/16938053552?pr=29333)
+ - May need intermediate cleanup steps
+
+## Tools
+
+- [Daily Fail Summary](tools/daily_fail_summary.html)
+
+## To Do
+
+- Cert image auto build
+ - [Initial code](https://github.com/woody-apple/connectedhomeip/tree/build-cert-bins)
+ - Need to change chip-build image builds to cut down time
+ - Do multi-platform builds for ARM64
+
+## General Improvement Ideas
diff --git a/docs/ci-cd/tools/daily_fail_summary.md b/docs/ci-cd/tools/daily_fail_summary.md
new file mode 100644
index 00000000000000..8855a7a3de6086
--- /dev/null
+++ b/docs/ci-cd/tools/daily_fail_summary.md
@@ -0,0 +1,34 @@
+### Daily Fail Summary
+
+#### Source
+
+Workflow:
+https://github.com/project-chip/connectedhomeip/blob/master/.github/workflows/recent_fail_summary.yaml
+
+Script:
+https://github.com/project-chip/connectedhomeip/blob/master/scripts/tools/summarize_fail.py
+
+Fail Definitions:
+https://github.com/project-chip/connectedhomeip/blob/master/scripts/tools/build_fail_definitions.yaml
+
+#### Summary
+
+Runs once per day; takes inventory of the previous day's workflow runs and
+parses them for fail statistics. Creates temporarily cached artifacts for easy
+data parsing. Also saves a daily pass percentage list of all workflows at
+https://github.com/project-chip/connectedhomeip/blob/daily_pass_percentage/docs/daily_pass_percentage.md.
+Fail definitions can be added to the file defined above to allow fast root cause
+determination of any fail with an error message.
+
+#### To Do
+
+- Keep fail signature list updated to track causes of all common fails
+- Include Darwin Test fail definitions in fail summary script - for starters,
+ Test Reliable Message Protocol
+
+#### Improvement Ideas
+
+- Make script artifact more known and accessible so it can be easily shared
+ and used by everyone
+- Deliver daily fail summaries in short form through a Slack bot for easy
+ access
diff --git a/docs/conf.py b/docs/conf.py
index 1f2f0d96cf74e8..52402d86518b80 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -32,9 +32,6 @@
"examples/thermostat/nxp/linux-se05x/README.md",
"examples/common/m5stack-tft/repo",
"docs/guides/README.md",
- "scripts/tools/memory/memdf/README.md",
- "scripts/tools/memory/platform/README.md",
- "scripts/tools/memory/README-GitHub-CI.md",
]
@@ -67,6 +64,7 @@
external_content_contents = [
(MATTER_BASE / "docs", "[!_R]*"),
+ (MATTER_BASE, "data_model/**/*.md"),
(MATTER_BASE, "README.md"),
(MATTER_BASE, "examples/**/*.md"),
(MATTER_BASE, "examples/**/*.png"),
@@ -82,5 +80,6 @@
"README", # cannot detect README.md
"scripts/",
"examples/android/",
+ "data_model/",
]
external_content_link_extensions = [".md", ".png", ".jpg", ".svg"]
diff --git a/docs/examples/index.md b/docs/examples/index.md
index c6d211bcaeee9d..703bcb5fb3bc7f 100644
--- a/docs/examples/index.md
+++ b/docs/examples/index.md
@@ -294,15 +294,6 @@ tv-casting-app/APIs.md
window-app/**/README
```
-## Resource monitoring example
-
-```{toctree}
-:glob:
-:maxdepth: 1
-
-resource-monitoring-app/**/README
-```
-
## RVC example
```{toctree}
diff --git a/docs/guides/index.md b/docs/guides/index.md
index a818ee2b777912..2119b46059a8c0 100644
--- a/docs/guides/index.md
+++ b/docs/guides/index.md
@@ -55,6 +55,7 @@ ti/ti_platform_overview
- [Access Control](./access-control-guide.md)
- [IP Commissioning](./ip_commissioning.md)
+- [Matter IDL tooling and validation](./matter_idl_tooling.md)
## Setup Guides
diff --git a/docs/guides/matter_idl_tooling.md b/docs/guides/matter_idl_tooling.md
new file mode 100644
index 00000000000000..09953e1d5ef0ca
--- /dev/null
+++ b/docs/guides/matter_idl_tooling.md
@@ -0,0 +1,86 @@
+# The `.matter` IDL file format
+
+The matter IDL file format is designed to be a human-readable representation of
+data structures, cluster definitions and endpoint composition.
+
+Since it is designed to be easy for both machine and humans to read, it is the
+basis of some tools to make validating zap-based cluster definitions easier.
+
+More details on the format in
+[matter_idl/README.md](../../scripts/py_matter_idl/matter_idl/README.md).
+
+## Parsing CSA XML Data definitions
+
+The SDK contains a copy of CSA XML data definitions in `data_model/clusters`.
+
+The files there are updated by running a scraper against the official matter
+specification and are a good source of truth for actual definitions. Update
+information available in [data_model/README.md](../../data_model/README.md).
+
+NOTE: scraper is a work in progress, XML data may be incomplete or have errors
+still.
+
+The script `./scripts/py_matter_idl/matter_idl/data_model_xml_parser.py` has the
+ability to parse one or more CSA data model XML files and output their content
+in `.matter` format. For example:
+
+```sh
+./scripts/py_matter_idl/matter_idl/data_model_xml_parser.py data_model/clusters/BooleanState.xml
+```
+
+The tool supports several options that are useful for development:
+
+| Argument(s) | Description |
+| ----------------------- | ----------------------------------------------------------------------------------- |
+| `-o/--output PATH` | Output the matter file into a path instead of STDOUT. |
+| `--compare PATH` | Also read another `.matter` file for compare. MUST be used with `--compare-output`. |
+| `--compare-output PATH` | Output the subset of `--compare` clusters that matches XML into PATH. |
+
+Using `--compare` AND `--compare-output` produce output that is easier to
+compare as opposed to using existing zap-generated matter files because it
+strips out comments and it also alpha-sorts elements so that diffs are
+human-readable.
+
+### Comparing a `.matter` file against the spec
+
+Combining arguments to the tool allows getting a diff between SDK and
+specification:
+
+- `data_model/clusters/*.xml` are assumed to be the official specification
+ definitions
+- `src/controller/data_model/controller-clusters.matter` contains _all_
+ clusters defined in the SDK
+
+As such one can run compares such as:
+
+```sh
+./scripts/py_matter_idl/matter_idl/data_model_xml_parser.py \
+ -o out/spec.matter \
+ --compare-output out/sdk.matter \
+ --compare src/controller/data_model/controller-clusters.matter \
+ data_model/clusters/DoorLock.xml \
+ && diff out/{spec,sdk}.matter
+```
+
+NOTE: due to specification data scraper still being in development, the diff
+should be human-validated (e.g. for tool errors or Zigbee-only markers in the
+spec).
+
+## Linting `.matter` files for devices
+
+For device validation, `./scripts/idl_lint.py` provides the ability to validate
+a matter file for some basic conformance logic. These rules are expressed in
+`scripts/rules.matterlint`.
+
+The rules generally are:
+
+- pre-loaded from silabs XML files (validates that mandatory attributes are
+ present)
+- Hard-coded rules (e.g. mandatory clusters and attributes on specific
+ endpoints)
+
+Usage:
+
+```sh
+./scripts/idl_lint.py ./examples/window-app/common/window-app.matter
+```
diff --git a/docs/index.md b/docs/index.md
index cd865b4d31027e..c3200d13835fd4 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -9,6 +9,7 @@ QUICK_START
PROJECT_FLOW
VSCODE_DEVELOPMENT
api/index
+ci-cd/index
discussion/index
guides/index
style/index
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 9b7779dc3ddf63..87799ce782fe65 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -3,4 +3,4 @@ Sphinx>=4.5
sphinx-book-theme
myst-parser
breathe>=4.34
-pydata-sphinx-theme==0.14.1
+pydata-sphinx-theme==0.14.4
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 d210cebb350c3a..0e4d5b1fd20c94 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
@@ -3,6 +3,8 @@
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
+ revision 4;
+
enum EffectIdentifierEnum : enum8 {
kBlink = 0;
kBreathe = 1;
@@ -49,6 +51,8 @@ server cluster Identify = 3 {
/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */
server cluster Descriptor = 29 {
+ revision 2;
+
bitmap Feature : bitmap32 {
kTagList = 0x1;
}
@@ -82,6 +86,8 @@ server cluster Descriptor = 29 {
and enforce Access Control for the Node's endpoints and their associated
cluster instances. */
server cluster AccessControl = 31 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AccessControlEntryAuthModeEnum : enum8 {
kPASE = 1;
kCASE = 2;
@@ -154,6 +160,8 @@ server cluster AccessControl = 31 {
Commissioning and operational determination of Node characteristics, such as Vendor ID, Product ID and serial number,
which apply to the whole Node. Also allows setting user device information such as location. */
server cluster BasicInformation = 40 {
+ revision 3;
+
enum ColorEnum : enum8 {
kBlack = 0;
kNavy = 1;
@@ -231,6 +239,8 @@ server cluster BasicInformation = 40 {
attribute access(write: manage) boolean localConfigDisabled = 16;
readonly attribute char_string<32> uniqueID = 18;
readonly attribute CapabilityMinimaStruct capabilityMinima = 19;
+ readonly attribute int32u specificationVersion = 21;
+ readonly attribute int16u maxPathsPerInvoke = 22;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -241,6 +251,8 @@ server cluster BasicInformation = 40 {
/** Provides an interface for providing OTA software updates */
client cluster OtaSoftwareUpdateProvider = 41 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ApplyUpdateActionEnum : enum8 {
kProceed = 0;
kAwaitNextAction = 1;
@@ -315,6 +327,8 @@ client cluster OtaSoftwareUpdateProvider = 41 {
/** Provides an interface for downloading and applying OTA software updates */
server cluster OtaSoftwareUpdateRequestor = 42 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AnnouncementReasonEnum : enum8 {
kSimpleAnnouncement = 0;
kUpdateAvailable = 1;
@@ -390,6 +404,8 @@ server cluster OtaSoftwareUpdateRequestor = 42 {
/** This cluster is used to manage global aspects of the Commissioning flow. */
server cluster GeneralCommissioning = 48 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CommissioningErrorEnum : enum8 {
kOK = 0;
kValueOutsideRange = 1;
@@ -428,13 +444,13 @@ server cluster GeneralCommissioning = 48 {
request struct SetRegulatoryConfigRequest {
RegulatoryLocationTypeEnum newRegulatoryConfig = 0;
- char_string countryCode = 1;
+ char_string<2> countryCode = 1;
int64u breadcrumb = 2;
}
response struct ArmFailSafeResponse = 1 {
CommissioningErrorEnum errorCode = 0;
- char_string debugText = 1;
+ char_string<128> debugText = 1;
}
response struct SetRegulatoryConfigResponse = 3 {
@@ -454,6 +470,8 @@ server cluster GeneralCommissioning = 48 {
/** Functionality to configure, enable, disable network credentials and access on a Matter device. */
server cluster NetworkCommissioning = 49 {
+ revision 1; // NOTE: Default/not specifically set
+
enum NetworkCommissioningStatusEnum : enum8 {
kSuccess = 0;
kOutOfRange = 1;
@@ -483,6 +501,7 @@ server cluster NetworkCommissioning = 49 {
kWiFiNetworkInterface = 0x1;
kThreadNetworkInterface = 0x2;
kEthernetNetworkInterface = 0x4;
+ kPerDeviceCredentials = 0x8;
}
bitmap ThreadCapabilitiesBitmap : bitmap16 {
@@ -499,11 +518,14 @@ server cluster NetworkCommissioning = 49 {
kWPAPersonal = 0x4;
kWPA2Personal = 0x8;
kWPA3Personal = 0x10;
+ kWPA3MatterPDC = 0x20;
}
struct NetworkInfoStruct {
octet_string<32> networkID = 0;
boolean connected = 1;
+ optional nullable octet_string<20> networkIdentifier = 2;
+ optional nullable octet_string<20> clientIdentifier = 3;
}
struct ThreadInterfaceScanResultStruct {
@@ -550,6 +572,9 @@ server cluster NetworkCommissioning = 49 {
octet_string<32> ssid = 0;
octet_string<64> credentials = 1;
optional int64u breadcrumb = 2;
+ optional octet_string<140> networkIdentity = 3;
+ optional octet_string<20> clientIdentifier = 4;
+ optional octet_string<32> possessionNonce = 5;
}
request struct AddOrUpdateThreadNetworkRequest {
@@ -584,6 +609,8 @@ server cluster NetworkCommissioning = 49 {
NetworkCommissioningStatusEnum networkingStatus = 0;
optional char_string<512> debugText = 1;
optional int8u networkIndex = 2;
+ optional octet_string<140> clientIdentity = 3;
+ optional octet_string<64> possessionSignature = 4;
}
response struct ConnectNetworkResponse = 7 {
@@ -602,6 +629,8 @@ server cluster NetworkCommissioning = 49 {
/** The cluster provides commands for retrieving unstructured diagnostic logs from a Node that may be used to aid in diagnostics. */
server cluster DiagnosticLogs = 50 {
+ revision 1; // NOTE: Default/not specifically set
+
enum IntentEnum : enum8 {
kEndUserSupport = 0;
kNetworkDiag = 1;
@@ -639,6 +668,8 @@ server cluster DiagnosticLogs = 50 {
/** The General Diagnostics Cluster, along with other diagnostics clusters, provide a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster GeneralDiagnostics = 51 {
+ revision 1; // NOTE: Default/not specifically set
+
enum BootReasonEnum : enum8 {
kUnspecified = 0;
kPowerOnReboot = 1;
@@ -739,11 +770,19 @@ server cluster GeneralDiagnostics = 51 {
int64u eventTrigger = 1;
}
+ response struct TimeSnapshotResponse = 2 {
+ systime_us systemTimeUs = 0;
+ nullable epoch_us UTCTimeUs = 1;
+ }
+
command access(invoke: manage) TestEventTrigger(TestEventTriggerRequest): DefaultSuccess = 0;
+ command TimeSnapshot(): TimeSnapshotResponse = 1;
}
/** Commands to trigger a Node to allow a new Administrator to commission it. */
server cluster AdministratorCommissioning = 60 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CommissioningWindowStatusEnum : enum8 {
kWindowNotOpen = 0;
kEnhancedWindowOpen = 1;
@@ -778,17 +817,14 @@ server cluster AdministratorCommissioning = 60 {
octet_string<32> salt = 4;
}
- request struct OpenBasicCommissioningWindowRequest {
- int16u commissioningTimeout = 0;
- }
-
timed command access(invoke: administer) OpenCommissioningWindow(OpenCommissioningWindowRequest): DefaultSuccess = 0;
- timed command access(invoke: administer) OpenBasicCommissioningWindow(OpenBasicCommissioningWindowRequest): DefaultSuccess = 1;
timed command access(invoke: administer) RevokeCommissioning(): DefaultSuccess = 2;
}
/** This cluster is used to add or remove Operational Credentials on a Commissionee or Node, as well as manage the associated Fabrics. */
server cluster OperationalCredentials = 62 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CertificateChainTypeEnum : enum8 {
kDACCertificate = 1;
kPAICertificate = 2;
@@ -905,6 +941,8 @@ server cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
server cluster GroupKeyManagement = 63 {
+ revision 1; // NOTE: Default/not specifically set
+
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
kCacheAndSync = 1;
@@ -977,6 +1015,8 @@ server cluster GroupKeyManagement = 63 {
/** Attributes for reporting air quality classification */
server cluster AirQuality = 91 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AirQualityEnum : enum8 {
kUnknown = 0;
kGood = 1;
@@ -1005,6 +1045,8 @@ server cluster AirQuality = 91 {
/** Attributes and commands for monitoring HEPA filters in a device */
server cluster HepaFilterMonitoring = 113 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ChangeIndicationEnum : enum8 {
kOK = 0;
kWarning = 1;
@@ -1053,6 +1095,8 @@ server cluster HepaFilterMonitoring = 113 {
/** Attributes and commands for monitoring activated carbon filters in a device */
server cluster ActivatedCarbonFilterMonitoring = 114 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ChangeIndicationEnum : enum8 {
kOK = 0;
kWarning = 1;
@@ -1101,6 +1145,8 @@ server cluster ActivatedCarbonFilterMonitoring = 114 {
/** An interface for controlling a fan in a heating/cooling system. */
provisional server cluster FanControl = 514 {
+ revision 4;
+
enum AirflowDirectionEnum : enum8 {
kForward = 0;
kReverse = 1;
@@ -1121,8 +1167,8 @@ provisional server cluster FanControl = 514 {
kOffLowHigh = 1;
kOffLowMedHighAuto = 2;
kOffLowHighAuto = 3;
- kOffOnAuto = 4;
- kOffOn = 5;
+ kOffHighAuto = 4;
+ kOffHigh = 5;
}
enum StepDirectionEnum : enum8 {
@@ -1151,7 +1197,7 @@ provisional server cluster FanControl = 514 {
}
attribute FanModeEnum fanMode = 0;
- attribute FanModeSequenceEnum fanModeSequence = 1;
+ readonly attribute FanModeSequenceEnum fanModeSequence = 1;
attribute nullable percent percentSetting = 2;
readonly attribute percent percentCurrent = 3;
readonly attribute int8u speedMax = 4;
@@ -1180,9 +1226,11 @@ provisional server cluster FanControl = 514 {
/** Attributes and commands for configuring the measurement of temperature, and reporting temperature measurements. */
server cluster TemperatureMeasurement = 1026 {
- readonly attribute nullable int16s measuredValue = 0;
- readonly attribute nullable int16s minMeasuredValue = 1;
- readonly attribute nullable int16s maxMeasuredValue = 2;
+ revision 1; // NOTE: Default/not specifically set
+
+ readonly attribute nullable temperature measuredValue = 0;
+ readonly attribute nullable temperature minMeasuredValue = 1;
+ readonly attribute nullable temperature maxMeasuredValue = 2;
readonly attribute int16u tolerance = 3;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
@@ -1194,6 +1242,8 @@ server cluster TemperatureMeasurement = 1026 {
/** Attributes and commands for configuring the measurement of relative humidity, and reporting relative humidity measurements. */
server cluster RelativeHumidityMeasurement = 1029 {
+ revision 3;
+
readonly attribute nullable int16u measuredValue = 0;
readonly attribute nullable int16u minMeasuredValue = 1;
readonly attribute nullable int16u maxMeasuredValue = 2;
@@ -1208,6 +1258,8 @@ server cluster RelativeHumidityMeasurement = 1029 {
/** Attributes for reporting carbon monoxide concentration measurements */
server cluster CarbonMonoxideConcentrationMeasurement = 1036 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1263,6 +1315,8 @@ server cluster CarbonMonoxideConcentrationMeasurement = 1036 {
/** Attributes for reporting carbon dioxide concentration measurements */
server cluster CarbonDioxideConcentrationMeasurement = 1037 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1318,6 +1372,8 @@ server cluster CarbonDioxideConcentrationMeasurement = 1037 {
/** Attributes for reporting nitrogen dioxide concentration measurements */
server cluster NitrogenDioxideConcentrationMeasurement = 1043 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1373,6 +1429,8 @@ server cluster NitrogenDioxideConcentrationMeasurement = 1043 {
/** Attributes for reporting ozone concentration measurements */
server cluster OzoneConcentrationMeasurement = 1045 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1428,6 +1486,8 @@ server cluster OzoneConcentrationMeasurement = 1045 {
/** Attributes for reporting PM2.5 concentration measurements */
server cluster Pm25ConcentrationMeasurement = 1066 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1483,6 +1543,8 @@ server cluster Pm25ConcentrationMeasurement = 1066 {
/** Attributes for reporting formaldehyde concentration measurements */
server cluster FormaldehydeConcentrationMeasurement = 1067 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1538,6 +1600,8 @@ server cluster FormaldehydeConcentrationMeasurement = 1067 {
/** Attributes for reporting PM1 concentration measurements */
server cluster Pm1ConcentrationMeasurement = 1068 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1593,6 +1657,8 @@ server cluster Pm1ConcentrationMeasurement = 1068 {
/** Attributes for reporting PM10 concentration measurements */
server cluster Pm10ConcentrationMeasurement = 1069 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1648,6 +1714,8 @@ server cluster Pm10ConcentrationMeasurement = 1069 {
/** Attributes for reporting total volatile organic compounds concentration measurements */
server cluster TotalVolatileOrganicCompoundsConcentrationMeasurement = 1070 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1703,6 +1771,8 @@ server cluster TotalVolatileOrganicCompoundsConcentrationMeasurement = 1070 {
/** Attributes for reporting radon concentration measurements */
server cluster RadonConcentrationMeasurement = 1071 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1806,8 +1876,10 @@ endpoint 0 {
persist attribute localConfigDisabled default = 0;
callback attribute uniqueID;
callback attribute capabilityMinima;
+ callback attribute specificationVersion;
+ callback attribute maxPathsPerInvoke;
ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 1;
+ ram attribute clusterRevision default = 3;
}
server cluster OtaSoftwareUpdateRequestor {
@@ -1883,9 +1955,11 @@ endpoint 0 {
callback attribute activeNetworkFaults;
callback attribute testEventTriggersEnabled default = false;
ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 0x0001;
+ ram attribute clusterRevision default = 0x0002;
handle command TestEventTrigger;
+ handle command TimeSnapshot;
+ handle command TimeSnapshotResponse;
}
server cluster AdministratorCommissioning {
@@ -1896,7 +1970,6 @@ endpoint 0 {
ram attribute clusterRevision default = 0x0001;
handle command OpenCommissioningWindow;
- handle command OpenBasicCommissioningWindow;
handle command RevokeCommissioning;
}
@@ -1952,7 +2025,7 @@ endpoint 1 {
callback attribute eventList;
callback attribute attributeList default = 0;
ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 2;
+ ram attribute clusterRevision default = 4;
handle command Identify;
handle command TriggerEffect;
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 c1f47b4d162a51..4daeefb57b7fa6 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
@@ -632,6 +632,38 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "SpecificationVersion",
+ "code": 21,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxPathsPerInvoke",
+ "code": 22,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -658,7 +690,7 @@
"storageOption": "RAM",
"singleton": 1,
"bounded": 0,
- "defaultValue": "1",
+ "defaultValue": "3",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -1379,6 +1411,22 @@
"source": "client",
"isIncoming": 1,
"isEnabled": 1
+ },
+ {
+ "name": "TimeSnapshot",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "TimeSnapshotResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
}
],
"attributes": [
@@ -1552,7 +1600,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x0001",
+ "defaultValue": "0x0002",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -1585,14 +1633,6 @@
"isIncoming": 1,
"isEnabled": 1
},
- {
- "name": "OpenBasicCommissioningWindow",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "isIncoming": 1,
- "isEnabled": 1
- },
{
"name": "RevokeCommissioning",
"code": 2,
@@ -2254,7 +2294,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "4",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -6822,7 +6862,7 @@
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -6838,7 +6878,7 @@
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -6854,7 +6894,7 @@
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
diff --git a/examples/air-purifier-app/cc32xx/main/AppTask.cpp b/examples/air-purifier-app/cc32xx/main/AppTask.cpp
index fa112c1ee23a21..e753e5ac4aed8f 100644
--- a/examples/air-purifier-app/cc32xx/main/AppTask.cpp
+++ b/examples/air-purifier-app/cc32xx/main/AppTask.cpp
@@ -62,8 +62,8 @@ extern void DisplayBanner();
#define AIR_PURIFIER_ENDPOINT 1
#define AIR_QUALITY_SENSOR_ENDPOINT 2
-#define RELATIVE_HUMIDITY_SENSOR_ENDPOINT 3
-#define TEMPERATURE_SENSOR_ENDPOINT 4
+#define TEMPERATURE_SENSOR_ENDPOINT 3
+#define RELATIVE_HUMIDITY_SENSOR_ENDPOINT 4
// Added the below three for DNS Server Initialization
using namespace ::chip;
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 fd0ebb160daf13..8f598f4281e4ef 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
@@ -3,6 +3,8 @@
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
+ revision 4;
+
enum EffectIdentifierEnum : enum8 {
kBlink = 0;
kBreathe = 1;
@@ -43,6 +45,8 @@ server cluster Identify = 3 {
/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */
server cluster Descriptor = 29 {
+ revision 2;
+
bitmap Feature : bitmap32 {
kTagList = 0x1;
}
@@ -76,6 +80,8 @@ server cluster Descriptor = 29 {
and enforce Access Control for the Node's endpoints and their associated
cluster instances. */
server cluster AccessControl = 31 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AccessControlEntryAuthModeEnum : enum8 {
kPASE = 1;
kCASE = 2;
@@ -148,6 +154,8 @@ server cluster AccessControl = 31 {
Commissioning and operational determination of Node characteristics, such as Vendor ID, Product ID and serial number,
which apply to the whole Node. Also allows setting user device information such as location. */
server cluster BasicInformation = 40 {
+ revision 3;
+
enum ColorEnum : enum8 {
kBlack = 0;
kNavy = 1;
@@ -225,6 +233,8 @@ server cluster BasicInformation = 40 {
attribute access(write: manage) boolean localConfigDisabled = 16;
readonly attribute char_string<32> uniqueID = 18;
readonly attribute CapabilityMinimaStruct capabilityMinima = 19;
+ readonly attribute int32u specificationVersion = 21;
+ readonly attribute int16u maxPathsPerInvoke = 22;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -235,6 +245,8 @@ server cluster BasicInformation = 40 {
/** Provides an interface for providing OTA software updates */
client cluster OtaSoftwareUpdateProvider = 41 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ApplyUpdateActionEnum : enum8 {
kProceed = 0;
kAwaitNextAction = 1;
@@ -309,6 +321,8 @@ client cluster OtaSoftwareUpdateProvider = 41 {
/** Provides an interface for downloading and applying OTA software updates */
server cluster OtaSoftwareUpdateRequestor = 42 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AnnouncementReasonEnum : enum8 {
kSimpleAnnouncement = 0;
kUpdateAvailable = 1;
@@ -384,6 +398,8 @@ server cluster OtaSoftwareUpdateRequestor = 42 {
/** This cluster is used to manage global aspects of the Commissioning flow. */
server cluster GeneralCommissioning = 48 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CommissioningErrorEnum : enum8 {
kOK = 0;
kValueOutsideRange = 1;
@@ -422,13 +438,13 @@ server cluster GeneralCommissioning = 48 {
request struct SetRegulatoryConfigRequest {
RegulatoryLocationTypeEnum newRegulatoryConfig = 0;
- char_string countryCode = 1;
+ char_string<2> countryCode = 1;
int64u breadcrumb = 2;
}
response struct ArmFailSafeResponse = 1 {
CommissioningErrorEnum errorCode = 0;
- char_string debugText = 1;
+ char_string<128> debugText = 1;
}
response struct SetRegulatoryConfigResponse = 3 {
@@ -448,6 +464,8 @@ server cluster GeneralCommissioning = 48 {
/** Functionality to configure, enable, disable network credentials and access on a Matter device. */
server cluster NetworkCommissioning = 49 {
+ revision 1; // NOTE: Default/not specifically set
+
enum NetworkCommissioningStatusEnum : enum8 {
kSuccess = 0;
kOutOfRange = 1;
@@ -477,6 +495,7 @@ server cluster NetworkCommissioning = 49 {
kWiFiNetworkInterface = 0x1;
kThreadNetworkInterface = 0x2;
kEthernetNetworkInterface = 0x4;
+ kPerDeviceCredentials = 0x8;
}
bitmap ThreadCapabilitiesBitmap : bitmap16 {
@@ -493,11 +512,14 @@ server cluster NetworkCommissioning = 49 {
kWPAPersonal = 0x4;
kWPA2Personal = 0x8;
kWPA3Personal = 0x10;
+ kWPA3MatterPDC = 0x20;
}
struct NetworkInfoStruct {
octet_string<32> networkID = 0;
boolean connected = 1;
+ optional nullable octet_string<20> networkIdentifier = 2;
+ optional nullable octet_string<20> clientIdentifier = 3;
}
struct ThreadInterfaceScanResultStruct {
@@ -544,6 +566,9 @@ server cluster NetworkCommissioning = 49 {
octet_string<32> ssid = 0;
octet_string<64> credentials = 1;
optional int64u breadcrumb = 2;
+ optional octet_string<140> networkIdentity = 3;
+ optional octet_string<20> clientIdentifier = 4;
+ optional octet_string<32> possessionNonce = 5;
}
request struct AddOrUpdateThreadNetworkRequest {
@@ -578,6 +603,8 @@ server cluster NetworkCommissioning = 49 {
NetworkCommissioningStatusEnum networkingStatus = 0;
optional char_string<512> debugText = 1;
optional int8u networkIndex = 2;
+ optional octet_string<140> clientIdentity = 3;
+ optional octet_string<64> possessionSignature = 4;
}
response struct ConnectNetworkResponse = 7 {
@@ -596,6 +623,8 @@ server cluster NetworkCommissioning = 49 {
/** The General Diagnostics Cluster, along with other diagnostics clusters, provide a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster GeneralDiagnostics = 51 {
+ revision 1; // NOTE: Default/not specifically set
+
enum BootReasonEnum : enum8 {
kUnspecified = 0;
kPowerOnReboot = 1;
@@ -696,11 +725,19 @@ server cluster GeneralDiagnostics = 51 {
int64u eventTrigger = 1;
}
+ response struct TimeSnapshotResponse = 2 {
+ systime_us systemTimeUs = 0;
+ nullable epoch_us UTCTimeUs = 1;
+ }
+
command access(invoke: manage) TestEventTrigger(TestEventTriggerRequest): DefaultSuccess = 0;
+ command TimeSnapshot(): TimeSnapshotResponse = 1;
}
/** The Software Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster SoftwareDiagnostics = 52 {
+ revision 1; // NOTE: Default/not specifically set
+
bitmap Feature : bitmap32 {
kWatermarks = 0x1;
}
@@ -735,6 +772,8 @@ server cluster SoftwareDiagnostics = 52 {
/** The Thread Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems */
server cluster ThreadNetworkDiagnostics = 53 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ConnectionStatusEnum : enum8 {
kConnected = 0;
kNotConnected = 1;
@@ -833,9 +872,9 @@ server cluster ThreadNetworkDiagnostics = 53 {
readonly attribute NeighborTableStruct neighborTable[] = 7;
readonly attribute RouteTableStruct routeTable[] = 8;
readonly attribute nullable int32u partitionId = 9;
- readonly attribute nullable int8u weighting = 10;
- readonly attribute nullable int8u dataVersion = 11;
- readonly attribute nullable int8u stableDataVersion = 12;
+ readonly attribute nullable int16u weighting = 10;
+ readonly attribute nullable int16u dataVersion = 11;
+ readonly attribute nullable int16u stableDataVersion = 12;
readonly attribute nullable int8u leaderRouterId = 13;
readonly attribute int16u detachedRoleCount = 14;
readonly attribute int16u childRoleCount = 15;
@@ -893,11 +932,13 @@ server cluster ThreadNetworkDiagnostics = 53 {
readonly attribute bitmap32 featureMap = 65532;
readonly attribute int16u clusterRevision = 65533;
- command ResetCounts(): DefaultSuccess = 0;
+ command access(invoke: manage) ResetCounts(): DefaultSuccess = 0;
}
/** The Wi-Fi Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster WiFiNetworkDiagnostics = 54 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AssociationFailureCauseEnum : enum8 {
kUnknown = 0;
kAssociationFailed = 1;
@@ -939,7 +980,7 @@ server cluster WiFiNetworkDiagnostics = 54 {
}
info event AssociationFailure = 1 {
- AssociationFailureCauseEnum associationFailure = 0;
+ AssociationFailureCauseEnum associationFailureCause = 0;
int16u status = 1;
}
@@ -972,6 +1013,8 @@ server cluster WiFiNetworkDiagnostics = 54 {
/** The Ethernet Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster EthernetNetworkDiagnostics = 55 {
+ revision 1; // NOTE: Default/not specifically set
+
enum PHYRateEnum : enum8 {
kRate10M = 0;
kRate100M = 1;
@@ -1011,6 +1054,8 @@ server cluster EthernetNetworkDiagnostics = 55 {
/** Commands to trigger a Node to allow a new Administrator to commission it. */
server cluster AdministratorCommissioning = 60 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CommissioningWindowStatusEnum : enum8 {
kWindowNotOpen = 0;
kEnhancedWindowOpen = 1;
@@ -1056,6 +1101,8 @@ server cluster AdministratorCommissioning = 60 {
/** This cluster is used to add or remove Operational Credentials on a Commissionee or Node, as well as manage the associated Fabrics. */
server cluster OperationalCredentials = 62 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CertificateChainTypeEnum : enum8 {
kDACCertificate = 1;
kPAICertificate = 2;
@@ -1172,6 +1219,8 @@ server cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
server cluster GroupKeyManagement = 63 {
+ revision 1; // NOTE: Default/not specifically set
+
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
kCacheAndSync = 1;
@@ -1244,6 +1293,8 @@ server cluster GroupKeyManagement = 63 {
/** Attributes for reporting air quality classification */
server cluster AirQuality = 91 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AirQualityEnum : enum8 {
kUnknown = 0;
kGood = 1;
@@ -1272,9 +1323,11 @@ server cluster AirQuality = 91 {
/** Attributes and commands for configuring the measurement of temperature, and reporting temperature measurements. */
server cluster TemperatureMeasurement = 1026 {
- readonly attribute nullable int16s measuredValue = 0;
- readonly attribute nullable int16s minMeasuredValue = 1;
- readonly attribute nullable int16s maxMeasuredValue = 2;
+ revision 1; // NOTE: Default/not specifically set
+
+ readonly attribute nullable temperature measuredValue = 0;
+ readonly attribute nullable temperature minMeasuredValue = 1;
+ readonly attribute nullable temperature maxMeasuredValue = 2;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -1285,6 +1338,8 @@ server cluster TemperatureMeasurement = 1026 {
/** Attributes and commands for configuring the measurement of relative humidity, and reporting relative humidity measurements. */
server cluster RelativeHumidityMeasurement = 1029 {
+ revision 3;
+
readonly attribute nullable int16u measuredValue = 0;
readonly attribute nullable int16u minMeasuredValue = 1;
readonly attribute nullable int16u maxMeasuredValue = 2;
@@ -1298,6 +1353,8 @@ server cluster RelativeHumidityMeasurement = 1029 {
/** Attributes for reporting carbon monoxide concentration measurements */
server cluster CarbonMonoxideConcentrationMeasurement = 1036 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1345,6 +1402,8 @@ server cluster CarbonMonoxideConcentrationMeasurement = 1036 {
/** Attributes for reporting carbon dioxide concentration measurements */
server cluster CarbonDioxideConcentrationMeasurement = 1037 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1392,6 +1451,8 @@ server cluster CarbonDioxideConcentrationMeasurement = 1037 {
/** Attributes for reporting nitrogen dioxide concentration measurements */
server cluster NitrogenDioxideConcentrationMeasurement = 1043 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1439,6 +1500,8 @@ server cluster NitrogenDioxideConcentrationMeasurement = 1043 {
/** Attributes for reporting ozone concentration measurements */
server cluster OzoneConcentrationMeasurement = 1045 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1486,6 +1549,8 @@ server cluster OzoneConcentrationMeasurement = 1045 {
/** Attributes for reporting PM2.5 concentration measurements */
server cluster Pm25ConcentrationMeasurement = 1066 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1533,6 +1598,8 @@ server cluster Pm25ConcentrationMeasurement = 1066 {
/** Attributes for reporting formaldehyde concentration measurements */
server cluster FormaldehydeConcentrationMeasurement = 1067 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1580,6 +1647,8 @@ server cluster FormaldehydeConcentrationMeasurement = 1067 {
/** Attributes for reporting PM1 concentration measurements */
server cluster Pm1ConcentrationMeasurement = 1068 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1627,6 +1696,8 @@ server cluster Pm1ConcentrationMeasurement = 1068 {
/** Attributes for reporting PM10 concentration measurements */
server cluster Pm10ConcentrationMeasurement = 1069 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1674,6 +1745,8 @@ server cluster Pm10ConcentrationMeasurement = 1069 {
/** Attributes for reporting total volatile organic compounds concentration measurements */
server cluster TotalVolatileOrganicCompoundsConcentrationMeasurement = 1070 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1721,6 +1794,8 @@ server cluster TotalVolatileOrganicCompoundsConcentrationMeasurement = 1070 {
/** Attributes for reporting radon concentration measurements */
server cluster RadonConcentrationMeasurement = 1071 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -1816,8 +1891,10 @@ endpoint 0 {
persist attribute localConfigDisabled default = 0;
callback attribute uniqueID;
callback attribute capabilityMinima;
+ callback attribute specificationVersion;
+ callback attribute maxPathsPerInvoke;
ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 2;
+ ram attribute clusterRevision default = 3;
}
server cluster OtaSoftwareUpdateRequestor {
@@ -1886,9 +1963,11 @@ endpoint 0 {
callback attribute activeNetworkFaults;
callback attribute testEventTriggersEnabled default = false;
ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 1;
+ ram attribute clusterRevision default = 0x0002;
handle command TestEventTrigger;
+ handle command TimeSnapshot;
+ handle command TimeSnapshotResponse;
}
server cluster SoftwareDiagnostics {
@@ -2080,6 +2159,19 @@ endpoint 1 {
handle command Identify;
}
+ server cluster Descriptor {
+ callback attribute deviceTypeList;
+ callback attribute serverList;
+ callback attribute clientList;
+ callback attribute partsList;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ callback attribute clusterRevision default = 2;
+ }
+
server cluster AirQuality {
callback attribute airQuality default = 0;
callback attribute generatedCommandList;
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 13bfc7a3777a90..1e8c4ca9bcc558 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
@@ -632,6 +632,38 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "SpecificationVersion",
+ "code": 21,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxPathsPerInvoke",
+ "code": 22,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -658,7 +690,7 @@
"storageOption": "RAM",
"singleton": 1,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "3",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -1327,6 +1359,22 @@
"source": "client",
"isIncoming": 1,
"isEnabled": 1
+ },
+ {
+ "name": "TimeSnapshot",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "TimeSnapshotResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
}
],
"attributes": [
@@ -1500,7 +1548,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "1",
+ "defaultValue": "0x0002",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -1816,7 +1864,7 @@
"code": 10,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "int16u",
"included": 1,
"storageOption": "External",
"singleton": 0,
@@ -1832,7 +1880,7 @@
"code": 11,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "int16u",
"included": 1,
"storageOption": "External",
"singleton": 0,
@@ -1848,7 +1896,7 @@
"code": 12,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "int16u",
"included": 1,
"storageOption": "External",
"singleton": 0,
@@ -3857,6 +3905,176 @@
}
]
},
+ {
+ "name": "Descriptor",
+ "code": 29,
+ "mfgCode": null,
+ "define": "DESCRIPTOR_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "DeviceTypeList",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ServerList",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClientList",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "PartsList",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "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": "EventList",
+ "code": 65530,
+ "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": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
{
"name": "Air Quality",
"code": 91,
@@ -3992,7 +4210,7 @@
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -4008,7 +4226,7 @@
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -4024,7 +4242,7 @@
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
diff --git a/examples/air-quality-sensor-app/linux/README.md b/examples/air-quality-sensor-app/linux/README.md
index dd96aaefd9d07e..828b7eec895901 100644
--- a/examples/air-quality-sensor-app/linux/README.md
+++ b/examples/air-quality-sensor-app/linux/README.md
@@ -131,7 +131,7 @@ $ echo '{"Name":"AirQuality","NewValue":3}' > /tmp/chip_air_quality_fifo_
Generate event `TemperatureMeasurement`, to change the temperate value.
```
-$ echo '{"Name":"TemperatureMeasurement","NewValue":18}' > /tmp/chip_air_quality_fifo_
+$ echo '{"Name":"TemperatureMeasurement","NewValue":1800}' > /tmp/chip_air_quality_fifo_
```
### Trigger Humidity change event
diff --git a/examples/air-quality-sensor-app/linux/main.cpp b/examples/air-quality-sensor-app/linux/main.cpp
index cad641e8971cdd..fddb23fb7b38a6 100644
--- a/examples/air-quality-sensor-app/linux/main.cpp
+++ b/examples/air-quality-sensor-app/linux/main.cpp
@@ -21,7 +21,7 @@
#include
#include
-#include
+#include
#if defined(CHIP_IMGUI_ENABLED) && CHIP_IMGUI_ENABLED
#include
diff --git a/examples/air-quality-sensor-app/telink/CMakeLists.txt b/examples/air-quality-sensor-app/telink/CMakeLists.txt
index fd5a5b14256426..908bea9eb73a98 100644
--- a/examples/air-quality-sensor-app/telink/CMakeLists.txt
+++ b/examples/air-quality-sensor-app/telink/CMakeLists.txt
@@ -19,6 +19,23 @@ get_filename_component(CHIP_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/third_party/connect
get_filename_component(TELINK_COMMON ${CHIP_ROOT}/examples/platform/telink REALPATH)
get_filename_component(GEN_DIR ${CHIP_ROOT}/zzz_generated/ REALPATH)
+set(ignoreMe "${TLNK_MARS_BOARD}")
+
+if(${TLNK_MARS_BOARD} MATCHES y)
+ if(EXISTS "${CHIP_ROOT}/src/platform/telink/${BOARD}_mars.overlay")
+ set(MARS_DTC_OVERLAY_FILE "${CHIP_ROOT}/src/platform/telink/${BOARD}_mars.overlay")
+ else()
+ unset(MARS_DTC_OVERLAY_FILE)
+ endif()
+ if(EXISTS "${CHIP_ROOT}/src/platform/telink/${BOARD}_mars.conf")
+ set(MARS_CONF_OVERLAY_FILE "${CHIP_ROOT}/src/platform/telink/${BOARD}_mars.conf")
+ else()
+ unset(MARS_CONF_OVERLAY_FILE)
+ endif()
+else()
+ unset(MARS_CONF_OVERLAY_FILE)
+endif()
+
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/boards/${BOARD}.overlay")
set(LOCAL_DTC_OVERLAY_FILE "${CMAKE_CURRENT_SOURCE_DIR}/boards/${BOARD}.overlay")
else()
@@ -41,14 +58,14 @@ endif()
if(DTC_OVERLAY_FILE)
set(DTC_OVERLAY_FILE
- "${DTC_OVERLAY_FILE} ${GLOBAL_DTC_OVERLAY_FILE} ${FLASH_DTC_OVERLAY_FILE} ${LOCAL_DTC_OVERLAY_FILE}"
+ "${DTC_OVERLAY_FILE} ${GLOBAL_DTC_OVERLAY_FILE} ${MARS_DTC_OVERLAY_FILE} ${FLASH_DTC_OVERLAY_FILE} ${LOCAL_DTC_OVERLAY_FILE}"
CACHE STRING "" FORCE
)
else()
- set(DTC_OVERLAY_FILE ${GLOBAL_DTC_OVERLAY_FILE} ${FLASH_DTC_OVERLAY_FILE} ${LOCAL_DTC_OVERLAY_FILE})
+ set(DTC_OVERLAY_FILE ${GLOBAL_DTC_OVERLAY_FILE} ${MARS_DTC_OVERLAY_FILE} ${FLASH_DTC_OVERLAY_FILE} ${LOCAL_DTC_OVERLAY_FILE})
endif()
-set(CONF_FILE prj.conf)
+set(CONF_FILE ${MARS_CONF_OVERLAY_FILE} prj.conf)
# Load NCS/Zephyr build system
list(APPEND ZEPHYR_EXTRA_MODULES ${CHIP_ROOT}/config/telink/chip-module)
@@ -78,10 +95,12 @@ target_sources(app PRIVATE
src/ZclCallbacks.cpp
${TELINK_COMMON}/common/src/mainCommon.cpp
${TELINK_COMMON}/common/src/AppTaskCommon.cpp
+ ${TELINK_COMMON}/common/src/SensorManagerCommon.cpp
${TELINK_COMMON}/util/src/LEDWidget.cpp
${TELINK_COMMON}/util/src/ButtonManager.cpp
${TELINK_COMMON}/util/src/ThreadUtil.cpp
${TELINK_COMMON}/util/src/PWMDevice.cpp
+ ${TELINK_COMMON}/util/src/WS2812Device.cpp
${CHIP_ROOT}/examples/air-quality-sensor-app/air-quality-sensor-common/src/air-quality-sensor-manager.cpp)
chip_configure_data_model(app
diff --git a/examples/air-quality-sensor-app/telink/include/AppTask.h b/examples/air-quality-sensor-app/telink/include/AppTask.h
index a1b55a9b83108f..659de081dbf01f 100644
--- a/examples/air-quality-sensor-app/telink/include/AppTask.h
+++ b/examples/air-quality-sensor-app/telink/include/AppTask.h
@@ -31,7 +31,8 @@ class AppTask : public AppTaskCommon
CHIP_ERROR Init(void);
- static void AirQualityActionEventHandler(AppEvent * aEvent);
+ static void AirQualitySensorUpdateTimerTimeoutCallback(k_timer * timer);
+ static void AirQualitySensorUpdateTimerEventHandler(AppEvent * aEvent);
static AppTask sAppTask;
};
diff --git a/examples/air-quality-sensor-app/telink/prj.conf b/examples/air-quality-sensor-app/telink/prj.conf
index 703e78efb7ed4a..b43fbe9636d9aa 100644
--- a/examples/air-quality-sensor-app/telink/prj.conf
+++ b/examples/air-quality-sensor-app/telink/prj.conf
@@ -22,12 +22,6 @@
CONFIG_CHIP=y
CONFIG_STD_CPP17=y
-# enable GPIO
-CONFIG_GPIO=y
-
-# enable PWM
-CONFIG_PWM=y
-
# CHIP configuration
CONFIG_CHIP_PROJECT_CONFIG="include/CHIPProjectConfig.h"
CONFIG_CHIP_OPENTHREAD_CONFIG="../../platform/telink/project_include/OpenThreadConfig.h"
diff --git a/examples/air-quality-sensor-app/telink/src/AppTask.cpp b/examples/air-quality-sensor-app/telink/src/AppTask.cpp
index 94988ea8bbe5a0..ac2f61b3c06f52 100644
--- a/examples/air-quality-sensor-app/telink/src/AppTask.cpp
+++ b/examples/air-quality-sensor-app/telink/src/AppTask.cpp
@@ -17,50 +17,100 @@
*/
#include "AppTask.h"
+#include "SensorManagerCommon.h"
#include
LOG_MODULE_DECLARE(app, CONFIG_CHIP_APP_LOG_LEVEL);
+using namespace chip;
using namespace ::chip::app::Clusters;
using namespace ::chip::app::Clusters::AirQuality;
-AppTask AppTask::sAppTask;
+namespace {
+k_timer sAirQualitySensorUpdateTimer;
+constexpr uint16_t kAirQualitySensorUpdateTimerPeriod = 10000; // 10s timer period
+} // namespace
-constexpr EndpointId kAirQualityEndpoint = 1;
+AppTask AppTask::sAppTask;
CHIP_ERROR AppTask::Init(void)
{
+ CHIP_ERROR err;
+
#if APP_USE_EXAMPLE_START_BUTTON
- SetExampleButtonCallbacks(AirQualityActionEventHandler);
+ SetExampleButtonCallbacks(AirQualitySensorUpdateTimerEventHandler);
#endif
InitCommonParts();
- AirQualitySensorManager::InitInstance(kAirQualityEndpoint);
+ err = SensorMgr().Init();
+ if (err != CHIP_NO_ERROR)
+ {
+ LOG_ERR("Init of the Sensor Manager failed");
+ return err;
+ }
+
+ // Initialize air quality sensor update timer
+ k_timer_init(&sAirQualitySensorUpdateTimer, &AppTask::AirQualitySensorUpdateTimerTimeoutCallback, nullptr);
+ k_timer_user_data_set(&sAirQualitySensorUpdateTimer, this);
+ k_timer_start(&sAirQualitySensorUpdateTimer, K_MSEC(kAirQualitySensorUpdateTimerPeriod), K_NO_WAIT);
+
+ AirQualitySensorManager::InitInstance(kExampleEndpointId);
return CHIP_NO_ERROR;
}
void AppTask::UpdateClusterState(void)
{
+ CHIP_ERROR ret;
AirQualitySensorManager * mInstance = AirQualitySensorManager::GetInstance();
+ int16_t temperature;
+ uint16_t humidity;
+
+ ret = SensorMgr().GetTempAndHumMeasurValue(&temperature, &humidity);
+ if (ret != CHIP_NO_ERROR)
+ {
+ LOG_ERR("Update of the Air Quality clusters failed");
+ return;
+ }
+
+ LOG_INF("Update Air Quality: temperature is (%d*0.01)°C, humidity is %d", temperature, humidity);
// Update AirQuality value
- mInstance->OnAirQualityChangeHandler(AirQualityEnum::kModerate);
+ mInstance->OnAirQualityChangeHandler(AirQualityEnum::kUnknown);
// Update Carbon Dioxide
- mInstance->OnCarbonDioxideMeasurementChangeHandler(400);
+ mInstance->OnCarbonDioxideMeasurementChangeHandler(0);
// Update Temperature value
- mInstance->OnTemperatureMeasurementChangeHandler(18);
+ mInstance->OnTemperatureMeasurementChangeHandler(temperature);
// Update Humidity value
- mInstance->OnHumidityMeasurementChangeHandler(60);
+ mInstance->OnHumidityMeasurementChangeHandler(humidity);
+}
+
+void AppTask::AirQualitySensorUpdateTimerTimeoutCallback(k_timer * timer)
+{
+ if (!timer)
+ {
+ return;
+ }
+
+ AppEvent event;
+ event.Type = AppEvent::kEventType_Timer;
+ event.Handler = AirQualitySensorUpdateTimerEventHandler;
+ sAppTask.PostEvent(&event);
}
-void AppTask::AirQualityActionEventHandler(AppEvent * aEvent)
+void AppTask::AirQualitySensorUpdateTimerEventHandler(AppEvent * aEvent)
{
- if (aEvent->Type == AppEvent::kEventType_Button)
+ if ((aEvent->Type == AppEvent::kEventType_Button) || (aEvent->Type == AppEvent::kEventType_Timer))
{
sAppTask.UpdateClusterState();
}
+
+ if (aEvent->Type == AppEvent::kEventType_Timer)
+ {
+ // Start next timer to measurement the air quality sensor
+ k_timer_start(&sAirQualitySensorUpdateTimer, K_MSEC(kAirQualitySensorUpdateTimerPeriod), K_NO_WAIT);
+ }
}
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 817358feb53ac2..0557d6764fb511 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
@@ -3,6 +3,8 @@
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
+ revision 4;
+
enum EffectIdentifierEnum : enum8 {
kBlink = 0;
kBreathe = 1;
@@ -49,6 +51,8 @@ server cluster Identify = 3 {
/** Attributes and commands for group configuration and manipulation. */
server cluster Groups = 4 {
+ revision 4;
+
bitmap Feature : bitmap32 {
kGroupNames = 0x1;
}
@@ -118,6 +122,12 @@ server cluster Groups = 4 {
/** Attributes and commands for scene configuration and manipulation. */
provisional server cluster Scenes = 5 {
+ revision 5;
+
+ bitmap CopyModeBitmap : bitmap8 {
+ kCopyAllScenes = 0x1;
+ }
+
bitmap Feature : bitmap32 {
kSceneNames = 0x1;
kExplicit = 0x2;
@@ -125,8 +135,8 @@ provisional server cluster Scenes = 5 {
kFabricScenes = 0x8;
}
- bitmap ScenesCopyMode : bitmap8 {
- kCopyAllScenes = 0x1;
+ bitmap NameSupportBitmap : bitmap8 {
+ kSceneNames = 0x80;
}
struct AttributeValuePair {
@@ -139,14 +149,19 @@ provisional server cluster Scenes = 5 {
AttributeValuePair attributeValueList[] = 1;
}
- readonly attribute int8u sceneCount = 0;
- readonly attribute int8u currentScene = 1;
- readonly attribute group_id currentGroup = 2;
- readonly attribute boolean sceneValid = 3;
- readonly attribute bitmap8 nameSupport = 4;
+ fabric_scoped struct SceneInfoStruct {
+ int8u sceneCount = 0;
+ fabric_sensitive int8u currentScene = 1;
+ fabric_sensitive group_id currentGroup = 2;
+ fabric_sensitive boolean sceneValid = 3;
+ int8u remainingCapacity = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ readonly attribute NameSupportBitmap nameSupport = 4;
readonly attribute nullable node_id lastConfiguredBy = 5;
readonly attribute int16u sceneTableSize = 6;
- readonly attribute int8u remainingCapacity = 7;
+ readonly attribute SceneInfoStruct fabricSceneInfo[] = 7;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -205,7 +220,7 @@ provisional server cluster Scenes = 5 {
}
request struct CopySceneRequest {
- ScenesCopyMode mode = 0;
+ CopyModeBitmap mode = 0;
group_id groupIdentifierFrom = 1;
int8u sceneIdentifierFrom = 2;
group_id groupIdentifierTo = 3;
@@ -286,6 +301,8 @@ provisional server cluster Scenes = 5 {
/** Attributes and commands for switching devices between 'On' and 'Off' states. */
client cluster OnOff = 6 {
+ revision 6;
+
enum DelayedAllOffEffectVariantEnum : enum8 {
kDelayedOffFastFade = 0;
kNoFade = 1;
@@ -310,6 +327,7 @@ client cluster OnOff = 6 {
bitmap Feature : bitmap32 {
kLighting = 0x1;
kDeadFrontBehavior = 0x2;
+ kOffOnly = 0x4;
}
bitmap OnOffControlBitmap : bitmap8 {
@@ -330,7 +348,7 @@ client cluster OnOff = 6 {
request struct OffWithEffectRequest {
EffectIdentifierEnum effectIdentifier = 0;
- int8u effectVariant = 1;
+ enum8 effectVariant = 1;
}
request struct OnWithTimedOffRequest {
@@ -355,6 +373,8 @@ client cluster OnOff = 6 {
/** Attributes and commands for switching devices between 'On' and 'Off' states. */
server cluster OnOff = 6 {
+ revision 6;
+
enum DelayedAllOffEffectVariantEnum : enum8 {
kDelayedOffFastFade = 0;
kNoFade = 1;
@@ -379,6 +399,7 @@ server cluster OnOff = 6 {
bitmap Feature : bitmap32 {
kLighting = 0x1;
kDeadFrontBehavior = 0x2;
+ kOffOnly = 0x4;
}
bitmap OnOffControlBitmap : bitmap8 {
@@ -399,7 +420,7 @@ server cluster OnOff = 6 {
request struct OffWithEffectRequest {
EffectIdentifierEnum effectIdentifier = 0;
- int8u effectVariant = 1;
+ enum8 effectVariant = 1;
}
request struct OnWithTimedOffRequest {
@@ -418,6 +439,8 @@ server cluster OnOff = 6 {
/** Attributes and commands for configuring On/Off switching devices. */
server cluster OnOffSwitchConfiguration = 7 {
+ revision 1; // NOTE: Default/not specifically set
+
readonly attribute enum8 switchType = 0;
attribute enum8 switchActions = 16;
readonly attribute command_id generatedCommandList[] = 65528;
@@ -430,12 +453,14 @@ server cluster OnOffSwitchConfiguration = 7 {
/** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */
server cluster LevelControl = 8 {
- enum MoveMode : enum8 {
+ revision 5;
+
+ enum MoveModeEnum : enum8 {
kUp = 0;
kDown = 1;
}
- enum StepMode : enum8 {
+ enum StepModeEnum : enum8 {
kUp = 0;
kDown = 1;
}
@@ -446,7 +471,7 @@ server cluster LevelControl = 8 {
kFrequency = 0x4;
}
- bitmap LevelControlOptions : bitmap8 {
+ bitmap OptionsBitmap : bitmap8 {
kExecuteIfOff = 0x1;
kCoupleColorTempToLevel = 0x2;
}
@@ -458,7 +483,7 @@ server cluster LevelControl = 8 {
readonly attribute int16u currentFrequency = 4;
readonly attribute int16u minFrequency = 5;
readonly attribute int16u maxFrequency = 6;
- attribute LevelControlOptions options = 15;
+ attribute OptionsBitmap options = 15;
attribute int16u onOffTransitionTime = 16;
attribute nullable int8u onLevel = 17;
attribute nullable int16u onTransitionTime = 18;
@@ -475,55 +500,55 @@ server cluster LevelControl = 8 {
request struct MoveToLevelRequest {
int8u level = 0;
nullable int16u transitionTime = 1;
- LevelControlOptions optionsMask = 2;
- LevelControlOptions optionsOverride = 3;
+ OptionsBitmap optionsMask = 2;
+ OptionsBitmap optionsOverride = 3;
}
request struct MoveRequest {
- MoveMode moveMode = 0;
+ MoveModeEnum moveMode = 0;
nullable int8u rate = 1;
- LevelControlOptions optionsMask = 2;
- LevelControlOptions optionsOverride = 3;
+ OptionsBitmap optionsMask = 2;
+ OptionsBitmap optionsOverride = 3;
}
request struct StepRequest {
- StepMode stepMode = 0;
+ StepModeEnum stepMode = 0;
int8u stepSize = 1;
nullable int16u transitionTime = 2;
- LevelControlOptions optionsMask = 3;
- LevelControlOptions optionsOverride = 4;
+ OptionsBitmap optionsMask = 3;
+ OptionsBitmap optionsOverride = 4;
}
request struct StopRequest {
- LevelControlOptions optionsMask = 0;
- LevelControlOptions optionsOverride = 1;
+ OptionsBitmap optionsMask = 0;
+ OptionsBitmap optionsOverride = 1;
}
request struct MoveToLevelWithOnOffRequest {
int8u level = 0;
nullable int16u transitionTime = 1;
- LevelControlOptions optionsMask = 2;
- LevelControlOptions optionsOverride = 3;
+ OptionsBitmap optionsMask = 2;
+ OptionsBitmap optionsOverride = 3;
}
request struct MoveWithOnOffRequest {
- MoveMode moveMode = 0;
+ MoveModeEnum moveMode = 0;
nullable int8u rate = 1;
- LevelControlOptions optionsMask = 2;
- LevelControlOptions optionsOverride = 3;
+ OptionsBitmap optionsMask = 2;
+ OptionsBitmap optionsOverride = 3;
}
request struct StepWithOnOffRequest {
- StepMode stepMode = 0;
+ StepModeEnum stepMode = 0;
int8u stepSize = 1;
nullable int16u transitionTime = 2;
- LevelControlOptions optionsMask = 3;
- LevelControlOptions optionsOverride = 4;
+ OptionsBitmap optionsMask = 3;
+ OptionsBitmap optionsOverride = 4;
}
request struct StopWithOnOffRequest {
- LevelControlOptions optionsMask = 0;
- LevelControlOptions optionsOverride = 1;
+ OptionsBitmap optionsMask = 0;
+ OptionsBitmap optionsOverride = 1;
}
command MoveToLevel(MoveToLevelRequest): DefaultSuccess = 0;
@@ -538,6 +563,8 @@ server cluster LevelControl = 8 {
/** An interface for reading the value of a binary measurement and accessing various characteristics of that measurement. */
server cluster BinaryInputBasic = 15 {
+ revision 1; // NOTE: Default/not specifically set
+
attribute boolean outOfService = 81;
attribute boolean presentValue = 85;
readonly attribute bitmap8 statusFlags = 111;
@@ -551,6 +578,8 @@ server cluster BinaryInputBasic = 15 {
/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */
server cluster Descriptor = 29 {
+ revision 2;
+
bitmap Feature : bitmap32 {
kTagList = 0x1;
}
@@ -582,6 +611,8 @@ server cluster Descriptor = 29 {
/** The Binding Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for supporting the binding table. */
server cluster Binding = 30 {
+ revision 1; // NOTE: Default/not specifically set
+
fabric_scoped struct TargetStruct {
optional node_id node = 1;
optional group_id group = 2;
@@ -604,6 +635,8 @@ server cluster Binding = 30 {
and enforce Access Control for the Node's endpoints and their associated
cluster instances. */
server cluster AccessControl = 31 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AccessControlEntryAuthModeEnum : enum8 {
kPASE = 1;
kCASE = 2;
@@ -674,6 +707,8 @@ server cluster AccessControl = 31 {
/** This cluster provides a standardized way for a Node (typically a Bridge, but could be any Node) to expose action information. */
server cluster Actions = 37 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ActionErrorEnum : enum8 {
kUnknown = 0;
kInterrupted = 1;
@@ -761,6 +796,8 @@ server cluster Actions = 37 {
Commissioning and operational determination of Node characteristics, such as Vendor ID, Product ID and serial number,
which apply to the whole Node. Also allows setting user device information such as location. */
server cluster BasicInformation = 40 {
+ revision 3;
+
enum ColorEnum : enum8 {
kBlack = 0;
kNavy = 1;
@@ -839,6 +876,8 @@ server cluster BasicInformation = 40 {
readonly attribute char_string<32> uniqueID = 18;
readonly attribute CapabilityMinimaStruct capabilityMinima = 19;
readonly attribute ProductAppearanceStruct productAppearance = 20;
+ readonly attribute int32u specificationVersion = 21;
+ readonly attribute int16u maxPathsPerInvoke = 22;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -849,6 +888,8 @@ server cluster BasicInformation = 40 {
/** Provides an interface for providing OTA software updates */
client cluster OtaSoftwareUpdateProvider = 41 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ApplyUpdateActionEnum : enum8 {
kProceed = 0;
kAwaitNextAction = 1;
@@ -923,6 +964,8 @@ client cluster OtaSoftwareUpdateProvider = 41 {
/** Provides an interface for downloading and applying OTA software updates */
server cluster OtaSoftwareUpdateRequestor = 42 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AnnouncementReasonEnum : enum8 {
kSimpleAnnouncement = 0;
kUpdateAvailable = 1;
@@ -1001,7 +1044,9 @@ server cluster OtaSoftwareUpdateRequestor = 42 {
standards. As such, Nodes that visually or audibly convey information need a mechanism by which
they can be configured to use a user’s preferred language, units, etc */
server cluster LocalizationConfiguration = 43 {
- attribute char_string<35> activeLocale = 0;
+ revision 1; // NOTE: Default/not specifically set
+
+ attribute access(write: manage) char_string<35> activeLocale = 0;
readonly attribute char_string supportedLocales[] = 1;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
@@ -1016,6 +1061,8 @@ server cluster LocalizationConfiguration = 43 {
or audibly convey time information need a mechanism by which they can be configured to use a
user’s preferred format. */
server cluster TimeFormatLocalization = 44 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CalendarTypeEnum : enum8 {
kBuddhist = 0;
kChinese = 1;
@@ -1040,8 +1087,8 @@ server cluster TimeFormatLocalization = 44 {
kCalendarFormat = 0x1;
}
- attribute HourFormatEnum hourFormat = 0;
- attribute CalendarTypeEnum activeCalendarType = 1;
+ attribute access(write: manage) HourFormatEnum hourFormat = 0;
+ attribute access(write: manage) CalendarTypeEnum activeCalendarType = 1;
readonly attribute CalendarTypeEnum supportedCalendarTypes[] = 2;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
@@ -1056,6 +1103,8 @@ server cluster TimeFormatLocalization = 44 {
user. As such, Nodes that visually or audibly convey measurable values to the user need a
mechanism by which they can be configured to use a user’s preferred unit. */
server cluster UnitLocalization = 45 {
+ revision 1;
+
enum TempUnitEnum : enum8 {
kFahrenheit = 0;
kCelsius = 1;
@@ -1066,7 +1115,7 @@ server cluster UnitLocalization = 45 {
kTemperatureUnit = 0x1;
}
- attribute TempUnitEnum temperatureUnit = 0;
+ attribute access(write: manage) TempUnitEnum temperatureUnit = 0;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -1077,7 +1126,9 @@ server cluster UnitLocalization = 45 {
/** This cluster is used to describe the configuration and capabilities of a Device's power system. */
server cluster PowerSourceConfiguration = 46 {
- readonly attribute int8u sources[] = 0;
+ revision 1;
+
+ readonly attribute endpoint_no sources[] = 0;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -1088,6 +1139,8 @@ server cluster PowerSourceConfiguration = 46 {
/** This cluster is used to describe the configuration and capabilities of a physical power source that provides power to the Node. */
server cluster PowerSource = 47 {
+ revision 1; // NOTE: Default/not specifically set
+
enum BatApprovedChemistryEnum : enum16 {
kUnspecified = 0;
kAlkaline = 1;
@@ -1320,6 +1373,8 @@ server cluster PowerSource = 47 {
/** This cluster is used to manage global aspects of the Commissioning flow. */
server cluster GeneralCommissioning = 48 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CommissioningErrorEnum : enum8 {
kOK = 0;
kValueOutsideRange = 1;
@@ -1358,13 +1413,13 @@ server cluster GeneralCommissioning = 48 {
request struct SetRegulatoryConfigRequest {
RegulatoryLocationTypeEnum newRegulatoryConfig = 0;
- char_string countryCode = 1;
+ char_string<2> countryCode = 1;
int64u breadcrumb = 2;
}
response struct ArmFailSafeResponse = 1 {
CommissioningErrorEnum errorCode = 0;
- char_string debugText = 1;
+ char_string<128> debugText = 1;
}
response struct SetRegulatoryConfigResponse = 3 {
@@ -1384,6 +1439,8 @@ server cluster GeneralCommissioning = 48 {
/** Functionality to configure, enable, disable network credentials and access on a Matter device. */
server cluster NetworkCommissioning = 49 {
+ revision 1; // NOTE: Default/not specifically set
+
enum NetworkCommissioningStatusEnum : enum8 {
kSuccess = 0;
kOutOfRange = 1;
@@ -1413,6 +1470,7 @@ server cluster NetworkCommissioning = 49 {
kWiFiNetworkInterface = 0x1;
kThreadNetworkInterface = 0x2;
kEthernetNetworkInterface = 0x4;
+ kPerDeviceCredentials = 0x8;
}
bitmap ThreadCapabilitiesBitmap : bitmap16 {
@@ -1429,11 +1487,14 @@ server cluster NetworkCommissioning = 49 {
kWPAPersonal = 0x4;
kWPA2Personal = 0x8;
kWPA3Personal = 0x10;
+ kWPA3MatterPDC = 0x20;
}
struct NetworkInfoStruct {
octet_string<32> networkID = 0;
boolean connected = 1;
+ optional nullable octet_string<20> networkIdentifier = 2;
+ optional nullable octet_string<20> clientIdentifier = 3;
}
struct ThreadInterfaceScanResultStruct {
@@ -1480,6 +1541,9 @@ server cluster NetworkCommissioning = 49 {
octet_string<32> ssid = 0;
octet_string<64> credentials = 1;
optional int64u breadcrumb = 2;
+ optional octet_string<140> networkIdentity = 3;
+ optional octet_string<20> clientIdentifier = 4;
+ optional octet_string<32> possessionNonce = 5;
}
request struct AddOrUpdateThreadNetworkRequest {
@@ -1514,6 +1578,8 @@ server cluster NetworkCommissioning = 49 {
NetworkCommissioningStatusEnum networkingStatus = 0;
optional char_string<512> debugText = 1;
optional int8u networkIndex = 2;
+ optional octet_string<140> clientIdentity = 3;
+ optional octet_string<64> possessionSignature = 4;
}
response struct ConnectNetworkResponse = 7 {
@@ -1532,6 +1598,8 @@ server cluster NetworkCommissioning = 49 {
/** The cluster provides commands for retrieving unstructured diagnostic logs from a Node that may be used to aid in diagnostics. */
server cluster DiagnosticLogs = 50 {
+ revision 1; // NOTE: Default/not specifically set
+
enum IntentEnum : enum8 {
kEndUserSupport = 0;
kNetworkDiag = 1;
@@ -1569,6 +1637,8 @@ server cluster DiagnosticLogs = 50 {
/** The General Diagnostics Cluster, along with other diagnostics clusters, provide a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster GeneralDiagnostics = 51 {
+ revision 1; // NOTE: Default/not specifically set
+
enum BootReasonEnum : enum8 {
kUnspecified = 0;
kPowerOnReboot = 1;
@@ -1669,11 +1739,19 @@ server cluster GeneralDiagnostics = 51 {
int64u eventTrigger = 1;
}
+ response struct TimeSnapshotResponse = 2 {
+ systime_us systemTimeUs = 0;
+ nullable epoch_us UTCTimeUs = 1;
+ }
+
command access(invoke: manage) TestEventTrigger(TestEventTriggerRequest): DefaultSuccess = 0;
+ command TimeSnapshot(): TimeSnapshotResponse = 1;
}
/** The Software Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster SoftwareDiagnostics = 52 {
+ revision 1; // NOTE: Default/not specifically set
+
bitmap Feature : bitmap32 {
kWatermarks = 0x1;
}
@@ -1708,6 +1786,8 @@ server cluster SoftwareDiagnostics = 52 {
/** The Thread Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems */
server cluster ThreadNetworkDiagnostics = 53 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ConnectionStatusEnum : enum8 {
kConnected = 0;
kNotConnected = 1;
@@ -1806,9 +1886,9 @@ server cluster ThreadNetworkDiagnostics = 53 {
readonly attribute NeighborTableStruct neighborTable[] = 7;
readonly attribute RouteTableStruct routeTable[] = 8;
readonly attribute nullable int32u partitionId = 9;
- readonly attribute nullable int8u weighting = 10;
- readonly attribute nullable int8u dataVersion = 11;
- readonly attribute nullable int8u stableDataVersion = 12;
+ readonly attribute nullable int16u weighting = 10;
+ readonly attribute nullable int16u dataVersion = 11;
+ readonly attribute nullable int16u stableDataVersion = 12;
readonly attribute nullable int8u leaderRouterId = 13;
readonly attribute int16u detachedRoleCount = 14;
readonly attribute int16u childRoleCount = 15;
@@ -1866,11 +1946,13 @@ server cluster ThreadNetworkDiagnostics = 53 {
readonly attribute bitmap32 featureMap = 65532;
readonly attribute int16u clusterRevision = 65533;
- command ResetCounts(): DefaultSuccess = 0;
+ command access(invoke: manage) ResetCounts(): DefaultSuccess = 0;
}
/** The Wi-Fi Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster WiFiNetworkDiagnostics = 54 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AssociationFailureCauseEnum : enum8 {
kUnknown = 0;
kAssociationFailed = 1;
@@ -1912,7 +1994,7 @@ server cluster WiFiNetworkDiagnostics = 54 {
}
info event AssociationFailure = 1 {
- AssociationFailureCauseEnum associationFailure = 0;
+ AssociationFailureCauseEnum associationFailureCause = 0;
int16u status = 1;
}
@@ -1945,6 +2027,8 @@ server cluster WiFiNetworkDiagnostics = 54 {
/** The Ethernet Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster EthernetNetworkDiagnostics = 55 {
+ revision 1; // NOTE: Default/not specifically set
+
enum PHYRateEnum : enum8 {
kRate10M = 0;
kRate100M = 1;
@@ -1984,6 +2068,8 @@ server cluster EthernetNetworkDiagnostics = 55 {
/** Accurate time is required for a number of reasons, including scheduling, display and validating security materials. */
server cluster TimeSynchronization = 56 {
+ revision 2;
+
enum GranularityEnum : enum8 {
kNoTimeGranularity = 0;
kMinutesGranularity = 1;
@@ -2126,6 +2212,8 @@ server cluster TimeSynchronization = 56 {
Two types of switch devices are supported: latching switch (e.g. rocker switch) and momentary switch (e.g. push button), distinguished with their feature flags.
Interactions with the switch device are exposed as attributes (for the latching switch) and as events (for both types of switches). An interested party MAY subscribe to these attributes/events and thus be informed of the interactions, and can perform actions based on this, for example by sending commands to perform an action such as controlling a light or a window shade. */
server cluster Switch = 59 {
+ revision 1; // NOTE: Default/not specifically set
+
bitmap Feature : bitmap32 {
kLatchingSwitch = 0x1;
kMomentarySwitch = 0x2;
@@ -2176,6 +2264,8 @@ server cluster Switch = 59 {
/** Commands to trigger a Node to allow a new Administrator to commission it. */
server cluster AdministratorCommissioning = 60 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CommissioningWindowStatusEnum : enum8 {
kWindowNotOpen = 0;
kEnhancedWindowOpen = 1;
@@ -2221,6 +2311,8 @@ server cluster AdministratorCommissioning = 60 {
/** This cluster is used to add or remove Operational Credentials on a Commissionee or Node, as well as manage the associated Fabrics. */
server cluster OperationalCredentials = 62 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CertificateChainTypeEnum : enum8 {
kDACCertificate = 1;
kPAICertificate = 2;
@@ -2337,6 +2429,8 @@ server cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
server cluster GroupKeyManagement = 63 {
+ revision 1; // NOTE: Default/not specifically set
+
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
kCacheAndSync = 1;
@@ -2410,6 +2504,8 @@ server cluster GroupKeyManagement = 63 {
/** The Fixed Label Cluster provides a feature for the device to tag an endpoint with zero or more read only
labels. */
server cluster FixedLabel = 64 {
+ revision 1; // NOTE: Default/not specifically set
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
@@ -2426,6 +2522,8 @@ server cluster FixedLabel = 64 {
/** The User Label Cluster provides a feature to tag an endpoint with zero or more labels. */
server cluster UserLabel = 65 {
+ revision 1; // NOTE: Default/not specifically set
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
@@ -2442,6 +2540,8 @@ server cluster UserLabel = 65 {
/** This cluster provides an interface to a boolean state called StateValue. */
server cluster BooleanState = 69 {
+ revision 1;
+
info event StateChange = 0 {
boolean stateValue = 0;
}
@@ -2455,76 +2555,10 @@ server cluster BooleanState = 69 {
readonly attribute int16u clusterRevision = 65533;
}
-/** Allows servers to ensure that listed clients are notified when a server is available for communication. */
-server cluster IcdManagement = 70 {
- bitmap Feature : bitmap32 {
- kCheckInProtocolSupport = 0x1;
- kUserActiveModeTrigger = 0x2;
- kLongIdleTimeSupport = 0x4;
- }
-
- bitmap UserActiveModeTriggerBitmap : bitmap32 {
- kPowerCycle = 0x1;
- kSettingsMenu = 0x2;
- kCustomInstruction = 0x4;
- kDeviceManual = 0x8;
- kActuateSensor = 0x10;
- kActuateSensorSeconds = 0x20;
- kActuateSensorTimes = 0x40;
- kActuateSensorLightsBlink = 0x80;
- kResetButton = 0x100;
- kResetButtonLightsBlink = 0x200;
- kResetButtonSeconds = 0x400;
- kResetButtonTimes = 0x800;
- kSetupButton = 0x1000;
- kSetupButtonSeconds = 0x2000;
- kSetupButtonLightsBlink = 0x4000;
- kSetupButtonTimes = 0x8000;
- kAppDefinedButton = 0x10000;
- }
-
- fabric_scoped struct MonitoringRegistrationStruct {
- fabric_sensitive node_id checkInNodeID = 1;
- fabric_sensitive int64u monitoredSubject = 2;
- fabric_idx fabricIndex = 254;
- }
-
- readonly attribute int32u idleModeDuration = 0;
- readonly attribute int32u activeModeDuration = 1;
- readonly attribute int16u activeModeThreshold = 2;
- readonly attribute access(read: administer) MonitoringRegistrationStruct registeredClients[] = 3;
- readonly attribute access(read: administer) int32u ICDCounter = 4;
- readonly attribute int16u clientsSupportedPerFabric = 5;
- readonly attribute command_id generatedCommandList[] = 65528;
- readonly attribute command_id acceptedCommandList[] = 65529;
- readonly attribute event_id eventList[] = 65530;
- readonly attribute attrib_id attributeList[] = 65531;
- readonly attribute bitmap32 featureMap = 65532;
- readonly attribute int16u clusterRevision = 65533;
-
- request struct RegisterClientRequest {
- node_id checkInNodeID = 0;
- int64u monitoredSubject = 1;
- octet_string<16> key = 2;
- optional octet_string<16> verificationKey = 3;
- }
-
- request struct UnregisterClientRequest {
- node_id checkInNodeID = 0;
- optional octet_string<16> verificationKey = 1;
- }
-
- response struct RegisterClientResponse = 1 {
- int32u ICDCounter = 0;
- }
-
- fabric command access(invoke: manage) RegisterClient(RegisterClientRequest): RegisterClientResponse = 0;
- fabric command access(invoke: manage) UnregisterClient(UnregisterClientRequest): DefaultSuccess = 2;
- command access(invoke: manage) StayActiveRequest(): DefaultSuccess = 3;
-}
-
/** Attributes and commands for selecting a mode from a list of supported options. */
server cluster ModeSelect = 80 {
+ revision 2;
+
bitmap Feature : bitmap32 {
kOnOff = 0x1;
}
@@ -2563,6 +2597,8 @@ server cluster ModeSelect = 80 {
/** Attributes and commands for selecting a mode from a list of supported options. */
server cluster LaundryWasherMode = 81 {
+ revision 2;
+
enum ModeTag : enum16 {
kNormal = 16384;
kDelicate = 16385;
@@ -2610,6 +2646,8 @@ server cluster LaundryWasherMode = 81 {
/** Attributes and commands for selecting a mode from a list of supported options. */
server cluster RefrigeratorAndTemperatureControlledCabinetMode = 82 {
+ revision 2;
+
enum ModeTag : enum16 {
kRapidCool = 16384;
kRapidFreeze = 16385;
@@ -2655,6 +2693,8 @@ server cluster RefrigeratorAndTemperatureControlledCabinetMode = 82 {
/** This cluster supports remotely monitoring and controling the different typs of functionality available to a washing device, such as a washing machine. */
server cluster LaundryWasherControls = 83 {
+ revision 1; // NOTE: Default/not specifically set
+
enum NumberOfRinsesEnum : enum8 {
kNone = 0;
kNormal = 1;
@@ -2681,6 +2721,8 @@ server cluster LaundryWasherControls = 83 {
/** Attributes and commands for selecting a mode from a list of supported options. */
server cluster RvcRunMode = 84 {
+ revision 2;
+
enum ModeTag : enum16 {
kIdle = 16384;
kCleaning = 16385;
@@ -2736,6 +2778,8 @@ server cluster RvcRunMode = 84 {
/** Attributes and commands for selecting a mode from a list of supported options. */
server cluster RvcCleanMode = 85 {
+ revision 2;
+
enum ModeTag : enum16 {
kDeepClean = 16384;
kVacuum = 16385;
@@ -2785,6 +2829,8 @@ server cluster RvcCleanMode = 85 {
/** Attributes and commands for configuring the temperature control, and reporting temperature. */
server cluster TemperatureControl = 86 {
+ revision 1; // NOTE: Default/not specifically set
+
bitmap Feature : bitmap32 {
kTemperatureNumber = 0x1;
kTemperatureLevel = 0x2;
@@ -2810,6 +2856,8 @@ server cluster TemperatureControl = 86 {
/** Attributes and commands for configuring the Refrigerator alarm. */
server cluster RefrigeratorAlarm = 87 {
+ revision 1; // NOTE: Default/not specifically set
+
bitmap AlarmMap : bitmap32 {
kDoorOpen = 0x1;
}
@@ -2834,6 +2882,8 @@ server cluster RefrigeratorAlarm = 87 {
/** Attributes and commands for selecting a mode from a list of supported options. */
server cluster DishwasherMode = 89 {
+ revision 2;
+
enum ModeTag : enum16 {
kNormal = 16384;
kHeavy = 16385;
@@ -2880,6 +2930,8 @@ server cluster DishwasherMode = 89 {
/** Attributes for reporting air quality classification */
server cluster AirQuality = 91 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AirQualityEnum : enum8 {
kUnknown = 0;
kGood = 1;
@@ -2908,6 +2960,8 @@ server cluster AirQuality = 91 {
/** This cluster provides an interface for observing and managing the state of smoke and CO alarms. */
server cluster SmokeCoAlarm = 92 {
+ revision 1;
+
enum AlarmStateEnum : enum8 {
kNormal = 0;
kWarning = 1;
@@ -3017,6 +3071,8 @@ server cluster SmokeCoAlarm = 92 {
/** Attributes and commands for configuring the Dishwasher alarm. */
server cluster DishwasherAlarm = 93 {
+ revision 1; // NOTE: Default/not specifically set
+
bitmap AlarmMap : bitmap32 {
kInflowError = 0x1;
kDrainError = 0x2;
@@ -3060,8 +3116,44 @@ server cluster DishwasherAlarm = 93 {
command ModifyEnabledAlarms(ModifyEnabledAlarmsRequest): DefaultSuccess = 1;
}
+/** Attributes and commands for selecting a mode from a list of supported options. */
+provisional server cluster MicrowaveOvenMode = 94 {
+ revision 1;
+
+ enum ModeTag : enum16 {
+ kNormal = 16384;
+ kDefrost = 16385;
+ }
+
+ bitmap Feature : bitmap32 {
+ kOnOff = 0x1;
+ }
+
+ struct ModeTagStruct {
+ optional vendor_id mfgCode = 0;
+ enum16 value = 1;
+ }
+
+ struct ModeOptionStruct {
+ char_string<64> label = 0;
+ int8u mode = 1;
+ ModeTagStruct modeTags[] = 2;
+ }
+
+ readonly attribute ModeOptionStruct supportedModes[] = 0;
+ readonly attribute int8u currentMode = 1;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+}
+
/** This cluster supports remotely monitoring and, where supported, changing the operational state of any device where a state machine is a part of the operation. */
server cluster OperationalState = 96 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ErrorStateEnum : enum8 {
kNoError = 0;
kUnableToStartOrResume = 1;
@@ -3122,6 +3214,8 @@ server cluster OperationalState = 96 {
/** This cluster supports remotely monitoring and, where supported, changing the operational state of a Robotic Vacuum. */
server cluster RvcOperationalState = 97 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ErrorStateEnum : enum8 {
kFailedToFindChargingDock = 64;
kStuck = 65;
@@ -3183,6 +3277,8 @@ server cluster RvcOperationalState = 97 {
/** Attributes and commands for monitoring HEPA filters in a device */
server cluster HepaFilterMonitoring = 113 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ChangeIndicationEnum : enum8 {
kOK = 0;
kWarning = 1;
@@ -3231,6 +3327,8 @@ server cluster HepaFilterMonitoring = 113 {
/** Attributes and commands for monitoring activated carbon filters in a device */
server cluster ActivatedCarbonFilterMonitoring = 114 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ChangeIndicationEnum : enum8 {
kOK = 0;
kWarning = 1;
@@ -3279,6 +3377,8 @@ server cluster ActivatedCarbonFilterMonitoring = 114 {
/** Provides an interface for controlling and adjusting automatic window coverings. */
server cluster WindowCovering = 258 {
+ revision 5;
+
enum EndProductType : enum8 {
kRollerShade = 0;
kRomanShade = 1;
@@ -3423,6 +3523,8 @@ server cluster WindowCovering = 258 {
/** This cluster provides control of a barrier (garage door). */
server cluster BarrierControl = 259 {
+ revision 1; // NOTE: Default/not specifically set
+
bitmap BarrierControlCapabilities : bitmap8 {
kPartialBarrier = 0x1;
}
@@ -3455,6 +3557,8 @@ server cluster BarrierControl = 259 {
/** An interface for configuring and controlling pumps. */
server cluster PumpConfigurationAndControl = 512 {
+ revision 3;
+
enum ControlModeEnum : enum8 {
kConstantSpeed = 0;
kConstantPressure = 1;
@@ -3577,6 +3681,8 @@ server cluster PumpConfigurationAndControl = 512 {
/** An interface for configuring and controlling the functionality of a thermostat. */
server cluster Thermostat = 513 {
+ revision 6;
+
enum SetpointAdjustMode : enum8 {
kHeat = 0;
kCool = 1;
@@ -3673,6 +3779,8 @@ server cluster Thermostat = 513 {
/** An interface for controlling a fan in a heating/cooling system. */
provisional server cluster FanControl = 514 {
+ revision 4;
+
enum AirflowDirectionEnum : enum8 {
kForward = 0;
kReverse = 1;
@@ -3693,8 +3801,8 @@ provisional server cluster FanControl = 514 {
kOffLowHigh = 1;
kOffLowMedHighAuto = 2;
kOffLowHighAuto = 3;
- kOffOnAuto = 4;
- kOffOn = 5;
+ kOffHighAuto = 4;
+ kOffHigh = 5;
}
enum StepDirectionEnum : enum8 {
@@ -3723,7 +3831,7 @@ provisional server cluster FanControl = 514 {
}
attribute FanModeEnum fanMode = 0;
- attribute FanModeSequenceEnum fanModeSequence = 1;
+ readonly attribute FanModeSequenceEnum fanModeSequence = 1;
attribute nullable percent percentSetting = 2;
readonly attribute percent percentCurrent = 3;
readonly attribute int8u speedMax = 4;
@@ -3752,9 +3860,30 @@ provisional server cluster FanControl = 514 {
/** An interface for configuring the user interface of a thermostat (which may be remote from the thermostat). */
server cluster ThermostatUserInterfaceConfiguration = 516 {
- attribute enum8 temperatureDisplayMode = 0;
- attribute access(write: manage) enum8 keypadLockout = 1;
- attribute access(write: manage) enum8 scheduleProgrammingVisibility = 2;
+ revision 2;
+
+ enum KeypadLockoutEnum : enum8 {
+ kNoLockout = 0;
+ kLockout1 = 1;
+ kLockout2 = 2;
+ kLockout3 = 3;
+ kLockout4 = 4;
+ kLockout5 = 5;
+ }
+
+ enum ScheduleProgrammingVisibilityEnum : enum8 {
+ kScheduleProgrammingPermitted = 0;
+ kScheduleProgrammingDenied = 1;
+ }
+
+ enum TemperatureDisplayModeEnum : enum8 {
+ kCelsius = 0;
+ kFahrenheit = 1;
+ }
+
+ attribute TemperatureDisplayModeEnum temperatureDisplayMode = 0;
+ attribute access(write: manage) KeypadLockoutEnum keypadLockout = 1;
+ attribute access(write: manage) ScheduleProgrammingVisibilityEnum scheduleProgrammingVisibility = 2;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -3765,6 +3894,8 @@ server cluster ThermostatUserInterfaceConfiguration = 516 {
/** Attributes and commands for controlling the color properties of a color-capable light. */
server cluster ColorControl = 768 {
+ revision 6;
+
enum ColorLoopAction : enum8 {
kDeactivate = 0;
kActivateFromColorLoopStartEnhancedHue = 1;
@@ -4064,6 +4195,8 @@ server cluster ColorControl = 768 {
/** Attributes and commands for configuring a lighting ballast. */
provisional server cluster BallastConfiguration = 769 {
+ revision 4;
+
bitmap BallastStatusBitmap : bitmap8 {
kBallastNonOperational = 0x1;
kLampFailure = 0x2;
@@ -4097,6 +4230,8 @@ provisional server cluster BallastConfiguration = 769 {
/** Attributes and commands for configuring the measurement of illuminance, and reporting illuminance measurements. */
server cluster IlluminanceMeasurement = 1024 {
+ revision 3;
+
enum LightSensorTypeEnum : enum8 {
kPhotodiode = 0;
kCMOS = 1;
@@ -4117,9 +4252,11 @@ server cluster IlluminanceMeasurement = 1024 {
/** Attributes and commands for configuring the measurement of temperature, and reporting temperature measurements. */
server cluster TemperatureMeasurement = 1026 {
- readonly attribute nullable int16s measuredValue = 0;
- readonly attribute nullable int16s minMeasuredValue = 1;
- readonly attribute nullable int16s maxMeasuredValue = 2;
+ revision 1; // NOTE: Default/not specifically set
+
+ readonly attribute nullable temperature measuredValue = 0;
+ readonly attribute nullable temperature minMeasuredValue = 1;
+ readonly attribute nullable temperature maxMeasuredValue = 2;
readonly attribute int16u tolerance = 3;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
@@ -4131,6 +4268,8 @@ server cluster TemperatureMeasurement = 1026 {
/** Attributes and commands for configuring the measurement of pressure, and reporting pressure measurements. */
server cluster PressureMeasurement = 1027 {
+ revision 3;
+
bitmap Feature : bitmap32 {
kExtended = 0x1;
}
@@ -4148,6 +4287,8 @@ server cluster PressureMeasurement = 1027 {
/** Attributes and commands for configuring the measurement of flow, and reporting flow measurements. */
server cluster FlowMeasurement = 1028 {
+ revision 1; // NOTE: Default/not specifically set
+
readonly attribute nullable int16u measuredValue = 0;
readonly attribute nullable int16u minMeasuredValue = 1;
readonly attribute nullable int16u maxMeasuredValue = 2;
@@ -4162,6 +4303,8 @@ server cluster FlowMeasurement = 1028 {
/** Attributes and commands for configuring the measurement of relative humidity, and reporting relative humidity measurements. */
server cluster RelativeHumidityMeasurement = 1029 {
+ revision 3;
+
readonly attribute nullable int16u measuredValue = 0;
readonly attribute nullable int16u minMeasuredValue = 1;
readonly attribute nullable int16u maxMeasuredValue = 2;
@@ -4176,6 +4319,8 @@ server cluster RelativeHumidityMeasurement = 1029 {
/** Attributes and commands for configuring occupancy sensing, and reporting occupancy status. */
server cluster OccupancySensing = 1030 {
+ revision 3;
+
enum OccupancySensorTypeEnum : enum8 {
kPIR = 0;
kUltrasonic = 1;
@@ -4206,6 +4351,8 @@ server cluster OccupancySensing = 1030 {
/** Attributes for reporting carbon monoxide concentration measurements */
server cluster CarbonMonoxideConcentrationMeasurement = 1036 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -4261,6 +4408,8 @@ server cluster CarbonMonoxideConcentrationMeasurement = 1036 {
/** Attributes for reporting carbon dioxide concentration measurements */
server cluster CarbonDioxideConcentrationMeasurement = 1037 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -4316,6 +4465,8 @@ server cluster CarbonDioxideConcentrationMeasurement = 1037 {
/** Attributes for reporting nitrogen dioxide concentration measurements */
server cluster NitrogenDioxideConcentrationMeasurement = 1043 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -4371,6 +4522,8 @@ server cluster NitrogenDioxideConcentrationMeasurement = 1043 {
/** Attributes for reporting ozone concentration measurements */
server cluster OzoneConcentrationMeasurement = 1045 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -4426,6 +4579,8 @@ server cluster OzoneConcentrationMeasurement = 1045 {
/** Attributes for reporting PM2.5 concentration measurements */
server cluster Pm25ConcentrationMeasurement = 1066 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -4481,6 +4636,8 @@ server cluster Pm25ConcentrationMeasurement = 1066 {
/** Attributes for reporting formaldehyde concentration measurements */
server cluster FormaldehydeConcentrationMeasurement = 1067 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -4536,6 +4693,8 @@ server cluster FormaldehydeConcentrationMeasurement = 1067 {
/** Attributes for reporting PM1 concentration measurements */
server cluster Pm1ConcentrationMeasurement = 1068 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -4591,6 +4750,8 @@ server cluster Pm1ConcentrationMeasurement = 1068 {
/** Attributes for reporting PM10 concentration measurements */
server cluster Pm10ConcentrationMeasurement = 1069 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -4646,6 +4807,8 @@ server cluster Pm10ConcentrationMeasurement = 1069 {
/** Attributes for reporting total volatile organic compounds concentration measurements */
server cluster TotalVolatileOrganicCompoundsConcentrationMeasurement = 1070 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -4701,6 +4864,8 @@ server cluster TotalVolatileOrganicCompoundsConcentrationMeasurement = 1070 {
/** Attributes for reporting radon concentration measurements */
server cluster RadonConcentrationMeasurement = 1071 {
+ revision 3;
+
enum LevelValueEnum : enum8 {
kUnknown = 0;
kLow = 1;
@@ -4756,7 +4921,9 @@ server cluster RadonConcentrationMeasurement = 1071 {
/** This cluster provides an interface for managing low power mode on a device that supports the Wake On LAN protocol. */
server cluster WakeOnLan = 1283 {
- readonly attribute char_string<32> MACAddress = 0;
+ revision 1; // NOTE: Default/not specifically set
+
+ readonly attribute char_string<12> MACAddress = 0;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -4767,6 +4934,8 @@ server cluster WakeOnLan = 1283 {
/** This cluster provides an interface for managing low power mode on a device. */
server cluster LowPower = 1288 {
+ revision 1; // NOTE: Default/not specifically set
+
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -4779,6 +4948,8 @@ server cluster LowPower = 1288 {
/** Attributes related to the electrical properties of a device. This cluster is used by power outlets and other devices that need to provide instantaneous data as opposed to metrology data which should be retrieved from the metering cluster.. */
server cluster ElectricalMeasurement = 2820 {
+ revision 3;
+
readonly attribute bitmap32 measurementType = 0;
readonly attribute int32s totalActivePower = 772;
readonly attribute int16u rmsVoltage = 1285;
@@ -4800,6 +4971,8 @@ server cluster ElectricalMeasurement = 2820 {
/** The Test Cluster is meant to validate the generated code */
internal server cluster UnitTesting = 4294048773 {
+ revision 1; // NOTE: Default/not specifically set
+
enum SimpleEnum : enum8 {
kUnspecified = 0;
kValueA = 1;
@@ -5122,6 +5295,8 @@ internal server cluster UnitTesting = 4294048773 {
/** The Fault Injection Cluster provide a means for a test harness to configure faults(for example triggering a fault in the system). */
internal server cluster FaultInjection = 4294048774 {
+ revision 1; // NOTE: Default/not specifically set
+
enum FaultType : enum8 {
kUnspecified = 0;
kSystemFault = 1;
@@ -5248,12 +5423,14 @@ endpoint 0 {
callback attribute uniqueID;
callback attribute capabilityMinima;
callback attribute productAppearance;
+ callback attribute specificationVersion;
+ callback attribute maxPathsPerInvoke;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute eventList;
callback attribute attributeList;
ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 2;
+ ram attribute clusterRevision default = 3;
}
server cluster OtaSoftwareUpdateRequestor {
@@ -5399,9 +5576,11 @@ endpoint 0 {
callback attribute eventList;
callback attribute attributeList;
ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 1;
+ ram attribute clusterRevision default = 0x0002;
handle command TestEventTrigger;
+ handle command TimeSnapshot;
+ handle command TimeSnapshotResponse;
}
server cluster SoftwareDiagnostics {
@@ -5542,7 +5721,7 @@ endpoint 0 {
ram attribute timeZoneDatabase default = 0;
callback attribute timeZoneListMaxSize default = 3;
callback attribute DSTOffsetListMaxSize;
- ram attribute supportsDNSResolve default = false;
+ ram attribute supportsDNSResolve default = true;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
@@ -5633,25 +5812,6 @@ endpoint 0 {
ram attribute clusterRevision default = 1;
}
- server cluster IcdManagement {
- callback attribute idleModeDuration default = 500;
- callback attribute activeModeDuration default = 300;
- callback attribute activeModeThreshold default = 300;
- callback attribute registeredClients;
- callback attribute ICDCounter default = 0;
- callback attribute clientsSupportedPerFabric default = 2;
- callback attribute generatedCommandList;
- callback attribute acceptedCommandList;
- callback attribute attributeList;
- ram attribute featureMap default = 1;
- ram attribute clusterRevision default = 2;
-
- handle command RegisterClient;
- handle command RegisterClientResponse;
- handle command UnregisterClient;
- handle command StayActiveRequest;
- }
-
server cluster RelativeHumidityMeasurement {
ram attribute measuredValue;
ram attribute minMeasuredValue default = 0;
@@ -5713,19 +5873,15 @@ endpoint 1 {
}
server cluster Scenes {
- callback attribute sceneCount default = 0x00;
- ram attribute currentScene default = 0x00;
- ram attribute currentGroup default = 0x0000;
- ram attribute sceneValid default = 0x00;
ram attribute nameSupport default = 0x80;
ram attribute lastConfiguredBy;
ram attribute sceneTableSize default = 16;
- callback attribute remainingCapacity default = 8;
+ callback attribute fabricSceneInfo;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute eventList;
callback attribute attributeList;
- ram attribute featureMap default = 7;
+ ram attribute featureMap default = 15;
ram attribute clusterRevision default = 5;
handle command AddScene;
@@ -6067,6 +6223,17 @@ endpoint 1 {
handle command ModifyEnabledAlarms;
}
+ server cluster MicrowaveOvenMode {
+ callback attribute supportedModes;
+ callback attribute currentMode;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
+ callback attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+ }
+
server cluster OperationalState {
emits event OperationalError;
emits event OperationCompletion;
@@ -6797,19 +6964,15 @@ endpoint 2 {
}
server cluster Scenes {
- callback attribute sceneCount default = 0x00;
- ram attribute currentScene default = 0x00;
- ram attribute currentGroup default = 0x0000;
- ram attribute sceneValid default = 0x00;
ram attribute nameSupport default = 0x80;
ram attribute lastConfiguredBy;
ram attribute sceneTableSize default = 16;
- callback attribute remainingCapacity default = 8;
+ callback attribute fabricSceneInfo;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute eventList;
callback attribute attributeList;
- ram attribute featureMap default = 7;
+ ram attribute featureMap default = 15;
ram attribute clusterRevision default = 5;
handle command AddScene;
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 24e0df516f1b12..08a758eab09fd7 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
@@ -17,6 +17,12 @@
}
],
"package": [
+ {
+ "pathRelativity": "relativeToZap",
+ "path": "../../../src/app/zap-templates/app-templates.json",
+ "type": "gen-templates-json",
+ "version": "chip-v1"
+ },
{
"pathRelativity": "relativeToZap",
"path": "../../../src/app/zap-templates/zcl/zcl-with-test-extensions.json",
@@ -24,12 +30,6 @@
"category": "matter",
"version": 1,
"description": "Matter SDK ZCL data with some extensions"
- },
- {
- "pathRelativity": "relativeToZap",
- "path": "../../../src/app/zap-templates/app-templates.json",
- "type": "gen-templates-json",
- "version": "chip-v1"
}
],
"endpointTypes": [
@@ -1074,6 +1074,38 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "SpecificationVersion",
+ "code": 21,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxPathsPerInvoke",
+ "code": 22,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -1164,7 +1196,7 @@
"storageOption": "RAM",
"singleton": 1,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "3",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -2695,6 +2727,22 @@
"source": "client",
"isIncoming": 1,
"isEnabled": 1
+ },
+ {
+ "name": "TimeSnapshot",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "TimeSnapshotResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
}
],
"attributes": [
@@ -2932,7 +2980,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "1",
+ "defaultValue": "0x0002",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -3278,7 +3326,7 @@
"code": 10,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "int16u",
"included": 1,
"storageOption": "External",
"singleton": 0,
@@ -3294,7 +3342,7 @@
"code": 11,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "int16u",
"included": 1,
"storageOption": "External",
"singleton": 0,
@@ -3310,7 +3358,7 @@
"code": 12,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "int16u",
"included": 1,
"storageOption": "External",
"singleton": 0,
@@ -4878,7 +4926,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "false",
+ "defaultValue": "true",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -5819,226 +5867,6 @@
}
]
},
- {
- "name": "ICD Management",
- "code": 70,
- "mfgCode": null,
- "define": "ICD_MANAGEMENT_CLUSTER",
- "side": "server",
- "enabled": 1,
- "commands": [
- {
- "name": "RegisterClient",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "isIncoming": 1,
- "isEnabled": 1
- },
- {
- "name": "RegisterClientResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "isIncoming": 0,
- "isEnabled": 1
- },
- {
- "name": "UnregisterClient",
- "code": 2,
- "mfgCode": null,
- "source": "client",
- "isIncoming": 1,
- "isEnabled": 1
- },
- {
- "name": "StayActiveRequest",
- "code": 3,
- "mfgCode": null,
- "source": "client",
- "isIncoming": 1,
- "isEnabled": 1
- }
- ],
- "attributes": [
- {
- "name": "IdleModeDuration",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "type": "int32u",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "500",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "ActiveModeDuration",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "type": "int32u",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "300",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "ActiveModeThreshold",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "type": "int16u",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "300",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "RegisteredClients",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "array",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "ICDCounter",
- "code": 4,
- "mfgCode": null,
- "side": "server",
- "type": "int32u",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "ClientsSupportedPerFabric",
- "code": 5,
- "mfgCode": null,
- "side": "server",
- "type": "int16u",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "2",
- "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": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "2",
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- }
- ]
- },
{
"name": "Relative Humidity Measurement",
"code": 1029,
@@ -6772,102 +6600,38 @@
"isIncoming": 1,
"isEnabled": 1
},
- {
- "name": "EnhancedViewSceneResponse",
- "code": 65,
- "mfgCode": null,
- "source": "server",
- "isIncoming": 0,
- "isEnabled": 1
- },
- {
- "name": "CopyScene",
- "code": 66,
- "mfgCode": null,
- "source": "client",
- "isIncoming": 1,
- "isEnabled": 1
- },
- {
- "name": "CopySceneResponse",
- "code": 66,
- "mfgCode": null,
- "source": "server",
- "isIncoming": 0,
- "isEnabled": 1
- }
- ],
- "attributes": [
- {
- "name": "SceneCount",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "CurrentScene",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "CurrentGroup",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "type": "group_id",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0000",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ {
+ "name": "EnhancedViewSceneResponse",
+ "code": 65,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
},
{
- "name": "SceneValid",
- "code": 3,
+ "name": "CopyScene",
+ "code": 66,
"mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
},
+ {
+ "name": "CopySceneResponse",
+ "code": 66,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
{
"name": "NameSupport",
"code": 4,
"mfgCode": null,
"side": "server",
- "type": "bitmap8",
+ "type": "NameSupportBitmap",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -6911,16 +6675,16 @@
"reportableChange": 0
},
{
- "name": "RemainingCapacity",
+ "name": "FabricSceneInfo",
"code": 7,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "array",
"included": 1,
- "storageOption": "External",
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "8",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -7000,7 +6764,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "7",
+ "defaultValue": "15",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -7593,7 +7357,7 @@
"code": 15,
"mfgCode": null,
"side": "server",
- "type": "LevelControlOptions",
+ "type": "OptionsBitmap",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -10757,6 +10521,145 @@
}
]
},
+ {
+ "name": "Microwave Oven Mode",
+ "code": 94,
+ "mfgCode": null,
+ "define": "MICROWAVE_OVEN_MODE_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "apiMaturity": "provisional",
+ "attributes": [
+ {
+ "name": "SupportedModes",
+ "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": "CurrentMode",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "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": "EventList",
+ "code": 65530,
+ "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": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
{
"name": "Operational State",
"code": 96,
@@ -13237,7 +13140,7 @@
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "enum8",
+ "type": "TemperatureDisplayModeEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -13253,7 +13156,7 @@
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "enum8",
+ "type": "KeypadLockoutEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -13269,7 +13172,7 @@
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "enum8",
+ "type": "ScheduleProgrammingVisibilityEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -14792,7 +14695,7 @@
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -14808,7 +14711,7 @@
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -14824,7 +14727,7 @@
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -20390,76 +20293,12 @@
}
],
"attributes": [
- {
- "name": "SceneCount",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "CurrentScene",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "CurrentGroup",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "type": "group_id",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0000",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "SceneValid",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
{
"name": "NameSupport",
"code": 4,
"mfgCode": null,
"side": "server",
- "type": "bitmap8",
+ "type": "NameSupportBitmap",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -20503,16 +20342,16 @@
"reportableChange": 0
},
{
- "name": "RemainingCapacity",
+ "name": "FabricSceneInfo",
"code": 7,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "array",
"included": 1,
- "storageOption": "External",
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "8",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -20592,7 +20431,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "7",
+ "defaultValue": "15",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -21885,6 +21724,8 @@
"endpointId": 65534,
"networkId": 0
}
- ],
- "log": []
-}
\ No newline at end of file
+
+ ]
+}
+
+
diff --git a/examples/all-clusters-app/all-clusters-common/include/microwave-oven-mode.h b/examples/all-clusters-app/all-clusters-common/include/microwave-oven-mode.h
new file mode 100644
index 00000000000000..dd5d5b4bcaf2eb
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/include/microwave-oven-mode.h
@@ -0,0 +1,72 @@
+/*
+ *
+ * Copyright (c) 2023 Project CHIP Authors
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+
+namespace chip {
+namespace app {
+namespace Clusters {
+
+namespace MicrowaveOvenMode {
+
+const uint8_t ModeNormal = 0;
+const uint8_t ModeDefrost = 1;
+
+/// This is an application level delegate to handle MicrowaveOvenMode commands according to the specific business logic.
+class ExampleMicrowaveOvenModeDelegate : public ModeBase::Delegate
+{
+private:
+ using ModeTagStructType = detail::Structs::ModeTagStruct::Type;
+ ModeTagStructType modeTagsNormal[1] = { { .value = to_underlying(ModeTag::kNormal) } };
+ ModeTagStructType modeTagsDefrost[1] = { { .value = to_underlying(ModeTag::kDefrost) } };
+
+ const detail::Structs::ModeOptionStruct::Type kModeOptions[2] = {
+ detail::Structs::ModeOptionStruct::Type{ .label = CharSpan::fromCharString("Normal"),
+ .mode = ModeNormal,
+ .modeTags = DataModel::List(modeTagsNormal) },
+ detail::Structs::ModeOptionStruct::Type{ .label = CharSpan::fromCharString("Defrost"),
+ .mode = ModeDefrost,
+ .modeTags = DataModel::List(modeTagsDefrost) }
+ };
+
+ CHIP_ERROR Init() override;
+ void HandleChangeToMode(uint8_t mode, ModeBase::Commands::ChangeToModeResponse::Type & response) override;
+
+ CHIP_ERROR GetModeLabelByIndex(uint8_t modeIndex, MutableCharSpan & label) override;
+ CHIP_ERROR GetModeValueByIndex(uint8_t modeIndex, uint8_t & value) override;
+ CHIP_ERROR GetModeTagsByIndex(uint8_t modeIndex, DataModel::List & tags) override;
+
+public:
+ ~ExampleMicrowaveOvenModeDelegate() override = default;
+};
+
+ModeBase::Instance * Instance();
+
+void Shutdown();
+
+} // namespace MicrowaveOvenMode
+
+} // namespace Clusters
+} // namespace app
+} // namespace chip
diff --git a/examples/all-clusters-app/all-clusters-common/src/microwave-oven-mode.cpp b/examples/all-clusters-app/all-clusters-common/src/microwave-oven-mode.cpp
new file mode 100644
index 00000000000000..a7ab998dbdec9f
--- /dev/null
+++ b/examples/all-clusters-app/all-clusters-common/src/microwave-oven-mode.cpp
@@ -0,0 +1,106 @@
+/*
+ *
+ * Copyright (c) 2023 Project CHIP Authors
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include
+#include
+
+using namespace chip::app::Clusters;
+using namespace chip::app::Clusters::MicrowaveOvenMode;
+using chip::Protocols::InteractionModel::Status;
+template
+using List = chip::app::DataModel::List;
+using ModeTagStructType = chip::app::Clusters::detail::Structs::ModeTagStruct::Type;
+
+static ExampleMicrowaveOvenModeDelegate * gMicrowaveOvenModeDelegate = nullptr;
+static ModeBase::Instance * gMicrowaveOvenModeInstance = nullptr;
+
+CHIP_ERROR ExampleMicrowaveOvenModeDelegate::Init()
+{
+ return CHIP_NO_ERROR;
+}
+
+// todo refactor code by making a parent class for all ModeInstance classes to reduce flash usage.
+void ExampleMicrowaveOvenModeDelegate::HandleChangeToMode(uint8_t NewMode,
+ ModeBase::Commands::ChangeToModeResponse::Type & response)
+{
+ response.status = to_underlying(ModeBase::StatusCode::kGenericFailure);
+}
+
+CHIP_ERROR ExampleMicrowaveOvenModeDelegate::GetModeLabelByIndex(uint8_t modeIndex, chip::MutableCharSpan & label)
+{
+ if (modeIndex >= ArraySize(kModeOptions))
+ {
+ return CHIP_ERROR_PROVIDER_LIST_EXHAUSTED;
+ }
+ return chip::CopyCharSpanToMutableCharSpan(kModeOptions[modeIndex].label, label);
+}
+
+CHIP_ERROR ExampleMicrowaveOvenModeDelegate::GetModeValueByIndex(uint8_t modeIndex, uint8_t & value)
+{
+ if (modeIndex >= ArraySize(kModeOptions))
+ {
+ return CHIP_ERROR_PROVIDER_LIST_EXHAUSTED;
+ }
+ value = kModeOptions[modeIndex].mode;
+ return CHIP_NO_ERROR;
+}
+
+CHIP_ERROR ExampleMicrowaveOvenModeDelegate::GetModeTagsByIndex(uint8_t modeIndex, List & tags)
+{
+ if (modeIndex >= ArraySize(kModeOptions))
+ {
+ return CHIP_ERROR_PROVIDER_LIST_EXHAUSTED;
+ }
+
+ if (tags.size() < kModeOptions[modeIndex].modeTags.size())
+ {
+ return CHIP_ERROR_INVALID_ARGUMENT;
+ }
+
+ std::copy(kModeOptions[modeIndex].modeTags.begin(), kModeOptions[modeIndex].modeTags.end(), tags.begin());
+ tags.reduce_size(kModeOptions[modeIndex].modeTags.size());
+
+ return CHIP_NO_ERROR;
+}
+
+ModeBase::Instance * MicrowaveOvenMode::Instance()
+{
+ return gMicrowaveOvenModeInstance;
+}
+
+void MicrowaveOvenMode::Shutdown()
+{
+ if (gMicrowaveOvenModeInstance != nullptr)
+ {
+ delete gMicrowaveOvenModeInstance;
+ gMicrowaveOvenModeInstance = nullptr;
+ }
+ if (gMicrowaveOvenModeDelegate != nullptr)
+ {
+ delete gMicrowaveOvenModeDelegate;
+ gMicrowaveOvenModeDelegate = nullptr;
+ }
+}
+
+void emberAfMicrowaveOvenModeClusterInitCallback(chip::EndpointId endpointId)
+{
+ VerifyOrDie(gMicrowaveOvenModeDelegate == nullptr && gMicrowaveOvenModeInstance == nullptr);
+ gMicrowaveOvenModeDelegate = new MicrowaveOvenMode::ExampleMicrowaveOvenModeDelegate;
+ gMicrowaveOvenModeInstance =
+ new ModeBase::Instance(gMicrowaveOvenModeDelegate, endpointId, MicrowaveOvenMode::Id, chip::to_underlying(Feature::kOnOff));
+ gMicrowaveOvenModeInstance->Init();
+}
diff --git a/examples/all-clusters-app/ameba/README.md b/examples/all-clusters-app/ameba/README.md
index ab7f1a5726765f..0ccc472986ed53 100644
--- a/examples/all-clusters-app/ameba/README.md
+++ b/examples/all-clusters-app/ameba/README.md
@@ -27,11 +27,11 @@ The CHIP demo application is supported on
- Pull docker image:
- $ docker pull ghcr.io/project-chip/chip-build-ameba:22
+ $ docker pull ghcr.io/project-chip/chip-build-ameba:26
- Run docker container:
- $ docker run -it -v ${CHIP_DIR}:/root/chip ghcr.io/project-chip/chip-build-ameba:22
+ $ docker run -it -v ${CHIP_DIR}:/root/chip ghcr.io/project-chip/chip-build-ameba:26
- Setup build environment:
diff --git a/examples/all-clusters-app/ameba/main/include/LevelControlCommands.h b/examples/all-clusters-app/ameba/main/include/LevelControlCommands.h
index da82f0f6bbdaf9..f596534992e1bf 100644
--- a/examples/all-clusters-app/ameba/main/include/LevelControlCommands.h
+++ b/examples/all-clusters-app/ameba/main/include/LevelControlCommands.h
@@ -20,6 +20,8 @@
#include "controller/ReadInteraction.h"
#include
+#include
+
#if CONFIG_ENABLE_CHIP_SHELL
#include "lib/shell/Engine.h"
#include "lib/shell/commands/Help.h"
@@ -27,7 +29,9 @@
using namespace chip;
using namespace chip::app;
-using chip::app::Clusters::LevelControl::LevelControlOptions;
+using chip::app::Clusters::LevelControl::MoveModeEnum;
+using chip::app::Clusters::LevelControl::OptionsBitmap;
+using chip::app::Clusters::LevelControl::StepModeEnum;
#if CONFIG_ENABLE_CHIP_SHELL
using Shell::Engine;
@@ -40,6 +44,16 @@ Engine sShellSwitchLevelControlReadSubCommands;
Engine sShellSwitchGroupsLevelControlSubCommands;
#endif // defined(ENABLE_CHIP_SHELL)
+namespace {
+
+template
+T from_underlying(std::underlying_type_t value)
+{
+ return static_cast(value);
+}
+
+} // namespace
+
void ProcessLevelControlUnicastBindingRead(BindingCommandData * data, const EmberBindingTableEntry & binding,
OperationalDeviceProxy * peer_device)
{
@@ -159,34 +173,34 @@ void ProcessLevelControlUnicastBindingCommand(BindingCommandData * data, const E
case Clusters::LevelControl::Commands::MoveToLevel::Id:
moveToLevelCommand.level = static_cast(data->args[0]);
moveToLevelCommand.transitionTime = static_cast>(data->args[1]);
- moveToLevelCommand.optionsMask = static_cast>(data->args[2]);
- moveToLevelCommand.optionsOverride = static_cast>(data->args[3]);
+ moveToLevelCommand.optionsMask = static_cast>(data->args[2]);
+ moveToLevelCommand.optionsOverride = static_cast>(data->args[3]);
Controller::InvokeCommandRequest(peer_device->GetExchangeManager(), peer_device->GetSecureSession().Value(), binding.remote,
moveToLevelCommand, onSuccess, onFailure);
break;
case Clusters::LevelControl::Commands::Move::Id:
- moveCommand.moveMode = static_cast(data->args[0]);
+ moveCommand.moveMode = from_underlying(data->args[0]);
moveCommand.rate = static_cast>(data->args[1]);
- moveCommand.optionsMask = static_cast>(data->args[2]);
- moveCommand.optionsOverride = static_cast>(data->args[3]);
+ moveCommand.optionsMask = static_cast>(data->args[2]);
+ moveCommand.optionsOverride = static_cast>(data->args[3]);
Controller::InvokeCommandRequest(peer_device->GetExchangeManager(), peer_device->GetSecureSession().Value(), binding.remote,
moveCommand, onSuccess, onFailure);
break;
case Clusters::LevelControl::Commands::Step::Id:
- stepCommand.stepMode = static_cast(data->args[0]);
+ stepCommand.stepMode = from_underlying(data->args[0]);
stepCommand.stepSize = static_cast(data->args[1]);
stepCommand.transitionTime = static_cast>(data->args[2]);
- stepCommand.optionsMask = static_cast>(data->args[3]);
- stepCommand.optionsOverride = static_cast>(data->args[4]);
+ stepCommand.optionsMask = static_cast>(data->args[3]);
+ stepCommand.optionsOverride = static_cast>(data->args[4]);
Controller::InvokeCommandRequest(peer_device->GetExchangeManager(), peer_device->GetSecureSession().Value(), binding.remote,
stepCommand, onSuccess, onFailure);
break;
case Clusters::LevelControl::Commands::Stop::Id:
- stopCommand.optionsMask = static_cast>(data->args[0]);
- stopCommand.optionsOverride = static_cast>(data->args[1]);
+ stopCommand.optionsMask = static_cast>(data->args[0]);
+ stopCommand.optionsOverride = static_cast>(data->args[1]);
Controller::InvokeCommandRequest(peer_device->GetExchangeManager(), peer_device->GetSecureSession().Value(), binding.remote,
stopCommand, onSuccess, onFailure);
break;
@@ -194,34 +208,34 @@ void ProcessLevelControlUnicastBindingCommand(BindingCommandData * data, const E
case Clusters::LevelControl::Commands::MoveToLevelWithOnOff::Id:
moveToLevelWithOnOffCommand.level = static_cast(data->args[0]);
moveToLevelWithOnOffCommand.transitionTime = static_cast>(data->args[1]);
- moveToLevelWithOnOffCommand.optionsMask = static_cast>(data->args[2]);
- moveToLevelWithOnOffCommand.optionsOverride = static_cast>(data->args[3]);
+ moveToLevelWithOnOffCommand.optionsMask = static_cast>(data->args[2]);
+ moveToLevelWithOnOffCommand.optionsOverride = static_cast>(data->args[3]);
Controller::InvokeCommandRequest(peer_device->GetExchangeManager(), peer_device->GetSecureSession().Value(), binding.remote,
moveToLevelWithOnOffCommand, onSuccess, onFailure);
break;
case Clusters::LevelControl::Commands::MoveWithOnOff::Id:
- moveWithOnOffCommand.moveMode = static_cast(data->args[0]);
+ moveWithOnOffCommand.moveMode = from_underlying(data->args[0]);
moveWithOnOffCommand.rate = static_cast>(data->args[1]);
- moveWithOnOffCommand.optionsMask = static_cast>(data->args[2]);
- moveWithOnOffCommand.optionsOverride = static_cast>(data->args[3]);
+ moveWithOnOffCommand.optionsMask = static_cast>(data->args[2]);
+ moveWithOnOffCommand.optionsOverride = static_cast>(data->args[3]);
Controller::InvokeCommandRequest(peer_device->GetExchangeManager(), peer_device->GetSecureSession().Value(), binding.remote,
moveWithOnOffCommand, onSuccess, onFailure);
break;
case Clusters::LevelControl::Commands::StepWithOnOff::Id:
- stepWithOnOffCommand.stepMode = static_cast(data->args[0]);
+ stepWithOnOffCommand.stepMode = from_underlying(data->args[0]);
stepWithOnOffCommand.stepSize = static_cast(data->args[1]);
stepWithOnOffCommand.transitionTime = static_cast>(data->args[2]);
- stepWithOnOffCommand.optionsMask = static_cast>(data->args[3]);
- stepWithOnOffCommand.optionsOverride = static_cast>(data->args[4]);
+ stepWithOnOffCommand.optionsMask = static_cast>(data->args[3]);
+ stepWithOnOffCommand.optionsOverride = static_cast>(data->args[4]);
Controller::InvokeCommandRequest(peer_device->GetExchangeManager(), peer_device->GetSecureSession().Value(), binding.remote,
stepWithOnOffCommand, onSuccess, onFailure);
break;
case Clusters::LevelControl::Commands::StopWithOnOff::Id:
- stopWithOnOffCommand.optionsMask = static_cast>(data->args[0]);
- stopWithOnOffCommand.optionsOverride = static_cast>(data->args[1]);
+ stopWithOnOffCommand.optionsMask = static_cast>(data->args[0]);
+ stopWithOnOffCommand.optionsOverride = static_cast>(data->args[1]);
Controller::InvokeCommandRequest(peer_device->GetExchangeManager(), peer_device->GetSecureSession().Value(), binding.remote,
stopWithOnOffCommand, onSuccess, onFailure);
break;
@@ -246,62 +260,62 @@ void ProcessLevelControlGroupBindingCommand(BindingCommandData * data, const Emb
case Clusters::LevelControl::Commands::MoveToLevel::Id:
moveToLevelCommand.level = static_cast(data->args[0]);
moveToLevelCommand.transitionTime = static_cast>(data->args[1]);
- moveToLevelCommand.optionsMask = static_cast>(data->args[2]);
- moveToLevelCommand.optionsOverride = static_cast>(data->args[3]);
+ moveToLevelCommand.optionsMask = static_cast>(data->args[2]);
+ moveToLevelCommand.optionsOverride = static_cast>(data->args[3]);
Controller::InvokeGroupCommandRequest(&exchangeMgr, binding.fabricIndex, binding.groupId, moveToLevelCommand);
break;
case Clusters::LevelControl::Commands::Move::Id:
- moveCommand.moveMode = static_cast(data->args[0]);
+ moveCommand.moveMode = from_underlying(data->args[0]);
moveCommand.rate = static_cast>(data->args[1]);
- moveCommand.optionsMask = static_cast>(data->args[2]);
- moveCommand.optionsOverride = static_cast>(data->args[3]);
+ moveCommand.optionsMask = static_cast>(data->args[2]);
+ moveCommand.optionsOverride = static_cast>(data->args[3]);
Controller::InvokeGroupCommandRequest(&exchangeMgr, binding.fabricIndex, binding.groupId, moveCommand);
break;
case Clusters::LevelControl::Commands::Step::Id:
- stepCommand.stepMode = static_cast(data->args[0]);
+ stepCommand.stepMode = from_underlying(data->args[0]);
stepCommand.stepSize = static_cast(data->args[1]);
stepCommand.transitionTime = static_cast>(data->args[2]);
- stepCommand.optionsMask = static_cast>(data->args[3]);
- stepCommand.optionsOverride = static_cast>(data->args[4]);
+ stepCommand.optionsMask = static_cast>(data->args[3]);
+ stepCommand.optionsOverride = static_cast>(data->args[4]);
Controller::InvokeGroupCommandRequest(&exchangeMgr, binding.fabricIndex, binding.groupId, stepCommand);
break;
case Clusters::LevelControl::Commands::Stop::Id:
- stopCommand.optionsMask = static_cast>(data->args[0]);
- stopCommand.optionsOverride = static_cast>(data->args[1]);
+ stopCommand.optionsMask = static_cast>(data->args[0]);
+ stopCommand.optionsOverride = static_cast>(data->args[1]);
Controller::InvokeGroupCommandRequest(&exchangeMgr, binding.fabricIndex, binding.groupId, stopCommand);
break;
case Clusters::LevelControl::Commands::MoveToLevelWithOnOff::Id:
moveToLevelWithOnOffCommand.level = static_cast(data->args[0]);
moveToLevelWithOnOffCommand.transitionTime = static_cast>(data->args[1]);
- moveToLevelWithOnOffCommand.optionsMask = static_cast>(data->args[2]);
- moveToLevelWithOnOffCommand.optionsOverride = static_cast>(data->args[3]);
+ moveToLevelWithOnOffCommand.optionsMask = static_cast>(data->args[2]);
+ moveToLevelWithOnOffCommand.optionsOverride = static_cast>(data->args[3]);
Controller::InvokeGroupCommandRequest(&exchangeMgr, binding.fabricIndex, binding.groupId, moveToLevelWithOnOffCommand);
break;
case Clusters::LevelControl::Commands::MoveWithOnOff::Id:
- moveWithOnOffCommand.moveMode = static_cast(data->args[0]);
+ moveWithOnOffCommand.moveMode = from_underlying(data->args[0]);
moveWithOnOffCommand.rate = static_cast>(data->args[1]);
- moveWithOnOffCommand.optionsMask = static_cast>(data->args[2]);
- moveWithOnOffCommand.optionsOverride = static_cast>(data->args[3]);
+ moveWithOnOffCommand.optionsMask = static_cast>(data->args[2]);
+ moveWithOnOffCommand.optionsOverride = static_cast>(data->args[3]);
Controller::InvokeGroupCommandRequest(&exchangeMgr, binding.fabricIndex, binding.groupId, moveWithOnOffCommand);
break;
case Clusters::LevelControl::Commands::StepWithOnOff::Id:
- stepWithOnOffCommand.stepMode = static_cast(data->args[0]);
+ stepWithOnOffCommand.stepMode = from_underlying(data->args[0]);
stepWithOnOffCommand.stepSize = static_cast(data->args[1]);
stepWithOnOffCommand.transitionTime = static_cast>(data->args[2]);
- stepWithOnOffCommand.optionsMask = static_cast>(data->args[3]);
- stepWithOnOffCommand.optionsOverride = static_cast>(data->args[4]);
+ stepWithOnOffCommand.optionsMask = static_cast>(data->args[3]);
+ stepWithOnOffCommand.optionsOverride = static_cast>(data->args[4]);
Controller::InvokeGroupCommandRequest(&exchangeMgr, binding.fabricIndex, binding.groupId, stepWithOnOffCommand);
break;
case Clusters::LevelControl::Commands::StopWithOnOff::Id:
- stopWithOnOffCommand.optionsMask = static_cast>(data->args[0]);
- stopWithOnOffCommand.optionsOverride = static_cast>(data->args[1]);
+ stopWithOnOffCommand.optionsMask = static_cast>(data->args[0]);
+ stopWithOnOffCommand.optionsOverride = static_cast>(data->args[1]);
Controller::InvokeGroupCommandRequest(&exchangeMgr, binding.fabricIndex, binding.groupId, stopWithOnOffCommand);
break;
}
diff --git a/examples/all-clusters-app/asr/src/DeviceCallbacks.cpp b/examples/all-clusters-app/asr/src/DeviceCallbacks.cpp
old mode 100755
new mode 100644
index 859e3fb1043430..cc48488fd7e3ca
--- a/examples/all-clusters-app/asr/src/DeviceCallbacks.cpp
+++ b/examples/all-clusters-app/asr/src/DeviceCallbacks.cpp
@@ -44,8 +44,6 @@
#include "route_hook/asr_route_hook.h"
#endif
-static const char * TAG = "app-devicecallbacks";
-
using namespace ::chip;
using namespace ::chip::Inet;
using namespace ::chip::System;
@@ -151,9 +149,8 @@ void DeviceCallbacks::OnInternetConnectivityChange(const ChipDeviceEvent * event
void DeviceCallbacks::OnOnOffPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value)
{
VerifyOrExit(attributeId == chip::app::Clusters::OnOff::Attributes::OnOff::Id,
- ChipLogError(DeviceLayer, TAG, "Unhandled Attribute ID: '0x%04x", attributeId));
- VerifyOrExit(endpointId == 1 || endpointId == 2,
- ChipLogError(DeviceLayer, TAG, "Unexpected EndPoint ID: `0x%02x'", endpointId));
+ ChipLogError(DeviceLayer, "Unhandled Attribute ID: '0x%04lx", attributeId));
+ VerifyOrExit(endpointId == 1 || endpointId == 2, ChipLogError(DeviceLayer, "Unexpected EndPoint ID: `0x%02x'", endpointId));
switch (attributeId)
{
@@ -188,8 +185,7 @@ void DeviceCallbacks::OnLevelPostAttributeChangeCallback(EndpointId endpointId,
case chip::app::Clusters::LevelControl::Attributes::CurrentLevel::Id: {
if (size == 1)
{
- uint8_t tmp = *value;
- ChipLogProgress(Zcl, "New level: %u ", tmp);
+ ChipLogProgress(Zcl, "New level: %u ", *value);
}
else
{
@@ -259,8 +255,8 @@ void IdentifyTimerHandler(Layer * systemLayer, void * appState)
void DeviceCallbacks::OnIdentifyPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value)
{
VerifyOrExit(attributeId == chip::app::Clusters::Identify::Attributes::IdentifyTime::Id,
- ChipLogError(DeviceLayer, "[%s] Unhandled Attribute ID: '0x%04lx", TAG, attributeId));
- VerifyOrExit(endpointId == 1, ChipLogError(DeviceLayer, "[%s] Unexpected EndPoint ID: `0x%02x'", TAG, endpointId));
+ ChipLogError(DeviceLayer, "Unhandled Attribute ID: '0x%04lx", attributeId));
+ VerifyOrExit(endpointId == 1, ChipLogError(DeviceLayer, "Unexpected EndPoint ID: `0x%02x'", endpointId));
// timerCount represents the number of callback executions before we stop the timer.
// value is expressed in seconds and the timer is fired every 250ms, so just multiply value by 4.
diff --git a/examples/all-clusters-app/cc13x2x7_26x2x7/README.md b/examples/all-clusters-app/cc13x2x7_26x2x7/README.md
index f965d3dd9abbcf..68d6f927224585 100644
--- a/examples/all-clusters-app/cc13x2x7_26x2x7/README.md
+++ b/examples/all-clusters-app/cc13x2x7_26x2x7/README.md
@@ -68,9 +68,9 @@ guide assumes that the environment is linux based, and recommends Ubuntu 20.04.
```
$ cd ~
- $ wget https://software-dl.ti.com/ccs/esd/sysconfig/sysconfig-1.11.0_2225-setup.run
- $ chmod +x sysconfig-1.11.0_2225-setup.run
- $ ./sysconfig-1.11.0_2225-setup.run
+ $ wget https://dr-download.ti.com/software-development/ide-configuration-compiler-or-debugger/MD-nsUM6f7Vvb/1.16.2.3028/sysconfig-1.16.2_3028-setup.run
+ $ chmod +x sysconfig-1.16.2_3028-setup.run
+ $ ./sysconfig-1.16.2_3028-setup.run
```
- Run the bootstrap script to setup the build environment.
@@ -97,13 +97,13 @@ Ninja to build the executable.
- Run the build to produce a default executable. By default on Linux both the
TI SimpleLink SDK and Sysconfig are located in a `ti` folder in the user's
home directory, and you must provide the absolute path to them. For example
- `/home/username/ti/sysconfig_1.11.0`. On Windows the default directory is
+ `/home/username/ti/sysconfig_1.16.2`. On Windows the default directory is
`C:\ti`. Take note of this install path, as it will be used in the next
step.
```
$ cd ~/connectedhomeip/examples/all-clusters-app/cc13x2x7_26x2x7
- $ gn gen out/debug --args="ti_sysconfig_root=\"$HOME/ti/sysconfig_1.11.0\""
+ $ gn gen out/debug --args="ti_sysconfig_root=\"$HOME/ti/sysconfig_1.16.2\""
$ ninja -C out/debug
```
diff --git a/examples/all-clusters-app/cc13x4_26x4/README.md b/examples/all-clusters-app/cc13x4_26x4/README.md
index 3415f19f1a4c21..ad8581b52cf26c 100644
--- a/examples/all-clusters-app/cc13x4_26x4/README.md
+++ b/examples/all-clusters-app/cc13x4_26x4/README.md
@@ -59,9 +59,9 @@ guide assumes that the environment is linux based, and recommends Ubuntu 20.04.
```
$ cd ~
- $ `wget https://dr-download.ti.com/software-development/ide-configuration-compiler-or-debugger/MD-nsUM6f7Vvb/1.15.0.2826/sysconfig-1.15.0_2826-setup.run`
- $ chmod +x sysconfig-1.15.0_2826-setup.run
- $ ./sysconfig-1.15.0_2826-setup.run
+ $ `wget https://dr-download.ti.com/software-development/ide-configuration-compiler-or-debugger/MD-nsUM6f7Vvb/1.16.2.3028/sysconfig-1.16.2_3028-setup.run`
+ $ chmod +x sysconfig-1.16.2_3028-setup.run
+ $ ./sysconfig-1.16.2_3028-setup.run
```
- Run the bootstrap script to setup the build environment.
@@ -88,7 +88,7 @@ Ninja to build the executable.
- Run the build to produce a default executable. By default on Linux both the
TI SimpleLink SDK and Sysconfig are located in a `ti` folder in the user's
home directory, and you must provide the absolute path to them. For example
- `/home/username/ti/sysconfig_1.15.0`. On Windows the default directory is
+ `/home/username/ti/sysconfig_1.16.2`. On Windows the default directory is
`C:\ti`. Take note of this install path, as it will be used in the next
step.
@@ -96,7 +96,7 @@ Ninja to build the executable.
$ cd ~/connectedhomeip/examples/all-clusters-app/cc13x2x7_26x2x7
OR
$ cd ~/connectedhomeip/examples/all-clusters-minimal-app/cc13x4_26x4
- $ gn gen out/debug --args="ti_sysconfig_root=\"$HOME/ti/sysconfig_1.15.0\""
+ $ gn gen out/debug --args="ti_sysconfig_root=\"$HOME/ti/sysconfig_1.16.2\""
$ ninja -C out/debug
```
@@ -105,7 +105,7 @@ Ninja to build the executable.
to the GN call.
```
- gn gen out/debug --args="ti_sysconfig_root=\"$HOME/ti/sysconfig_1.15.0\" target_defines=[\"CC13X4_26X4_ATTESTATION_CREDENTIALS=1\"]"
+ gn gen out/debug --args="ti_sysconfig_root=\"$HOME/ti/sysconfig_1.16.2\" target_defines=[\"CC13X4_26X4_ATTESTATION_CREDENTIALS=1\"]"
```
## Programming
diff --git a/examples/all-clusters-app/linux/BUILD.gn b/examples/all-clusters-app/linux/BUILD.gn
index e41cb9843c42c7..cfe028c7af7cc5 100644
--- a/examples/all-clusters-app/linux/BUILD.gn
+++ b/examples/all-clusters-app/linux/BUILD.gn
@@ -30,6 +30,7 @@ source_set("chip-all-clusters-common") {
"${chip_root}/examples/all-clusters-app/all-clusters-common/src/fan-stub.cpp",
"${chip_root}/examples/all-clusters-app/all-clusters-common/src/laundry-washer-controls-delegate-impl.cpp",
"${chip_root}/examples/all-clusters-app/all-clusters-common/src/laundry-washer-mode.cpp",
+ "${chip_root}/examples/all-clusters-app/all-clusters-common/src/microwave-oven-mode.cpp",
"${chip_root}/examples/all-clusters-app/all-clusters-common/src/operational-state-delegate-impl.cpp",
"${chip_root}/examples/all-clusters-app/all-clusters-common/src/resource-monitoring-delegates.cpp",
"${chip_root}/examples/all-clusters-app/all-clusters-common/src/rvc-modes.cpp",
@@ -48,9 +49,6 @@ source_set("chip-all-clusters-common") {
deps = [
"${chip_root}/examples/all-clusters-app/all-clusters-common",
"${chip_root}/examples/platform/linux:app-main",
-
- # Issue 29397 for the icd:cluster dep
- "${chip_root}/src/app/icd:cluster",
"${chip_root}/src/app/tests/suites/credentials:dac_provider",
"${chip_root}/src/lib",
"${chip_root}/third_party/jsoncpp",
diff --git a/examples/all-clusters-app/linux/main-common.cpp b/examples/all-clusters-app/linux/main-common.cpp
index a6deafde128983..004827d742ae3c 100644
--- a/examples/all-clusters-app/linux/main-common.cpp
+++ b/examples/all-clusters-app/linux/main-common.cpp
@@ -23,10 +23,12 @@
#include "include/tv-callbacks.h"
#include "laundry-washer-controls-delegate-impl.h"
#include "laundry-washer-mode.h"
+#include "microwave-oven-mode.h"
#include "operational-state-delegate-impl.h"
#include "resource-monitoring-delegates.h"
#include "rvc-modes.h"
#include "tcc-mode.h"
+#include
#include
#include
#include
@@ -46,10 +48,6 @@
#include
#include
-#include
-
-#include
-
using namespace chip;
using namespace chip::app;
using namespace chip::DeviceLayer;
@@ -217,11 +215,6 @@ void ApplicationInit()
#endif
Clusters::TemperatureControl::SetInstance(&sAppSupportedTemperatureLevelsDelegate);
- // Issue 29397
- // Somehow All-cluster-app test the ICDManagementServer cluster without having
- // CHIP_CONFIG_ENABLE_ICD_SERVER set to 1.
- ICDManagementServer::GetInstance().SetSymmetricKeystore(Server::GetInstance().GetSessionKeystore());
-
SetTagList(/* endpoint= */ 0, Span(gEp0TagList));
SetTagList(/* endpoint= */ 1, Span(gEp1TagList));
SetTagList(/* endpoint= */ 2, Span(gEp2TagList));
@@ -234,6 +227,7 @@ void ApplicationShutdown()
Clusters::LaundryWasherMode::Shutdown();
Clusters::RvcCleanMode::Shutdown();
Clusters::RvcRunMode::Shutdown();
+ Clusters::MicrowaveOvenMode::Shutdown();
Clusters::RefrigeratorAndTemperatureControlledCabinetMode::Shutdown();
Clusters::HepaFilterMonitoring::Shutdown();
Clusters::ActivatedCarbonFilterMonitoring::Shutdown();
diff --git a/examples/all-clusters-app/nrfconnect/README.md b/examples/all-clusters-app/nrfconnect/README.md
index a3e2edb3deac69..18df16f5e11654 100644
--- a/examples/all-clusters-app/nrfconnect/README.md
+++ b/examples/all-clusters-app/nrfconnect/README.md
@@ -176,93 +176,63 @@ communicate with it using the
Before building the example, check out the Matter repository and sync submodules
using the following command:
- $ git submodule update --init
+ $ python3 scripts/checkout_submodules.py --shallow --platform nrfconnect
-The example requires a specific revision of the nRF Connect SDK. You can either
-install it along with the related tools directly on your system or use a Docker
-image that has the tools pre-installed.
-
-If you are a macOS user, you won't be able to use the Docker container to flash
-the application onto a Nordic development kit due to
-[certain limitations of Docker for macOS](https://docs.docker.com/docker-for-mac/faqs/#can-i-pass-through-a-usb-device-to-a-container).
-Use the [native shell](#using-native-shell-for-setup) for building instead.
-
-### Using Docker container for setup
-
-To use the Docker container for setup, complete the following steps:
-
-1. If you do not have the nRF Connect SDK installed yet, create a directory for
- it by running the following command:
-
- $ mkdir ~/nrfconnect
-
-2. Download the latest version of the nRF Connect SDK Docker image by running
- the following command:
+> **Note**:
+>
+> For Linux operating system install
+> [SEGGER J-Link Software](https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack).
- $ docker pull nordicsemi/nrfconnect-chip
+### Install Command Line Tools
-3. Start Docker with the downloaded image by running the following command,
- customized to your needs as described below:
+With admin permissions enabled, download and install the
+[nRF Command Line Tools](https://www.nordicsemi.com/Products/Development-tools/nrf-command-line-tools).
- $ docker run --rm -it -e RUNAS=$(id -u) -v ~/nrfconnect:/var/ncs -v ~/connectedhomeip:/var/chip \
- -v /dev/bus/usb:/dev/bus/usb --device-cgroup-rule "c 189:* rmw" nordicsemi/nrfconnect-chip
+### Install Toolchain Manager
- In this command:
+Toolchain Manager is available from
+[nRF Connect for Desktop](https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-desktop),
+a cross-platform tool that provides different applications that simplify
+installing the nRF Connect SDK. Both the tool and the application are available
+for Windows, Linux, and macOS.
- - _~/nrfconnect_ can be replaced with an absolute path to the nRF Connect
- SDK source directory.
- - _~/connectedhomeip_ must be replaced with an absolute path to the CHIP
- source directory.
- - _-v /dev/bus/usb:/dev/bus/usb --device-cgroup-rule "c 189:_ rmw"\*
- parameters can be omitted if you are not planning to flash the example
- onto hardware. These parameters give the container access to USB devices
- connected to your computer such as the nRF52840 DK.
- - _--rm_ can be omitted if you do not want the container to be
- auto-removed when you exit the container shell session.
- - _-e RUNAS=\$(id -u)_ is needed to start the container session as the
- current user instead of root.
+To install the Toolchain Manager app, complete the following steps:
-4. Update the nRF Connect SDK to the most recent supported revision, by running
- the following command:
+1. [Download nRF Connect for Desktop](https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-desktop/download#infotabs)
+ for your operating system.
- $ cd /var/chip
- $ python3 scripts/setup/nrfconnect/update_ncs.py --update
-
-Now you can proceed with the [Building](#building) instruction.
+2. Install and run the tool on your machine.
-### Using native shell for setup
+3. In the **APPS** section, click **Install** button on the Toolchain Manager
+ tab.
-To use the native shell for setup, complete the following steps:
+### Install nRF Connect SDK
-1. Download and install the following additional software:
+Complete the following steps to install the nRF Connect SDK:
- - [nRF Command Line Tools](https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Command-Line-Tools)
- - [GN meta-build system](https://gn.googlesource.com/gn/)
+1. Open Toolchain Manager in nRF Connect for Desktop.
-2. If you do not have the nRF Connect SDK installed, follow the
- [guide](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/gs_assistant.html#)
- in the nRF Connect SDK documentation to install the latest stable nRF
- Connect SDK version. Since command-line tools will be used for building the
- example, installing SEGGER Embedded Studio is not required.
+2. Click the **Install** button next to the
+ [recommended](../../../config/nrfconnect/.nrfconnect-recommended-revision)
+ version of the nRF Connect SDK.
- If you have the SDK already installed, continue to the next step and update
- the nRF Connect SDK after initializing environment variables.
+3. A pop-up window will inform you about the current installation directory. If
+ you want to change the directory, click the **Change directory** button.
+ Otherwise, click the **Continue installation** button.
-3. Initialize environment variables referred to by the CHIP and the nRF Connect
- SDK build scripts. Replace _nrfconnect-dir_ with the path to your nRF
- Connect SDK installation directory, and _toolchain-dir_ with the path to GNU
- Arm Embedded Toolchain.
+4. When the nRF Connect SDK is installed on your machine, the **Install**
+ button changes to the **Open VS Code** button.
- $ source nrfconnect-dir/zephyr/zephyr-env.sh
- $ export ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
- $ export GNUARMEMB_TOOLCHAIN_PATH=toolchain-dir
+5. Click the dropdown menu next to the **Open VS Code** button for the
+ installed nRF Connect SDK version, and select **Open terminal**.
-4. Update the nRF Connect SDK to the most recent supported revision by running
- the following command (replace _matter-dir_ with the path to Matter
- repository directory):
+6. Make sure that the nRF Connect SDK version is compatible with the Matter SDK
+ version:
- $ cd matter-dir
+ ```
+ $ cd {connectedhomeip directory}
$ python3 scripts/setup/nrfconnect/update_ncs.py --update
+ ```
Now you can proceed with the [Building](#building) instruction.
@@ -270,8 +240,7 @@ Now you can proceed with the [Building](#building) instruction.
## Building
-Complete the following steps, regardless of the method used for setting up the
-environment:
+Complete the following steps to build the sample:
1. Navigate to the example's directory:
diff --git a/examples/all-clusters-app/nrfconnect/boards/nrf5340dk_nrf5340_cpuapp.overlay b/examples/all-clusters-app/nrfconnect/boards/nrf5340dk_nrf5340_cpuapp.overlay
index 86568566378149..0de8aae99d1fca 100644
--- a/examples/all-clusters-app/nrfconnect/boards/nrf5340dk_nrf5340_cpuapp.overlay
+++ b/examples/all-clusters-app/nrfconnect/boards/nrf5340dk_nrf5340_cpuapp.overlay
@@ -14,12 +14,19 @@
* limitations under the License.
*/
+#include
+
/ {
chosen {
nordic,pm-ext-flash = &mx25r64;
};
};
+/* Set IPC thread priority to the highest value to not collide with other threads. */
+&ipc0 {
+ zephyr,priority = <0 PRIO_COOP>;
+};
+
/* Disable unused peripherals to reduce power consumption */
&adc {
status = "disabled";
diff --git a/examples/all-clusters-app/nrfconnect/boards/nrf7002dk_nrf5340_cpuapp.overlay b/examples/all-clusters-app/nrfconnect/boards/nrf7002dk_nrf5340_cpuapp.overlay
index 3063fbbcdee779..2ccc13adb1ddc0 100644
--- a/examples/all-clusters-app/nrfconnect/boards/nrf7002dk_nrf5340_cpuapp.overlay
+++ b/examples/all-clusters-app/nrfconnect/boards/nrf7002dk_nrf5340_cpuapp.overlay
@@ -14,8 +14,15 @@
* limitations under the License.
*/
+#include
+
/ {
chosen {
nordic,pm-ext-flash = &mx25r64;
};
};
+
+/* Set IPC thread priority to the highest value to not collide with other threads. */
+&ipc0 {
+ zephyr,priority = <0 PRIO_COOP>;
+};
diff --git a/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h b/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h
index 07e1a69a285da4..9babcb7d362d4a 100644
--- a/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h
+++ b/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h
@@ -26,10 +26,6 @@
#pragma once
-// Use a default pairing code if one hasn't been provisioned in flash.
-#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE 20202021
-#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR 0xF00
-
// All clusters app has 3 group endpoints. This needs to defined here so that
// CHIP_CONFIG_MAX_GROUPS_PER_FABRIC is properly configured.
#define CHIP_CONFIG_MAX_GROUP_ENDPOINTS_PER_FABRIC 3
diff --git a/examples/all-clusters-app/nrfconnect/prj_dfu.conf b/examples/all-clusters-app/nrfconnect/prj_dfu.conf
index e57438bf5c1aa5..ca8f536fafce18 100644
--- a/examples/all-clusters-app/nrfconnect/prj_dfu.conf
+++ b/examples/all-clusters-app/nrfconnect/prj_dfu.conf
@@ -41,3 +41,7 @@ CONFIG_ASSERT_VERBOSE=n
CONFIG_ASSERT_NO_FILE_INFO=y
CONFIG_ASSERT_NO_COND_INFO=y
CONFIG_ASSERT_NO_MSG_INFO=y
+
+# Enable Factory Data feature
+CONFIG_CHIP_FACTORY_DATA=y
+CONFIG_CHIP_FACTORY_DATA_BUILD=y
diff --git a/examples/all-clusters-app/nrfconnect/prj_release.conf b/examples/all-clusters-app/nrfconnect/prj_release.conf
index fee661a740cccb..ebe3a71f8765eb 100644
--- a/examples/all-clusters-app/nrfconnect/prj_release.conf
+++ b/examples/all-clusters-app/nrfconnect/prj_release.conf
@@ -47,3 +47,8 @@ CONFIG_ASSERT_NO_FILE_INFO=y
CONFIG_ASSERT_VERBOSE=n
CONFIG_PRINTK=n
CONFIG_THREAD_NAME=n
+CONFIG_BOOT_BANNER=n
+
+# Enable Factory Data feature
+CONFIG_CHIP_FACTORY_DATA=y
+CONFIG_CHIP_FACTORY_DATA_BUILD=y
diff --git a/examples/all-clusters-app/nxp/mw320/main.cpp b/examples/all-clusters-app/nxp/mw320/main.cpp
index 8344be7cda1b80..5e29a11cc9b290 100644
--- a/examples/all-clusters-app/nxp/mw320/main.cpp
+++ b/examples/all-clusters-app/nxp/mw320/main.cpp
@@ -172,7 +172,7 @@ void InitOTARequestor(void)
// TODO: instatiate and initialize these values when QueryImageResponse tells us an image is available
// TODO: add API for OTARequestor to pass QueryImageResponse info to the application to use for OTADownloader init
// OTAImageProcessor ipParams;
- // ipParams.imageFile = CharSpan("dnld_img.txt");
+ // ipParams.imageFile = "dnld_img.txt"_span;
// gImageProcessor.SetOTAImageProcessorParams(ipParams);
gImageProcessor.SetOTADownloader(&gDownloader);
diff --git a/examples/all-clusters-app/telink/prj.conf b/examples/all-clusters-app/telink/prj.conf
index f0e82ad971d4d8..18b7edcc11f395 100644
--- a/examples/all-clusters-app/telink/prj.conf
+++ b/examples/all-clusters-app/telink/prj.conf
@@ -22,12 +22,6 @@
CONFIG_CHIP=y
CONFIG_STD_CPP17=y
-# enable GPIO
-CONFIG_GPIO=y
-
-# enable PWM
-CONFIG_PWM=y
-
# CHIP configuration
CONFIG_CHIP_PROJECT_CONFIG="include/CHIPProjectConfig.h"
CONFIG_CHIP_OPENTHREAD_CONFIG="../../platform/telink/project_include/OpenThreadConfig.h"
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 e03e2821ee0223..5908594f643e6f 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
@@ -3,6 +3,8 @@
/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
server cluster Identify = 3 {
+ revision 4;
+
enum EffectIdentifierEnum : enum8 {
kBlink = 0;
kBreathe = 1;
@@ -49,6 +51,8 @@ server cluster Identify = 3 {
/** Attributes and commands for group configuration and manipulation. */
server cluster Groups = 4 {
+ revision 4;
+
bitmap Feature : bitmap32 {
kGroupNames = 0x1;
}
@@ -118,6 +122,12 @@ server cluster Groups = 4 {
/** Attributes and commands for scene configuration and manipulation. */
provisional server cluster Scenes = 5 {
+ revision 5;
+
+ bitmap CopyModeBitmap : bitmap8 {
+ kCopyAllScenes = 0x1;
+ }
+
bitmap Feature : bitmap32 {
kSceneNames = 0x1;
kExplicit = 0x2;
@@ -125,8 +135,8 @@ provisional server cluster Scenes = 5 {
kFabricScenes = 0x8;
}
- bitmap ScenesCopyMode : bitmap8 {
- kCopyAllScenes = 0x1;
+ bitmap NameSupportBitmap : bitmap8 {
+ kSceneNames = 0x80;
}
struct AttributeValuePair {
@@ -139,14 +149,19 @@ provisional server cluster Scenes = 5 {
AttributeValuePair attributeValueList[] = 1;
}
- readonly attribute int8u sceneCount = 0;
- readonly attribute int8u currentScene = 1;
- readonly attribute group_id currentGroup = 2;
- readonly attribute boolean sceneValid = 3;
- readonly attribute bitmap8 nameSupport = 4;
+ fabric_scoped struct SceneInfoStruct {
+ int8u sceneCount = 0;
+ fabric_sensitive int8u currentScene = 1;
+ fabric_sensitive group_id currentGroup = 2;
+ fabric_sensitive boolean sceneValid = 3;
+ int8u remainingCapacity = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ readonly attribute NameSupportBitmap nameSupport = 4;
readonly attribute nullable node_id lastConfiguredBy = 5;
readonly attribute int16u sceneTableSize = 6;
- readonly attribute int8u remainingCapacity = 7;
+ readonly attribute SceneInfoStruct fabricSceneInfo[] = 7;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -241,6 +256,8 @@ provisional server cluster Scenes = 5 {
/** Attributes and commands for switching devices between 'On' and 'Off' states. */
server cluster OnOff = 6 {
+ revision 6;
+
enum DelayedAllOffEffectVariantEnum : enum8 {
kDelayedOffFastFade = 0;
kNoFade = 1;
@@ -265,6 +282,7 @@ server cluster OnOff = 6 {
bitmap Feature : bitmap32 {
kLighting = 0x1;
kDeadFrontBehavior = 0x2;
+ kOffOnly = 0x4;
}
bitmap OnOffControlBitmap : bitmap8 {
@@ -285,7 +303,7 @@ server cluster OnOff = 6 {
request struct OffWithEffectRequest {
EffectIdentifierEnum effectIdentifier = 0;
- int8u effectVariant = 1;
+ enum8 effectVariant = 1;
}
request struct OnWithTimedOffRequest {
@@ -304,12 +322,14 @@ server cluster OnOff = 6 {
/** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */
server cluster LevelControl = 8 {
- enum MoveMode : enum8 {
+ revision 5;
+
+ enum MoveModeEnum : enum8 {
kUp = 0;
kDown = 1;
}
- enum StepMode : enum8 {
+ enum StepModeEnum : enum8 {
kUp = 0;
kDown = 1;
}
@@ -320,14 +340,14 @@ server cluster LevelControl = 8 {
kFrequency = 0x4;
}
- bitmap LevelControlOptions : bitmap8 {
+ bitmap OptionsBitmap : bitmap8 {
kExecuteIfOff = 0x1;
kCoupleColorTempToLevel = 0x2;
}
readonly attribute nullable int8u currentLevel = 0;
readonly attribute int16u remainingTime = 1;
- attribute LevelControlOptions options = 15;
+ attribute OptionsBitmap options = 15;
attribute nullable int8u onLevel = 17;
attribute access(write: manage) nullable int8u startUpCurrentLevel = 16384;
readonly attribute command_id generatedCommandList[] = 65528;
@@ -340,55 +360,55 @@ server cluster LevelControl = 8 {
request struct MoveToLevelRequest {
int8u level = 0;
nullable int16u transitionTime = 1;
- LevelControlOptions optionsMask = 2;
- LevelControlOptions optionsOverride = 3;
+ OptionsBitmap optionsMask = 2;
+ OptionsBitmap optionsOverride = 3;
}
request struct MoveRequest {
- MoveMode moveMode = 0;
+ MoveModeEnum moveMode = 0;
nullable int8u rate = 1;
- LevelControlOptions optionsMask = 2;
- LevelControlOptions optionsOverride = 3;
+ OptionsBitmap optionsMask = 2;
+ OptionsBitmap optionsOverride = 3;
}
request struct StepRequest {
- StepMode stepMode = 0;
+ StepModeEnum stepMode = 0;
int8u stepSize = 1;
nullable int16u transitionTime = 2;
- LevelControlOptions optionsMask = 3;
- LevelControlOptions optionsOverride = 4;
+ OptionsBitmap optionsMask = 3;
+ OptionsBitmap optionsOverride = 4;
}
request struct StopRequest {
- LevelControlOptions optionsMask = 0;
- LevelControlOptions optionsOverride = 1;
+ OptionsBitmap optionsMask = 0;
+ OptionsBitmap optionsOverride = 1;
}
request struct MoveToLevelWithOnOffRequest {
int8u level = 0;
nullable int16u transitionTime = 1;
- LevelControlOptions optionsMask = 2;
- LevelControlOptions optionsOverride = 3;
+ OptionsBitmap optionsMask = 2;
+ OptionsBitmap optionsOverride = 3;
}
request struct MoveWithOnOffRequest {
- MoveMode moveMode = 0;
+ MoveModeEnum moveMode = 0;
nullable int8u rate = 1;
- LevelControlOptions optionsMask = 2;
- LevelControlOptions optionsOverride = 3;
+ OptionsBitmap optionsMask = 2;
+ OptionsBitmap optionsOverride = 3;
}
request struct StepWithOnOffRequest {
- StepMode stepMode = 0;
+ StepModeEnum stepMode = 0;
int8u stepSize = 1;
nullable int16u transitionTime = 2;
- LevelControlOptions optionsMask = 3;
- LevelControlOptions optionsOverride = 4;
+ OptionsBitmap optionsMask = 3;
+ OptionsBitmap optionsOverride = 4;
}
request struct StopWithOnOffRequest {
- LevelControlOptions optionsMask = 0;
- LevelControlOptions optionsOverride = 1;
+ OptionsBitmap optionsMask = 0;
+ OptionsBitmap optionsOverride = 1;
}
command MoveToLevel(MoveToLevelRequest): DefaultSuccess = 0;
@@ -403,6 +423,8 @@ server cluster LevelControl = 8 {
/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */
server cluster Descriptor = 29 {
+ revision 2;
+
bitmap Feature : bitmap32 {
kTagList = 0x1;
}
@@ -433,6 +455,8 @@ server cluster Descriptor = 29 {
/** The Binding Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for supporting the binding table. */
server cluster Binding = 30 {
+ revision 1; // NOTE: Default/not specifically set
+
fabric_scoped struct TargetStruct {
optional node_id node = 1;
optional group_id group = 2;
@@ -455,6 +479,8 @@ server cluster Binding = 30 {
and enforce Access Control for the Node's endpoints and their associated
cluster instances. */
server cluster AccessControl = 31 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AccessControlEntryAuthModeEnum : enum8 {
kPASE = 1;
kCASE = 2;
@@ -525,6 +551,8 @@ server cluster AccessControl = 31 {
/** This cluster provides a standardized way for a Node (typically a Bridge, but could be any Node) to expose action information. */
server cluster Actions = 37 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ActionErrorEnum : enum8 {
kUnknown = 0;
kInterrupted = 1;
@@ -611,6 +639,8 @@ server cluster Actions = 37 {
Commissioning and operational determination of Node characteristics, such as Vendor ID, Product ID and serial number,
which apply to the whole Node. Also allows setting user device information such as location. */
server cluster BasicInformation = 40 {
+ revision 3;
+
enum ColorEnum : enum8 {
kBlack = 0;
kNavy = 1;
@@ -681,6 +711,8 @@ server cluster BasicInformation = 40 {
readonly attribute int32u softwareVersion = 9;
readonly attribute char_string<64> softwareVersionString = 10;
readonly attribute CapabilityMinimaStruct capabilityMinima = 19;
+ readonly attribute int32u specificationVersion = 21;
+ readonly attribute int16u maxPathsPerInvoke = 22;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -691,6 +723,8 @@ server cluster BasicInformation = 40 {
/** Provides an interface for providing OTA software updates */
client cluster OtaSoftwareUpdateProvider = 41 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ApplyUpdateActionEnum : enum8 {
kProceed = 0;
kAwaitNextAction = 1;
@@ -765,6 +799,8 @@ client cluster OtaSoftwareUpdateProvider = 41 {
/** Provides an interface for downloading and applying OTA software updates */
server cluster OtaSoftwareUpdateRequestor = 42 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AnnouncementReasonEnum : enum8 {
kSimpleAnnouncement = 0;
kUpdateAvailable = 1;
@@ -843,7 +879,9 @@ server cluster OtaSoftwareUpdateRequestor = 42 {
standards. As such, Nodes that visually or audibly convey information need a mechanism by which
they can be configured to use a user’s preferred language, units, etc */
server cluster LocalizationConfiguration = 43 {
- attribute char_string<35> activeLocale = 0;
+ revision 1; // NOTE: Default/not specifically set
+
+ attribute access(write: manage) char_string<35> activeLocale = 0;
readonly attribute char_string supportedLocales[] = 1;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
@@ -858,6 +896,8 @@ server cluster LocalizationConfiguration = 43 {
or audibly convey time information need a mechanism by which they can be configured to use a
user’s preferred format. */
server cluster TimeFormatLocalization = 44 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CalendarTypeEnum : enum8 {
kBuddhist = 0;
kChinese = 1;
@@ -882,7 +922,7 @@ server cluster TimeFormatLocalization = 44 {
kCalendarFormat = 0x1;
}
- attribute HourFormatEnum hourFormat = 0;
+ attribute access(write: manage) HourFormatEnum hourFormat = 0;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -896,6 +936,8 @@ server cluster TimeFormatLocalization = 44 {
user. As such, Nodes that visually or audibly convey measurable values to the user need a
mechanism by which they can be configured to use a user’s preferred unit. */
server cluster UnitLocalization = 45 {
+ revision 1;
+
enum TempUnitEnum : enum8 {
kFahrenheit = 0;
kCelsius = 1;
@@ -916,6 +958,8 @@ server cluster UnitLocalization = 45 {
/** This cluster is used to describe the configuration and capabilities of a physical power source that provides power to the Node. */
server cluster PowerSource = 47 {
+ revision 1; // NOTE: Default/not specifically set
+
enum BatApprovedChemistryEnum : enum16 {
kUnspecified = 0;
kAlkaline = 1;
@@ -1145,6 +1189,8 @@ server cluster PowerSource = 47 {
/** This cluster is used to manage global aspects of the Commissioning flow. */
server cluster GeneralCommissioning = 48 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CommissioningErrorEnum : enum8 {
kOK = 0;
kValueOutsideRange = 1;
@@ -1183,13 +1229,13 @@ server cluster GeneralCommissioning = 48 {
request struct SetRegulatoryConfigRequest {
RegulatoryLocationTypeEnum newRegulatoryConfig = 0;
- char_string countryCode = 1;
+ char_string<2> countryCode = 1;
int64u breadcrumb = 2;
}
response struct ArmFailSafeResponse = 1 {
CommissioningErrorEnum errorCode = 0;
- char_string debugText = 1;
+ char_string<128> debugText = 1;
}
response struct SetRegulatoryConfigResponse = 3 {
@@ -1209,6 +1255,8 @@ server cluster GeneralCommissioning = 48 {
/** Functionality to configure, enable, disable network credentials and access on a Matter device. */
server cluster NetworkCommissioning = 49 {
+ revision 1; // NOTE: Default/not specifically set
+
enum NetworkCommissioningStatusEnum : enum8 {
kSuccess = 0;
kOutOfRange = 1;
@@ -1238,6 +1286,7 @@ server cluster NetworkCommissioning = 49 {
kWiFiNetworkInterface = 0x1;
kThreadNetworkInterface = 0x2;
kEthernetNetworkInterface = 0x4;
+ kPerDeviceCredentials = 0x8;
}
bitmap ThreadCapabilitiesBitmap : bitmap16 {
@@ -1254,11 +1303,14 @@ server cluster NetworkCommissioning = 49 {
kWPAPersonal = 0x4;
kWPA2Personal = 0x8;
kWPA3Personal = 0x10;
+ kWPA3MatterPDC = 0x20;
}
struct NetworkInfoStruct {
octet_string<32> networkID = 0;
boolean connected = 1;
+ optional nullable octet_string<20> networkIdentifier = 2;
+ optional nullable octet_string<20> clientIdentifier = 3;
}
struct ThreadInterfaceScanResultStruct {
@@ -1305,6 +1357,9 @@ server cluster NetworkCommissioning = 49 {
octet_string<32> ssid = 0;
octet_string<64> credentials = 1;
optional int64u breadcrumb = 2;
+ optional octet_string<140> networkIdentity = 3;
+ optional octet_string<20> clientIdentifier = 4;
+ optional octet_string<32> possessionNonce = 5;
}
request struct AddOrUpdateThreadNetworkRequest {
@@ -1339,6 +1394,8 @@ server cluster NetworkCommissioning = 49 {
NetworkCommissioningStatusEnum networkingStatus = 0;
optional char_string<512> debugText = 1;
optional int8u networkIndex = 2;
+ optional octet_string<140> clientIdentity = 3;
+ optional octet_string<64> possessionSignature = 4;
}
response struct ConnectNetworkResponse = 7 {
@@ -1357,6 +1414,8 @@ server cluster NetworkCommissioning = 49 {
/** The cluster provides commands for retrieving unstructured diagnostic logs from a Node that may be used to aid in diagnostics. */
server cluster DiagnosticLogs = 50 {
+ revision 1; // NOTE: Default/not specifically set
+
enum IntentEnum : enum8 {
kEndUserSupport = 0;
kNetworkDiag = 1;
@@ -1394,6 +1453,8 @@ server cluster DiagnosticLogs = 50 {
/** The General Diagnostics Cluster, along with other diagnostics clusters, provide a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster GeneralDiagnostics = 51 {
+ revision 1; // NOTE: Default/not specifically set
+
enum BootReasonEnum : enum8 {
kUnspecified = 0;
kPowerOnReboot = 1;
@@ -1475,6 +1536,7 @@ server cluster GeneralDiagnostics = 51 {
readonly attribute NetworkInterface networkInterfaces[] = 0;
readonly attribute int16u rebootCount = 1;
+ readonly attribute int64u upTime = 2;
readonly attribute boolean testEventTriggersEnabled = 8;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
@@ -1488,11 +1550,19 @@ server cluster GeneralDiagnostics = 51 {
int64u eventTrigger = 1;
}
+ response struct TimeSnapshotResponse = 2 {
+ systime_us systemTimeUs = 0;
+ nullable epoch_us UTCTimeUs = 1;
+ }
+
command access(invoke: manage) TestEventTrigger(TestEventTriggerRequest): DefaultSuccess = 0;
+ command TimeSnapshot(): TimeSnapshotResponse = 1;
}
/** The Software Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster SoftwareDiagnostics = 52 {
+ revision 1; // NOTE: Default/not specifically set
+
bitmap Feature : bitmap32 {
kWatermarks = 0x1;
}
@@ -1521,6 +1591,8 @@ server cluster SoftwareDiagnostics = 52 {
/** The Thread Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems */
server cluster ThreadNetworkDiagnostics = 53 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ConnectionStatusEnum : enum8 {
kConnected = 0;
kNotConnected = 1;
@@ -1618,9 +1690,9 @@ server cluster ThreadNetworkDiagnostics = 53 {
readonly attribute NeighborTableStruct neighborTable[] = 7;
readonly attribute RouteTableStruct routeTable[] = 8;
readonly attribute nullable int32u partitionId = 9;
- readonly attribute nullable int8u weighting = 10;
- readonly attribute nullable int8u dataVersion = 11;
- readonly attribute nullable int8u stableDataVersion = 12;
+ readonly attribute nullable int16u weighting = 10;
+ readonly attribute nullable int16u dataVersion = 11;
+ readonly attribute nullable int16u stableDataVersion = 12;
readonly attribute nullable int8u leaderRouterId = 13;
readonly attribute nullable SecurityPolicy securityPolicy = 59;
readonly attribute nullable octet_string<4> channelPage0Mask = 60;
@@ -1636,6 +1708,8 @@ server cluster ThreadNetworkDiagnostics = 53 {
/** The Wi-Fi Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster WiFiNetworkDiagnostics = 54 {
+ revision 1; // NOTE: Default/not specifically set
+
enum AssociationFailureCauseEnum : enum8 {
kUnknown = 0;
kAssociationFailed = 1;
@@ -1677,7 +1751,7 @@ server cluster WiFiNetworkDiagnostics = 54 {
}
info event AssociationFailure = 1 {
- AssociationFailureCauseEnum associationFailure = 0;
+ AssociationFailureCauseEnum associationFailureCause = 0;
int16u status = 1;
}
@@ -1700,6 +1774,8 @@ server cluster WiFiNetworkDiagnostics = 54 {
/** The Ethernet Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
server cluster EthernetNetworkDiagnostics = 55 {
+ revision 1; // NOTE: Default/not specifically set
+
enum PHYRateEnum : enum8 {
kRate10M = 0;
kRate100M = 1;
@@ -1741,6 +1817,8 @@ server cluster EthernetNetworkDiagnostics = 55 {
Two types of switch devices are supported: latching switch (e.g. rocker switch) and momentary switch (e.g. push button), distinguished with their feature flags.
Interactions with the switch device are exposed as attributes (for the latching switch) and as events (for both types of switches). An interested party MAY subscribe to these attributes/events and thus be informed of the interactions, and can perform actions based on this, for example by sending commands to perform an action such as controlling a light or a window shade. */
server cluster Switch = 59 {
+ revision 1; // NOTE: Default/not specifically set
+
bitmap Feature : bitmap32 {
kLatchingSwitch = 0x1;
kMomentarySwitch = 0x2;
@@ -1791,6 +1869,8 @@ server cluster Switch = 59 {
/** Commands to trigger a Node to allow a new Administrator to commission it. */
server cluster AdministratorCommissioning = 60 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CommissioningWindowStatusEnum : enum8 {
kWindowNotOpen = 0;
kEnhancedWindowOpen = 1;
@@ -1831,6 +1911,8 @@ server cluster AdministratorCommissioning = 60 {
/** This cluster is used to add or remove Operational Credentials on a Commissionee or Node, as well as manage the associated Fabrics. */
server cluster OperationalCredentials = 62 {
+ revision 1; // NOTE: Default/not specifically set
+
enum CertificateChainTypeEnum : enum8 {
kDACCertificate = 1;
kPAICertificate = 2;
@@ -1947,6 +2029,8 @@ server cluster OperationalCredentials = 62 {
/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
server cluster GroupKeyManagement = 63 {
+ revision 1; // NOTE: Default/not specifically set
+
enum GroupKeySecurityPolicyEnum : enum8 {
kTrustFirst = 0;
kCacheAndSync = 1;
@@ -2020,6 +2104,8 @@ server cluster GroupKeyManagement = 63 {
/** The Fixed Label Cluster provides a feature for the device to tag an endpoint with zero or more read only
labels. */
server cluster FixedLabel = 64 {
+ revision 1; // NOTE: Default/not specifically set
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
@@ -2036,6 +2122,8 @@ server cluster FixedLabel = 64 {
/** The User Label Cluster provides a feature to tag an endpoint with zero or more labels. */
server cluster UserLabel = 65 {
+ revision 1; // NOTE: Default/not specifically set
+
struct LabelStruct {
char_string<16> label = 0;
char_string<16> value = 1;
@@ -2052,6 +2140,8 @@ server cluster UserLabel = 65 {
/** This cluster provides an interface to a boolean state called StateValue. */
server cluster BooleanState = 69 {
+ revision 1;
+
info event StateChange = 0 {
boolean stateValue = 0;
}
@@ -2067,6 +2157,8 @@ server cluster BooleanState = 69 {
/** Attributes and commands for selecting a mode from a list of supported options. */
server cluster ModeSelect = 80 {
+ revision 2;
+
bitmap Feature : bitmap32 {
kOnOff = 0x1;
}
@@ -2102,6 +2194,8 @@ server cluster ModeSelect = 80 {
/** Attributes and commands for configuring the temperature control, and reporting temperature. */
server cluster TemperatureControl = 86 {
+ revision 1; // NOTE: Default/not specifically set
+
bitmap Feature : bitmap32 {
kTemperatureNumber = 0x1;
kTemperatureLevel = 0x2;
@@ -2127,6 +2221,8 @@ server cluster TemperatureControl = 86 {
/** An interface to a generic way to secure a door */
server cluster DoorLock = 257 {
+ revision 7;
+
enum AlarmCodeEnum : enum8 {
kLockJammed = 0;
kLockFactoryReset = 1;
@@ -2531,6 +2627,8 @@ server cluster DoorLock = 257 {
/** Provides an interface for controlling and adjusting automatic window coverings. */
server cluster WindowCovering = 258 {
+ revision 5;
+
enum EndProductType : enum8 {
kRollerShade = 0;
kRomanShade = 1;
@@ -2638,6 +2736,8 @@ server cluster WindowCovering = 258 {
/** An interface for configuring and controlling pumps. */
server cluster PumpConfigurationAndControl = 512 {
+ revision 3;
+
enum ControlModeEnum : enum8 {
kConstantSpeed = 0;
kConstantPressure = 1;
@@ -2746,6 +2846,8 @@ server cluster PumpConfigurationAndControl = 512 {
/** An interface for configuring and controlling the functionality of a thermostat. */
server cluster Thermostat = 513 {
+ revision 6;
+
enum SetpointAdjustMode : enum8 {
kHeat = 0;
kCool = 1;
@@ -2832,6 +2934,8 @@ server cluster Thermostat = 513 {
/** An interface for controlling a fan in a heating/cooling system. */
provisional server cluster FanControl = 514 {
+ revision 4;
+
enum AirflowDirectionEnum : enum8 {
kForward = 0;
kReverse = 1;
@@ -2852,8 +2956,8 @@ provisional server cluster FanControl = 514 {
kOffLowHigh = 1;
kOffLowMedHighAuto = 2;
kOffLowHighAuto = 3;
- kOffOnAuto = 4;
- kOffOn = 5;
+ kOffHighAuto = 4;
+ kOffHigh = 5;
}
enum StepDirectionEnum : enum8 {
@@ -2882,7 +2986,7 @@ provisional server cluster FanControl = 514 {
}
attribute FanModeEnum fanMode = 0;
- attribute FanModeSequenceEnum fanModeSequence = 1;
+ readonly attribute FanModeSequenceEnum fanModeSequence = 1;
attribute nullable percent percentSetting = 2;
readonly attribute percent percentCurrent = 3;
readonly attribute command_id generatedCommandList[] = 65528;
@@ -2895,8 +2999,29 @@ provisional server cluster FanControl = 514 {
/** An interface for configuring the user interface of a thermostat (which may be remote from the thermostat). */
server cluster ThermostatUserInterfaceConfiguration = 516 {
- attribute enum8 temperatureDisplayMode = 0;
- attribute access(write: manage) enum8 keypadLockout = 1;
+ revision 2;
+
+ enum KeypadLockoutEnum : enum8 {
+ kNoLockout = 0;
+ kLockout1 = 1;
+ kLockout2 = 2;
+ kLockout3 = 3;
+ kLockout4 = 4;
+ kLockout5 = 5;
+ }
+
+ enum ScheduleProgrammingVisibilityEnum : enum8 {
+ kScheduleProgrammingPermitted = 0;
+ kScheduleProgrammingDenied = 1;
+ }
+
+ enum TemperatureDisplayModeEnum : enum8 {
+ kCelsius = 0;
+ kFahrenheit = 1;
+ }
+
+ attribute TemperatureDisplayModeEnum temperatureDisplayMode = 0;
+ attribute access(write: manage) KeypadLockoutEnum keypadLockout = 1;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -2907,6 +3032,8 @@ server cluster ThermostatUserInterfaceConfiguration = 516 {
/** Attributes and commands for controlling the color properties of a color-capable light. */
server cluster ColorControl = 768 {
+ revision 6;
+
enum ColorLoopAction : enum8 {
kDeactivate = 0;
kActivateFromColorLoopStartEnhancedHue = 1;
@@ -2991,6 +3118,8 @@ server cluster ColorControl = 768 {
/** Attributes and commands for configuring a lighting ballast. */
provisional server cluster BallastConfiguration = 769 {
+ revision 4;
+
bitmap BallastStatusBitmap : bitmap8 {
kBallastNonOperational = 0x1;
kLampFailure = 0x2;
@@ -3015,6 +3144,8 @@ provisional server cluster BallastConfiguration = 769 {
/** Attributes and commands for configuring the measurement of illuminance, and reporting illuminance measurements. */
server cluster IlluminanceMeasurement = 1024 {
+ revision 3;
+
enum LightSensorTypeEnum : enum8 {
kPhotodiode = 0;
kCMOS = 1;
@@ -3033,9 +3164,11 @@ server cluster IlluminanceMeasurement = 1024 {
/** Attributes and commands for configuring the measurement of temperature, and reporting temperature measurements. */
server cluster TemperatureMeasurement = 1026 {
- readonly attribute nullable int16s measuredValue = 0;
- readonly attribute nullable int16s minMeasuredValue = 1;
- readonly attribute nullable int16s maxMeasuredValue = 2;
+ revision 1; // NOTE: Default/not specifically set
+
+ readonly attribute nullable temperature measuredValue = 0;
+ readonly attribute nullable temperature minMeasuredValue = 1;
+ readonly attribute nullable temperature maxMeasuredValue = 2;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -3046,6 +3179,8 @@ server cluster TemperatureMeasurement = 1026 {
/** Attributes and commands for configuring the measurement of pressure, and reporting pressure measurements. */
server cluster PressureMeasurement = 1027 {
+ revision 3;
+
bitmap Feature : bitmap32 {
kExtended = 0x1;
}
@@ -3063,6 +3198,8 @@ server cluster PressureMeasurement = 1027 {
/** Attributes and commands for configuring the measurement of flow, and reporting flow measurements. */
server cluster FlowMeasurement = 1028 {
+ revision 1; // NOTE: Default/not specifically set
+
readonly attribute nullable int16u measuredValue = 0;
readonly attribute nullable int16u minMeasuredValue = 1;
readonly attribute nullable int16u maxMeasuredValue = 2;
@@ -3076,6 +3213,8 @@ server cluster FlowMeasurement = 1028 {
/** Attributes and commands for configuring the measurement of relative humidity, and reporting relative humidity measurements. */
server cluster RelativeHumidityMeasurement = 1029 {
+ revision 3;
+
readonly attribute nullable int16u measuredValue = 0;
readonly attribute nullable int16u minMeasuredValue = 1;
readonly attribute nullable int16u maxMeasuredValue = 2;
@@ -3089,6 +3228,8 @@ server cluster RelativeHumidityMeasurement = 1029 {
/** Attributes and commands for configuring occupancy sensing, and reporting occupancy status. */
server cluster OccupancySensing = 1030 {
+ revision 3;
+
enum OccupancySensorTypeEnum : enum8 {
kPIR = 0;
kUltrasonic = 1;
@@ -3119,6 +3260,8 @@ server cluster OccupancySensing = 1030 {
/** This cluster provides an interface for managing low power mode on a device that supports the Wake On LAN protocol. */
server cluster WakeOnLan = 1283 {
+ revision 1; // NOTE: Default/not specifically set
+
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -3129,16 +3272,18 @@ server cluster WakeOnLan = 1283 {
/** This cluster provides an interface for controlling the current Channel on a device. */
server cluster Channel = 1284 {
- enum ChannelStatusEnum : enum8 {
- kSuccess = 0;
- kMultipleMatches = 1;
- kNoMatches = 2;
- }
+ revision 1; // NOTE: Default/not specifically set
enum LineupInfoTypeEnum : enum8 {
kMSO = 0;
}
+ enum StatusEnum : enum8 {
+ kSuccess = 0;
+ kMultipleMatches = 1;
+ kNoMatches = 2;
+ }
+
bitmap Feature : bitmap32 {
kChannelList = 0x1;
kLineupInfo = 0x2;
@@ -3181,7 +3326,9 @@ server cluster Channel = 1284 {
/** This cluster provides an interface for UX navigation within a set of targets on a device or endpoint. */
server cluster TargetNavigator = 1285 {
- enum TargetNavigatorStatusEnum : enum8 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum StatusEnum : enum8 {
kSuccess = 0;
kTargetNotFound = 1;
kNotAllowed = 2;
@@ -3189,7 +3336,7 @@ server cluster TargetNavigator = 1285 {
struct TargetInfoStruct {
int8u identifier = 0;
- char_string<32> name = 1;
+ char_string name = 1;
}
readonly attribute TargetInfoStruct targetList[] = 0;
@@ -3206,7 +3353,7 @@ server cluster TargetNavigator = 1285 {
}
response struct NavigateTargetResponse = 1 {
- TargetNavigatorStatusEnum status = 0;
+ StatusEnum status = 0;
optional char_string data = 1;
}
@@ -3215,14 +3362,7 @@ server cluster TargetNavigator = 1285 {
/** This cluster provides an interface for controlling Media Playback (PLAY, PAUSE, etc) on a media device such as a TV or Speaker. */
server cluster MediaPlayback = 1286 {
- enum MediaPlaybackStatusEnum : enum8 {
- kSuccess = 0;
- kInvalidStateForCommand = 1;
- kNotAllowed = 2;
- kNotActive = 3;
- kSpeedOutOfRange = 4;
- kSeekOutOfRange = 5;
- }
+ revision 1; // NOTE: Default/not specifically set
enum PlaybackStateEnum : enum8 {
kPlaying = 0;
@@ -3231,6 +3371,15 @@ server cluster MediaPlayback = 1286 {
kBuffering = 3;
}
+ enum StatusEnum : enum8 {
+ kSuccess = 0;
+ kInvalidStateForCommand = 1;
+ kNotAllowed = 2;
+ kNotActive = 3;
+ kSpeedOutOfRange = 4;
+ kSeekOutOfRange = 5;
+ }
+
bitmap Feature : bitmap32 {
kAdvancedSeek = 0x1;
kVariableSpeed = 0x2;
@@ -3250,7 +3399,7 @@ server cluster MediaPlayback = 1286 {
readonly attribute int16u clusterRevision = 65533;
response struct PlaybackResponse = 10 {
- MediaPlaybackStatusEnum status = 0;
+ StatusEnum status = 0;
optional char_string data = 1;
}
@@ -3261,6 +3410,8 @@ server cluster MediaPlayback = 1286 {
/** This cluster provides an interface for controlling the Input Selector on a media device such as a TV. */
server cluster MediaInput = 1287 {
+ revision 1; // NOTE: Default/not specifically set
+
enum InputTypeEnum : enum8 {
kInternal = 0;
kAux = 1;
@@ -3307,6 +3458,8 @@ server cluster MediaInput = 1287 {
/** This cluster provides an interface for managing low power mode on a device. */
server cluster LowPower = 1288 {
+ revision 1; // NOTE: Default/not specifically set
+
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -3319,7 +3472,9 @@ server cluster LowPower = 1288 {
/** This cluster provides an interface for controlling a device like a TV using action commands such as UP, DOWN, and SELECT. */
server cluster KeypadInput = 1289 {
- enum CecKeyCode : enum8 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum CECKeyCodeEnum : enum8 {
kSelect = 0;
kUp = 1;
kDown = 2;
@@ -3408,7 +3563,7 @@ server cluster KeypadInput = 1289 {
kData = 118;
}
- enum KeypadInputStatusEnum : enum8 {
+ enum StatusEnum : enum8 {
kSuccess = 0;
kUnsupportedKey = 1;
kInvalidKeyInCurrentState = 2;
@@ -3428,11 +3583,11 @@ server cluster KeypadInput = 1289 {
readonly attribute int16u clusterRevision = 65533;
request struct SendKeyRequest {
- CecKeyCode keyCode = 0;
+ CECKeyCodeEnum keyCode = 0;
}
response struct SendKeyResponse = 1 {
- KeypadInputStatusEnum status = 0;
+ StatusEnum status = 0;
}
command SendKey(SendKeyRequest): SendKeyResponse = 0;
@@ -3440,11 +3595,7 @@ server cluster KeypadInput = 1289 {
/** This cluster provides an interface for launching content on a media player device such as a TV or Speaker. */
server cluster ContentLauncher = 1290 {
- enum ContentLaunchStatusEnum : enum8 {
- kSuccess = 0;
- kUrlNotAvailable = 1;
- kAuthFailed = 2;
- }
+ revision 1; // NOTE: Default/not specifically set
enum MetricTypeEnum : enum8 {
kPixels = 0;
@@ -3468,12 +3619,18 @@ server cluster ContentLauncher = 1290 {
kVideo = 13;
}
+ enum StatusEnum : enum8 {
+ kSuccess = 0;
+ kURLNotAvailable = 1;
+ kAuthFailed = 2;
+ }
+
bitmap Feature : bitmap32 {
kContentSearch = 0x1;
kURLPlayback = 0x2;
}
- bitmap SupportedStreamingProtocol : bitmap32 {
+ bitmap SupportedProtocolsBitmap : bitmap32 {
kDASH = 0x1;
kHLS = 0x2;
}
@@ -3485,13 +3642,13 @@ server cluster ContentLauncher = 1290 {
}
struct AdditionalInfoStruct {
- char_string name = 0;
- char_string value = 1;
+ char_string<256> name = 0;
+ char_string<8192> value = 1;
}
struct ParameterStruct {
ParameterEnum type = 0;
- char_string value = 1;
+ char_string<1024> value = 1;
optional AdditionalInfoStruct externalIDList[] = 2;
}
@@ -3500,13 +3657,13 @@ server cluster ContentLauncher = 1290 {
}
struct StyleInformationStruct {
- optional char_string imageURL = 0;
- optional char_string color = 1;
+ optional char_string<8192> imageURL = 0;
+ optional char_string<9> color = 1;
optional DimensionStruct size = 2;
}
struct BrandingInformationStruct {
- char_string providerName = 0;
+ char_string<256> providerName = 0;
optional StyleInformationStruct background = 1;
optional StyleInformationStruct logo = 2;
optional StyleInformationStruct progressBar = 3;
@@ -3524,6 +3681,8 @@ server cluster ContentLauncher = 1290 {
/** This cluster provides an interface for controlling the Output on a media device such as a TV. */
server cluster AudioOutput = 1291 {
+ revision 1; // NOTE: Default/not specifically set
+
enum OutputTypeEnum : enum8 {
kHDMI = 0;
kBT = 1;
@@ -3561,7 +3720,9 @@ server cluster AudioOutput = 1291 {
/** This cluster provides an interface for launching content on a media player device such as a TV or Speaker. */
server cluster ApplicationLauncher = 1292 {
- enum ApplicationLauncherStatusEnum : enum8 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum StatusEnum : enum8 {
kSuccess = 0;
kAppNotAvailable = 1;
kSystemBusy = 2;
@@ -3602,7 +3763,7 @@ server cluster ApplicationLauncher = 1292 {
}
response struct LauncherResponse = 3 {
- ApplicationLauncherStatusEnum status = 0;
+ StatusEnum status = 0;
optional octet_string data = 1;
}
@@ -3613,6 +3774,8 @@ server cluster ApplicationLauncher = 1292 {
/** This cluster provides information about an application running on a TV or media player device which is represented as an endpoint. */
server cluster ApplicationBasic = 1293 {
+ revision 1; // NOTE: Default/not specifically set
+
enum ApplicationStatusEnum : enum8 {
kStopped = 0;
kActiveVisibleFocus = 1;
@@ -3640,6 +3803,8 @@ server cluster ApplicationBasic = 1293 {
/** This cluster provides commands that facilitate user account login on a Content App or a node. For example, a Content App running on a Video Player device, which is represented as an endpoint (see [TV Architecture]), can use this cluster to help make the user account on the Content App match the user account on the Client. */
server cluster AccountLogin = 1294 {
+ revision 1; // NOTE: Default/not specifically set
+
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -3660,13 +3825,15 @@ server cluster AccountLogin = 1294 {
char_string setupPIN = 0;
}
- timed command GetSetupPIN(GetSetupPINRequest): GetSetupPINResponse = 0;
- timed command Login(LoginRequest): DefaultSuccess = 2;
- timed command Logout(): DefaultSuccess = 3;
+ fabric timed command access(invoke: administer) GetSetupPIN(GetSetupPINRequest): GetSetupPINResponse = 0;
+ fabric timed command access(invoke: administer) Login(LoginRequest): DefaultSuccess = 2;
+ fabric timed command Logout(): DefaultSuccess = 3;
}
/** The Test Cluster is meant to validate the generated code */
internal server cluster UnitTesting = 4294048773 {
+ revision 1; // NOTE: Default/not specifically set
+
enum SimpleEnum : enum8 {
kUnspecified = 0;
kValueA = 1;
@@ -4066,12 +4233,14 @@ endpoint 0 {
callback attribute softwareVersion default = 0;
callback attribute softwareVersionString;
callback attribute capabilityMinima;
+ callback attribute specificationVersion;
+ callback attribute maxPathsPerInvoke;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute eventList;
callback attribute attributeList;
ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 2;
+ ram attribute clusterRevision default = 3;
}
server cluster OtaSoftwareUpdateRequestor {
@@ -4189,15 +4358,18 @@ endpoint 0 {
server cluster GeneralDiagnostics {
callback attribute networkInterfaces;
callback attribute rebootCount default = 0x0000;
+ callback attribute upTime default = 0x0000000000000000;
callback attribute testEventTriggersEnabled;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute eventList;
callback attribute attributeList;
ram attribute featureMap default = 0;
- ram attribute clusterRevision default = 1;
+ ram attribute clusterRevision default = 0x0002;
handle command TestEventTrigger;
+ handle command TimeSnapshot;
+ handle command TimeSnapshotResponse;
}
server cluster SoftwareDiagnostics {
@@ -4377,19 +4549,15 @@ endpoint 1 {
}
server cluster Scenes {
- callback attribute sceneCount default = 0x00;
- ram attribute currentScene default = 0x00;
- ram attribute currentGroup default = 0x0000;
- ram attribute sceneValid default = 0x00;
ram attribute nameSupport default = 0x80;
ram attribute lastConfiguredBy;
ram attribute sceneTableSize default = 16;
- callback attribute remainingCapacity default = 8;
+ callback attribute fabricSceneInfo;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute eventList;
callback attribute attributeList;
- ram attribute featureMap default = 7;
+ ram attribute featureMap default = 15;
ram attribute clusterRevision default = 5;
handle command AddScene;
@@ -4941,18 +5109,14 @@ endpoint 2 {
}
server cluster Scenes {
- callback attribute sceneCount default = 0x00;
- ram attribute currentScene default = 0x00;
- ram attribute currentGroup default = 0x0000;
- ram attribute sceneValid default = 0x00;
ram attribute nameSupport default = 0x80;
ram attribute sceneTableSize default = 16;
- callback attribute remainingCapacity default = 8;
+ callback attribute fabricSceneInfo;
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute eventList;
callback attribute attributeList;
- ram attribute featureMap default = 7;
+ ram attribute featureMap default = 15;
ram attribute clusterRevision default = 5;
handle command AddScene;
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 b5931df6f9ca27..bd54cab550e1c3 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
@@ -915,6 +915,38 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "SpecificationVersion",
+ "code": 21,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxPathsPerInvoke",
+ "code": 22,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "GeneratedCommandList",
"code": 65528,
@@ -1005,7 +1037,7 @@
"storageOption": "RAM",
"singleton": 1,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "3",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -2368,6 +2400,22 @@
"source": "client",
"isIncoming": 1,
"isEnabled": 1
+ },
+ {
+ "name": "TimeSnapshot",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "TimeSnapshotResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
}
],
"attributes": [
@@ -2403,6 +2451,22 @@
"maxInterval": 65344,
"reportableChange": 0
},
+ {
+ "name": "UpTime",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int64u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000000000000000",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "TestEventTriggersEnabled",
"code": 8,
@@ -2509,7 +2573,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "1",
+ "defaultValue": "0x0002",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -2716,7 +2780,7 @@
"code": 10,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "int16u",
"included": 1,
"storageOption": "External",
"singleton": 0,
@@ -2732,7 +2796,7 @@
"code": 11,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "int16u",
"included": 1,
"storageOption": "External",
"singleton": 0,
@@ -2748,7 +2812,7 @@
"code": 12,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "int16u",
"included": 1,
"storageOption": "External",
"singleton": 0,
@@ -4601,76 +4665,12 @@
}
],
"attributes": [
- {
- "name": "SceneCount",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "CurrentScene",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "CurrentGroup",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "type": "group_id",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0000",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "SceneValid",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
{
"name": "NameSupport",
"code": 4,
"mfgCode": null,
"side": "server",
- "type": "bitmap8",
+ "type": "NameSupportBitmap",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -4714,16 +4714,16 @@
"reportableChange": 0
},
{
- "name": "RemainingCapacity",
+ "name": "FabricSceneInfo",
"code": 7,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "array",
"included": 1,
- "storageOption": "External",
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "8",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -4803,7 +4803,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "7",
+ "defaultValue": "15",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -5174,7 +5174,7 @@
"code": 15,
"mfgCode": null,
"side": "server",
- "type": "LevelControlOptions",
+ "type": "OptionsBitmap",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -7064,7 +7064,7 @@
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "enum8",
+ "type": "TemperatureDisplayModeEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -7080,7 +7080,7 @@
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "enum8",
+ "type": "KeypadLockoutEnum",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -7521,7 +7521,7 @@
"code": 0,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -7537,7 +7537,7 @@
"code": 1,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -7553,7 +7553,7 @@
"code": 2,
"mfgCode": null,
"side": "server",
- "type": "int16s",
+ "type": "temperature",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -10901,76 +10901,12 @@
}
],
"attributes": [
- {
- "name": "SceneCount",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "CurrentScene",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "type": "int8u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "CurrentGroup",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "type": "group_id",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0000",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "SceneValid",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "type": "boolean",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
{
"name": "NameSupport",
"code": 4,
"mfgCode": null,
"side": "server",
- "type": "bitmap8",
+ "type": "NameSupportBitmap",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
@@ -10998,16 +10934,16 @@
"reportableChange": 0
},
{
- "name": "RemainingCapacity",
+ "name": "FabricSceneInfo",
"code": 7,
"mfgCode": null,
"side": "server",
- "type": "int8u",
+ "type": "array",
"included": 1,
- "storageOption": "External",
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "8",
+ "defaultValue": "",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -11068,7 +11004,7 @@
"side": "server",
"type": "array",
"included": 1,
- "storageOption": "External",
+ "storageOption": "RAM",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
@@ -11087,7 +11023,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "7",
+ "defaultValue": "15",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -12316,6 +12252,5 @@
"endpointId": 65534,
"networkId": 0
}
- ],
- "log": []
-}
\ No newline at end of file
+ ]
+}
diff --git a/examples/all-clusters-minimal-app/ameba/README.md b/examples/all-clusters-minimal-app/ameba/README.md
index 86c2a0f222f3a1..b7189f9931a11c 100644
--- a/examples/all-clusters-minimal-app/ameba/README.md
+++ b/examples/all-clusters-minimal-app/ameba/README.md
@@ -27,13 +27,13 @@ The CHIP demo application is supported on
- Pull docker image:
```
- $ docker pull ghcr.io/project-chip/chip-build-ameba:22
+ $ docker pull ghcr.io/project-chip/chip-build-ameba:26
```
- Run docker container:
```
- $ docker run -it -v ${CHIP_DIR}:/root/chip ghcr.io/project-chip/chip-build-ameba:22
+ $ docker run -it -v ${CHIP_DIR}:/root/chip ghcr.io/project-chip/chip-build-ameba:26
```
- Setup build environment:
diff --git a/examples/all-clusters-minimal-app/asr/src/DeviceCallbacks.cpp b/examples/all-clusters-minimal-app/asr/src/DeviceCallbacks.cpp
old mode 100755
new mode 100644
index a7be66c3fbef2c..89266592872d3e
--- a/examples/all-clusters-minimal-app/asr/src/DeviceCallbacks.cpp
+++ b/examples/all-clusters-minimal-app/asr/src/DeviceCallbacks.cpp
@@ -43,8 +43,6 @@
#include "route_hook/asr_route_hook.h"
#endif
-static const char * TAG = "app-devicecallbacks";
-
using namespace ::chip;
using namespace ::chip::Inet;
using namespace ::chip::System;
@@ -149,9 +147,8 @@ void DeviceCallbacks::OnInternetConnectivityChange(const ChipDeviceEvent * event
void DeviceCallbacks::OnOnOffPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value)
{
VerifyOrExit(attributeId == chip::app::Clusters::OnOff::Attributes::OnOff::Id,
- ChipLogError(DeviceLayer, TAG, "Unhandled Attribute ID: '0x%04x", attributeId));
- VerifyOrExit(endpointId == 1 || endpointId == 2,
- ChipLogError(DeviceLayer, TAG, "Unexpected EndPoint ID: `0x%02x'", endpointId));
+ ChipLogError(DeviceLayer, "Unhandled Attribute ID: '0x%04lx", attributeId));
+ VerifyOrExit(endpointId == 1 || endpointId == 2, ChipLogError(DeviceLayer, "Unexpected EndPoint ID: `0x%02x'", endpointId));
switch (attributeId)
{
@@ -189,8 +186,8 @@ void IdentifyTimerHandler(Layer * systemLayer, void * appState, CHIP_ERROR error
void DeviceCallbacks::OnIdentifyPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value)
{
VerifyOrExit(attributeId == chip::app::Clusters::Identify::Attributes::IdentifyTime::Id,
- ChipLogError(DeviceLayer, "[%s] Unhandled Attribute ID: '0x%04lx", TAG, attributeId));
- VerifyOrExit(endpointId == 1, ChipLogError(DeviceLayer, "[%s] Unexpected EndPoint ID: `0x%02x'", TAG, endpointId));
+ ChipLogError(DeviceLayer, "Unhandled Attribute ID: '0x%04lx", attributeId));
+ VerifyOrExit(endpointId == 1, ChipLogError(DeviceLayer, "Unexpected EndPoint ID: `0x%02x'", endpointId));
// timerCount represents the number of callback executions before we stop the timer.
// value is expressed in seconds and the timer is fired every 250ms, so just multiply value by 4.
diff --git a/examples/all-clusters-minimal-app/nrfconnect/main/include/CHIPProjectConfig.h b/examples/all-clusters-minimal-app/nrfconnect/main/include/CHIPProjectConfig.h
index 9fea28ec9fde12..b55e719c553a9b 100644
--- a/examples/all-clusters-minimal-app/nrfconnect/main/include/CHIPProjectConfig.h
+++ b/examples/all-clusters-minimal-app/nrfconnect/main/include/CHIPProjectConfig.h
@@ -25,7 +25,3 @@
*/
#pragma once
-
-// Use a default pairing code if one hasn't been provisioned in flash.
-#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE 20202021
-#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR 0xF00
diff --git a/examples/all-clusters-minimal-app/nrfconnect/prj.conf b/examples/all-clusters-minimal-app/nrfconnect/prj.conf
index e1613a896fd6d8..0491fbb825666f 100644
--- a/examples/all-clusters-minimal-app/nrfconnect/prj.conf
+++ b/examples/all-clusters-minimal-app/nrfconnect/prj.conf
@@ -44,3 +44,7 @@ CONFIG_CHIP_OTA_REQUESTOR=n
# Disable QSPI NOR
CONFIG_CHIP_QSPI_NOR=n
+
+# Enable Factory Data feature
+CONFIG_CHIP_FACTORY_DATA=y
+CONFIG_CHIP_FACTORY_DATA_BUILD=y
diff --git a/examples/all-clusters-minimal-app/nrfconnect/prj_release.conf b/examples/all-clusters-minimal-app/nrfconnect/prj_release.conf
index 7f64115af32736..e885563a98618f 100644
--- a/examples/all-clusters-minimal-app/nrfconnect/prj_release.conf
+++ b/examples/all-clusters-minimal-app/nrfconnect/prj_release.conf
@@ -47,3 +47,8 @@ CONFIG_ASSERT_NO_FILE_INFO=y
CONFIG_ASSERT_VERBOSE=n
CONFIG_PRINTK=n
CONFIG_THREAD_NAME=n
+CONFIG_BOOT_BANNER=n
+
+# Enable Factory Data feature
+CONFIG_CHIP_FACTORY_DATA=y
+CONFIG_CHIP_FACTORY_DATA_BUILD=y
diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/ChipClient.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/ChipClient.kt
index d57f63a69a9bee..77c59d75d00c36 100644
--- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/ChipClient.kt
+++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/ChipClient.kt
@@ -41,7 +41,7 @@ object ChipClient {
private lateinit var chipDeviceController: ChipDeviceController
private lateinit var androidPlatform: AndroidChipPlatform
/* 0xFFF4 is a test vendor ID, replace with your assigned company ID */
- private const val VENDOR_ID = 0xFFF4
+ const val VENDOR_ID = 0xFFF4
fun getDeviceController(context: Context): ChipDeviceController {
getAndroidChipPlatform(context)
diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/SelectActionFragment.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/SelectActionFragment.kt
index 571552b86f06b2..dc082d5dc5b73c 100644
--- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/SelectActionFragment.kt
+++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/SelectActionFragment.kt
@@ -73,6 +73,7 @@ class SelectActionFragment : Fragment() {
binding.wildcardBtn.setOnClickListener { handleWildcardClicked() }
binding.unpairDeviceBtn.setOnClickListener { handleUnpairDeviceClicked() }
binding.groupSettingBtn.setOnClickListener { handleGroupSettingClicked() }
+ binding.otaProviderBtn.setOnClickListener { handleOTAProviderClicked() }
return binding.root
}
@@ -218,6 +219,10 @@ class SelectActionFragment : Fragment() {
showFragment(UnpairDeviceFragment.newInstance())
}
+ private fun handleOTAProviderClicked() {
+ showFragment(OtaProviderClientFragment.newInstance(), false)
+ }
+
/** Notifies listener of provision-WiFi-credentials button click. */
private fun handleProvisionWiFiCredentialsClicked() {
getCallback()?.SetNetworkType(ProvisionNetworkType.WIFI)
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 9687237a814e0d..8943801c080c80 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
@@ -12,19 +12,12 @@ import android.widget.EditText
import android.widget.Spinner
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
+import chip.devicecontroller.ChipClusters
import chip.devicecontroller.ChipDeviceController
-import chip.devicecontroller.ClusterIDMapping
+import chip.devicecontroller.ChipStructs
+import chip.devicecontroller.ChipStructs.AccessControlClusterAccessControlEntryStruct
+import chip.devicecontroller.ChipStructs.GroupKeyManagementClusterGroupKeySetStruct
import chip.devicecontroller.GroupKeySecurityPolicy
-import chip.devicecontroller.InvokeCallback
-import chip.devicecontroller.ReportCallback
-import chip.devicecontroller.WriteAttributesCallback
-import chip.devicecontroller.cluster.structs.AccessControlClusterAccessControlEntryStruct
-import chip.devicecontroller.cluster.structs.GroupKeyManagementClusterGroupKeySetStruct
-import chip.devicecontroller.model.AttributeWriteRequest
-import chip.devicecontroller.model.ChipAttributePath
-import chip.devicecontroller.model.ChipEventPath
-import chip.devicecontroller.model.InvokeElement
-import chip.devicecontroller.model.NodeState
import com.google.chip.chiptool.ChipClient
import com.google.chip.chiptool.GenericChipDeviceListener
import com.google.chip.chiptool.R
@@ -33,10 +26,6 @@ import com.google.chip.chiptool.util.DeviceIdUtil
import java.lang.Exception
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
-import matter.tlv.AnonymousTag
-import matter.tlv.ContextSpecificTag
-import matter.tlv.TlvReader
-import matter.tlv.TlvWriter
class GroupSettingFragment : Fragment() {
private val deviceController: ChipDeviceController
@@ -260,14 +249,17 @@ class GroupSettingFragment : Fragment() {
scope.launch {
val keySetWritestruct =
GroupKeyManagementClusterGroupKeySetStruct(
- keySetIdEd.text.toString().toUInt(),
- GroupKeySecurityPolicy.valueOf(keySecurityPolicySp.selectedItem.toString()).id.toUInt(),
+ keySetIdEd.text.toString().toUInt().toInt(),
+ GroupKeySecurityPolicy.valueOf(keySecurityPolicySp.selectedItem.toString())
+ .id
+ .toUInt()
+ .toInt(),
hexStringToByteArray(epochKey0Ed.text.toString()),
- epochStartTime0Ed.text.toString().toULong(),
+ epochStartTime0Ed.text.toString().toULong().toLong(),
hexStringToByteArray(epochKey1Ed.text.toString()),
- epochStartTime1Ed.text.toString().toULong(),
+ epochStartTime1Ed.text.toString().toULong().toLong(),
hexStringToByteArray(epochKey2Ed.text.toString()),
- epochStartTime2Ed.text.toString().toULong()
+ epochStartTime2Ed.text.toString().toULong().toLong()
)
sendKeySetWrite(keySetWritestruct)
requireActivity().runOnUiThread { dialog.dismiss() }
@@ -279,41 +271,24 @@ class GroupSettingFragment : Fragment() {
private suspend fun sendKeySetWrite(
groupKeySetStruct: GroupKeyManagementClusterGroupKeySetStruct
) {
- val tlvWriter =
- TlvWriter()
- .startStructure(AnonymousTag)
- .apply {
- groupKeySetStruct.toTlv(
- ContextSpecificTag(
- ClusterIDMapping.GroupKeyManagement.KeySetWriteCommandField.GroupKeySet.id
- ),
- this
- )
- }
- .endStructure()
-
- deviceController.invoke(
- object : InvokeCallback {
- override fun onError(e: java.lang.Exception?) {
+ val cluster =
+ ChipClusters.GroupKeyManagementCluster(
+ ChipClient.getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId),
+ 0
+ )
+ cluster.keySetWrite(
+ object : ChipClusters.DefaultClusterCallback {
+ override fun onError(e: Exception?) {
Log.d(TAG, "onError : ", e)
showMessage("onError : ${e.toString()}")
}
- override fun onResponse(invokeElement: InvokeElement?, successCode: Long) {
+ override fun onSuccess() {
Log.d(TAG, "onResponse")
- showMessage("onResponse : $successCode")
+ showMessage("onResponse")
}
},
- ChipClient.getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId),
- InvokeElement.newInstance(
- 0,
- ClusterIDMapping.GroupKeyManagement.ID,
- ClusterIDMapping.GroupKeyManagement.Command.KeySetWrite.id,
- tlvWriter.getEncoded(),
- null
- ),
- 0,
- 0
+ groupKeySetStruct
)
}
@@ -336,39 +311,30 @@ class GroupSettingFragment : Fragment() {
}
private suspend fun writeGroupKeyMap(groupId: UInt, groupKeySetId: UInt) {
- val tlvWriter =
- TlvWriter().apply {
- startArray(AnonymousTag)
- startStructure(AnonymousTag)
- put(ContextSpecificTag(1), groupId)
- put(ContextSpecificTag(2), groupKeySetId)
- endStructure()
- endArray()
- }
-
- deviceController.write(
- object : WriteAttributesCallback {
- override fun onError(attributePath: ChipAttributePath?, e: Exception?) {
+ val cluster =
+ ChipClusters.GroupKeyManagementCluster(
+ ChipClient.getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId),
+ 0
+ )
+ cluster.writeGroupKeyMapAttribute(
+ object : ChipClusters.DefaultClusterCallback {
+ override fun onError(e: Exception?) {
Log.d(TAG, "onError : ", e)
showMessage("Error : ${e.toString()}")
}
- override fun onResponse(attributePath: ChipAttributePath?) {
+ override fun onSuccess() {
Log.d(TAG, "onResponse")
showMessage("write Success")
}
},
- ChipClient.getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId),
- listOf(
- AttributeWriteRequest.newInstance(
- 0,
- ClusterIDMapping.GroupKeyManagement.ID,
- ClusterIDMapping.GroupKeyManagement.Attribute.GroupKeyMap.id,
- tlvWriter.getEncoded()
+ arrayListOf(
+ ChipStructs.GroupKeyManagementClusterGroupKeyMapStruct(
+ groupId.toInt(),
+ groupKeySetId.toInt(),
+ deviceController.fabricIndex
)
- ),
- 0,
- 0
+ )
)
}
@@ -390,75 +356,52 @@ class GroupSettingFragment : Fragment() {
}
private suspend fun sendAddGroup(groupId: UInt, groupName: String) {
- val tlvWriter =
- TlvWriter().apply {
- startStructure(AnonymousTag)
- put(ContextSpecificTag(0), groupId)
- put(ContextSpecificTag(1), groupName)
- endStructure()
- }
-
- deviceController.invoke(
- object : InvokeCallback {
+ val cluster =
+ ChipClusters.GroupsCluster(
+ ChipClient.getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId),
+ 0
+ )
+ cluster.addGroup(
+ object : ChipClusters.GroupsCluster.AddGroupResponseCallback {
override fun onError(e: Exception?) {
Log.d(TAG, "onError : ", e)
showMessage("Error : ${e.toString()}")
}
- override fun onResponse(invokeElement: InvokeElement?, successCode: Long) {
+ override fun onSuccess(status: Int?, groupID: Int?) {
Log.d(TAG, "onResponse")
- showMessage("onResponse : $successCode")
+ showMessage("onResponse : $status, $groupID")
}
},
- ChipClient.getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId),
- InvokeElement.newInstance(
- 0,
- ClusterIDMapping.Groups.ID,
- ClusterIDMapping.Groups.Command.AddGroup.id,
- tlvWriter.getEncoded(),
- null
- ),
- 0,
- 0
+ groupId.toInt(),
+ groupName
)
}
private suspend fun readAccessControl() {
- val endpointId = 0
- val clusterId = ClusterIDMapping.AccessControl.ID
- val attributeId = ClusterIDMapping.AccessControl.Attribute.Acl.id
-
- val attributePath = ChipAttributePath.newInstance(endpointId, clusterId, attributeId)
- deviceController.readAttributePath(
- object : ReportCallback {
- override fun onError(
- attributePath: ChipAttributePath?,
- eventPath: ChipEventPath?,
- e: Exception
- ) {
+ val cluster =
+ ChipClusters.AccessControlCluster(
+ ChipClient.getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId),
+ 0
+ )
+ cluster.readAclAttribute(
+ object : ChipClusters.AccessControlCluster.AclAttributeCallback {
+ override fun onError(e: Exception?) {
Log.d(TAG, "onError : ", e)
showMessage("Error : $e")
}
- override fun onReport(nodeState: NodeState?) {
- Log.d(TAG, "onResponse")
- val tlv =
- nodeState
- ?.getEndpointState(endpointId)
- ?.getClusterState(clusterId)
- ?.getAttributeState(attributeId)
- ?.tlv
- requireActivity().runOnUiThread { showAddAccessControlDialog(tlv) }
+ override fun onSuccess(value: MutableList?) {
+ requireActivity().runOnUiThread { showAddAccessControlDialog(value) }
}
- },
- ChipClient.getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId),
- listOf(attributePath),
- 0
+ }
)
}
- private fun showAddAccessControlDialog(tlv: ByteArray?) {
- if (tlv == null) {
+ private fun showAddAccessControlDialog(
+ value: List?
+ ) {
+ if (value == null) {
Log.d(TAG, "Access Control read fail")
showMessage("Access Control read fail")
return
@@ -479,7 +422,7 @@ class GroupSettingFragment : Fragment() {
dialogView.findViewById