diff --git a/.github/.wordlist.txt b/.github/.wordlist.txt index 82e88caf568625..6e43cf46167d78 100644 --- a/.github/.wordlist.txt +++ b/.github/.wordlist.txt @@ -121,6 +121,7 @@ AXXXF AYNJV babaf backend +backends backticks backtrace BallastConfiguration @@ -356,6 +357,8 @@ DCONF DCONFIG debianutils debugText +decrypt +decrypted DEDEDEDE deepnote DefaultOTAProviders @@ -1150,6 +1153,7 @@ RPC RPCs RPi RPis +RSA rsn RSSI RST diff --git a/.github/workflows/bloat_check.yaml b/.github/workflows/bloat_check.yaml index 01f041cdd0a506..f68127b364711d 100644 --- a/.github/workflows/bloat_check.yaml +++ b/.github/workflows/bloat_check.yaml @@ -39,7 +39,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 8dfc7086417d2d..9774faa586efbe 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -56,7 +56,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -168,7 +168,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -242,7 +242,7 @@ jobs: run: | ./scripts/run_in_build_env.sh "./scripts/run_codegen_targets.sh out/sanitizers" - name: Clang-tidy validation - timeout-minutes: 45 + timeout-minutes: 60 run: | ./scripts/run_in_build_env.sh \ "./scripts/run-clang-tidy-on-compile-commands.py \ @@ -340,7 +340,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -391,7 +391,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -462,7 +462,7 @@ jobs: run: | ./scripts/run_in_build_env.sh "./scripts/run_codegen_targets.sh out/default" - name: Clang-tidy validation - timeout-minutes: 45 + timeout-minutes: 60 run: | ./scripts/run_in_build_env.sh \ "./scripts/run-clang-tidy-on-compile-commands.py \ @@ -499,7 +499,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -528,5 +528,5 @@ jobs: .environment/pigweed-venv/*.log - name: Run Build Coverage - timeout-minutes: 20 + timeout-minutes: 30 run: ./scripts/build_coverage.sh diff --git a/.github/workflows/chef.yaml b/.github/workflows/chef.yaml index 42dba7ca4485aa..c426996c187054 100644 --- a/.github/workflows/chef.yaml +++ b/.github/workflows/chef.yaml @@ -35,14 +35,14 @@ jobs: if: github.actor != 'restyled-io[bot]' container: - image: connectedhomeip/chip-build:0.7.3 + image: connectedhomeip/chip-build:0.7.16 options: --user root steps: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -71,14 +71,14 @@ jobs: if: github.actor != 'restyled-io[bot]' container: - image: connectedhomeip/chip-build-esp32:0.7.3 + image: connectedhomeip/chip-build-esp32:0.7.16 options: --user root steps: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -107,14 +107,14 @@ jobs: if: github.actor != 'restyled-io[bot]' container: - image: connectedhomeip/chip-build-nrf-platform:0.7.3 + image: connectedhomeip/chip-build-nrf-platform:0.7.16 options: --user root steps: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/cherry-picks.yaml b/.github/workflows/cherry-picks.yaml index d7ef371214f890..0fd7802dc461f4 100644 --- a/.github/workflows/cherry-picks.yaml +++ b/.github/workflows/cherry-picks.yaml @@ -20,7 +20,7 @@ jobs: ) steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v3.5.2 with: fetch-depth: 0 - name: Cherry-Pick into sve branch diff --git a/.github/workflows/cirque.yaml b/.github/workflows/cirque.yaml index ba6938efb7e19e..98baf36f6d61f3 100644 --- a/.github/workflows/cirque.yaml +++ b/.github/workflows/cirque.yaml @@ -57,7 +57,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/darwin-tests.yaml b/.github/workflows/darwin-tests.yaml index 02c4f58af64b89..29f34356e5f607 100644 --- a/.github/workflows/darwin-tests.yaml +++ b/.github/workflows/darwin-tests.yaml @@ -50,7 +50,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -92,7 +92,7 @@ jobs: run: defaults delete com.apple.dt.xctest.tool continue-on-error: true - name: Build Apps - timeout-minutes: 75 + timeout-minutes: 90 run: | ./scripts/run_in_build_env.sh \ "./scripts/build/build_examples.py \ diff --git a/.github/workflows/darwin.yaml b/.github/workflows/darwin.yaml index 53ea74716dd028..a78ab07cf02b68 100644 --- a/.github/workflows/darwin.yaml +++ b/.github/workflows/darwin.yaml @@ -41,7 +41,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -136,7 +136,7 @@ jobs: run: defaults delete com.apple.dt.xctest.tool continue-on-error: true - name: Run Framework Tests - timeout-minutes: 20 + timeout-minutes: 30 # For now disable unguarded-availability-new warnings because we # internally use APIs that we are annotating as only available on # new enough versions. Maybe we should change out deployment @@ -144,15 +144,18 @@ jobs: run: | mkdir -p /tmp/darwin/framework-tests ../../../out/debug/chip-all-clusters-app --interface-id -1 > >(tee /tmp/darwin/framework-tests/all-cluster-app.log) 2> >(tee /tmp/darwin/framework-tests/all-cluster-app-err.log >&2) & - # Make each ota-requestor is using a different port, discriminator, and KVS from + # Make sure each ota-requestor is using a different port, discriminator, and KVS from # all-clusters-app and from other requestors. # # And a different port from the test harness too; the test harness uses port 5541. ../../../out/debug/chip-ota-requestor-app --interface-id -1 --secured-device-port 5542 --discriminator 1111 --KVS /tmp/chip-ota-requestor-kvs1 --otaDownloadPath /tmp/chip-ota-requestor-downloaded-image1 --autoApplyImage > >(tee /tmp/darwin/framework-tests/ota-requestor-app-1.log) 2> >(tee /tmp/darwin/framework-tests/ota-requestor-app-err-1.log >&2) & ../../../out/debug/chip-ota-requestor-app --interface-id -1 --secured-device-port 5543 --discriminator 1112 --KVS /tmp/chip-ota-requestor-kvs2 --otaDownloadPath /tmp/chip-ota-requestor-downloaded-image2 --autoApplyImage > >(tee /tmp/darwin/framework-tests/ota-requestor-app-2.log) 2> >(tee /tmp/darwin/framework-tests/ota-requestor-app-err-2.log >&2) & - # UndefinedBehaviorSanitizer is enabled in the Xcode scheme, so the code in Matter.framework gets instrumented, + # -enableUndefinedBehaviorSanitizer instruments the code in Matter.framework, # but to instrument the code in the underlying libCHIP we need to pass CHIP_IS_UBSAN=YES - xcodebuild test -target "Matter" -scheme "Matter Framework Tests" -sdk macosx OTHER_CFLAGS='${inherited} -Werror -Wconversion -Wno-incomplete-umbrella -Wno-unguarded-availability-new' CHIP_IS_UBSAN=YES > >(tee /tmp/darwin/framework-tests/darwin-tests.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-err.log >&2) + 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-incomplete-umbrella -Wno-unguarded-availability-new' CHIP_IS_UBSAN=YES > >(tee /tmp/darwin/framework-tests/darwin-tests-asan.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-asan-err.log >&2) + # -enableThreadSanitizer instruments the code in Matter.framework, + # but to instrument the code in the underlying libCHIP we need to pass CHIP_IS_TSAN=YES + xcodebuild test -target "Matter" -scheme "Matter Framework Tests" -sdk macosx -enableThreadSanitizer YES OTHER_CFLAGS='${inherited} -Werror -Wconversion -Wno-incomplete-umbrella -Wno-unguarded-availability-new' CHIP_IS_TSAN=YES > >(tee /tmp/darwin/framework-tests/darwin-tests-tsan.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-tsan-err.log >&2) working-directory: src/darwin/Framework - name: Uploading log files uses: actions/upload-artifact@v3 diff --git a/.github/workflows/docbuild.yaml b/.github/workflows/docbuild.yaml index f49a9e660b4d12..ac2a8072c8045e 100644 --- a/.github/workflows/docbuild.yaml +++ b/.github/workflows/docbuild.yaml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout the code - uses: actions/checkout@v3 + uses: actions/checkout@v3.5.2 with: path: matter fetch-depth: 0 diff --git a/.github/workflows/docker_img.yaml b/.github/workflows/docker_img.yaml index b7d93bc49279ce..776a9539579585 100644 --- a/.github/workflows/docker_img.yaml +++ b/.github/workflows/docker_img.yaml @@ -62,7 +62,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/doxygen.yaml b/.github/workflows/doxygen.yaml index 3a0dc4a9d9f8b1..15c5477c848c57 100644 --- a/.github/workflows/doxygen.yaml +++ b/.github/workflows/doxygen.yaml @@ -90,7 +90,7 @@ jobs: - name: "Print Actor" run: echo ${{github.actor}} - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v3.5.2 - name: Generate run: scripts/helpers/doxygen.sh - name: Extract branch name diff --git a/.github/workflows/examples-ameba.yaml b/.github/workflows/examples-ameba.yaml index 175261cef97618..e188826740668f 100644 --- a/.github/workflows/examples-ameba.yaml +++ b/.github/workflows/examples-ameba.yaml @@ -45,7 +45,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-asr.yaml b/.github/workflows/examples-asr.yaml new file mode 100644 index 00000000000000..a8fd72fc3bfe28 --- /dev/null +++ b/.github/workflows/examples-asr.yaml @@ -0,0 +1,77 @@ +# Copyright (c) 2023 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Build example - ASR + +on: + push: + pull_request: + merge_group: + +concurrency: + group: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.event.number) || (github.event_name == 'workflow_dispatch' && github.run_number) || github.sha }} + cancel-in-progress: true + +env: + CHIP_NO_LOG_TIMESTAMPS: true + # XXX: Workaround for https://github.com/actions/cache/issues/1141 + SEGMENT_DOWNLOAD_TIMEOUT_MINS: 3 + +jobs: + asr: + name: ASR + + runs-on: ubuntu-latest + if: github.actor != 'restyled-io[bot]' + + container: + image: connectedhomeip/chip-build-asr:0.7.14 + options: --user root + + steps: + - uses: Wandalen/wretry.action@v1.0.36 + name: Checkout + with: + action: actions/checkout@v3.5.2 + with: | + token: ${{ github.token }} + attempt_limit: 3 + attempt_delay: 2000 + - name: Checkout submodules + run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform asr + - name: Bootstrap cache + uses: actions/cache@v3 + timeout-minutes: 10 + with: + key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} + path: | + .environment + build_overrides/pigweed_environment.gni + - name: Bootstrap + run: bash scripts/bootstrap.sh + - name: Build all ASR582X examples + run: | + ./scripts/run_in_build_env.sh \ + "./scripts/build/build_examples.py \ + --target asr-asr582x-all-clusters \ + --target asr-asr582x-all-clusters-minimal \ + --target asr-asr582x-lighting \ + --target asr-asr582x-light-switch \ + --target asr-asr582x-lock \ + --target asr-asr582x-ota-requestor \ + --target asr-asr582x-bridge \ + --target asr-asr582x-temperature-measurement \ + --target asr-asr582x-thermostat \ + build \ + " \ No newline at end of file diff --git a/.github/workflows/examples-bouffalolab.yaml b/.github/workflows/examples-bouffalolab.yaml index e548aa4259b929..3441ad51d2bc2a 100644 --- a/.github/workflows/examples-bouffalolab.yaml +++ b/.github/workflows/examples-bouffalolab.yaml @@ -45,7 +45,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-cc13x2x7_26x2x7.yaml b/.github/workflows/examples-cc13x2x7_26x2x7.yaml index f3703f38b85f69..0ebe1b067dbd49 100644 --- a/.github/workflows/examples-cc13x2x7_26x2x7.yaml +++ b/.github/workflows/examples-cc13x2x7_26x2x7.yaml @@ -22,7 +22,6 @@ on: concurrency: group: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.event.number) || (github.event_name == 'workflow_dispatch' && github.run_number) || github.sha }} cancel-in-progress: true - env: CHIP_NO_LOG_TIMESTAMPS: true # XXX: Workaround for https://github.com/actions/cache/issues/1141 @@ -37,17 +36,20 @@ jobs: BUILD_TYPE: gn_cc26x2x7 runs-on: ubuntu-latest - if: github.actor != 'restyled-io[bot]' + # This CI is disabled because running out of flash and a solution was not found in time, see https://github.com/project-chip/connectedhomeip/pull/26186 + # An issue was opened at https://github.com/project-chip/connectedhomeip/issues/26957 + # TODO : Enable this once we have a way to run without out of flash failure or remove platform if it cannot support the SDK + if: github.actor != 'restyled-io[bot]' && false container: - image: connectedhomeip/chip-build-ti:0.7.3 + image: connectedhomeip/chip-build-ti:0.7.14 volumes: - "/tmp/bloat_reports:/tmp/bloat_reports" steps: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -79,5 +81,93 @@ jobs: path: | .environment/gn_out/.ninja_log .environment/pigweed-venv/*.log - + - name: Build examples + timeout-minutes: 100 + run: | + scripts/run_in_build_env.sh "\ + ./scripts/build/build_examples.py \ + --target ti-cc13x2x7_26x2x7-lock-mtd \ + --target ti-cc13x2x7_26x2x7-pump-mtd \ + --target ti-cc13x2x7_26x2x7-lighting \ + --target ti-cc13x2x7_26x2x7-pump-controller-mtd \ + --target ti-cc13x4_26x4-lighting \ + --target ti-cc13x4_26x4-lock-ftd \ + --target ti-cc13x4_26x4-lock-mtd \ + --target ti-cc13x4_26x4-pump-mtd \ + --target ti-cc13x4_26x4-pump-ftd \ + --target ti-cc13x4_26x4-pump-controller-mtd \ + --target ti-cc13x4_26x4-pump-controller-ftd \ + build \ + --copy-artifacts-to out/artifacts \ + " + - name: Get lock MTD size stats + timeout-minutes: 5 + run: | + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + cc13x2_26x2 LP_CC2652R7 lock-mtd \ + out/artifacts/ti-cc13x2x7_26x2x7-lock-mtd/chip-LP_CC2652R7-lock-example.out \ + /tmp/bloat_reports/ + - name: Get Pump App size stats + timeout-minutes: 5 + run: | + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + cc13x2_26x2 LP_CC2652R7 pump-app \ + out/artifacts/ti-cc13x2x7_26x2x7-pump-mtd/chip-LP_CC2652R7-pump-example.out \ + /tmp/bloat_reports/ + - name: Get Pump Controller App size stats + timeout-minutes: 5 + run: | + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + cc13x2_26x2 LP_CC2652R7 pump-controller-app \ + out/artifacts/ti-cc13x2x7_26x2x7-pump-controller-mtd/chip-LP_CC2652R7-pump-controller-example.out \ + /tmp/bloat_reports/ + - name: Get lock FTD size stats + timeout-minutes: 5 + run: | + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + cc13x4_26x4 LP_EM_CC1354P10_6 lock-ftd \ + out/artifacts/ti-cc13x4_26x4-lock-ftd/chip-LP_EM_CC1354P10_6-lock-example.out \ + /tmp/bloat_reports/ + - name: Get lock MTD size stats + timeout-minutes: 5 + run: | + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + cc13x4_26x4 LP_EM_CC1354P10_6 lock-mtd \ + out/artifacts/ti-cc13x4_26x4-lock-mtd/chip-LP_EM_CC1354P10_6-lock-example.out \ + /tmp/bloat_reports/ + - name: Get Pump App size stats + timeout-minutes: 5 + run: | + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + cc13x4_26x4 LP_EM_CC1354P10_6 pump-app \ + out/artifacts/ti-cc13x4_26x4-pump-mtd/chip-LP_EM_CC1354P10_6-pump-example.out \ + /tmp/bloat_reports/ + - name: Get Pump Controller App size stats + timeout-minutes: 5 + run: | + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + cc13x4_26x4 LP_EM_CC1354P10_6 pump-controller-app \ + out/artifacts/ti-cc13x4_26x4-pump-controller-mtd/chip-LP_EM_CC1354P10_6-pump-controller-example.out \ + /tmp/bloat_reports/ + - name: Get Lighting App size stats + timeout-minutes: 5 + run: | + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + cc13x4_26x4 LP_EM_CC1354P10_6 lighting-app \ + out/artifacts/ti-cc13x4_26x4-lighting/chip-LP_EM_CC1354P10_6-lighting-example.out \ + /tmp/bloat_reports/ + - name: Uploading Size Reports + uses: actions/upload-artifact@v2 + if: ${{ !env.ACT }} + with: + name: Size,cc13x2x7_26x2x7-Examples,${{ env.GH_EVENT_PR }},${{ env.GH_EVENT_HASH }},${{ env.GH_EVENT_PARENT }},${{ github.event_name }} + path: | + /tmp/bloat_reports/ + - name: Uploading Size Reports + uses: actions/upload-artifact@v2 + if: ${{ !env.ACT }} + with: + name: Size,cc13x4_26x4-Examples,${{ env.GH_EVENT_PR }},${{ env.GH_EVENT_HASH }},${{ env.GH_EVENT_PARENT }},${{ github.event_name }} + path: | + /tmp/bloat_reports/ diff --git a/.github/workflows/examples-cc32xx.yaml b/.github/workflows/examples-cc32xx.yaml index f31cf1e8a20c28..712648d99870fe 100644 --- a/.github/workflows/examples-cc32xx.yaml +++ b/.github/workflows/examples-cc32xx.yaml @@ -47,7 +47,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-efr32.yaml b/.github/workflows/examples-efr32.yaml index 17e0b5617b2230..0f5db5783411e4 100644 --- a/.github/workflows/examples-efr32.yaml +++ b/.github/workflows/examples-efr32.yaml @@ -48,7 +48,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -87,7 +87,7 @@ jobs: - name: Test SLC gen timeout-minutes: 30 run: | - scripts/examples/gn_efr32_example.sh examples/lighting-app/silabs/efr32 ./out/light-app BRD4187C --slc_generate --docker + scripts/examples/gn_silabs_example.sh examples/lighting-app/silabs ./out/light-app BRD4187C --slc_generate --docker rm -rf ./out/ - name: Build some BRD4187C variants timeout-minutes: 90 @@ -120,7 +120,7 @@ jobs: - name: Build example EFR32+WF200 WiFi Lock app for BRD4161A timeout-minutes: 15 run: | - scripts/examples/gn_efr32_example.sh examples/lock-app/silabs/efr32/ out/lock_app_wifi_wf200 BRD4161A is_debug=false chip_logging=false --wifi wf200 --docker + scripts/examples/gn_silabs_example.sh examples/lock-app/silabs out/lock_app_wifi_wf200 BRD4161A is_debug=false chip_logging=false --wifi wf200 --docker .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py efr32 BRD4161A+wf200 lock-app \ out/lock_app_wifi_wf200/BRD4161A/matter-silabs-lock-example.out /tmp/bloat_reports/ - name: Clean out build output @@ -128,7 +128,7 @@ jobs: - name: Build example EFR32+RS9116 WiFi Lighting app for BRD4161A timeout-minutes: 15 run: | - scripts/examples/gn_efr32_example.sh examples/lighting-app/silabs/efr32/ out/lighting_app_wifi_rs9116 BRD4161A --wifi rs9116 --docker + scripts/examples/gn_silabs_example.sh examples/lighting-app/silabs out/lighting_app_wifi_rs9116 BRD4161A --wifi rs9116 --docker .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py efr32 BRD4161A+rs9116 lighting-app \ out/lighting_app_wifi_rs9116/BRD4161A/matter-silabs-lighting-example.out /tmp/bloat_reports/ - name: Clean out build output diff --git a/.github/workflows/examples-esp32.yaml b/.github/workflows/examples-esp32.yaml index 637c797fe5ad90..5d36782b23f599 100644 --- a/.github/workflows/examples-esp32.yaml +++ b/.github/workflows/examples-esp32.yaml @@ -45,7 +45,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -170,7 +170,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-infineon.yaml b/.github/workflows/examples-infineon.yaml index b48aafbf4937da..e05a56b215a693 100644 --- a/.github/workflows/examples-infineon.yaml +++ b/.github/workflows/examples-infineon.yaml @@ -45,7 +45,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-k32w.yaml b/.github/workflows/examples-k32w.yaml index f71f3f26f1ae61..855f0ea88fa34b 100644 --- a/.github/workflows/examples-k32w.yaml +++ b/.github/workflows/examples-k32w.yaml @@ -40,14 +40,14 @@ jobs: if: github.actor != 'restyled-io[bot]' container: - image: connectedhomeip/chip-build-k32w:0.7.3 + image: connectedhomeip/chip-build-k32w:0.7.14 volumes: - "/tmp/bloat_reports:/tmp/bloat_reports" steps: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-linux-arm.yaml b/.github/workflows/examples-linux-arm.yaml index b8af253b4923aa..3b293599b00787 100644 --- a/.github/workflows/examples-linux-arm.yaml +++ b/.github/workflows/examples-linux-arm.yaml @@ -45,7 +45,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-linux-imx.yaml b/.github/workflows/examples-linux-imx.yaml index 3dd30ed119a7a0..bb633d23f9ad8c 100644 --- a/.github/workflows/examples-linux-imx.yaml +++ b/.github/workflows/examples-linux-imx.yaml @@ -43,7 +43,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-linux-standalone.yaml b/.github/workflows/examples-linux-standalone.yaml index f80a4691a7d56f..8504087a83455e 100644 --- a/.github/workflows/examples-linux-standalone.yaml +++ b/.github/workflows/examples-linux-standalone.yaml @@ -45,7 +45,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -181,17 +181,6 @@ jobs: linux debug bridge-app \ out/linux-x64-bridge/chip-bridge-app \ /tmp/bloat_reports/ - - name: Build example Dynamic Bridge - timeout-minutes: 10 - run: | - ./scripts/run_in_build_env.sh \ - "./scripts/build/build_examples.py \ - --target linux-x64-dynamic-bridge-ipv6only \ - build" - .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ - linux debug dynamic-bridge-app-ipv6only \ - out/linux-x64-dynamic-bridge-ipv6only/dynamic-chip-bridge-app \ - /tmp/bloat_reports/ - name: Build example OTA Provider timeout-minutes: 10 run: | @@ -219,11 +208,11 @@ jobs: run: | ./scripts/run_in_build_env.sh \ "./scripts/build/build_examples.py \ - --target linux-x64-lock \ + --target linux-x64-lock-no-thread \ build" .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ linux debug lock-app \ - out/linux-x64-lock/chip-lock-app \ + out/linux-x64-lock-no-thread/chip-lock-app \ /tmp/bloat_reports/ - name: Build example contact sensor with UI run: | diff --git a/.github/workflows/examples-mbed.yaml b/.github/workflows/examples-mbed.yaml index 5f04e7eac1a26d..e32c75300ec63a 100644 --- a/.github/workflows/examples-mbed.yaml +++ b/.github/workflows/examples-mbed.yaml @@ -51,7 +51,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-mw320.yaml b/.github/workflows/examples-mw320.yaml index 9d64805bcb3b64..0d1a285f0de841 100755 --- a/.github/workflows/examples-mw320.yaml +++ b/.github/workflows/examples-mw320.yaml @@ -47,7 +47,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-nrfconnect.yaml b/.github/workflows/examples-nrfconnect.yaml index 7f66809a2d9138..cc2daca2f7c266 100644 --- a/.github/workflows/examples-nrfconnect.yaml +++ b/.github/workflows/examples-nrfconnect.yaml @@ -40,7 +40,7 @@ jobs: if: github.actor != 'restyled-io[bot]' container: - image: connectedhomeip/chip-build-nrf-platform:0.7.3 + image: connectedhomeip/chip-build-nrf-platform:0.7.16 volumes: - "/tmp/bloat_reports:/tmp/bloat_reports" @@ -48,7 +48,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -68,8 +68,6 @@ jobs: - '**/tests/**' shell: - 'examples/shell/nrfconnect/**' - pigweed-app: - - 'examples/pigweed-app/nrfconnect/**' - name: Set up environment for size reports if: ${{ !env.ACT }} env: @@ -149,15 +147,6 @@ jobs: nrfconnect nrf52840dk_nrf52840 shell \ examples/shell/nrfconnect/build/zephyr/zephyr.elf \ /tmp/bloat_reports/ - - name: Build example nRF Connect SDK Pigweed on nRF52840 DK - if: github.event_name == 'push' || steps.changed_paths.outputs.pigweed-app == 'true' - timeout-minutes: 15 - run: | - scripts/examples/nrfconnect_example.sh pigweed-app nrf52840dk_nrf52840 - .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ - nrfconnect nrf52840dk_nrf52840 pigweed-app \ - examples/pigweed-app/nrfconnect/build/zephyr/zephyr.elf \ - /tmp/bloat_reports/ - name: Build example nRF Connect SDK Pump App on nRF52840 DK if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true' timeout-minutes: 15 @@ -240,7 +229,7 @@ jobs: - name: Build example nRF Connect SDK All Clusters App on nRF7002 PDK timeout-minutes: 20 run: | - scripts/examples/nrfconnect_example.sh all-clusters-app nrf7002dk_nrf5340_cpuapp + scripts/examples/nrfconnect_example.sh all-clusters-app nrf7002dk_nrf5340_cpuapp -DCONF_FILE=prj_release.conf .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ nrfconnect nrf7002dk_nrf5340_cpuapp all-clusters-app \ examples/all-clusters-app/nrfconnect/build/zephyr/zephyr.elf \ diff --git a/.github/workflows/examples-openiotsdk.yaml b/.github/workflows/examples-openiotsdk.yaml index d2f2e904c70827..08f46969daee9b 100644 --- a/.github/workflows/examples-openiotsdk.yaml +++ b/.github/workflows/examples-openiotsdk.yaml @@ -50,7 +50,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-qpg.yaml b/.github/workflows/examples-qpg.yaml index 4d929fb36c6b3e..ab7d33b5ccab90 100644 --- a/.github/workflows/examples-qpg.yaml +++ b/.github/workflows/examples-qpg.yaml @@ -47,7 +47,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -82,7 +82,7 @@ jobs: .environment/pigweed-venv/*.log - name: Build QPG6105 example apps - timeout-minutes: 20 + timeout-minutes: 30 run: | ./scripts/run_in_build_env.sh \ "./scripts/build/build_examples.py \ @@ -95,7 +95,7 @@ jobs: --copy-artifacts-to out/artifacts \ " - name: Build Matter SDK library - timeout-minutes: 5 + timeout-minutes: 10 run: | config/qpg/chip-gn/build.sh diff --git a/.github/workflows/examples-telink.yaml b/.github/workflows/examples-telink.yaml index bd7b5aba759a54..74e050bb05f438 100644 --- a/.github/workflows/examples-telink.yaml +++ b/.github/workflows/examples-telink.yaml @@ -38,7 +38,7 @@ jobs: if: github.actor != 'restyled-io[bot]' container: - image: connectedhomeip/chip-build-telink:0.7.11 + image: connectedhomeip/chip-build-telink:0.7.14 volumes: - "/tmp/bloat_reports:/tmp/bloat_reports" @@ -46,7 +46,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/examples-tizen.yaml b/.github/workflows/examples-tizen.yaml index dc6240fe45cbd6..a0f33c521040cd 100644 --- a/.github/workflows/examples-tizen.yaml +++ b/.github/workflows/examples-tizen.yaml @@ -46,7 +46,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/fixit_rotation.yaml b/.github/workflows/fixit_rotation.yaml index ac5383f789630a..c7ffed5302fae3 100644 --- a/.github/workflows/fixit_rotation.yaml +++ b/.github/workflows/fixit_rotation.yaml @@ -26,7 +26,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | submodules: true token: ${{ github.token }} diff --git a/.github/workflows/full-android.yaml b/.github/workflows/full-android.yaml index 57160e210dbc84..3b39c71b58a836 100644 --- a/.github/workflows/full-android.yaml +++ b/.github/workflows/full-android.yaml @@ -30,7 +30,7 @@ env: jobs: full_android: name: Run - timeout-minutes: 75 + timeout-minutes: 120 env: JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64/ @@ -48,7 +48,7 @@ jobs: if: ${{ !env.ACT }} name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -59,7 +59,7 @@ jobs: # Note you likely still need to have non submodules setup for the # local machine, like: # git submodule deinit --all - - uses: actions/checkout@v3 + - uses: actions/checkout@v3.5.2 if: ${{ env.ACT }} name: Checkout (ACT for local build) - name: Checkout submodules @@ -113,6 +113,8 @@ jobs: run: | ./scripts/run_in_build_env.sh \ "./scripts/build/build_examples.py --target android-arm64-tv-server build" + - name: Clean out build output + run: rm -rf ./out - name: Build Android arm64-chip-tool run: | ./scripts/run_in_build_env.sh \ diff --git a/.github/workflows/fuzzing-build.yaml b/.github/workflows/fuzzing-build.yaml index 68b62b88d87e12..4e589a98460b2b 100644 --- a/.github/workflows/fuzzing-build.yaml +++ b/.github/workflows/fuzzing-build.yaml @@ -44,7 +44,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | submodules: true token: ${{ github.token }} @@ -104,7 +104,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | submodules: true token: ${{ github.token }} diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 8bfd0dcf51f572..913c5672e3c09e 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -6,5 +6,5 @@ jobs: name: "Validation" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v3.5.2 - uses: gradle/wrapper-validation-action@v1 diff --git a/.github/workflows/java-tests.yaml b/.github/workflows/java-tests.yaml new file mode 100644 index 00000000000000..37ebeeea0a01fa --- /dev/null +++ b/.github/workflows/java-tests.yaml @@ -0,0 +1,251 @@ +# Copyright (c) 2023 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Java Tests + +on: + push: + pull_request: + merge_group: + workflow_dispatch: + +concurrency: + group: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == + 'pull_request' && github.event.number) || (github.event_name == + 'workflow_dispatch' && github.run_number) || github.sha }} + cancel-in-progress: true + +env: + CHIP_NO_LOG_TIMESTAMPS: true + # XXX: Workaround for https://github.com/actions/cache/issues/1141 + SEGMENT_DOWNLOAD_TIMEOUT_MINS: 3 + +jobs: + java_tests_linux: + name: Linux + timeout-minutes: 130 + + env: + TSAN_OPTIONS: "halt_on_error=1 suppressions=scripts/tests/chiptest/tsan-linux-suppressions.txt" + + if: github.actor != 'restyled-io[bot]' + runs-on: ubuntu-latest + + container: + image: connectedhomeip/chip-build-java:0.7.15 + options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 + net.ipv4.conf.all.forwarding=0 net.ipv6.conf.all.forwarding=0" + + steps: + - name: Checkout + uses: actions/checkout@v3.5.2 + - name: Checkout submodules + run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform linux + - name: Try to ensure the directories for core dumping exist and we + can write them. + run: | + mkdir /tmp/cores || true + sysctl -w kernel.core_pattern=/tmp/cores/core.%u.%p.%t || true + mkdir objdir-clone || true + + - name: Bootstrap cache + uses: actions/cache@v3 + timeout-minutes: 10 + with: + key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} + path: | + .environment + build_overrides/pigweed_environment.gni + - name: Bootstrap + timeout-minutes: 10 + run: bash scripts/bootstrap.sh + - name: Uploading bootstrap logs + uses: actions/upload-artifact@v3 + if: ${{ always() && !env.ACT }} + with: + name: bootstrap-logs-linux-${{ matrix.build_variant }}${{ matrix.chip_tool }} + path: | + .environment/gn_out/.ninja_log + .environment/pigweed-venv/*.log + - name: Generate unit tests + timeout-minutes: 1 + run: | + scripts/run_in_build_env.sh \ + './scripts/build/build_examples.py \ + --target linux-x64-tests \ + gen \ + ' + - name: Build unit tests + timeout-minutes: 25 + run: scripts/run_in_build_env.sh 'ninja -C out/linux-x64-tests src:java_controller_tests' + + - name: Run unit tests + timeout-minutes: 10 + # TODO: this direct path loading is not maintainable. Our build system should define and + # support test classes. + run: | + $JAVA_PATH/bin/java \ + -cp 'third_party/java_deps/artifacts/*:out/linux-x64-tests/lib/src/controller/java/*' \ + org.junit.runner.JUnitCore \ + chip.tlv.TlvWriterTest \ + chip.tlv.TlvReadWriteTest \ + chip.tlv.TlvReaderTest \ + chip.jsontlv.JsonToTlvToJsonTest + - name: Build Java Matter Controller and all clusters app + timeout-minutes: 50 + run: | + scripts/run_in_build_env.sh './scripts/build_python.sh --install_wheel build-env' + ./scripts/run_in_build_env.sh \ + "./scripts/build/build_examples.py \ + --target linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test \ + --target linux-x64-java-matter-controller \ + build \ + " + - name: Run Discover Commissionables Test + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh \ + './scripts/tests/run_java_test.py \ + --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ + --app-args "--discriminator 3840 --interface-id -1" \ + --tool-path out/linux-x64-java-matter-controller \ + --tool-cluster "discover" \ + --tool-args "commissionables" \ + --factoryreset \ + ' + - name: Run Pairing Onnetwork Test + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh \ + './scripts/tests/run_java_test.py \ + --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ + --app-args "--discriminator 3840 --interface-id -1" \ + --tool-path out/linux-x64-java-matter-controller \ + --tool-cluster "pairing" \ + --tool-args "onnetwork-long --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ + --factoryreset \ + ' + - name: Run IM Invoke Test + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh \ + './scripts/tests/run_java_test.py \ + --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ + --app-args "--discriminator 3840 --interface-id -1" \ + --tool-path out/linux-x64-java-matter-controller \ + --tool-cluster "im" \ + --tool-args "onnetwork-long-im-invoke --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ + --factoryreset \ + ' + - name: Run IM Read Test + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh \ + './scripts/tests/run_java_test.py \ + --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ + --app-args "--discriminator 3840 --interface-id -1" \ + --tool-path out/linux-x64-java-matter-controller \ + --tool-cluster "im" \ + --tool-args "onnetwork-long-im-read --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ + --factoryreset \ + ' + - name: Run IM Write Test + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh \ + './scripts/tests/run_java_test.py \ + --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ + --app-args "--discriminator 3840 --interface-id -1" \ + --tool-path out/linux-x64-java-matter-controller \ + --tool-cluster "im" \ + --tool-args "onnetwork-long-im-write --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ + --factoryreset \ + ' + - name: Run IM Subscribe Test + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh \ + './scripts/tests/run_java_test.py \ + --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ + --app-args "--discriminator 3840 --interface-id -1" \ + --tool-path out/linux-x64-java-matter-controller \ + --tool-cluster "im" \ + --tool-args "onnetwork-long-im-subscribe --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ + --factoryreset \ + ' + - name: Run Pairing AlreadyDiscovered Test + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh \ + './scripts/tests/run_java_test.py \ + --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ + --app-args "--discriminator 3840 --interface-id -1" \ + --tool-path out/linux-x64-java-matter-controller \ + --tool-cluster "pairing" \ + --tool-args "already-discovered --nodeid 1 --setup-pin-code 20202021 --address ::1 --port 5540 -t 1000" \ + --factoryreset \ + ' + - name: Run Pairing Address-PaseOnly Test + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh \ + './scripts/tests/run_java_test.py \ + --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ + --app-args "--discriminator 3840 --interface-id -1" \ + --tool-path out/linux-x64-java-matter-controller \ + --tool-cluster "pairing" \ + --tool-args "address-paseonly --nodeid 1 --setup-pin-code 20202021 --address ::1 --port 5540 -t 1000" \ + --factoryreset \ + ' + - name: Run Pairing SetupQRCode Test + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh \ + './scripts/tests/run_java_test.py \ + --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ + --app-args "--discriminator 3840 --interface-id -1" \ + --tool-path out/linux-x64-java-matter-controller \ + --tool-cluster "pairing" \ + --tool-args "code --nodeid 1 --setup-payload MT:-24J0AFN00KA0648G00 --discover-once 1 --use-only-onnetwork-discovery 0 -t 1000" \ + --factoryreset \ + ' + - name: Run Pairing ManualCode Test + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh \ + './scripts/tests/run_java_test.py \ + --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ + --app-args "--discriminator 3840 --interface-id -1" \ + --tool-path out/linux-x64-java-matter-controller \ + --tool-cluster "pairing" \ + --tool-args "code --nodeid 1 --setup-payload 34970112332 --discover-once 1 --use-only-onnetwork-discovery 0 -t 1000" \ + --factoryreset \ + ' + - name: Uploading core files + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-core-linux-java-controller + path: /tmp/cores/ + # Cores are big; don't hold on to them too long. + retention-days: 5 + - name: Uploading objdir for debugging + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-objdir-linux-java-controller + path: objdir-clone/ + # objdirs are big; don't hold on to them too long. + retention-days: 5 + diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 129a1de287cc6b..da846e5939ea0a 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -40,7 +40,7 @@ jobs: if: ${{ !env.ACT }} name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -51,7 +51,7 @@ jobs: # Note you likely still need to have non submodules setup for the # local machine, like: # git submodule deinit --all - - uses: actions/checkout@v3 + - uses: actions/checkout@v3.5.2 if: ${{ env.ACT }} name: Checkout (ACT for local build) @@ -215,7 +215,11 @@ jobs: run: | git grep -n 'SuccessOrExit(CHIP_ERROR' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0 - - name: Check that our hardcoded SHA for clang-format on ARM mac matches the pigweed SHA. + # 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 "SuccessOrExit(something-without-assignment(", which should probably be "SuccessOrExit(err = something(" if: always() run: | - ./scripts/lints/clang-format-version-matches.py + git grep -n 'SuccessOrExit([^=)]*(' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0 + diff --git a/.github/workflows/minimal-build.yaml b/.github/workflows/minimal-build.yaml index 67d9bbfdd642f8..77b801a749fb3a 100644 --- a/.github/workflows/minimal-build.yaml +++ b/.github/workflows/minimal-build.yaml @@ -36,7 +36,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v3.5.2 - name: Checkout submodules run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform linux - name: Configure and build All Clusters App diff --git a/.github/workflows/qemu.yaml b/.github/workflows/qemu.yaml index b8d68f4a3a243e..2459ecbcaa5576 100644 --- a/.github/workflows/qemu.yaml +++ b/.github/workflows/qemu.yaml @@ -49,7 +49,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -113,7 +113,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/release_artifacts.yaml b/.github/workflows/release_artifacts.yaml index 314600d3e588ff..a525a97db0742d 100644 --- a/.github/workflows/release_artifacts.yaml +++ b/.github/workflows/release_artifacts.yaml @@ -40,7 +40,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | submodules: true token: ${{ github.token }} @@ -95,7 +95,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | submodules: true token: ${{ github.token }} @@ -124,7 +124,7 @@ jobs: .environment/pigweed-venv/*.log - name: Build example EFR32 Lock App - run: scripts/examples/gn_efr32_example.sh examples/lock-app/efr32/ + run: scripts/examples/gn_silabs_example.sh examples/lock-app/efr32/ out/lock_app_debug $SILABS_BOARD - name: Upload artifact diff --git a/.github/workflows/smoketest-android.yaml b/.github/workflows/smoketest-android.yaml index de1d5ab89e8cfb..cce15a04079562 100644 --- a/.github/workflows/smoketest-android.yaml +++ b/.github/workflows/smoketest-android.yaml @@ -48,7 +48,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/smoketest-darwin.yaml b/.github/workflows/smoketest-darwin.yaml index 0ab19f6dd92d44..13f328b02988e8 100644 --- a/.github/workflows/smoketest-darwin.yaml +++ b/.github/workflows/smoketest-darwin.yaml @@ -41,7 +41,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/spell.yml b/.github/workflows/spell.yml index f073c203385e53..3de0afa566469d 100644 --- a/.github/workflows/spell.yml +++ b/.github/workflows/spell.yml @@ -32,7 +32,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 @@ -47,7 +47,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index d6c4beb9a9b026..7b4f9ecf2a73ba 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -15,794 +15,608 @@ name: Tests on: - push: - pull_request: - merge_group: - workflow_dispatch: + push: + pull_request: + merge_group: + workflow_dispatch: concurrency: - group: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == - 'pull_request' && github.event.number) || (github.event_name == - 'workflow_dispatch' && github.run_number) || github.sha }} - cancel-in-progress: true + group: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == + 'pull_request' && github.event.number) || (github.event_name == + 'workflow_dispatch' && github.run_number) || github.sha }} + cancel-in-progress: true env: - CHIP_NO_LOG_TIMESTAMPS: true - # XXX: Workaround for https://github.com/actions/cache/issues/1141 - SEGMENT_DOWNLOAD_TIMEOUT_MINS: 3 + CHIP_NO_LOG_TIMESTAMPS: true + # XXX: Workaround for https://github.com/actions/cache/issues/1141 + SEGMENT_DOWNLOAD_TIMEOUT_MINS: 3 jobs: - test_suites_linux: - name: Test Suites - Linux - timeout-minutes: 180 - - strategy: - matrix: - build_variant: [no-ble-tsan-clang] - chip_tool: [""] - env: - BUILD_VARIANT: ${{matrix.build_variant}} - CHIP_TOOL_VARIANT: ${{matrix.chip_tool}} - TSAN_OPTIONS: "halt_on_error=1 suppressions=scripts/tests/chiptest/tsan-linux-suppressions.txt" - LSAN_OPTIONS: detect_leaks=1 - - if: github.actor != 'restyled-io[bot]' - runs-on: ubuntu-latest - - container: - image: connectedhomeip/chip-build:0.7.3 - options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 - net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" - - steps: - - uses: Wandalen/wretry.action@v1.0.36 - if: ${{ !env.ACT }} - name: Checkout - with: - action: actions/checkout@v3 - with: | - token: ${{ github.token }} - attempt_limit: 3 - attempt_delay: 2000 - # To use act like: - # act -j test_suites_linux - # - # Note you likely still need to have non submodules setup for the - # local machine, like: - # git submodule deinit --all - - uses: actions/checkout@v3 - if: ${{ env.ACT }} - name: Checkout (ACT for local build) - - name: Checkout submodules - run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform linux - - name: Try to ensure the directories for core dumping exist and we - can write them. - run: | - mkdir /tmp/cores || true - sysctl -w kernel.core_pattern=/tmp/cores/core.%u.%p.%t || true - mkdir objdir-clone || true - - - name: Bootstrap cache - uses: actions/cache@v3 - timeout-minutes: 10 - with: - key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} - path: | - .environment - build_overrides/pigweed_environment.gni - - name: Bootstrap - timeout-minutes: 10 - run: bash scripts/bootstrap.sh - - name: Uploading bootstrap logs - uses: actions/upload-artifact@v3 - if: ${{ always() && !env.ACT }} - with: - name: bootstrap-logs-linux-${{ matrix.build_variant }}${{ matrix.chip_tool }} - path: | - .environment/gn_out/.ninja_log - .environment/pigweed-venv/*.log - - - name: Validate that xml are parsable - timeout-minutes: 10 - # The sub-items being run here are the same as the input XMLs listed - # at src/app/zap-templates/zcl/zcl.json - # - # This ensures that the syntax of the XML can always be parsed/validated, however it - # does not enforce that the content is understood (that part is covered by parser - # unit tests) - # - run: | - ./scripts/run_in_build_env.sh \ - "./scripts/py_matter_idl/matter_idl/xml_parser.py \ - --no-print \ - --log-level info \ - src/app/zap-templates/zcl/data-model/chip/global-attributes.xml \ - src/app/zap-templates/zcl/data-model/chip/access-control-definitions.xml \ - src/app/zap-templates/zcl/data-model/chip/access-control-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/account-login-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/administrator-commissioning-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/air-quality-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/application-basic-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/application-launcher-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/audio-output-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/ballast-configuration-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/basic-information-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/binding-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/boolean-state-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/actions-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/bridged-device-basic-information.xml \ - src/app/zap-templates/zcl/data-model/chip/chip-ota.xml \ - src/app/zap-templates/zcl/data-model/chip/chip-types.xml \ - src/app/zap-templates/zcl/data-model/chip/channel-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/clusters-extensions.xml \ - src/app/zap-templates/zcl/data-model/chip/color-control-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/content-launch-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/diagnostic-logs-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/dishwasher-alarm.xml \ - src/app/zap-templates/zcl/data-model/chip/door-lock-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 \ - src/app/zap-templates/zcl/data-model/chip/fixed-label-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/flow-measurement-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/general-commissioning-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/general-diagnostics-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/global-attributes.xml \ - src/app/zap-templates/zcl/data-model/chip/groups-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/group-key-mgmt-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/identify-cluster.xml \ - 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/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 \ - src/app/zap-templates/zcl/data-model/chip/media-input-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/media-playback-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/mode-select-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/network-commissioning-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/occupancy-sensing-cluster.xml \ - 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/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 \ - src/app/zap-templates/zcl/data-model/chip/proxy-configuration-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/proxy-discovery-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/proxy-valid-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/pump-configuration-and-control-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/pwm-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/refrigerator-alarm.xml \ - src/app/zap-templates/zcl/data-model/chip/relative-humidity-measurement-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/scene.xml \ - src/app/zap-templates/zcl/data-model/chip/software-diagnostics-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/switch-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/target-navigator-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/temperature-measurement-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/test-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/thermostat-user-interface-configuration-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/thermostat-cluster.xml \ - 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/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 \ - src/app/zap-templates/zcl/data-model/chip/wifi-network-diagnostics-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/window-covering.xml \ - src/app/zap-templates/zcl/data-model/chip/temperature-control-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/matter-devices.xml \ - src/app/zap-templates/zcl/data-model/draft/barrier-control-cluster.xml \ - src/app/zap-templates/zcl/data-model/draft/electrical-measurement-cluster.xml \ - src/app/zap-templates/zcl/data-model/draft/input-output-value-clusters.xml \ - src/app/zap-templates/zcl/data-model/draft/onoff-switch-configuration-cluster.xml \ - src/app/zap-templates/zcl/data-model/chip/replacable-monitoring-cluster.xml \ - " - - name: Build Apps - timeout-minutes: 60 - run: | - scripts/run_in_build_env.sh './scripts/build_python.sh --install_wheel build-env --include_yamltests' - ./scripts/run_in_build_env.sh \ - "./scripts/build/build_examples.py \ - --target linux-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT} \ - --target linux-x64-all-clusters-${BUILD_VARIANT} \ - --target linux-x64-lock-${BUILD_VARIANT} \ - --target linux-x64-ota-provider-${BUILD_VARIANT} \ - --target linux-x64-ota-requestor-${BUILD_VARIANT} \ - --target linux-x64-tv-app-${BUILD_VARIANT} \ - --target linux-x64-bridge-${BUILD_VARIANT} \ - build \ - --copy-artifacts-to objdir-clone \ - " - - name: Run Tests - timeout-minutes: 65 - run: | - ./scripts/run_in_build_env.sh \ - "./scripts/tests/run_test_suite.py \ - --chip-tool ./out/linux-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT}/chip-tool \ - run \ - --iterations 1 \ - --test-timeout-seconds 120 \ - --all-clusters-app ./out/linux-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ - --lock-app ./out/linux-x64-lock-${BUILD_VARIANT}/chip-lock-app \ - --ota-provider-app ./out/linux-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ - --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 \ - " - - - name: Run Tests using the python parser sending commands to chip-tool - timeout-minutes: 65 - run: | - ./scripts/run_in_build_env.sh \ - "./scripts/tests/run_test_suite.py \ - --runner chip_tool_python \ - --chip-tool ./out/linux-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT}/chip-tool \ - run \ - --iterations 1 \ - --test-timeout-seconds 120 \ - --all-clusters-app ./out/linux-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ - --lock-app ./out/linux-x64-lock-${BUILD_VARIANT}/chip-lock-app \ - --ota-provider-app ./out/linux-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ - --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 \ - " - - - name: Run Tests using chip-repl (skip slow) - timeout-minutes: 45 - if: github.event_name == 'pull_request' - run: | - ./scripts/run_in_build_env.sh \ - "./scripts/tests/run_test_suite.py \ - --runner chip_repl_python \ - --exclude-tags MANUAL \ - --exclude-tags FLAKY \ - --exclude-tags IN_DEVELOPMENT \ - --exclude-tags SLOW \ - run \ - --iterations 1 \ - --test-timeout-seconds 120 \ - --all-clusters-app ./out/linux-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ - --lock-app ./out/linux-x64-lock-${BUILD_VARIANT}/chip-lock-app \ - --ota-provider-app ./out/linux-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ - --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 \ - " - - name: Run Tests using chip-repl (including slow) - timeout-minutes: 45 - if: github.event_name == 'push' - run: | - ./scripts/run_in_build_env.sh \ - "./scripts/tests/run_test_suite.py \ - --runner chip_repl_python \ - run \ - --iterations 1 \ - --test-timeout-seconds 120 \ - --all-clusters-app ./out/linux-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ - --lock-app ./out/linux-x64-lock-${BUILD_VARIANT}/chip-lock-app \ - --ota-provider-app ./out/linux-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ - --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 \ - " - - name: Uploading core files - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-core-linux-${{ matrix.build_variant }}${{ matrix.chip_tool }} - path: /tmp/cores/ - # Cores are big; don't hold on to them too long. - retention-days: 5 - - name: Uploading objdir for debugging - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-objdir-linux-${{ matrix.build_variant }}${{ matrix.chip_tool }} - path: objdir-clone/ - # objdirs are big; don't hold on to them too long. - retention-days: 5 - - test_suites_darwin: - name: Test Suites - Darwin - timeout-minutes: 180 - - strategy: - matrix: - build_variant: [no-ble-tsan-clang, no-ble-asan-clang] - chip_tool: [""] - env: - BUILD_VARIANT: ${{matrix.build_variant}} - CHIP_TOOL_VARIANT: ${{matrix.chip_tool}} - TSAN_OPTIONS: "halt_on_error=1" - LSAN_OPTIONS: detect_leaks=1 suppressions=scripts/tests/chiptest/lsan-mac-suppressions.txt - - if: github.actor != 'restyled-io[bot]' - runs-on: macos-latest - - steps: - - uses: Wandalen/wretry.action@v1.0.36 - name: Checkout - with: - action: actions/checkout@v3 - with: | - token: ${{ github.token }} - attempt_limit: 3 - attempt_delay: 2000 - - name: Checkout submodules - run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform darwin - - name: Setup Environment - # coreutils for stdbuf - run: brew install coreutils - - name: - Try to ensure the directories for core dumping and diagnostic - log collection exist and we can write them. - run: | - sudo chown ${USER} /cores || true - mkdir -p ~/Library/Logs/DiagnosticReports || true - mkdir objdir-clone || true - - - name: Bootstrap cache - uses: actions/cache@v3 - timeout-minutes: 10 - with: - key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} - path: | - .environment - build_overrides/pigweed_environment.gni - - name: Bootstrap - timeout-minutes: 25 - run: bash scripts/bootstrap.sh - - name: Uploading bootstrap logs - uses: actions/upload-artifact@v3 - if: ${{ always() && !env.ACT }} - with: - name: bootstrap-logs-darwin-${{ matrix.build_variant }}${{ matrix.chip_tool }} - path: | - .environment/gn_out/.ninja_log - .environment/pigweed-venv/*.log - - - name: Build Apps - timeout-minutes: 90 - run: | - ./scripts/run_in_build_env.sh \ - "./scripts/build/build_examples.py \ - --target darwin-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT} \ - --target darwin-x64-all-clusters-${BUILD_VARIANT} \ - --target darwin-x64-lock-${BUILD_VARIANT} \ - --target darwin-x64-ota-provider-${BUILD_VARIANT} \ - --target darwin-x64-ota-requestor-${BUILD_VARIANT} \ - --target darwin-x64-tv-app-${BUILD_VARIANT} \ - --target darwin-x64-bridge-${BUILD_VARIANT} \ - build \ - --copy-artifacts-to objdir-clone \ - " - - name: Run Tests - timeout-minutes: 80 - run: | - ./scripts/run_in_build_env.sh \ - "./scripts/tests/run_test_suite.py \ - --chip-tool ./out/darwin-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT}/chip-tool \ - --target-skip-glob '{Test_TC_DGTHREAD_2_1,Test_TC_DGTHREAD_2_2,Test_TC_DGTHREAD_2_3,Test_TC_DGTHREAD_2_4}' \ - run \ - --iterations 1 \ - --test-timeout-seconds 120 \ - --all-clusters-app ./out/darwin-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ - --lock-app ./out/darwin-x64-lock-${BUILD_VARIANT}/chip-lock-app \ - --ota-provider-app ./out/darwin-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ - --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 \ - " - - - name: Run Tests using the python parser sending commands to chip-tool - timeout-minutes: 80 - run: | - ./scripts/run_in_build_env.sh \ - "./scripts/tests/run_test_suite.py \ - --runner chip_tool_python \ - --chip-tool ./out/darwin-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT}/chip-tool \ - --target-skip-glob '{Test_TC_DGTHREAD_2_1,Test_TC_DGTHREAD_2_2,Test_TC_DGTHREAD_2_3,Test_TC_DGTHREAD_2_4}' \ - run \ - --iterations 1 \ - --test-timeout-seconds 120 \ - --all-clusters-app ./out/darwin-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ - --lock-app ./out/darwin-x64-lock-${BUILD_VARIANT}/chip-lock-app \ - --ota-provider-app ./out/darwin-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ - --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 \ - " - - - name: Uploading core files - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-core-darwin-${{ matrix.build_variant }}${{ matrix.chip_tool }} - path: /cores/ - # Cores are big; don't hold on to them too long. - retention-days: 5 - - name: Uploading diagnostic logs - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-log-darwin-${{ matrix.build_variant }}${{ matrix.chip_tool }} - path: ~/Library/Logs/DiagnosticReports/ - - name: Uploading objdir for debugging - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-objdir-darwin-${{ matrix.build_variant }}${{ matrix.chip_tool }} - path: objdir-clone/ - # objdirs are big; don't hold on to them too long. - retention-days: 5 - - repl_tests_linux: - name: REPL Tests - Linux - timeout-minutes: 130 - - env: - TSAN_OPTIONS: "halt_on_error=1 suppressions=scripts/tests/chiptest/tsan-linux-suppressions.txt" - - if: github.actor != 'restyled-io[bot]' - runs-on: ubuntu-latest - - container: - image: connectedhomeip/chip-build:0.7.3 - options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 - net.ipv4.conf.all.forwarding=0 net.ipv6.conf.all.forwarding=0" - - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Checkout submodules - run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform linux - - name: Try to ensure the directories for core dumping exist and we - can write them. - run: | - mkdir /tmp/cores || true - sysctl -w kernel.core_pattern=/tmp/cores/core.%u.%p.%t || true - mkdir objdir-clone || true - - - name: Bootstrap cache - uses: actions/cache@v3 - timeout-minutes: 10 - with: - key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} - path: | - .environment - build_overrides/pigweed_environment.gni - - name: Bootstrap - timeout-minutes: 10 - run: bash scripts/bootstrap.sh - - name: Uploading bootstrap logs - uses: actions/upload-artifact@v3 - if: ${{ always() && !env.ACT }} - with: - name: bootstrap-logs-linux-${{ matrix.build_variant }}${{ matrix.chip_tool }} - path: | - .environment/gn_out/.ninja_log - .environment/pigweed-venv/*.log - - - name: Build Python REPL and example apps - timeout-minutes: 50 - run: | - scripts/run_in_build_env.sh './scripts/build_python.sh --install_wheel build-env' - ./scripts/run_in_build_env.sh \ - "./scripts/build/build_examples.py \ - --target linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test \ - --target linux-x64-python-bindings \ - build \ - --copy-artifacts-to objdir-clone \ - " - - name: Run Tests - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh './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 --script-args "--log-level INFO -t 3600 --disable-test ClusterObjectTests.TestTimedRequestTimeout"' - scripts/run_in_build_env.sh './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_decode 1" --script "src/python_testing/TC_RR_1_1.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021"' - scripts/run_in_build_env.sh './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_decode 1" --script "src/python_testing/TC_SC_3_6.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021"' - scripts/run_in_build_env.sh './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_decode 1" --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"' - scripts/run_in_build_env.sh './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_decode 1 --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"' - scripts/run_in_build_env.sh './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_decode 1" --script "src/python_testing/TC_ACE_1_4.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --int-arg PIXIT.ACE.APPENDPOINT:1 PIXIT.ACE.APPDEVTYPEID:0x0100 --string-arg PIXIT.ACE.APPCLUSTER:OnOff PIXIT.ACE.APPATTRIBUTE:OnOff"' - scripts/run_in_build_env.sh './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_decode 1" --script "src/python_testing/TC_ACE_1_3.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021"' - scripts/run_in_build_env.sh './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_decode 1" --script "src/python_testing/TC_CGEN_2_4.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021"' - scripts/run_in_build_env.sh './scripts/tests/run_python_test.py --script "src/python_testing/TestMatterTestingSupport.py"' - - name: Uploading core files - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-core-linux-python-repl - path: /tmp/cores/ - # Cores are big; don't hold on to them too long. - retention-days: 5 - - name: Uploading objdir for debugging - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-objdir-linux-python-repl - path: objdir-clone/ - # objdirs are big; don't hold on to them too long. - retention-days: 5 - - java_tests_linux: - name: Java Tests - Linux - timeout-minutes: 130 - - env: - TSAN_OPTIONS: "halt_on_error=1 suppressions=scripts/tests/chiptest/tsan-linux-suppressions.txt" - JAVA_PATH: /usr/lib/jvm/java-8-openjdk-amd64 - - if: github.actor != 'restyled-io[bot]' - runs-on: ubuntu-latest - - container: - image: connectedhomeip/chip-build-java:0.7.3 - options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 - net.ipv4.conf.all.forwarding=0 net.ipv6.conf.all.forwarding=0" - - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Checkout submodules - run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform linux - - name: Try to ensure the directories for core dumping exist and we - can write them. - run: | - mkdir /tmp/cores || true - sysctl -w kernel.core_pattern=/tmp/cores/core.%u.%p.%t || true - mkdir objdir-clone || true - - - name: Bootstrap cache - uses: actions/cache@v3 - timeout-minutes: 10 - with: - key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} - path: | - .environment - build_overrides/pigweed_environment.gni - - name: Bootstrap - timeout-minutes: 10 - run: bash scripts/bootstrap.sh - - name: Uploading bootstrap logs - uses: actions/upload-artifact@v3 - if: ${{ always() && !env.ACT }} - with: - name: bootstrap-logs-linux-${{ matrix.build_variant }}${{ matrix.chip_tool }} - path: | - .environment/gn_out/.ninja_log - .environment/pigweed-venv/*.log - - - name: Build Java Matter Controller and all clusters app - timeout-minutes: 50 - run: | - scripts/run_in_build_env.sh './scripts/build_python.sh --install_wheel build-env' - ./scripts/run_in_build_env.sh \ - "./scripts/build/build_examples.py \ - --target linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test \ - --target linux-x64-java-matter-controller \ - build \ - " - - name: Run Discover Commissionables Test - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh \ - './scripts/tests/run_java_test.py \ - --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ - --tool-path out/linux-x64-java-matter-controller \ - --tool-cluster "discover" \ - --tool-args "commissionables" \ - --factoryreset \ - ' - - name: Run Pairing Onnetwork Test - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh \ - './scripts/tests/run_java_test.py \ - --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ - --tool-path out/linux-x64-java-matter-controller \ - --tool-cluster "pairing" \ - --tool-args "onnetwork-long --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ - --factoryreset \ - ' - - name: Run IM Invoke Test - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh \ - './scripts/tests/run_java_test.py \ - --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ - --tool-path out/linux-x64-java-matter-controller \ - --tool-cluster "im" \ - --tool-args "onnetwork-long-im-invoke --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ - --factoryreset \ - ' - - name: Run IM Read Test - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh \ - './scripts/tests/run_java_test.py \ - --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ - --tool-path out/linux-x64-java-matter-controller \ - --tool-cluster "im" \ - --tool-args "onnetwork-long-im-read --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ - --factoryreset \ - ' - - name: Run IM Write Test - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh \ - './scripts/tests/run_java_test.py \ - --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ - --tool-path out/linux-x64-java-matter-controller \ - --tool-cluster "im" \ - --tool-args "onnetwork-long-im-write --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ - --factoryreset \ - ' - - name: Run IM Subscribe Test - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh \ - './scripts/tests/run_java_test.py \ - --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ - --tool-path out/linux-x64-java-matter-controller \ - --tool-cluster "im" \ - --tool-args "onnetwork-long-im-subscribe --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ - --factoryreset \ - ' - - name: Run Pairing AlreadyDiscovered Test - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh \ - './scripts/tests/run_java_test.py \ - --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ - --tool-path out/linux-x64-java-matter-controller \ - --tool-cluster "pairing" \ - --tool-args "already-discovered --nodeid 1 --setup-pin-code 20202021 --address ::1 --port 5540 -t 1000" \ - --factoryreset \ - ' - - name: Run Pairing Address-PaseOnly Test - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh \ - './scripts/tests/run_java_test.py \ - --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ - --tool-path out/linux-x64-java-matter-controller \ - --tool-cluster "pairing" \ - --tool-args "address-paseonly --nodeid 1 --setup-pin-code 20202021 --address ::1 --port 5540 -t 1000" \ - --factoryreset \ - ' - - name: Run Pairing SetupQRCode Test - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh \ - './scripts/tests/run_java_test.py \ - --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ - --tool-path out/linux-x64-java-matter-controller \ - --tool-cluster "pairing" \ - --tool-args "code --nodeid 1 --setup-payload MT:-24J0AFN00KA0648G00 --discover-once 1 --use-only-onnetwork-discovery 0 -t 1000" \ - --factoryreset \ - ' - - name: Run Pairing ManualCode Test - timeout-minutes: 10 - run: | - scripts/run_in_build_env.sh \ - './scripts/tests/run_java_test.py \ - --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ - --tool-path out/linux-x64-java-matter-controller \ - --tool-cluster "pairing" \ - --tool-args "code --nodeid 1 --setup-payload 34970112332 --discover-once 1 --use-only-onnetwork-discovery 0 -t 1000" \ - --factoryreset \ - ' - - name: Uploading core files - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-core-linux-java-controller - path: /tmp/cores/ - # Cores are big; don't hold on to them too long. - retention-days: 5 - - name: Uploading objdir for debugging - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-objdir-linux-java-controller - path: objdir-clone/ - # objdirs are big; don't hold on to them too long. - retention-days: 5 - - repl_tests_darwin: - name: REPL Tests - Darwin - timeout-minutes: 120 - - strategy: - matrix: - build_variant: [no-ble-no-wifi-tsan-clang] - env: - BUILD_VARIANT: ${{matrix.build_variant}} - TSAN_OPTIONS: "halt_on_error=1" - - if: github.actor != 'restyled-io[bot]' && false - runs-on: macos-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Checkout submodules - run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform darwin - - name: Setup Environment - # coreutils for stdbuf - run: brew install coreutils - - name: - Try to ensure the directories for core dumping and diagnostic - log collection exist and we can write them. - run: | - sudo chown ${USER} /cores || true - mkdir -p ~/Library/Logs/DiagnosticReports || true - mkdir objdir-clone || true - - - name: Bootstrap cache - uses: actions/cache@v3 - timeout-minutes: 10 - with: - key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} - path: | - .environment - build_overrides/pigweed_environment.gni - - name: Bootstrap - timeout-minutes: 25 - run: bash scripts/bootstrap.sh - - name: Uploading bootstrap logs - uses: actions/upload-artifact@v3 - if: ${{ always() && !env.ACT }} - with: - name: bootstrap-logs-darwin-${{ matrix.build_variant }}${{ matrix.chip_tool }} - path: | - .environment/gn_out/.ninja_log - .environment/pigweed-venv/*.log - - - name: Build Python REPL and example apps - timeout-minutes: 50 - run: | - scripts/run_in_build_env.sh './scripts/build_python.sh --install_wheel build-env' - ./scripts/run_in_build_env.sh \ - "./scripts/build/build_examples.py \ - --target darwin-x64-all-clusters-${BUILD_VARIANT}-test \ - build \ - --copy-artifacts-to objdir-clone \ - " - - name: Run Tests - timeout-minutes: 30 - run: | - scripts/run_in_build_env.sh './scripts/tests/run_python_test.py --app out/darwin-x64-all-clusters-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 3840 --interface-id -1" --script-args "-t 3600 --disable-test ClusterObjectTests.TestTimedRequestTimeout"' - - name: Uploading core files - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-core-darwin-python-repl - path: /cores/ - # Cores are big; don't hold on to them too long. - retention-days: 5 - - name: Uploading diagnostic logs - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-log-darwin-python-repl - path: ~/Library/Logs/DiagnosticReports/ - - name: Uploading objdir for debugging - uses: actions/upload-artifact@v3 - if: ${{ failure() && !env.ACT }} - with: - name: crash-objdir-darwin-python-repl - path: objdir-clone/ - # objdirs are big; don't hold on to them too long. - retention-days: 5 + test_suites_linux: + name: Test Suites - Linux + timeout-minutes: 180 + + strategy: + matrix: + build_variant: [no-ble-tsan-clang] + chip_tool: [""] + env: + BUILD_VARIANT: ${{matrix.build_variant}} + CHIP_TOOL_VARIANT: ${{matrix.chip_tool}} + TSAN_OPTIONS: "halt_on_error=1 suppressions=scripts/tests/chiptest/tsan-linux-suppressions.txt" + LSAN_OPTIONS: detect_leaks=1 + + if: github.actor != 'restyled-io[bot]' + runs-on: ubuntu-latest + + container: + image: connectedhomeip/chip-build:0.7.3 + options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 + net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" + + steps: + - uses: Wandalen/wretry.action@v1.0.36 + if: ${{ !env.ACT }} + name: Checkout + with: + action: actions/checkout@v3.5.2 + with: | + token: ${{ github.token }} + attempt_limit: 3 + attempt_delay: 2000 + # To use act like: + # act -j test_suites_linux + # + # Note you likely still need to have non submodules setup for the + # local machine, like: + # git submodule deinit --all + - uses: actions/checkout@v3.5.2 + if: ${{ env.ACT }} + name: Checkout (ACT for local build) + - name: Checkout submodules + run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform linux + - name: Try to ensure the directories for core dumping exist and we + can write them. + run: | + mkdir /tmp/cores || true + sysctl -w kernel.core_pattern=/tmp/cores/core.%u.%p.%t || true + mkdir objdir-clone || true + + - name: Bootstrap cache + uses: actions/cache@v3 + timeout-minutes: 10 + with: + key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} + path: | + .environment + build_overrides/pigweed_environment.gni + - name: Bootstrap + timeout-minutes: 10 + run: bash scripts/bootstrap.sh + - name: Uploading bootstrap logs + uses: actions/upload-artifact@v3 + if: ${{ always() && !env.ACT }} + with: + name: bootstrap-logs-linux-${{ matrix.build_variant }}${{ matrix.chip_tool }} + path: | + .environment/gn_out/.ninja_log + .environment/pigweed-venv/*.log + + - name: Validate that xml are parsable + timeout-minutes: 10 + # The sub-items being run here are the same as the input XMLs listed + # at src/app/zap-templates/zcl/zcl.json + # + # This ensures that the syntax of the XML can always be parsed/validated, however it + # does not enforce that the content is understood (that part is covered by parser + # unit tests) + # + run: | + ./scripts/run_in_build_env.sh \ + "./scripts/py_matter_idl/matter_idl/xml_parser.py \ + --no-print \ + --log-level info \ + src/app/zap-templates/zcl/data-model/chip/global-attributes.xml \ + src/app/zap-templates/zcl/data-model/chip/access-control-definitions.xml \ + src/app/zap-templates/zcl/data-model/chip/access-control-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/account-login-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/administrator-commissioning-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/air-quality-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/application-basic-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/application-launcher-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/audio-output-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/ballast-configuration-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/basic-information-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/binding-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/boolean-state-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/actions-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/bridged-device-basic-information.xml \ + src/app/zap-templates/zcl/data-model/chip/chip-ota.xml \ + src/app/zap-templates/zcl/data-model/chip/chip-types.xml \ + src/app/zap-templates/zcl/data-model/chip/channel-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/clusters-extensions.xml \ + src/app/zap-templates/zcl/data-model/chip/color-control-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/concentration-measurement-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/content-launch-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/diagnostic-logs-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/dishwasher-alarm.xml \ + src/app/zap-templates/zcl/data-model/chip/dishwasher-mode-select-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/door-lock-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 \ + src/app/zap-templates/zcl/data-model/chip/fixed-label-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/flow-measurement-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/general-commissioning-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/general-diagnostics-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/global-attributes.xml \ + src/app/zap-templates/zcl/data-model/chip/groups-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/group-key-mgmt-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/identify-cluster.xml \ + 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-select-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 \ + src/app/zap-templates/zcl/data-model/chip/media-input-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/media-playback-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/mode-select-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/network-commissioning-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/occupancy-sensing-cluster.xml \ + 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/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 \ + src/app/zap-templates/zcl/data-model/chip/proxy-configuration-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/proxy-discovery-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/proxy-valid-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/pump-configuration-and-control-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/pwm-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/refrigerator-and-temperature-controlled-cabinet-mode-select-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/refrigerator-alarm.xml \ + src/app/zap-templates/zcl/data-model/chip/relative-humidity-measurement-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/rvc-clean-mode-select-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/rvc-run-mode-select-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/scene.xml \ + src/app/zap-templates/zcl/data-model/chip/software-diagnostics-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/switch-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/target-navigator-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/temperature-measurement-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/test-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/thermostat-user-interface-configuration-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/thermostat-cluster.xml \ + 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/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 \ + src/app/zap-templates/zcl/data-model/chip/washer-controls-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/wifi-network-diagnostics-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/window-covering.xml \ + src/app/zap-templates/zcl/data-model/chip/temperature-control-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/matter-devices.xml \ + src/app/zap-templates/zcl/data-model/draft/barrier-control-cluster.xml \ + src/app/zap-templates/zcl/data-model/draft/electrical-measurement-cluster.xml \ + src/app/zap-templates/zcl/data-model/draft/input-output-value-clusters.xml \ + src/app/zap-templates/zcl/data-model/draft/onoff-switch-configuration-cluster.xml \ + src/app/zap-templates/zcl/data-model/chip/resource-monitoring-cluster.xml \ + " + - name: Build Apps + timeout-minutes: 60 + run: | + scripts/run_in_build_env.sh './scripts/build_python.sh --install_wheel build-env --include_yamltests' + ./scripts/run_in_build_env.sh \ + "./scripts/build/build_examples.py \ + --target linux-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT} \ + --target linux-x64-all-clusters-${BUILD_VARIANT} \ + --target linux-x64-lock-${BUILD_VARIANT} \ + --target linux-x64-ota-provider-${BUILD_VARIANT} \ + --target linux-x64-ota-requestor-${BUILD_VARIANT} \ + --target linux-x64-tv-app-${BUILD_VARIANT} \ + --target linux-x64-bridge-${BUILD_VARIANT} \ + build \ + --copy-artifacts-to objdir-clone \ + " + - name: Run Tests + timeout-minutes: 65 + run: | + ./scripts/run_in_build_env.sh \ + "./scripts/tests/run_test_suite.py \ + --chip-tool ./out/linux-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT}/chip-tool \ + run \ + --iterations 1 \ + --test-timeout-seconds 120 \ + --all-clusters-app ./out/linux-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ + --lock-app ./out/linux-x64-lock-${BUILD_VARIANT}/chip-lock-app \ + --ota-provider-app ./out/linux-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ + --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 \ + " + + - name: Run Tests using the python parser sending commands to chip-tool + timeout-minutes: 65 + run: | + ./scripts/run_in_build_env.sh \ + "./scripts/tests/run_test_suite.py \ + --runner chip_tool_python \ + --chip-tool ./out/linux-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT}/chip-tool \ + run \ + --iterations 1 \ + --test-timeout-seconds 120 \ + --all-clusters-app ./out/linux-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ + --lock-app ./out/linux-x64-lock-${BUILD_VARIANT}/chip-lock-app \ + --ota-provider-app ./out/linux-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ + --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 \ + " + + - name: Run Tests using chip-repl (skip slow) + timeout-minutes: 45 + if: github.event_name == 'pull_request' + run: | + ./scripts/run_in_build_env.sh \ + "./scripts/tests/run_test_suite.py \ + --runner chip_repl_python \ + --exclude-tags MANUAL \ + --exclude-tags FLAKY \ + --exclude-tags IN_DEVELOPMENT \ + --exclude-tags SLOW \ + run \ + --iterations 1 \ + --test-timeout-seconds 120 \ + --all-clusters-app ./out/linux-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ + --lock-app ./out/linux-x64-lock-${BUILD_VARIANT}/chip-lock-app \ + --ota-provider-app ./out/linux-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ + --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 \ + " + - name: Run Tests using chip-repl (including slow) + timeout-minutes: 45 + if: github.event_name == 'push' + run: | + ./scripts/run_in_build_env.sh \ + "./scripts/tests/run_test_suite.py \ + --runner chip_repl_python \ + run \ + --iterations 1 \ + --test-timeout-seconds 120 \ + --all-clusters-app ./out/linux-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ + --lock-app ./out/linux-x64-lock-${BUILD_VARIANT}/chip-lock-app \ + --ota-provider-app ./out/linux-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ + --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 \ + " + - name: Uploading core files + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-core-linux-${{ matrix.build_variant }}${{ matrix.chip_tool }} + path: /tmp/cores/ + # Cores are big; don't hold on to them too long. + retention-days: 5 + - name: Uploading objdir for debugging + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-objdir-linux-${{ matrix.build_variant }}${{ matrix.chip_tool }} + path: objdir-clone/ + # objdirs are big; don't hold on to them too long. + retention-days: 5 + + test_suites_darwin: + name: Test Suites - Darwin + timeout-minutes: 180 + + strategy: + matrix: + build_variant: [no-ble-tsan-clang, no-ble-asan-clang] + chip_tool: [""] + env: + BUILD_VARIANT: ${{matrix.build_variant}} + CHIP_TOOL_VARIANT: ${{matrix.chip_tool}} + TSAN_OPTIONS: "halt_on_error=1" + LSAN_OPTIONS: detect_leaks=1 suppressions=scripts/tests/chiptest/lsan-mac-suppressions.txt + + if: github.actor != 'restyled-io[bot]' + runs-on: macos-latest + + steps: + - uses: Wandalen/wretry.action@v1.0.36 + name: Checkout + with: + action: actions/checkout@v3.5.2 + with: | + token: ${{ github.token }} + attempt_limit: 3 + attempt_delay: 2000 + - name: Checkout submodules + run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform darwin + - name: Setup Environment + # coreutils for stdbuf + run: brew install coreutils + - name: Try to ensure the directories for core dumping and diagnostic + log collection exist and we can write them. + run: | + sudo chown ${USER} /cores || true + mkdir -p ~/Library/Logs/DiagnosticReports || true + mkdir objdir-clone || true + + - name: Bootstrap cache + uses: actions/cache@v3 + timeout-minutes: 10 + with: + key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} + path: | + .environment + build_overrides/pigweed_environment.gni + - name: Bootstrap + timeout-minutes: 25 + run: bash scripts/bootstrap.sh + - name: Uploading bootstrap logs + uses: actions/upload-artifact@v3 + if: ${{ always() && !env.ACT }} + with: + name: bootstrap-logs-darwin-${{ matrix.build_variant }}${{ matrix.chip_tool }} + path: | + .environment/gn_out/.ninja_log + .environment/pigweed-venv/*.log + + - name: Build Apps + timeout-minutes: 90 + run: | + ./scripts/run_in_build_env.sh \ + "./scripts/build/build_examples.py \ + --target darwin-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT} \ + --target darwin-x64-all-clusters-${BUILD_VARIANT} \ + --target darwin-x64-lock-${BUILD_VARIANT} \ + --target darwin-x64-ota-provider-${BUILD_VARIANT} \ + --target darwin-x64-ota-requestor-${BUILD_VARIANT} \ + --target darwin-x64-tv-app-${BUILD_VARIANT} \ + --target darwin-x64-bridge-${BUILD_VARIANT} \ + build \ + --copy-artifacts-to objdir-clone \ + " + - name: Run Tests + timeout-minutes: 80 + if: matrix.build_variant != 'no-ble-tsan-clang' + run: | + ./scripts/run_in_build_env.sh \ + "./scripts/tests/run_test_suite.py \ + --chip-tool ./out/darwin-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT}/chip-tool \ + --target-skip-glob '{Test_TC_DGTHREAD_2_1,Test_TC_DGTHREAD_2_2,Test_TC_DGTHREAD_2_3,Test_TC_DGTHREAD_2_4}' \ + run \ + --iterations 1 \ + --test-timeout-seconds 120 \ + --all-clusters-app ./out/darwin-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ + --lock-app ./out/darwin-x64-lock-${BUILD_VARIANT}/chip-lock-app \ + --ota-provider-app ./out/darwin-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ + --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 \ + " + + - name: Run Tests using the python parser sending commands to chip-tool + timeout-minutes: 80 + run: | + ./scripts/run_in_build_env.sh \ + "./scripts/tests/run_test_suite.py \ + --runner chip_tool_python \ + --chip-tool ./out/darwin-x64-chip-tool${CHIP_TOOL_VARIANT}-${BUILD_VARIANT}/chip-tool \ + --target-skip-glob '{Test_TC_DGTHREAD_2_1,Test_TC_DGTHREAD_2_2,Test_TC_DGTHREAD_2_3,Test_TC_DGTHREAD_2_4}' \ + run \ + --iterations 1 \ + --test-timeout-seconds 120 \ + --all-clusters-app ./out/darwin-x64-all-clusters-${BUILD_VARIANT}/chip-all-clusters-app \ + --lock-app ./out/darwin-x64-lock-${BUILD_VARIANT}/chip-lock-app \ + --ota-provider-app ./out/darwin-x64-ota-provider-${BUILD_VARIANT}/chip-ota-provider-app \ + --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 \ + " + + - name: Uploading core files + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-core-darwin-${{ matrix.build_variant }}${{ matrix.chip_tool }} + path: /cores/ + # Cores are big; don't hold on to them too long. + retention-days: 5 + - name: Uploading diagnostic logs + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-log-darwin-${{ matrix.build_variant }}${{ matrix.chip_tool }} + path: ~/Library/Logs/DiagnosticReports/ + - name: Uploading objdir for debugging + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-objdir-darwin-${{ matrix.build_variant }}${{ matrix.chip_tool }} + path: objdir-clone/ + # objdirs are big; don't hold on to them too long. + retention-days: 5 + + repl_tests_linux: + name: REPL Tests - Linux + timeout-minutes: 130 + + env: + TSAN_OPTIONS: "halt_on_error=1 suppressions=scripts/tests/chiptest/tsan-linux-suppressions.txt" + + if: github.actor != 'restyled-io[bot]' + runs-on: ubuntu-latest + + container: + image: connectedhomeip/chip-build:0.7.3 + options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 + net.ipv4.conf.all.forwarding=0 net.ipv6.conf.all.forwarding=0" + + steps: + - name: Checkout + uses: actions/checkout@v3.5.2 + - name: Checkout submodules + run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform linux + - name: Try to ensure the directories for core dumping exist and we + can write them. + run: | + mkdir /tmp/cores || true + sysctl -w kernel.core_pattern=/tmp/cores/core.%u.%p.%t || true + mkdir objdir-clone || true + + - name: Bootstrap cache + uses: actions/cache@v3 + timeout-minutes: 10 + with: + key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} + path: | + .environment + build_overrides/pigweed_environment.gni + - name: Bootstrap + timeout-minutes: 10 + run: bash scripts/bootstrap.sh + - name: Uploading bootstrap logs + uses: actions/upload-artifact@v3 + if: ${{ always() && !env.ACT }} + with: + name: bootstrap-logs-linux-${{ matrix.build_variant }}${{ matrix.chip_tool }} + path: | + .environment/gn_out/.ninja_log + .environment/pigweed-venv/*.log + + - name: Build Python REPL and example apps + timeout-minutes: 50 + run: | + scripts/run_in_build_env.sh './scripts/build_python.sh --install_wheel build-env --extra_packages "mobly"' + ./scripts/run_in_build_env.sh \ + "./scripts/build/build_examples.py \ + --target linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test \ + --target linux-x64-python-bindings \ + build \ + --copy-artifacts-to objdir-clone \ + " + - name: Run Tests + timeout-minutes: 10 + run: | + scripts/run_in_build_env.sh './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 --script-args "--log-level INFO -t 3600 --disable-test ClusterObjectTests.TestTimedRequestTimeout"' + scripts/run_in_build_env.sh './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_decode 1" --script "src/python_testing/TC_RR_1_1.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021"' + scripts/run_in_build_env.sh './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_decode 1" --script "src/python_testing/TC_SC_3_6.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021"' + scripts/run_in_build_env.sh './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_decode 1" --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"' + scripts/run_in_build_env.sh './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_decode 1 --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"' + scripts/run_in_build_env.sh './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_decode 1" --script "src/python_testing/TC_ACE_1_4.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021 --int-arg PIXIT.ACE.APPENDPOINT:1 PIXIT.ACE.APPDEVTYPEID:0x0100 --string-arg PIXIT.ACE.APPCLUSTER:OnOff PIXIT.ACE.APPATTRIBUTE:OnOff"' + scripts/run_in_build_env.sh './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_decode 1" --script "src/python_testing/TC_ACE_1_3.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021"' + scripts/run_in_build_env.sh './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_decode 1" --script "src/python_testing/TC_CGEN_2_4.py" --script-args "--storage-path admin_storage.json --commissioning-method on-network --discriminator 1234 --passcode 20202021"' + scripts/run_in_build_env.sh './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_decode 1" --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"' + scripts/run_in_build_env.sh './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_decode 1" --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"' + scripts/run_in_build_env.sh './scripts/tests/run_python_test.py --script "src/python_testing/TestMatterTestingSupport.py"' + - name: Uploading core files + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-core-linux-python-repl + path: /tmp/cores/ + # Cores are big; don't hold on to them too long. + retention-days: 5 + - name: Uploading objdir for debugging + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-objdir-linux-python-repl + path: objdir-clone/ + # objdirs are big; don't hold on to them too long. + retention-days: 5 + + repl_tests_darwin: + name: REPL Tests - Darwin + timeout-minutes: 120 + + strategy: + matrix: + build_variant: [no-ble-no-wifi-tsan-clang] + env: + BUILD_VARIANT: ${{matrix.build_variant}} + TSAN_OPTIONS: "halt_on_error=1" + + if: github.actor != 'restyled-io[bot]' && false + runs-on: macos-latest + + steps: + - name: Checkout + uses: actions/checkout@v3.5.2 + - name: Checkout submodules + run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform darwin + - name: Setup Environment + # coreutils for stdbuf + run: brew install coreutils + - name: Try to ensure the directories for core dumping and diagnostic + log collection exist and we can write them. + run: | + sudo chown ${USER} /cores || true + mkdir -p ~/Library/Logs/DiagnosticReports || true + mkdir objdir-clone || true + + - name: Bootstrap cache + uses: actions/cache@v3 + timeout-minutes: 10 + with: + key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }} + path: | + .environment + build_overrides/pigweed_environment.gni + - name: Bootstrap + timeout-minutes: 25 + run: bash scripts/bootstrap.sh + - name: Uploading bootstrap logs + uses: actions/upload-artifact@v3 + if: ${{ always() && !env.ACT }} + with: + name: bootstrap-logs-darwin-${{ matrix.build_variant }}${{ matrix.chip_tool }} + path: | + .environment/gn_out/.ninja_log + .environment/pigweed-venv/*.log + + - name: Build Python REPL and example apps + timeout-minutes: 50 + run: | + scripts/run_in_build_env.sh './scripts/build_python.sh --install_wheel build-env' + ./scripts/run_in_build_env.sh \ + "./scripts/build/build_examples.py \ + --target darwin-x64-all-clusters-${BUILD_VARIANT}-test \ + build \ + --copy-artifacts-to objdir-clone \ + " + - name: Run Tests + timeout-minutes: 30 + run: | + scripts/run_in_build_env.sh './scripts/tests/run_python_test.py --app out/darwin-x64-all-clusters-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factoryreset --app-args "--discriminator 3840 --interface-id -1" --script-args "-t 3600 --disable-test ClusterObjectTests.TestTimedRequestTimeout"' + - name: Uploading core files + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-core-darwin-python-repl + path: /cores/ + # Cores are big; don't hold on to them too long. + retention-days: 5 + - name: Uploading diagnostic logs + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-log-darwin-python-repl + path: ~/Library/Logs/DiagnosticReports/ + - name: Uploading objdir for debugging + uses: actions/upload-artifact@v3 + if: ${{ failure() && !env.ACT }} + with: + name: crash-objdir-darwin-python-repl + path: objdir-clone/ + # objdirs are big; don't hold on to them too long. + retention-days: 5 diff --git a/.github/workflows/todos.yaml b/.github/workflows/todos.yaml index 4381b3ca9d7638..f7e82d5f217eca 100644 --- a/.github/workflows/todos.yaml +++ b/.github/workflows/todos.yaml @@ -26,7 +26,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/unit_integration_test.yaml b/.github/workflows/unit_integration_test.yaml index c42595e1c98129..9a22f6bc0d6d71 100644 --- a/.github/workflows/unit_integration_test.yaml +++ b/.github/workflows/unit_integration_test.yaml @@ -47,7 +47,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.github/workflows/zap_regeneration.yaml b/.github/workflows/zap_regeneration.yaml index 22cdb0430bc494..f30714c2a6bf65 100644 --- a/.github/workflows/zap_regeneration.yaml +++ b/.github/workflows/zap_regeneration.yaml @@ -43,7 +43,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | submodules: true token: ${{ github.token }} diff --git a/.github/workflows/zap_templates.yaml b/.github/workflows/zap_templates.yaml index 60513c863eec92..04cb6b8990af72 100644 --- a/.github/workflows/zap_templates.yaml +++ b/.github/workflows/zap_templates.yaml @@ -45,7 +45,7 @@ jobs: - uses: Wandalen/wretry.action@v1.0.36 name: Checkout with: - action: actions/checkout@v3 + action: actions/checkout@v3.5.2 with: | token: ${{ github.token }} attempt_limit: 3 diff --git a/.restyled.yaml b/.restyled.yaml index 33db552694c1f3..75613cbb95619e 100644 --- a/.restyled.yaml +++ b/.restyled.yaml @@ -79,6 +79,7 @@ exclude: - "src/darwin/Framework/CHIP/zap-generated/*" # already clang-formatted by our zap tooling - "zzz_generated/**/*" # already clang-formatted by our zap tooling - "src/controller/java/generated/java/**/*" # not formatted: generated files + - "src/controller/java/zap-generated/**/*" # not formatted: generated files changed_paths: diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 2fb34adb0e8423..8516b5b12f2e5c 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -109,19 +109,6 @@ "command": "scripts/tests/esp32_qemu_tests.sh /tmp/test_logs", "problemMatcher": [] }, - { - "label": "Build nRF Connect Pigweed Example (nRF52840)", - "type": "shell", - "command": "source scripts/activate.sh && scripts/examples/nrfconnect_example.sh pigweed-app nrf52840dk_nrf52840", - "group": "build", - "problemMatcher": { - "base": "$gcc", - "fileLocation": [ - "relative", - "${workspaceFolder}/examples/pigweed-app/nrfconnect/build/nrf52840dk_nrf52840" - ] - } - }, { "label": "Build i.MX Linux examples", "type": "shell", diff --git a/BUILD.gn b/BUILD.gn index dfe6cbbf4850f3..6cc0d55261ff2b 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -179,8 +179,8 @@ if (current_toolchain != "${dir_pw_toolchain}/default:default") { deps += [ "${chip_root}/src/app/server/java", "${chip_root}/src/controller/java", + "${chip_root}/src/controller/java:onboarding_payload", "${chip_root}/src/platform/android:java", - "${chip_root}/src/setup_payload/java", ] } diff --git a/build/chip/chip_codegen.cmake b/build/chip/chip_codegen.cmake index 77c65ba6a4ea52..708e144208417a 100644 --- a/build/chip/chip_codegen.cmake +++ b/build/chip/chip_codegen.cmake @@ -108,7 +108,6 @@ endfunction() # GENERATOR "app-templates" # OUTPUTS # "zap-generated/access.h", -# "zap-generated/CHIPClientCallbacks.h", # "zap-generated/CHIPClusters.h" # "zap-generated/endpoint_config.h", # "zap-generated/gen_config.h", @@ -164,7 +163,6 @@ function(chip_zapgen TARGET_NAME) "${CHIP_ROOT}/src/app/zap-templates/partials/header.zapt" "${CHIP_ROOT}/src/app/zap-templates/partials/im_command_handler_cluster_commands.zapt" "${CHIP_ROOT}/src/app/zap-templates/templates/app/access.zapt" - "${CHIP_ROOT}/src/app/zap-templates/templates/app/CHIPClientCallbacks.zapt" "${CHIP_ROOT}/src/app/zap-templates/templates/app/CHIPClusters.zapt" "${CHIP_ROOT}/src/app/zap-templates/templates/app/endpoint_config.zapt" "${CHIP_ROOT}/src/app/zap-templates/templates/app/gen_config.zapt" diff --git a/build/chip/chip_codegen.gni b/build/chip/chip_codegen.gni index 88658bcf14eb5c..64c0642da29e65 100644 --- a/build/chip/chip_codegen.gni +++ b/build/chip/chip_codegen.gni @@ -135,7 +135,6 @@ template("_chip_build_time_zapgen") { # Application templates, actually generating files "${_template_dir}/access.zapt", - "${_template_dir}/CHIPClientCallbacks.zapt", "${_template_dir}/CHIPClusters.zapt", "${_template_dir}/endpoint_config.zapt", "${_template_dir}/gen_config.zapt", diff --git a/build/chip/esp32/esp32_codegen.cmake b/build/chip/esp32/esp32_codegen.cmake index 19c481c9cf9a92..75cd1f42587469 100644 --- a/build/chip/esp32/esp32_codegen.cmake +++ b/build/chip/esp32/esp32_codegen.cmake @@ -60,7 +60,6 @@ macro(chip_app_component_zapgen ZAP_NAME) GENERATOR "app-templates" OUTPUTS "zap-generated/access.h" - "zap-generated/CHIPClientCallbacks.h" "zap-generated/CHIPClusters.h" "zap-generated/endpoint_config.h" "zap-generated/gen_config.h" diff --git a/build/chip/java/config.gni b/build/chip/java/config.gni index 9c05cd4270f460..ca18c9231fef1d 100644 --- a/build/chip/java/config.gni +++ b/build/chip/java/config.gni @@ -15,8 +15,8 @@ java_path = getenv("JAVA_PATH") declare_args() { java_matter_controller_dependent_paths = [] - build_java_matter_controller = false - if (java_path != "") { + matter_enable_java_compilation = false + if (java_path != "" && current_os == "linux") { java_matter_controller_dependent_paths += [ "${java_path}/include/" ] if (current_os == "mac") { @@ -27,6 +27,6 @@ declare_args() { [ "${java_path}/include/linux/" ] } - build_java_matter_controller = true + matter_enable_java_compilation = true } } diff --git a/build/chip/java/rules.gni b/build/chip/java/rules.gni index f6c4cbe6fd456d..9a2075fe45046f 100644 --- a/build/chip/java/rules.gni +++ b/build/chip/java/rules.gni @@ -21,8 +21,8 @@ kotlinc_runner = "${chip_root}/build/chip/java/kotlinc_runner.py" jar_runner = "${chip_root}/build/chip/java/jar_runner.py" write_build_config = "${chip_root}/build/chip/java/write_build_config.py" -assert(android_sdk_root != "" || build_java_matter_controller, - "android_sdk_root or java_path must be specified") +assert(android_sdk_root != "" || matter_enable_java_compilation, + "android_sdk_root must be specified or JAVA_PATH must be set.") # Declare a java library target # @@ -127,7 +127,8 @@ template("java_library") { # Compiles the given files into a directory and generates a 'class list' _javac_target_name = target_name + "__javac" - _class_dir = rebase_path(target_out_dir, root_build_dir) + "/classes" + _class_dir = rebase_path(target_out_dir, root_build_dir) + "/" + + target_name + "/classes" _class_list_file = "$target_gen_dir/$target_name.classlist" action(_javac_target_name) { sources = _java_files @@ -284,7 +285,8 @@ template("java_binary") { # Compiles the given files into a directory and generates a 'class list' _javac_target_name = target_name + "__javac" - _class_dir = rebase_path(target_out_dir, root_build_dir) + "/classes" + _class_dir = rebase_path(target_out_dir, root_build_dir) + "/" + + target_name + "/classes" _class_list_file = "$target_gen_dir/$target_name.classlist" action(_javac_target_name) { sources = _java_files @@ -441,7 +443,8 @@ template("kotlin_library") { # Compiles the given files into a directory and generates a 'class list' _kotlinc_target_name = target_name + "__kotlinc" - _class_dir = rebase_path(target_out_dir, root_build_dir) + "/classes" + _class_dir = rebase_path(target_out_dir, root_build_dir) + "/" + + target_name + "/classes" _class_list_file = "$target_gen_dir/$target_name.classlist" action(_kotlinc_target_name) { sources = _kotlin_files @@ -598,7 +601,8 @@ template("kotlin_binary") { # Compiles the given files into a directory and generates a 'class list' _kotlinc_target_name = target_name + "__kotlinc" - _class_dir = rebase_path(target_out_dir, root_build_dir) + "/classes" + _class_dir = rebase_path(target_out_dir, root_build_dir) + "/" + + target_name + "/classes" _class_list_file = "$target_gen_dir/$target_name.classlist" action(_kotlinc_target_name) { sources = _kotlin_files diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index d03db67b0f2322..31f396a4574c3a 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn @@ -253,7 +253,7 @@ config("strict_warnings") { cflags += [ "-Wconversion" ] } - if (build_java_matter_controller) { + if (matter_enable_java_compilation) { cflags -= [ "-Wshadow" ] } diff --git a/config/esp32/components/chip/CMakeLists.txt b/config/esp32/components/chip/CMakeLists.txt index a5f26e3e46cec3..b715b4cd908d0c 100644 --- a/config/esp32/components/chip/CMakeLists.txt +++ b/config/esp32/components/chip/CMakeLists.txt @@ -85,6 +85,10 @@ chip_gn_arg_append("esp32_cxx" "\"${CMAKE_CXX_COMPILER}\"") chip_gn_arg_append("esp32_cpu" "\"esp32\"") chip_gn_arg_bool("is_debug" ${is_debug}) +if (CONFIG_CHIP_CONFIG_IM_PRETTY_PRINT) + chip_gn_arg_bool("enable_im_pretty_print" "true") +endif() + # Config the chip log level by IDF menuconfig if (CONFIG_LOG_DEFAULT_LEVEL GREATER_EQUAL 1) chip_gn_arg_bool ("chip_error_logging" "true") @@ -178,6 +182,10 @@ if (CONFIG_ENABLE_ESP32_BLE_CONTROLLER) chip_gn_arg_append("chip_enable_ble_controller" "true") endif() +if (CONFIG_ENABLE_ETHERNET_TELEMETRY) + chip_gn_arg_append("chip_enable_ethernet" "true") +endif() + if (CONFIG_ENABLE_MATTER_OVER_THREAD) chip_gn_arg_append("chip_enable_openthread" "true") else() @@ -199,6 +207,10 @@ if (CONFIG_ENABLE_ROTATING_DEVICE_ID) chip_gn_arg_append("chip_enable_rotating_device_id" "true") endif() +if (CONFIG_ENABLE_ROUTE_HOOK) + chip_gn_arg_append("chip_enable_route_hook" "true") +endif() + if (CONFIG_CHIP_ENABLE_EXTERNAL_PLATFORM) chip_gn_arg_append("chip_device_platform" "\"external\"") if (CONFIG_ENABLE_CHIP_SHELL) @@ -359,6 +371,10 @@ endif() if(CONFIG_OPENTHREAD_ENABLED) idf_component_get_property(openthread_lib openthread COMPONENT_LIB) list(APPEND chip_libraries $) + if (CONFIG_IEEE802154_ENABLED) + idf_component_get_property(ieee802154_lib ieee802154 COMPONENT_LIB) + list(APPEND chip_libraries $) + endif() endif() if((NOT CONFIG_USE_MINIMAL_MDNS) AND (CONFIG_ENABLE_WIFI_STATION OR CONFIG_ENABLE_WIFI_AP)) @@ -373,6 +389,11 @@ if((NOT CONFIG_USE_MINIMAL_MDNS) AND (CONFIG_ENABLE_WIFI_STATION OR CONFIG_ENABL list(APPEND chip_libraries $) endif() +if (CONFIG_ENABLE_ENCRYPTED_OTA) + idf_component_get_property(esp_encrypted_img_lib espressif__esp_encrypted_img COMPONENT_LIB) + list(APPEND chip_libraries $) +endif() + idf_component_get_property(main_lib main COMPONENT_LIB) list(APPEND chip_libraries $) @@ -385,7 +406,7 @@ idf_component_get_property(lwip_lib lwip COMPONENT_LIB) list(APPEND chip_libraries $) -if (CONFIG_ESP_WIFI_ENABLED) +if (CONFIG_ESP32_WIFI_ENABLED) idf_component_get_property(esp_wifi_lib esp_wifi COMPONENT_LIB) idf_component_get_property(esp_wifi_dir esp_wifi COMPONENT_DIR) list(APPEND chip_libraries $) @@ -398,6 +419,14 @@ if (CONFIG_ESP_WIFI_ENABLED) foreach(blob ${blobs}) list(APPEND chip_libraries "${esp_wifi_dir}/lib/${target_name}/lib${blob}.a") endforeach() + + idf_component_get_property(wpa_supplicant_lib wpa_supplicant COMPONENT_LIB) + list(APPEND chip_libraries $) +endif() + +if (CONFIG_ETH_ENABLED) + idf_component_get_property(esp_eth_lib esp_eth COMPONENT_LIB) + list(APPEND chip_libraries $) endif() idf_component_get_property(esp_netif_lib esp_netif COMPONENT_LIB) @@ -436,6 +465,12 @@ list(APPEND chip_libraries $) idf_component_get_property(efuse_lib efuse COMPONENT_LIB) list(APPEND chip_libraries $) +idf_component_get_property(vfs_lib vfs COMPONENT_LIB) +list(APPEND chip_libraries $) + +idf_component_get_property(driver_lib driver COMPONENT_LIB) +list(APPEND chip_libraries $) + target_link_libraries(${COMPONENT_LIB} INTERFACE -Wl,--start-group ${chip_libraries} $ $ diff --git a/config/esp32/components/chip/Kconfig b/config/esp32/components/chip/Kconfig index 732f0533a3d708..bff112fd594046 100644 --- a/config/esp32/components/chip/Kconfig +++ b/config/esp32/components/chip/Kconfig @@ -104,7 +104,7 @@ menu "CHIP Core" config BUILD_CHIP_TESTS bool "Build CHIP tests" - default "y" + default n help Build CHIP test binaries. @@ -112,11 +112,15 @@ menu "CHIP Core" int "Set threshold in ms" default 700 help - Time threshold for warning that dispatched took too long. You can - set this default set to 0 to to disable event dispatching time - measurement and suppress the logs "Long dispatch time:...". + Time threshold for warning that dispatched took too long. You can + set this default set to 0 to to disable event dispatching time + measurement and suppress the logs "Long dispatch time:...". - # TODO: add log level selection + config CHIP_LOG_FILTERING + bool "CHIP log level filtering APIs" + default n + help + Option to enable/disable CHIP log level filtering APIs. endmenu # "General Options" @@ -163,6 +167,13 @@ menu "CHIP Core" A value of 0 disables automatic closing of idle connections. + config ENABLE_ROUTE_HOOK + bool "Enable route hook" + depends on LWIP_HOOK_IP6_ROUTE_DEFAULT && LWIP_HOOK_ND6_GET_GW_DEFAULT + default y + help + Enable this option to use LwIP default IPv6 route hook for Route Information Option(RIO) feature. + endmenu # "Networking Options" menu "System Options" @@ -179,6 +190,13 @@ menu "CHIP Core" help Enable this option to enable OTA Requestor for example + config ENABLE_ENCRYPTED_OTA + bool "Enable pre encrypted OTA" + depends on ENABLE_OTA_REQUESTOR + default n + help + Enable this option to use the pre encrypted OTA image + config OTA_AUTO_REBOOT_ON_APPLY bool "Reboot the device after applying the OTA image" depends on ENABLE_OTA_REQUESTOR @@ -705,12 +723,9 @@ menu "CHIP Device Layer" depends on SEC_CERT_DAC_PROVIDER && SOC_ECDSA_SUPPORTED default y select MBEDTLS_HARDWARE_ECDSA_SIGN - select ENABLE_ESP32_FACTORY_DATA_PROVIDER - select ENABLE_ESP32_DEVICE_INSTANCE_INFO_PROVIDER help If DAC is being read from secure cert and SOC supports ECDSA signing using on-chip peripheral - then this option gets enabled. This option also selects few more that are required for commissioning - the device. + then this option gets enabled. Also, please disable ESP_SECURE_CERT_DS_PERIPHERAL from the menuconfig when this option is disabled endmenu diff --git a/config/esp32/components/chip/idf_component.yml b/config/esp32/components/chip/idf_component.yml index b9ce7591b88dd6..82c7fe3fc81338 100644 --- a/config/esp32/components/chip/idf_component.yml +++ b/config/esp32/components/chip/idf_component.yml @@ -1,7 +1,7 @@ ## IDF Component Manager Manifest File dependencies: espressif/mdns: - version: "^1.0.3" + version: "^1.1.0" rules: - if: "idf_version >=5.0" - if: "target != esp32h2" @@ -10,3 +10,8 @@ dependencies: version: "^2.3.0" rules: - if: "idf_version >=4.3" + + espressif/esp_encrypted_img: + version: "2.0.3" + rules: + - if: "idf_version >=4.4" diff --git a/config/nrfconnect/.nrfconnect-recommended-revision b/config/nrfconnect/.nrfconnect-recommended-revision index b1d18bc43f08ca..8721bbc46ad2f7 100644 --- a/config/nrfconnect/.nrfconnect-recommended-revision +++ b/config/nrfconnect/.nrfconnect-recommended-revision @@ -1 +1 @@ -v2.3.0 +v2.4.0 diff --git a/config/nrfconnect/app/flashing.cmake b/config/nrfconnect/app/flashing.cmake index 7937d99d887799..c6c90ef0270986 100644 --- a/config/nrfconnect/app/flashing.cmake +++ b/config/nrfconnect/app/flashing.cmake @@ -40,7 +40,7 @@ add_custom_command(OUTPUT "${FLASHBUNDLE_FLASHER_PLATFORM}" VERBATIM) if (merged_hex_to_flash) - set(flashbundle_hex_to_copy "${merged_hex_to_flash}") + set(flashbundle_hex_to_copy "zephyr/${merged_hex_to_flash}") else() set(flashbundle_hex_to_copy "zephyr/${KERNEL_HEX_NAME}") endif() diff --git a/config/nrfconnect/chip-module/CMakeLists.txt b/config/nrfconnect/chip-module/CMakeLists.txt index 2511fa3094cff6..43149d2306e3c1 100644 --- a/config/nrfconnect/chip-module/CMakeLists.txt +++ b/config/nrfconnect/chip-module/CMakeLists.txt @@ -50,21 +50,16 @@ include(${COMMON_CMAKE_SOURCE_DIR}/chip_gn_args.cmake) include(${COMMON_CMAKE_SOURCE_DIR}/chip_gn.cmake) # Prepare compiler flags -matter_add_flags(-D_DEFAULT_SOURCE) - if (CHIP_CFLAGS) matter_add_flags("${CHIP_CFLAGS}") endif() +matter_add_flags(-D_POSIX_C_SOURCE=200809) + if (CONFIG_ARM) matter_add_cflags(--specs=nosys.specs) endif() -if (CONFIG_POSIX_API) - matter_add_flags(-D_SYS__PTHREADTYPES_H_) - matter_add_flags(-isystem${ZEPHYR_BASE}/include/zephyr/posix) -endif() - if (CONFIG_NORDIC_SECURITY_BACKEND) zephyr_include_directories($) zephyr_include_directories($) @@ -197,8 +192,12 @@ matter_build(chip DEVICE_INFO_EXAMPLE_PROVIDER ${CONFIG_CHIP_EXAMPLE_DEVICE_INFO_PROVIDER} GN_DEPENDENCIES kernel ) + set_property(GLOBAL APPEND PROPERTY ZEPHYR_INTERFACE_LIBS chip) -target_compile_definitions(chip INTERFACE _DEFAULT_SOURCE) +# Enable visibility of POSIX.1-2008 functions, such as strnlen +target_compile_definitions(chip INTERFACE _POSIX_C_SOURCE=200809) +# Make sure that kernel symbols that are only referenced by the Matter libraries are resolved. +target_link_libraries(chip INTERFACE $) if (CONFIG_CHIP_MALLOC_SYS_HEAP_OVERRIDE) target_link_options(chip INTERFACE diff --git a/config/nrfconnect/chip-module/Kconfig b/config/nrfconnect/chip-module/Kconfig index e5fbdb405e365d..059d5112652b3f 100644 --- a/config/nrfconnect/chip-module/Kconfig +++ b/config/nrfconnect/chip-module/Kconfig @@ -18,6 +18,14 @@ rsource "../../zephyr/Kconfig" if CHIP +config CHIP_NRF_PLATFORM + bool + default y + help + States that the configuration uses Matter nRF platform, + what can be used to conditionally deviate from Zephyr generic configuration + for nRF platform related purposes. + # See config/zephyr/Kconfig for full definition config CHIP_DEVICE_VENDOR_NAME default "Nordic Semiconductor ASA" @@ -94,7 +102,7 @@ config CHIP_MALLOC_SYS_HEAP config CHIP_FACTORY_DATA bool "Factory data provider" select ZCBOR - select FPROTECT + imply FPROTECT help Enables the default nRF Connect factory data provider implementation that supports reading the factory data encoded in the CBOR format from the @@ -127,6 +135,27 @@ config CHIP_FACTORY_DATA_VERSION this value in the factory data provider implementation to verify that the factory data saved in the flash memory has the expected version. +config CHIP_FACTORY_DATA_ROTATING_DEVICE_UID_MAX_LEN + int "Maximum length of rotating device ID unique ID in bytes" + default 16 + depends on CHIP_FACTORY_DATA + help + Maximum acceptable length of rotating device ID unique ID in bytes. + +config CHIP_FACTORY_DATA_WRITE_PROTECT + bool "Enable Factory Data write protection" + select FPROTECT + depends on CHIP_FACTORY_DATA + default y if CHIP_FACTORY_DATA + help + Enables the write protection of the Factory Data partition in the flash memory. + This is a recommended feature, but it requires the Settings partition size to be + a multiple of FPROTECT_BLOCK_SIZE and the Factory Data partition to be placed + right after the application partition in the address space (the Factory Data + partition offset must be equal to the last address of the application partition). + The second requirement is valid only when the FPROTECT_BLOCK_SIZE is bigger than + the flash memory page size. + if CHIP_FACTORY_DATA_BUILD # Factory data definitions diff --git a/config/nrfconnect/chip-module/Kconfig.defaults b/config/nrfconnect/chip-module/Kconfig.defaults index bf7b494e7050d5..d275d938021c63 100644 --- a/config/nrfconnect/chip-module/Kconfig.defaults +++ b/config/nrfconnect/chip-module/Kconfig.defaults @@ -37,7 +37,7 @@ config CHIP_APP_LOG_LEVEL default 4 # debug config LOG_DEFAULT_LEVEL - default 2 # warning + default 1 # error config CHIP_LOG_SIZE_OPTIMIZATION default y @@ -50,6 +50,12 @@ config PRINTK_SYNC config ASSERT default y +config ASSERT_NO_COND_INFO + default y + +config ASSERT_NO_MSG_INFO + default y + config HW_STACK_PROTECTION default y @@ -63,9 +69,9 @@ config PTHREAD_IPC bool default n -# Generic networking options -config NET_SOCKETS_POSIX_NAMES - default n +config POSIX_MAX_FDS + int + default 16 # Application stack size config MAIN_STACK_SIZE @@ -216,6 +222,10 @@ endif if CHIP_WIFI +choice WPA_SUPP_LOG_LEVEL_CHOICE + default WPA_SUPP_LOG_LEVEL_ERR +endchoice + config NRF_WIFI_LOW_POWER default n @@ -223,7 +233,7 @@ config MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG default n config SYSTEM_WORKQUEUE_STACK_SIZE - default 2048 + default 2560 # align these numbers to match the OpenThread config config NET_IF_UNICAST_IPV6_ADDR_COUNT @@ -232,9 +242,6 @@ config NET_IF_UNICAST_IPV6_ADDR_COUNT config NET_IF_MCAST_IPV6_ADDR_COUNT default 8 -config NET_SOCKETS_POSIX_NAMES - default n - config NET_SOCKETS_POLL_MAX default 4 @@ -436,6 +443,9 @@ endif # SOC_SERIES_NRF52X if SOC_SERIES_NRF53X +config BOOT_IMAGE_ACCESS_HOOKS + default y + config UPDATEABLE_IMAGE_NUMBER default 2 diff --git a/config/nrfconnect/chip-module/Kconfig.features b/config/nrfconnect/chip-module/Kconfig.features index 0501e351681e9a..84390e38d2029b 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_NRF7002_EK || BOARD_NRF7002DK_NRF5340_CPUAPP + default y if SHIELD_NRF7002EK || BOARD_NRF7002DK_NRF5340_CPUAPP select WIFI_NRF700X select WIFI select WPA_SUPP @@ -73,18 +73,77 @@ config SPI_NOR_FLASH_LAYOUT_PAGE_SIZE endif # CHIP_SPI_NOR +config CHIP_NUS + bool "Enable Nordic UART service for Matter purposes" + select BT_NUS + select BT_SMP + select BT_NUS_AUTHEN + help + Enables Nordic UART service (NUS) for Matter samples. + Using NUS service you can control a Matter sample using pre-defined BLE commands + and do defined operations. The CHIP NUS service can be useful to keep communication + with a smart home device when a connection within Matter network is lost. + +if CHIP_NUS + +# Requires providing a PIN for each pair request +config BT_BONDABLE + default n + +config BT_RX_STACK_SIZE + default 1536 + +config SYSTEM_WORKQUEUE_STACK_SIZE + default 2048 + +config BT_DEVICE_APPEARANCE + default 833 + +if !LOG + +config BT_FIXED_PASSKEY + default y + +endif + +config CHIP_NUS_MAX_COMMAND_LEN + int "Maximum length of single command in Bytes" + default 10 + help + Maximum length of single command. This command will be send via Bluetooth LE to + a paired smart home device. + +config CHIP_NUS_FIXED_PASSKEY + int "Define the default passkey for NUS" + depends on BT_FIXED_PASSKEY + default 123456 + help + Define the default password for pairing with the Bluetooth LE device. + +config CHIP_NUS_MAX_COMMANDS + int "Define maximum NUS commands amount" + default 2 + help + Define the maximum number of NUS commands to declare by user. + +endif + + config CHIP_DFU_OVER_BT_SMP bool "Enable DFU over Bluetooth LE SMP feature set" imply CHIP_QSPI_NOR if BOARD_NRF5340DK_NRF5340_CPUAPP || BOARD_NRF52840DK_NRF52840 imply CHIP_SPI_NOR if BOARD_NRF7002DK_NRF5340_CPUAPP imply BOOTLOADER_MCUBOOT select MCUMGR - select MCUMGR_SMP_BT - select MCUMGR_CMD_IMG_MGMT - select MCUMGR_CMD_OS_MGMT + select MCUMGR_TRANSPORT_BT + select IMG_MANAGER + select STREAM_FLASH + select ZCBOR + select MCUMGR_GRP_IMG + select MCUMGR_GRP_OS # Enable custom SMP request to erase settings partition. - select MCUMGR_GRP_ZEPHYR_BASIC - select MCUMGR_GRP_BASIC_CMD_STORAGE_ERASE + select MCUMGR_GRP_ZBASIC + select MCUMGR_GRP_ZBASIC_STORAGE_ERASE help Enables Device Firmware Upgrade over Bluetooth LE with SMP and configures the set of options related to that feature. @@ -92,10 +151,10 @@ config CHIP_DFU_OVER_BT_SMP if CHIP_DFU_OVER_BT_SMP # MCU Manager and SMP configuration -config MCUMGR_SMP_BT_AUTHEN +config MCUMGR_TRANSPORT_BT_AUTHEN default n -config MCUMGR_BUF_COUNT +config MCUMGR_TRANSPORT_NETBUF_COUNT default 6 config MCUMGR_MGMT_NOTIFICATION_HOOKS @@ -117,8 +176,8 @@ config BT_L2CAP_TX_MTU config BT_BUF_ACL_RX_SIZE default 502 -# Increase MCUMGR_BUF_SIZE, as it must be big enough to fit MAX MTU + overhead and for single-image DFU default is 384 B -config MCUMGR_BUF_SIZE +# Increase MCUMGR_TRANSPORT_NETBUF_SIZE, as it must be big enough to fit MAX MTU + overhead and for single-image DFU default is 384 B +config MCUMGR_TRANSPORT_NETBUF_SIZE default 1024 # Increase system workqueue size, as SMP is processed within it @@ -128,10 +187,10 @@ config SYSTEM_WORKQUEUE_STACK_SIZE if SOC_SERIES_NRF53X # Enable custom SMP request to erase settings partition. -config MCUMGR_GRP_ZEPHYR_BASIC +config MCUMGR_GRP_ZBASIC default y -config MCUMGR_GRP_BASIC_CMD_STORAGE_ERASE +config MCUMGR_GRP_ZBASIC_STORAGE_ERASE default y endif # SOC_SERIES_NRF53X diff --git a/config/nrfconnect/chip-module/Kconfig.multiprotocol_rpmsg.defaults b/config/nrfconnect/chip-module/Kconfig.multiprotocol_rpmsg.defaults index 9fee38cb5f38fc..eb0b01e2664ce7 100644 --- a/config/nrfconnect/chip-module/Kconfig.multiprotocol_rpmsg.defaults +++ b/config/nrfconnect/chip-module/Kconfig.multiprotocol_rpmsg.defaults @@ -75,8 +75,5 @@ config EXCEPTION_STACK_TRACE config NRF_802154_SER_RADIO default y -config NRF_RTC_TIMER_USER_CHAN_COUNT - default 2 - config NRF_802154_ENCRYPTION default y diff --git a/config/telink/chip-module/Kconfig b/config/telink/chip-module/Kconfig index 4d4fb202e98703..97f42e01932c5d 100644 --- a/config/telink/chip-module/Kconfig +++ b/config/telink/chip-module/Kconfig @@ -60,6 +60,14 @@ config CHIP_OTA_IMAGE_BUILD bool default y if CHIP_OTA_REQUESTOR +config CHIP_ROTATING_DEVICE_ID + bool "Generate rotating device ID" + default y + help + Enables the rotating device identifier that provides a non-trackable + identifier. The identifier is unique per device and rotates at pre-defined + moments. + config CHIP_EXAMPLE_DEVICE_INFO_PROVIDER bool "Include default device information provider build" default y diff --git a/config/zephyr/Kconfig b/config/zephyr/Kconfig index f0e8d9eddfcb66..3ea261d2371eca 100644 --- a/config/zephyr/Kconfig +++ b/config/zephyr/Kconfig @@ -22,7 +22,7 @@ menuconfig CHIP imply REQUIRES_FULL_LIBC imply NEWLIB_LIBC_NANO imply CBPRINTF_LIBC_SUBSTS - imply POSIX_API if !ARCH_POSIX + imply POSIX_API if !ARCH_POSIX && !CHIP_NRF_PLATFORM imply EVENTFD if !ARCH_POSIX imply REBOOT imply ENTROPY_GENERATOR @@ -30,6 +30,7 @@ menuconfig CHIP imply NET_IPV6 imply NET_CONFIG_NEED_IPV6 imply NET_SOCKETS + imply NET_SOCKETS_POSIX_NAMES if !ARCH_POSIX && CHIP_NRF_PLATFORM imply NETWORKING imply HWINFO imply FLASH diff --git a/config/zephyr/chip-module/Kconfig.features b/config/zephyr/chip-module/Kconfig.features index bc800095dc7ce0..1fa6e051a1d2b2 100644 --- a/config/zephyr/chip-module/Kconfig.features +++ b/config/zephyr/chip-module/Kconfig.features @@ -24,23 +24,23 @@ config MCUMGR bool default y -config MCUMGR_CMD_IMG_MGMT +config MCUMGR_GRP_IMG bool default y -config MCUMGR_CMD_OS_MGMT +config MCUMGR_GRP_OS bool default y -config MCUMGR_SMP_BT +config MCUMGR_TRANSPORT_BT bool default y -config MCUMGR_SMP_BT_AUTHEN +config MCUMGR_TRANSPORT_BT_AUTHEN bool default n -config MCUMGR_BUF_COUNT +config MCUMGR_TRANSPORT_NETBUF_COUNT int default 6 @@ -53,8 +53,8 @@ config BT_BUF_ACL_RX_SIZE int default 502 -# Increase MCUMGR_BUF_SIZE, as it must be big enough to fit MAX MTU + overhead and for single-image DFU default is 384 B -config MCUMGR_BUF_SIZE +# Increase MCUMGR_TRANSPORT_NETBUF_SIZE, as it must be big enough to fit MAX MTU + overhead and for single-image DFU default is 384 B +config MCUMGR_TRANSPORT_NETBUF_SIZE int default 1024 diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_ACK_PAA_vid_0x137A.der b/credentials/development/paa-root-certs/dcld_mirror_CN_ACK_PAA_vid_0x137A.der new file mode 100644 index 00000000000000..a5d8af96d4fb19 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_ACK_PAA_vid_0x137A.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_ACK_PAA_vid_0x137A.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_ACK_PAA_vid_0x137A.pem new file mode 100644 index 00000000000000..3af8819994bb1e --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_ACK_PAA_vid_0x137A.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBtDCCAVqgAwIBAgIRAKmlv/NkWcbEmD8lf53gJ8IwCgYIKoZIzj0EAwIwKDEQ +MA4GA1UEAwwHQUNLIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzN0EwIBcNMjIxMjIx +MTcyODI4WhgPMjEyMjExMjcxODI4MjhaMCgxEDAOBgNVBAMMB0FDSyBQQUExFDAS +BgorBgEEAYKifAIBDAQxMzdBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEm4U8 +MVedT5hVlDTuDO31lnEHWbjW2euLdkcwWoK50S1wHnIHGdtmQwVFfl/QsfR2vknr +u09p1W/8pHbwmPbq7aNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUsmX4 +RnbkZc9s0jK2k4MwyOowZAYwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFLJl ++EZ25GXPbNIytpODMMjqMGQGMAoGCCqGSM49BAMCA0gAMEUCIQCrjO6txs7d8VA4 +hFHM4ZYAcSXTNWKYKIFRNEIbGOlJXwIgYGjCddu3ddzOnjXEd3kK1oO+Exs4Wtzw +XHHTB2RisdU= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Basics_PAA_vid_0x137B.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Basics_PAA_vid_0x137B.der new file mode 100644 index 00000000000000..8cccdfe5d6053c Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Basics_PAA_vid_0x137B.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Basics_PAA_vid_0x137B.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Basics_PAA_vid_0x137B.pem new file mode 100644 index 00000000000000..fdd6d2f528df8d --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Basics_PAA_vid_0x137B.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBujCCAV+gAwIBAgIQWLcxV1Mfj6lftudYrsmyljAKBggqhkjOPQQDAjArMRMw +EQYDVQQDDApCYXNpY3MgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM3QjAgFw0yMjEy +MjExNzM3NThaGA8yMTIyMTEyNzE4Mzc1OFowKzETMBEGA1UEAwwKQmFzaWNzIFBB +QTEUMBIGCisGAQQBgqJ8AgEMBDEzN0IwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC +AASnpaiASxMZDfqgC3oYe18bkB25PWJI+jI7MvKWnhq2+FxdaByMU1P6Sv2qoBCg +ikN54BMhJNthnQQL8bGtrE/Co2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBQ/4wy1FSZGe0TBECIIbihQpVCcqjAOBgNVHQ8BAf8EBAMCAYYwHwYDVR0jBBgw +FoAUP+MMtRUmRntEwRAiCG4oUKVQnKowCgYIKoZIzj0EAwIDSQAwRgIhAPaRP+mH +VnXvZaYIkyoAh34JVfTJvhOcPxmgaywmvqh3AiEAqrsuiz6oZnU0j+fqyhXj7w1S +Mwzbg5//iCLEUET36XU= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.der new file mode 100644 index 00000000000000..9353d4030d22d9 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.pem new file mode 100644 index 00000000000000..561591e8201cf1 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDzCCAbWgAwIBAgIQaYNwS9sgTBq3o/fYlgTNRjAKBggqhkjOPQQDAjBWMQsw +CQYDVQQGEwJDTjEaMBgGA1UECgwRQkVLRU4gQ09SUE9SQVRJT04xFTATBgNVBAMM +DEJla2VuIFBBQSAwMTEUMBIGCisGAQQBgqJ8AgEMBDEzNDIwIBcNMjMwMjIxMDEx +MjEwWhgPOTk5OTEyMzEyMzU5NTlaMFYxCzAJBgNVBAYTAkNOMRowGAYDVQQKDBFC +RUtFTiBDT1JQT1JBVElPTjEVMBMGA1UEAwwMQmVrZW4gUEFBIDAxMRQwEgYKKwYB +BAGConwCAQwEMTM0MjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNAiesN6ioXB +ceNzUHakCBeHnWYclToAOMD+iN/+ZICwbYcNprK/3fwgNbW9wJjfgS1Ql7ncpFI1 +CuGIx1ixsvyjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPH7a4tsFdwj +q/GrUwRtGqMOygGJMA4GA1UdDwEB/wQEAwIBhjAfBgNVHSMEGDAWgBTx+2uLbBXc +I6vxq1MEbRqjDsoBiTAKBggqhkjOPQQDAgNIADBFAiAhLQDUaEN6D7bEEsDiZeWk +SgF4T78PnMu7djX7dA5WPwIhANi5ffmVk+EsdlhDk/50ojce09gvjar3RDSibyiE +xsch +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_BouffaloLab_Matter_Test_PAA_vid_0x130D.der b/credentials/development/paa-root-certs/dcld_mirror_CN_BouffaloLab_Matter_Test_PAA_vid_0x130D.der new file mode 100644 index 00000000000000..b1068a6d70c53b Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_BouffaloLab_Matter_Test_PAA_vid_0x130D.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_BouffaloLab_Matter_Test_PAA_vid_0x130D.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_BouffaloLab_Matter_Test_PAA_vid_0x130D.pem new file mode 100644 index 00000000000000..1499538fa20133 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_BouffaloLab_Matter_Test_PAA_vid_0x130D.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB2zCCAYCgAwIBAgIRAMfepq0ZLWM3qzyIbGE5OLswCgYIKoZIzj0EAwIwPDEk +MCIGA1UEAwwbQm91ZmZhbG9MYWIgTWF0dGVyIFRlc3QgUEFBMRQwEgYKKwYBBAGC +onwCAQwEMTMwRDAeFw0yMzA0MjMwMTE0NDNaFw0zMzA0MjAwMjE0NDNaMDwxJDAi +BgNVBAMMG0JvdWZmYWxvTGFiIE1hdHRlciBUZXN0IFBBQTEUMBIGCisGAQQBgqJ8 +AgEMBDEzMEQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQd4BVELCCWiawXtefq +Q/QcUlifN0OAJJVntqjKcirRXlEvCI4FCTbxP0N+5GnCbA14SwY55Wph4AIUn8ED +vV+ao2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRu0jOCSCI1EH0Nbgkb +nPkOviF4bzAOBgNVHQ8BAf8EBAMCAYYwHwYDVR0jBBgwFoAUbtIzgkgiNRB9DW4J +G5z5Dr4heG8wCgYIKoZIzj0EAwIDSQAwRgIhAM6Dzi6vB8NgDzn0Qx+tB+qNuUn5 +BeSsqjjCO6MlBYofAiEAzqovlPzuuxQ+jStW5DxavlwNkFboEcY/an1qMmlHNRw= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.der b/credentials/development/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.der new file mode 100644 index 00000000000000..24c85a7ccecb17 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.pem new file mode 100644 index 00000000000000..df1e675b2517a3 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByjCCAXCgAwIBAgIUXCGo9kb6IAuTbc++0INIKoRNdmkwCgYIKoZIzj0EAwIw +MDEuMCwGA1UEAwwlQ29tbVNjb3BlIFRlY2hub2xvZ2llcyBMTEMgTWF0dGVyIFBB +QTAgFw0yMzAzMjcxODAzMTVaGA8yMDc5MDYwNTIzNTk1OVowMDEuMCwGA1UEAwwl +Q29tbVNjb3BlIFRlY2hub2xvZ2llcyBMTEMgTWF0dGVyIFBBQTBZMBMGByqGSM49 +AgEGCCqGSM49AwEHA0IABKDQFia0cSkTzFVaowcLObj8kugxNblIJQI8+9T39HBS +MUt8BZLyF6fvpoMW3aFGty7QnSIEcUHsv3a+luWMOyWjZjBkMBIGA1UdEwEB/wQI +MAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB8GA1UdIwQYMBaAFFn47dFXVdLaZqie +VLx5cjRDXfRrMB0GA1UdDgQWBBRZ+O3RV1XS2maonlS8eXI0Q130azAKBggqhkjO +PQQDAgNIADBFAiEA2r/c+NN+uHyDSPnrPG0csWP/L4SCNl3RHEktM76RomoCIHZj +wzofFTNVqdsP/gAOyygrtvq9tOkz0s0PY+06N6Dr +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_CoolKit_Matter_PAA_test_vid_0x1286.der b/credentials/development/paa-root-certs/dcld_mirror_CN_CoolKit_Matter_PAA_test_vid_0x1286.der new file mode 100644 index 00000000000000..2c64a6eed081ab Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_CoolKit_Matter_PAA_test_vid_0x1286.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_CoolKit_Matter_PAA_test_vid_0x1286.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_CoolKit_Matter_PAA_test_vid_0x1286.pem new file mode 100644 index 00000000000000..f84921a39e7b8f --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_CoolKit_Matter_PAA_test_vid_0x1286.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzzCCAXSgAwIBAgIIa8JmNcPHyd8wCgYIKoZIzj0EAwIwODEgMB4GA1UEAwwX +Q29vbEtpdCBNYXR0ZXIgUEFBIHRlc3QxFDASBgorBgEEAYKifAIBDAQxMjg2MCAX +DTIwMTAxNTE0MjM0M1oYDzIxMjAwOTIxMTQyMzQyWjA4MSAwHgYDVQQDDBdDb29s +S2l0IE1hdHRlciBQQUEgdGVzdDEUMBIGCisGAQQBgqJ8AgEMBDEyODYwWTATBgcq +hkjOPQIBBggqhkjOPQMBBwNCAARnOBT4DvbX8LVrYRrOyp1V2XeuNa1EWKorRgPP +qTxx2myN/nRIOZ1YRAc/2Mdn2lGqcD8vAm44O7JtbEmfjQdao2YwZDASBgNVHRMB +Af8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUu8Wrbl37uqK5 +fVPozFdsJcv2ifQwHwYDVR0jBBgwFoAUu8Wrbl37uqK5fVPozFdsJcv2ifQwCgYI +KoZIzj0EAwIDSQAwRgIhAJECrcroVMAPXjJ5E14eRVg0V4uTQcl8esowSsNeKk76 +AiEA3DM2PDZxL6EoZ87Dfr826X1TtKSXRSZrsxjQAaA8PoY= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.der new file mode 100644 index 00000000000000..3eb961c3e64475 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.pem new file mode 100644 index 00000000000000..f3a3f9b032117c --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByjCCAXCgAwIBAgIRALIYkZCkr7iJ8mZzIc7i0YUwCgYIKoZIzj0EAwIwMzEb +MBkGA1UEAwwSQ29vbGtpdCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTI4 +NjAgFw0yMjEyMjkwOTAxMjBaGA8yMTIyMTIwNTEwMDEyMFowMzEbMBkGA1UEAwwS +Q29vbGtpdCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTI4NjBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABFjRorUBNceySQx2NyglupAohrtcN7HhdhoXSpe7 +Q8NKPwEWgi8xGM8/I5aZpNyKWtIkiqQjOldveUsJ+E5huJ2jYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFNLMGSSoh8d9pu+VyV7evMxVOl6+MA4GA1UdDwEB +/wQEAwIBhjAfBgNVHSMEGDAWgBTSzBkkqIfHfabvlcle3rzMVTpevjAKBggqhkjO +PQQDAgNIADBFAiEA70Nk7lJT0kd3ldXbCeHjHCcjaNQSi6BEfW5t351S0TYCIEtA +7mST/iS08y+bmAc+Umw4w4korSG7mbA7SF+h4Bvq +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_DUC_Matter_Test_PAA_CN_vid_0x141F.der b/credentials/development/paa-root-certs/dcld_mirror_CN_DUC_Matter_Test_PAA_CN_vid_0x141F.der new file mode 100644 index 00000000000000..52e2ddd55df0b6 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_DUC_Matter_Test_PAA_CN_vid_0x141F.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_DUC_Matter_Test_PAA_CN_vid_0x141F.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_DUC_Matter_Test_PAA_CN_vid_0x141F.pem new file mode 100644 index 00000000000000..85fe1f90bdec59 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_DUC_Matter_Test_PAA_CN_vid_0x141F.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByzCCAXKgAwIBAgIIejP0/yJR6fEwCgYIKoZIzj0EAwIwNzEfMB0GA1UEAwwW +RFVDIE1hdHRlciBUZXN0IFBBQSBDTjEUMBIGCisGAQQBgqJ8AgEMBDE0MUYwIBcN +MjMwNTEwMTQzMDAwWhgPOTk5OTEyMzEyMzU5NTlaMDcxHzAdBgNVBAMMFkRVQyBN +YXR0ZXIgVGVzdCBQQUEgQ04xFDASBgorBgEEAYKifAIBDAQxNDFGMFkwEwYHKoZI +zj0CAQYIKoZIzj0DAQcDQgAEkPXBAgN/uRMrsoFzVw53tB3qswJwsbm+0AB3cth3 +tW78uwoaPfDoJZrQ5dH6US9QCSPz/Z27YYKtkkeV1lXg46NmMGQwEgYDVR0TAQH/ +BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFFZTubOXQQwD5gJ+ +UR1hQ1OTrk1xMB8GA1UdIwQYMBaAFFZTubOXQQwD5gJ+UR1hQ1OTrk1xMAoGCCqG +SM49BAMCA0cAMEQCIBRyltVJ6UZN6ksCCgwkrCOxjkPEV4nI+eGkMRnOH69gAiBs +CIhjseCFllxxvsWiNoRA1rx2BBwqQfWBh5W0W5Z2nw== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_DigiCert_Root_CA_for_MATTER_PKI_G1_O_DigiCert__Inc_C_US.der b/credentials/development/paa-root-certs/dcld_mirror_CN_DigiCert_Root_CA_for_MATTER_PKI_G1_O_DigiCert__Inc_C_US.der new file mode 100644 index 00000000000000..3b9d3fef535561 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_DigiCert_Root_CA_for_MATTER_PKI_G1_O_DigiCert__Inc_C_US.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_DigiCert_Root_CA_for_MATTER_PKI_G1_O_DigiCert__Inc_C_US.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_DigiCert_Root_CA_for_MATTER_PKI_G1_O_DigiCert__Inc_C_US.pem new file mode 100644 index 00000000000000..81f9bf3e7defca --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_DigiCert_Root_CA_for_MATTER_PKI_G1_O_DigiCert__Inc_C_US.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDTCCAbKgAwIBAgIQe3eNNaVHZutrY7gRg4ItsjAKBggqhkjOPQQDAjBTMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xKzApBgNVBAMTIkRp +Z2lDZXJ0IFJvb3QgQ0EgZm9yIE1BVFRFUiBQS0kgRzEwIBcNMjIwODI0MDAwMDAw +WhgPOTk5OTEyMzEyMzU5NTlaMFMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdp +Q2VydCwgSW5jLjErMCkGA1UEAxMiRGlnaUNlcnQgUm9vdCBDQSBmb3IgTUFUVEVS +IFBLSSBHMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABAVbq6wD9zzDXbEObnSN +OMNLrGyLBok/Le7bYMzRBn8G4aNSEDw1ClO4gAbrZqpDJy5QSmF9VpKPx9FOsvmV +bZujZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBQyUEUZM0RZm0Zl1Fn9OhXxwRbMvTAfBgNVHSMEGDAWgBQyUEUZM0RZm0Zl +1Fn9OhXxwRbMvTAKBggqhkjOPQQDAgNJADBGAiEAh88I/wwZ6/x4wrLLZeEZZEQi +KqmgvTeRD3kPQ1LoCFgCIQCKVfavo16G+mSmMEFD2O/vsx15c2U1SS0rTK/ogRAP +4g== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.der new file mode 100644 index 00000000000000..74f0bdc503d9b3 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.pem new file mode 100644 index 00000000000000..28ba6eec1e0d99 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBxjCCAWygAwIBAgIRAK8DIULbkf5secR3pEpneXkwCgYIKoZIzj0EAwIwMTEZ +MBcGA1UEAwwQRG9veWEgTWF0dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzNjUw +IBcNMjMwNTE3MDYzMDA5WhgPMjEyMzA0MjMwNzMwMDlaMDExGTAXBgNVBAMMEERv +b3lhIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxMzY1MFkwEwYHKoZIzj0C +AQYIKoZIzj0DAQcDQgAE13sUs7r/vScV3aC0keua5b3hN2HACJrsPVY0csOEvdmg +Ujb/DdhbB9II8egcUgNQhbhm1VA6aDweSVOlJUqW9KNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQU2H5GdarwvlK+Q5zywAaYbZrwLnUwDgYDVR0PAQH/BAQD +AgGGMB8GA1UdIwQYMBaAFNh+RnWq8L5SvkOc8sAGmG2a8C51MAoGCCqGSM49BAMC +A0gAMEUCICN3uiTptSE1TiDJ9595cGiBOHg30RN0XHIepd5xhzE+AiEA94oIq6eF +4Bf6vzl1brZb3/jRFa2Hb2KSF+pLby/nVDU= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_EZVIZ_Matter_test_PAA_01_vid_0x1434.der b/credentials/development/paa-root-certs/dcld_mirror_CN_EZVIZ_Matter_test_PAA_01_vid_0x1434.der new file mode 100644 index 00000000000000..768ea5e4749a4f Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_EZVIZ_Matter_test_PAA_01_vid_0x1434.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_EZVIZ_Matter_test_PAA_01_vid_0x1434.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_EZVIZ_Matter_test_PAA_01_vid_0x1434.pem new file mode 100644 index 00000000000000..018ed98e915f4b --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_EZVIZ_Matter_test_PAA_01_vid_0x1434.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzTCCAXSgAwIBAgIIK4s1NP68KGIwCgYIKoZIzj0EAwIwOTEhMB8GA1UEAwwY +RVpWSVogTWF0dGVyIHRlc3QgUEFBIDAxMRQwEgYKKwYBBAGConwCAQwEMTQzNDAe +Fw0yMzA1MDUxNjEwNTVaFw0zMzA1MDIxNjEwNTRaMDkxITAfBgNVBAMMGEVaVkla +IE1hdHRlciB0ZXN0IFBBQSAwMTEUMBIGCisGAQQBgqJ8AgEMBDE0MzQwWTATBgcq +hkjOPQIBBggqhkjOPQMBBwNCAASn2b5OqfOl/E3sn01xRffPoJnYTa3GB4bjgLvK +IpzqIJQZJLRBpuK8is2DIybkj77QEaVdQG+D6MfceRjVJyvso2YwZDASBgNVHRMB +Af8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU3hJk7liExrxC +3q2lJPaEqdhNa5cwHwYDVR0jBBgwFoAU3hJk7liExrxC3q2lJPaEqdhNa5cwCgYI +KoZIzj0EAwIDRwAwRAIgfrtaXfCxNEhihJ+/lenZWqCvqwMhJasMZPBVSI8TvG0C +ID1umGgKfOcTaBuAWh0nlzKgDi1ie5QaaSj+E40XfW5u +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Espressif_Matter_PAA_O_Espressif_Systems_vid_0x131B.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Espressif_Matter_PAA_O_Espressif_Systems_vid_0x131B.der new file mode 100644 index 00000000000000..f4299e6374d6c8 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Espressif_Matter_PAA_O_Espressif_Systems_vid_0x131B.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Espressif_Matter_PAA_O_Espressif_Systems_vid_0x131B.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Espressif_Matter_PAA_O_Espressif_Systems_vid_0x131B.pem new file mode 100644 index 00000000000000..735a6d0f233298 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Espressif_Matter_PAA_O_Espressif_Systems_vid_0x131B.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIICCDCCAa6gAwIBAgIQaAJCUN1IiECssOZIuhJXPDAKBggqhkjOPQQDAjBRMR0w +GwYDVQQDDBRFc3ByZXNzaWYgTWF0dGVyIFBBQTEaMBgGA1UECgwRRXNwcmVzc2lm +IFN5c3RlbXMxFDASBgorBgEEAYKifAIBDAQxMzFCMCAXDTIyMTEyODA4MTM0MVoY +Dzk5OTkxMjMxMjM1OTU5WjBRMR0wGwYDVQQDDBRFc3ByZXNzaWYgTWF0dGVyIFBB +QTEaMBgGA1UECgwRRXNwcmVzc2lmIFN5c3RlbXMxFDASBgorBgEEAYKifAIBDAQx +MzFCMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEi6YLVYUIZ85zY/OZtse5csL6 +Uthd9R+IjpZ1j6SBLysbzbjt3EqGVAew1pQUkzrwmzEXpoXgkUGLSRqdSh5PcqNm +MGQwEgYDVR0TAQH/BAgwBgEB/wIBATAfBgNVHSMEGDAWgBRNEvWAG3XTI4XFVZDv +RSe8s7px4DAdBgNVHQ4EFgQUTRL1gBt10yOFxVWQ70UnvLO6ceAwDgYDVR0PAQH/ +BAQDAgGGMAoGCCqGSM49BAMCA0gAMEUCIQDcyYwJvBkl+VaU1bfqF4EcJ0SYq+u2 +keLIKJofbHZS4AIgO12+Flxj9X6XwL2z1g9G6JoOHKJMgZjcmRiTDwib3Vs= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Heiman_Matter_Test_PAA_vid_0x120B.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Heiman_Matter_Test_PAA_vid_0x120B.der index d8b27845f7f7f4..847702d803dd96 100644 Binary files a/credentials/development/paa-root-certs/dcld_mirror_CN_Heiman_Matter_Test_PAA_vid_0x120B.der and b/credentials/development/paa-root-certs/dcld_mirror_CN_Heiman_Matter_Test_PAA_vid_0x120B.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Heiman_Matter_Test_PAA_vid_0x120B.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Heiman_Matter_Test_PAA_vid_0x120B.pem index 82397ca822460f..e48f37c788e769 100644 --- a/credentials/development/paa-root-certs/dcld_mirror_CN_Heiman_Matter_Test_PAA_vid_0x120B.pem +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Heiman_Matter_Test_PAA_vid_0x120B.pem @@ -1,12 +1,12 @@ -----BEGIN CERTIFICATE----- -MIIBzDCCAXKgAwIBAgIIXtY+YtAm944wCgYIKoZIzj0EAwIwNzEfMB0GA1UEAwwW +MIIBzDCCAXKgAwIBAgIIeBp2agxIP/cwCgYIKoZIzj0EAwIwNzEfMB0GA1UEAwwW SGVpbWFuIE1hdHRlciBUZXN0IFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEyMEIwIBcN MjEwNjI4MTQyMzQzWhgPOTk5OTEyMzEyMzU5NTlaMDcxHzAdBgNVBAMMFkhlaW1h biBNYXR0ZXIgVGVzdCBQQUExFDASBgorBgEEAYKifAIBDAQxMjBCMFkwEwYHKoZI -zj0CAQYIKoZIzj0DAQcDQgAE3giOwaFlfhbRss7S+v70G1rQc6UdkSJk3u02DxuW -j3kXzq59tH8c3jA6NM7gOWe3sl6Gz7aLGUEzt6I0BMqKVKNmMGQwEgYDVR0TAQH/ -BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBqL17cLDtAEM0TS -EEI1VEYpx0VpMB8GA1UdIwQYMBaAFBqL17cLDtAEM0TSEEI1VEYpx0VpMAoGCCqG -SM49BAMCA0gAMEUCIExYnMl3qsXwJN1nCAC1D+D3i+L6NMOf0kJiLDHG6OUHAiEA -xoj89D0kF6k9McvsPv8yhnj0vb7gK7Ivyd1iKD/PLnc= +zj0CAQYIKoZIzj0DAQcDQgAEHb6i51snz580U7Mlf1tBxGFzICjQsusBJr5J8bUk +ScUQCXneYwit2d+z7R6Bva08lXtcJTihNimQtSNdzocNZqNmMGQwEgYDVR0TAQH/ +BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFO0U/qg8IUbP88ec +H/NbtS88zUcsMB8GA1UdIwQYMBaAFO0U/qg8IUbP88ecH/NbtS88zUcsMAoGCCqG +SM49BAMCA0gAMEUCIQCW5s+jZLJjwIMfHQewTMMco10iLxwjFIHD3a+mWLkmfwIg +UQbNy0s2bmdT4E22rbonNOVoEUxHZPff06DPj1XoMbE= -----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Hisense_Matter_Test_PAA_vid_0x138C.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Hisense_Matter_Test_PAA_vid_0x138C.der new file mode 100644 index 00000000000000..cedc9b0ec9dc8a Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Hisense_Matter_Test_PAA_vid_0x138C.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Hisense_Matter_Test_PAA_vid_0x138C.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Hisense_Matter_Test_PAA_vid_0x138C.pem new file mode 100644 index 00000000000000..89c355970a2d53 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Hisense_Matter_Test_PAA_vid_0x138C.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByzCCAXGgAwIBAgIHWTEIWHo8azAKBggqhkjOPQQDAjA4MSAwHgYDVQQDDBdI +aXNlbnNlIE1hdHRlciBUZXN0IFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzOEMwHhcN +MjAxMDE1MTQyMzQzWhcNNDAxMDE1MTQyMzQyWjA4MSAwHgYDVQQDDBdIaXNlbnNl +IE1hdHRlciBUZXN0IFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzOEMwWTATBgcqhkjO +PQIBBggqhkjOPQMBBwNCAAT0PMURtez71TnOX+LOjgn06SVFYCWWBqntBO6VU4/R +d2BiGyYIVlUZwtFMkXa36GxGB1DbilANXo2MueA7QQjzo2YwZDASBgNVHRMBAf8E +CDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUEH9TeRqSz+qtiFfW +8REWRiaVOfAwHwYDVR0jBBgwFoAUEH9TeRqSz+qtiFfW8REWRiaVOfAwCgYIKoZI +zj0EAwIDSAAwRQIhAP1ON6Rt6LEHe+UoLLlmX5LA1y38gT6ij59N04bbXvZqAiBn +OQnyU4sNOn5zqUVFI3V+HyBs0Ro89hKNkjzWzq1w9g== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.der b/credentials/development/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.der new file mode 100644 index 00000000000000..36dca99ce22cd9 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.pem new file mode 100644 index 00000000000000..5039036523762b --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzDCCAXOgAwIBAgIQRr59/poXhxyqM2WzNmpEZzAKBggqhkjOPQQDAjA1MR0w +GwYDVQQDDBRIb29SaWkgTWF0dGVyIFBBQSBHMTEUMBIGCisGAQQBgqJ8AgEMBDEz +NTEwIBcNMjMwMzE2MDg0OTQ0WhgPMzAyMjA3MTcwOTQ5NDRaMDUxHTAbBgNVBAMM +FEhvb1JpaSBNYXR0ZXIgUEFBIEcxMRQwEgYKKwYBBAGConwCAQwEMTM1MTBZMBMG +ByqGSM49AgEGCCqGSM49AwEHA0IABGu+QUB48KWjlQvmqlkrk+PFlgLwd7lhfJ+W +bCMjStSUC1dZXnN/L4SLfRAigweqnZDq4yDfZxGhRnbXIg20jGKjYzBhMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFLcW1z8tZsZ/eIzpwBETOgpaErH1MA4GA1Ud +DwEB/wQEAwIBhjAfBgNVHSMEGDAWgBS3Ftc/LWbGf3iM6cAREzoKWhKx9TAKBggq +hkjOPQQDAgNHADBEAiBPO4TUQTIwX9YZOMtMI1otjqGDrXa3V4DDGpRAv5DGjQIg +UdnJk5rtZFFYg/pH3paCCyPUx9hEsq9+XzyXzBNt+Jo= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_IKEA_of_Sweden_Matter_Test_PAA_vid_0x117C.der b/credentials/development/paa-root-certs/dcld_mirror_CN_IKEA_of_Sweden_Matter_Test_PAA_vid_0x117C.der new file mode 100644 index 00000000000000..cf04c756f4e498 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_IKEA_of_Sweden_Matter_Test_PAA_vid_0x117C.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_IKEA_of_Sweden_Matter_Test_PAA_vid_0x117C.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_IKEA_of_Sweden_Matter_Test_PAA_vid_0x117C.pem new file mode 100644 index 00000000000000..eb30885d4adab8 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_IKEA_of_Sweden_Matter_Test_PAA_vid_0x117C.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB3DCCAYKgAwIBAgIIFflOEA1x730wCgYIKoZIzj0EAwIwPzEnMCUGA1UEAwwe +SUtFQSBvZiBTd2VkZW4gTWF0dGVyIFRlc3QgUEFBMRQwEgYKKwYBBAGConwCAQwE +MTE3QzAgFw0yMzA1MjIxMzAwMDBaGA85OTk5MTIzMTIzNTk1OVowPzEnMCUGA1UE +AwweSUtFQSBvZiBTd2VkZW4gTWF0dGVyIFRlc3QgUEFBMRQwEgYKKwYBBAGConwC +AQwEMTE3QzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLpE/ClS8ZsYRKgSYx8Y +WzaspEJFtz8UDIgbk+REYaeF5qbSTVI9mbtH3sEna4XvxbPjcxxxj/nNdbah3p7C +tt+jZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBT6c/I0BQ9C1Rciju+qbuFKC+Yn9zAfBgNVHSMEGDAWgBT6c/I0BQ9C1Rci +ju+qbuFKC+Yn9zAKBggqhkjOPQQDAgNIADBFAiA/DmTWdAlVGyH/CEDD0oYTDdOt +o866a8MaGU31KLOdugIhAPtSM1PZ+8H+CMhOQPamczksKHZjQiNsKvmJxK5h0ALU +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Kasa_Matter_PAA_vid_0x1391.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Kasa_Matter_PAA_vid_0x1391.der new file mode 100644 index 00000000000000..134fbb01f8fc4a Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Kasa_Matter_PAA_vid_0x1391.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Kasa_Matter_PAA_vid_0x1391.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Kasa_Matter_PAA_vid_0x1391.pem new file mode 100644 index 00000000000000..1578cb8b04636c --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Kasa_Matter_PAA_vid_0x1391.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBvzCCAWSgAwIBAgIIQZCTp/8AkHgwCgYIKoZIzj0EAwIwMDEYMBYGA1UEAwwP +S2FzYSBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM5MTAgFw0yMjExMDMx +NDIzNDNaGA85OTk5MTIzMTIzNTk1OVowMDEYMBYGA1UEAwwPS2FzYSBNYXR0ZXIg +UEFBMRQwEgYKKwYBBAGConwCAQwEMTM5MTBZMBMGByqGSM49AgEGCCqGSM49AwEH +A0IABFcDxlEI/cWsbO5KrwHFCdr5q/LsDk7v8U/6e6BMuHegByEgnavT7A0FqM7f +3rhBFrM6lPzceCuhrLwASsDZcgqjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQ1Z89ZefZaomCA9PHJWq1uiVGdLzAfBgNV +HSMEGDAWgBQ1Z89ZefZaomCA9PHJWq1uiVGdLzAKBggqhkjOPQQDAgNJADBGAiEA +nMzUHVyjTvsLuBycTO4x1cvqNn9yJeHDqrmpBk7SjO0CIQDxjC9RCLIMTjFoOMiT +e2ziOfYvaGnKzXdGQja5pSfmog== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.der new file mode 100644 index 00000000000000..fe7f2f9923eecb Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.pem new file mode 100644 index 00000000000000..96e43d9d35b9b3 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBqDCCAU6gAwIBAgIQF0rI1t9Ic45LCbMNF4Ig3zAKBggqhkjOPQQDAjAhMR8w +HQYDVQQDExZLdWRlbHNraSBNYXR0ZXIgUEFBIDAxMCAXDTIzMDEyNTEzMTkyMVoY +Dzk5OTkxMjMxMjM1OTU5WjAhMR8wHQYDVQQDExZLdWRlbHNraSBNYXR0ZXIgUEFB +IDAxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwU6lHfS8xzeab2fOJgPCq6o8 +7E/oi4EoNS8ntrPSwVzeuZd/szyjSuuhQez8ivkcUBMwYF+7iAjEvYKMIKEVB6Nm +MGQwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYE +FKYHw2B7cVDjYiqwuoiebLw/xVL5MB8GA1UdIwQYMBaAFKYHw2B7cVDjYiqwuoie +bLw/xVL5MAoGCCqGSM49BAMCA0gAMEUCID5hu0qxMVEDtZ46tVZ9cSY1SwuAP4VB +FvxrqRS8y34sAiEA+fpUqi2nQF5Xk4lJwOPg04W32kBrYMiagfESVLZLqPM= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_Test_PAA_01.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_Test_PAA_01.der new file mode 100644 index 00000000000000..ec905c598f9e13 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_Test_PAA_01.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_Test_PAA_01.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_Test_PAA_01.pem new file mode 100644 index 00000000000000..2189c11438d983 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_Test_PAA_01.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBsjCCAVigAwIBAgIQRgSsLyNhMqhGALfzM1CguzAKBggqhkjOPQQDAjAmMSQw +IgYDVQQDExtLdWRlbHNraSBNYXR0ZXIgVGVzdCBQQUEgMDEwIBcNMjMwMjI4MTIz +MjQ2WhgPOTk5OTEyMzEyMzU5NTlaMCYxJDAiBgNVBAMTG0t1ZGVsc2tpIE1hdHRl +ciBUZXN0IFBBQSAwMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOOPj5zLNufR +U1QKtnU0bU1/Yj/uZZ25OQ3HvLDBAtpxbMeNPb320lQCWgksB0Au2UQopGJuHEQk +aEqhP0ZfPnCjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEB +MB0GA1UdDgQWBBRDz3O+gUeiC4Ei69h6HbfGilx2czAfBgNVHSMEGDAWgBRDz3O+ +gUeiC4Ei69h6HbfGilx2czAKBggqhkjOPQQDAgNIADBFAiARH/gy6+IAVaSKeYe+ +Ht4Opiz56ck1cfZXIQ4QdZVk0AIhAN96WWJkrvCfJf5lD5WSZCqXncMKfi11mELj +khR4IHhv +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Kwikset_Matter_Test_PAA_vid_0x1421.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Kwikset_Matter_Test_PAA_vid_0x1421.der new file mode 100644 index 00000000000000..8fb00393462972 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Kwikset_Matter_Test_PAA_vid_0x1421.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Kwikset_Matter_Test_PAA_vid_0x1421.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Kwikset_Matter_Test_PAA_vid_0x1421.pem new file mode 100644 index 00000000000000..ff886b9b043230 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Kwikset_Matter_Test_PAA_vid_0x1421.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBsjCCAVegAwIBAgIRAJnC0tA+L5QzoIwineuTXvwwCgYIKoZIzj0EAwIwODEg +MB4GA1UEAwwXS3dpa3NldCBNYXR0ZXIgVGVzdCBQQUExFDASBgorBgEEAYKifAIB +DAQxNDIxMB4XDTIzMDQxOTE3MDIwMFoXDTI0MDQxODE4MDIwMFowODEgMB4GA1UE +AwwXS3dpa3NldCBNYXR0ZXIgVGVzdCBQQUExFDASBgorBgEEAYKifAIBDAQxNDIx +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAED//Uo3C9Q4xlZEUeAhcKl+HtNDDj +gg9IwI4iOx3YYvn93TymtcAtrPzCiIHzBkmB16pWG0fUDiHt2L3zskmfNaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUYrF33v1anMNdkZCg4PX06ezoS+Ew +DgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA0kAMEYCIQDOits8OE9aPTbQ1xYH +UuycpioMkaptvaGZ2ZDYmLtjSAIhAKes3U/GsZ72mhK7ff5tq6sJAX03eE5cmpCu +DTNRLr/6 +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_LEEDARSON-MATTER-PAA_vid_0x1168.der b/credentials/development/paa-root-certs/dcld_mirror_CN_LEEDARSON-MATTER-PAA_vid_0x1168.der new file mode 100644 index 00000000000000..2a8ac3010cd8b6 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_LEEDARSON-MATTER-PAA_vid_0x1168.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_LEEDARSON-MATTER-PAA_vid_0x1168.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_LEEDARSON-MATTER-PAA_vid_0x1168.pem new file mode 100644 index 00000000000000..e7dfdb13a33b12 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_LEEDARSON-MATTER-PAA_vid_0x1168.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzTCCAXOgAwIBAgIQJVXK8CXBFQX15w1K3uF2UDAKBggqhkjOPQQDAjA1MR0w +GwYDVQQDDBRMRUVEQVJTT04tTUFUVEVSLVBBQTEUMBIGCisGAQQBgqJ8AgEMBDEx +NjgwIBcNMjIxMTA4MDgwNDUwWhgPMjUyMjExMDgwOTA0NTBaMDUxHTAbBgNVBAMM +FExFRURBUlNPTi1NQVRURVItUEFBMRQwEgYKKwYBBAGConwCAQwEMTE2ODBZMBMG +ByqGSM49AgEGCCqGSM49AwEHA0IABMM9d54nEwgCUOdih2ryUPJrqMxqfAoalp0o +KH4+7GX5PPBxt9qRdHHZx8BN++vNXnrQguTq6dKG0i4T9gFmQeGjYzBhMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFHKmOjFumjyuFSmc/46Mx/qzh9GFMA4GA1Ud +DwEB/wQEAwIBhjAfBgNVHSMEGDAWgBRypjoxbpo8rhUpnP+OjMf6s4fRhTAKBggq +hkjOPQQDAgNIADBFAiEAvuDxdzYT3mtHhACHOebgtZXkmhBTnWsuXhWg8UZslJ8C +IAoeQhjElDIVP8gUvj0ziX7SpK9i/DNlYaBrUWQ3iB0U +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_LGE_Matter_Test_PAA__vid_0x102E_vid_0x102E.der b/credentials/development/paa-root-certs/dcld_mirror_CN_LGE_Matter_Test_PAA__vid_0x102E_vid_0x102E.der new file mode 100644 index 00000000000000..d9585e2bf1f509 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_LGE_Matter_Test_PAA__vid_0x102E_vid_0x102E.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_LGE_Matter_Test_PAA__vid_0x102E_vid_0x102E.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_LGE_Matter_Test_PAA__vid_0x102E_vid_0x102E.pem new file mode 100644 index 00000000000000..ba6e69a499fd6e --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_LGE_Matter_Test_PAA__vid_0x102E_vid_0x102E.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB3TCCAYSgAwIBAgIIVEzMeyxCyT0wCgYIKoZIzj0EAwIwQDEoMCYGA1UEAwwf +TEdFIE1hdHRlciBUZXN0IFBBQSwgdmlkPTB4MTAyRTEUMBIGCisGAQQBgqJ8AgEM +BDEwMkUwIBcNMjMwMjEzMDAwMDAwWhgPMjI5NjExMjcyMzU5NTlaMEAxKDAmBgNV +BAMMH0xHRSBNYXR0ZXIgVGVzdCBQQUEsIHZpZD0weDEwMkUxFDASBgorBgEEAYKi +fAIBDAQxMDJFMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7DONCnddZC9Dkmfk +DovQ/cG3GI7fqwgAI6q4OFr5Ae5NkXvx2r7jCeV3EoXVWb/vV2jEQp9Ml4C/Su18 +IcOVnaNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE6MxY9NCkupe7NqlHgJwNz8JQHVMB8GA1UdIwQYMBaAFE6MxY9NCkup +e7NqlHgJwNz8JQHVMAoGCCqGSM49BAMCA0cAMEQCIC24sGvLyGSQ1XvFAZaEZ1WA +NJ6yJZW4XeeWEXveG+AlAiAM1CGGyOMswyjbZrNL7+cDyB1b22QXlyduLCI9mtZs +Jg== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Legrand_Group_Matter_PAA_vid_0x1021.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Legrand_Group_Matter_PAA_vid_0x1021.der new file mode 100644 index 00000000000000..e8b9ed7e981c09 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Legrand_Group_Matter_PAA_vid_0x1021.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Legrand_Group_Matter_PAA_vid_0x1021.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Legrand_Group_Matter_PAA_vid_0x1021.pem new file mode 100644 index 00000000000000..347ced27f3f81b --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Legrand_Group_Matter_PAA_vid_0x1021.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB3DCCAYKgAwIBAgIUVyXsUE9uwOsz3WIzCwpjyxHpuRowCgYIKoZIzj0EAwIw +OTEhMB8GA1UEAwwYTGVncmFuZCBHcm91cCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGC +onwCAQwEMTAyMTAgFw0yMjEwMTExODQzMjNaGA8yMDc5MDYwNTIzNTk1OVowOTEh +MB8GA1UEAwwYTGVncmFuZCBHcm91cCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwC +AQwEMTAyMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNxf8IrVTUSMZIC1mO/p +NeEvJxiRi+luZmMCydMzWZ4JTWz5ue96T1HbsTmrn8BCnHz7zwE3d1wuxtEfSoTc +WpyjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB8GA1Ud +IwQYMBaAFAtRB7zeDTBB1iaJGMp9epKGQqHxMB0GA1UdDgQWBBQLUQe83g0wQdYm +iRjKfXqShkKh8TAKBggqhkjOPQQDAgNIADBFAiAX46VlfsA+SgimfSPbrm3EFRrV +6yOCBGcyOQaXWZ9C5wIhANukApPkPni8AEEtZBXcTlahRBIYochPoxeG7dXQOZK0 +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Leviton_PAA_vid_0x109B.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Leviton_PAA_vid_0x109B.der new file mode 100644 index 00000000000000..de608b97680b8e Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Leviton_PAA_vid_0x109B.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Leviton_PAA_vid_0x109B.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Leviton_PAA_vid_0x109B.pem new file mode 100644 index 00000000000000..a3803141bd598a --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Leviton_PAA_vid_0x109B.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBtjCCAVygAwIBAgIIBP4h4RYCMRAwCgYIKoZIzj0EAwIwLDEUMBIGA1UEAwwL +TGV2aXRvbiBQQUExFDASBgorBgEEAYKifAIBDAQxMDlCMCAXDTIwMTIwMTEyMDAw +MFoYDzIwNzIwMzIwMTE1OTU5WjAsMRQwEgYDVQQDDAtMZXZpdG9uIFBBQTEUMBIG +CisGAQQBgqJ8AgEMBDEwOUIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ9Qd9T +8JmqN8a5wH/sdf8JY34NsPOTuroJPTKE+1MyxioXHgnCQXxReVbwPoFqjjC/BoAM +KSQETnG99up9mZ9vo2YwZDASBgNVHRMBAf8ECDAGAQH/AgEBMA4GA1UdDwEB/wQE +AwIBBjAdBgNVHQ4EFgQUjpWxwLYQUZPbQbZr70NOLDiiemcwHwYDVR0jBBgwFoAU +jpWxwLYQUZPbQbZr70NOLDiiemcwCgYIKoZIzj0EAwIDSAAwRQIgMm6kWZJlebL3 +fJUz4VEpGC5bnh9ozY0RhR4Pki7SrJoCIQDISZBPSSKqFc9i74MIToSUW2vVbW6w +OGAuzK6lwnvhtQ== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.der new file mode 100644 index 00000000000000..ec28a7968ee8a6 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.pem new file mode 100644 index 00000000000000..6983f6ee8628c0 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB2zCCAYKgAwIBAgIUbUYhommf/eGmBpGVCftameBnrS0wCgYIKoZIzj0EAwIw +OjEiMCAGA1UEAwwZTG9uZ2FuLmxpbmsgTWF0dGVyIFBBQSAwMTEUMBIGCisGAQQB +gqJ8AgEMBDEzMUYwHhcNMjMwMTEyMTAxMTQ1WhcNMzMwMTA5MTAxMTQ1WjA6MSIw +IAYDVQQDDBlMb25nYW4ubGluayBNYXR0ZXIgUEFBIDAxMRQwEgYKKwYBBAGConwC +AQwEMTMxRjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDdOC+IV2GZJqU8viqtJ +ugH9RYp7m9q8j9Apy0VrdNOpZFJlMsvhWMoCavoiU8uQLetb7cWVP0uxWtngmxT2 +bSmjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBTBIEsJvP4s2mPOm34wgoTLxqJ4RzAfBgNVHSMEGDAWgBTBIEsJvP4s2mPO +m34wgoTLxqJ4RzAKBggqhkjOPQQDAgNHADBEAiBgrbitMHgD7Hj2gwQKSlXj8wUF +d+GiHTrCCA127lb8VQIgBrK/uzjn8vWR5uf1iTShsy0JrIQ/kIjuyL/qF1/otGY= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Lorex_PAA_CN_vid_0x1419.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Lorex_PAA_CN_vid_0x1419.der new file mode 100644 index 00000000000000..5e3a3a2517d18c Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Lorex_PAA_CN_vid_0x1419.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Lorex_PAA_CN_vid_0x1419.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Lorex_PAA_CN_vid_0x1419.pem new file mode 100644 index 00000000000000..d86488f7e347b7 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Lorex_PAA_CN_vid_0x1419.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBuDCCAV6gAwIBAgIIZ4SlRvkMoK8wCgYIKoZIzj0EAwIwLTEVMBMGA1UEAwwM +TG9yZXggUEFBIENOMRQwEgYKKwYBBAGConwCAQwEMTQxOTAgFw0yMzAyMDExMDAw +MDBaGA85OTk5MTIzMTIzNTk1OVowLTEVMBMGA1UEAwwMTG9yZXggUEFBIENOMRQw +EgYKKwYBBAGConwCAQwEMTQxOTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEKB +kkZiz8LNl9mcCVoxEkALKqKfCzFK0SgMgrl+5SAsODyHvCtBxHUieItAzaYeyrOl +NJ49LIDbYvVEkUZXXq2jZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/ +BAQDAgEGMB0GA1UdDgQWBBSoWYgw4G48xskKpbuddyb9n2JlTTAfBgNVHSMEGDAW +gBSoWYgw4G48xskKpbuddyb9n2JlTTAKBggqhkjOPQQDAgNIADBFAiEA1wQR6wTG +jnwO6HItf1ee7EwUjJYjU/+LRR9p7iQl25wCIGaWVTDFb9t3zdJfrCzs9xnKRx/H +HPVIXt0hrjKdsRBx +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.der new file mode 100644 index 00000000000000..1945e372e51b38 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.pem new file mode 100644 index 00000000000000..659757913d14e6 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB0zCCAXigAwIBAgIEEAAACDAKBggqhkjOPQQDAjA8MQswCQYDVQQGEwJDTjEU +MBIGCisGAQQBgqJ8AgEMBDEzM0YxFzAVBgNVBAMMDk1hdHRlciBBU1IgUEFBMCAX +DTIyMTIwODA1NDkyMloYDzIxMjIxMTE0MDU0OTIyWjA8MQswCQYDVQQGEwJDTjEU +MBIGCisGAQQBgqJ8AgEMBDEzM0YxFzAVBgNVBAMMDk1hdHRlciBBU1IgUEFBMFkw +EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmhOGoCqUtvdQvc8380R0/+JMYW7t3Rnu +Hn2jxPOWT4P33OuhT5ql/IW2XqnmVKAff83IeJn0edePIhLW8TR2UqNmMGQwHwYD +VR0jBBgwFoAU7+HwYTN8f14mdv6IU0N9vwO+gMAwEgYDVR0TAQH/BAgwBgEB/wIB +ATAdBgNVHQ4EFgQU7+HwYTN8f14mdv6IU0N9vwO+gMAwDgYDVR0PAQH/BAQDAgEG +MAoGCCqGSM49BAMCA0kAMEYCIQCHXUwKU8mFRyERBBw3vzzuFgobf2B8eqNqBHT5 +v8vpfAIhAO6jpKrVU36J+eiYVI8fc3aqjj0GxhlW6dxL6LDdBTmZ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Certification_and_Testing_CA_O_CSA_vid_0xC5A0.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Certification_and_Testing_CA_O_CSA_vid_0xC5A0.der new file mode 100644 index 00000000000000..3a75a3657b03a6 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Certification_and_Testing_CA_O_CSA_vid_0xC5A0.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Certification_and_Testing_CA_O_CSA_vid_0xC5A0.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Certification_and_Testing_CA_O_CSA_vid_0xC5A0.pem new file mode 100644 index 00000000000000..0cbffacff83ba4 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Certification_and_Testing_CA_O_CSA_vid_0xC5A0.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIICATCCAaegAwIBAgIHY3Nhcm9vdDAKBggqhkjOPQQDAjBSMQwwCgYDVQQKDAND +U0ExLDAqBgNVBAMMI01hdHRlciBDZXJ0aWZpY2F0aW9uIGFuZCBUZXN0aW5nIENB +MRQwEgYKKwYBBAGConwCAQwEQzVBMDAgFw0yMjA3MDcxOTI4MDRaGA8yMTIyMDYx +MzE5MjgwNFowUjEMMAoGA1UECgwDQ1NBMSwwKgYDVQQDDCNNYXR0ZXIgQ2VydGlm +aWNhdGlvbiBhbmQgVGVzdGluZyBDQTEUMBIGCisGAQQBgqJ8AgEMBEM1QTAwWTAT +BgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4SjrDql2+y3IP5iEdPK1IYm/3EaCkkp+t +2GD44nf/wN4fPrYzejSEe1o6BW6ocQ6Td+7t7iUXA/3ZNQEly45Io2YwZDASBgNV +HRMBAf8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUl+Rp0MUE +FMJvxwH3fpR3OQmN9qUwHwYDVR0jBBgwFoAUl+Rp0MUEFMJvxwH3fpR3OQmN9qUw +CgYIKoZIzj0EAwIDSAAwRQIgearlB0fCJ49UoJ6xwKPdlPEopCOL9jVCviODEleI ++mQCIQDvvDCKi7kvj4R4BoFS4BVZGCk4zJ84W4tfTTfu89lRbQ== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_1_O_ubisys_technologies_GmbH_vid_0x10F2.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_1_O_ubisys_technologies_GmbH_vid_0x10F2.der new file mode 100644 index 00000000000000..70bd97aef43fff Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_1_O_ubisys_technologies_GmbH_vid_0x10F2.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_1_O_ubisys_technologies_GmbH_vid_0x10F2.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_1_O_ubisys_technologies_GmbH_vid_0x10F2.pem new file mode 100644 index 00000000000000..c8585a407ff55d --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_1_O_ubisys_technologies_GmbH_vid_0x10F2.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIICBzCCAa6gAwIBAgIQTnUMFODg5jtpD4m9eotV3TAKBggqhkjOPQQDAjBRMSEw +HwYDVQQKDBh1YmlzeXMgdGVjaG5vbG9naWVzIEdtYkgxFjAUBgNVBAMMDU1hdHRl +ciBQQUEgIzExFDASBgorBgEEAYKifAIBDAQxMEYyMCAXDTIyMTEyNTEyNTYxN1oY +Dzk5OTkxMjMxMjM1OTU5WjBRMSEwHwYDVQQKDBh1YmlzeXMgdGVjaG5vbG9naWVz +IEdtYkgxFjAUBgNVBAMMDU1hdHRlciBQQUEgIzExFDASBgorBgEEAYKifAIBDAQx +MEYyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdPTdLt56VwHY8+KZ0MuFI4QQ +LJh7uV0572NtDQJx+riMmyAKt/2w1m9XBbecxhPIkpj9ml+/aaWChJoFQtnUA6Nm +MGQwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FKXRsL+UiUhnmYbXBhFNlIr6h/kCMB8GA1UdIwQYMBaAFKXRsL+UiUhnmYbXBhFN +lIr6h/kCMAoGCCqGSM49BAMCA0cAMEQCIEMl/Ej0pjTjONuPq1Du45cZJpGmUq2l +UZ7zhejPZVWvAiACI2re2e5TA+p3C+l4w2sfn6LWt3W2UsAACJ1bJit/3w== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.der new file mode 100644 index 00000000000000..980a599f3b6eec Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.pem new file mode 100644 index 00000000000000..4db28c632a2459 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB7jCCAZOgAwIBAgIBATAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJVUzEPMA0G +A1UECgwGR29vZ2xlMRUwEwYDVQQDDAxNYXR0ZXIgUEFBIDIxFDASBgorBgEEAYKi +fAIBDAQ2MDA2MCAXDTIyMTIxNTAwMjIzMVoYDzIxMjIxMTIxMDAyMjMxWjBLMQsw +CQYDVQQGEwJVUzEPMA0GA1UECgwGR29vZ2xlMRUwEwYDVQQDDAxNYXR0ZXIgUEFB +IDIxFDASBgorBgEEAYKifAIBDAQ2MDA2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD +QgAEfBavdss9ivpYBX1TrjprN8ur+Mlw79ArbMSsF9yjKJZToX1qU52g530rGMyV +Um4/nSvDSHZLq3Mh/dYlsY57rqNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHq57adv6ctkYnUybdFFCLgA+OHIMB8GA1Ud +IwQYMBaAFHq57adv6ctkYnUybdFFCLgA+OHIMAoGCCqGSM49BAMCA0kAMEYCIQCJ +bSWN3tzLKE37QsmQa9LUUz58TKF8h6Vbx8oKNQDJCgIhAMWZC7jGeR9PMO/dGNJy +/FRDJTm2hVUYrvzOx74YAIew +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Signify_PAA_1_vid_0x100B.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Signify_PAA_1_vid_0x100B.der new file mode 100644 index 00000000000000..582eef1d8c97d6 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Signify_PAA_1_vid_0x100B.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Signify_PAA_1_vid_0x100B.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Signify_PAA_1_vid_0x100B.pem new file mode 100644 index 00000000000000..c86cb93cc7660d --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Signify_PAA_1_vid_0x100B.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBrTCCAVOgAwIBAgIRAPoJEqfBRt1UehNPUgdd+AYwCgYIKoZIzj0EAwIwNTEd +MBsGA1UEAwwUTWF0dGVyIFNpZ25pZnkgUEFBIDExFDASBgorBgEEAYKifAIBDAQx +MDBCMCAXDTIyMTIwNzE0MDMxMVoYDzk5OTkxMjMxMjM1OTU5WjA1MR0wGwYDVQQD +DBRNYXR0ZXIgU2lnbmlmeSBQQUEgMTEUMBIGCisGAQQBgqJ8AgEMBDEwMEIwWTAT +BgcqhkjOPQIBBggqhkjOPQMBBwNCAARnPmL7AcztXBr4UhQcu6Y2EHzCPbNmJtyz +v1hjHQpYNv9k3MmVihOgBTqc4cUoyiYHpyILqbx/I68sQNkN4H29o0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQQ3kVZvKqAgoZ4ecCaf47sioh+9zAOBgNV +HQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwIDSAAwRQIgN6ZuBdfkHctkuLAn4kbGM+O+ +sEUneAk1cFzwKQpL0ZkCIQCykokHD3R5+0+ZGLtXkjCKqRVEX62YklSjJ7HRJa9c +7g== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.der new file mode 100644 index 00000000000000..9d6fa54a028993 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.pem new file mode 100644 index 00000000000000..3b3d13da8cc0a3 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB2DCCAX2gAwIBAgIQIgzBEIyd2pBoydOAodEFUzAKBggqhkjOPQQDAjA6MSIw +IAYDVQQDDBlNYXR0ZXIgVWFzY2VudCBQQUEgMHgxNDAwMRQwEgYKKwYBBAGConwC +AQwEMTQwMDAgFw0yMzAyMjQwMjEwMjJaGA8yMTIzMDEzMTAzMTAyMlowOjEiMCAG +A1UEAwwZTWF0dGVyIFVhc2NlbnQgUEFBIDB4MTQwMDEUMBIGCisGAQQBgqJ8AgEM +BDE0MDAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQGF1kPgQS3bN15r7TGypBU +kbVb3rENZJT+Yd1/XghtNsdn16aWuGfbfciNYrYHH3BowOjdDEa7Pg4WslzbQbxI +o2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQwg3mJZOCTqLJZ/rbDeAlu +JWhOmjAOBgNVHQ8BAf8EBAMCAYYwHwYDVR0jBBgwFoAUMIN5iWTgk6iyWf62w3gJ +biVoTpowCgYIKoZIzj0EAwIDSQAwRgIhAKgXdJqN0msFakfGusUP5rXtjspITudq +Gq+JB3u3WCcxAiEAx65fSjfiRle2djpp8SunICvCAkVKa386AdSKcXxlCRI= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Meizu_PAA_vid_0x1398.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Meizu_PAA_vid_0x1398.der new file mode 100644 index 00000000000000..8b2f41875d8e80 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Meizu_PAA_vid_0x1398.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Meizu_PAA_vid_0x1398.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Meizu_PAA_vid_0x1398.pem new file mode 100644 index 00000000000000..792d0d903d165b --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Meizu_PAA_vid_0x1398.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBsjCCAVigAwIBAgIIL54t0Efq7zwwCgYIKoZIzj0EAwIwKjESMBAGA1UEAwwJ +TWVpenUgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM5ODAgFw0yMzAyMDExNDIzNDNa +GA85OTk5MTIzMTIzNTk1OVowKjESMBAGA1UEAwwJTWVpenUgUEFBMRQwEgYKKwYB +BAGConwCAQwEMTM5ODBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNGnLcPDgdrP +PH4Vbu1T61vYqlW8pEkWd6OJ9X+5vYQR7LlawVOg2hjVaG7b712AXlahz+2K0CKC +JJy0gPXrGOSjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQqJKRaN+obNEFCOz8Ub8vdMwxUUzAfBgNVHSMEGDAWgBQqJKRa +N+obNEFCOz8Ub8vdMwxUUzAKBggqhkjOPQQDAgNIADBFAiAw/XQ8Inb7A6mAg3QY ++VDoA61btiJ4XLCoTrTfJBYTWQIhAOHSBqAPIAV+zWfMUCbE//0R1L4qONPx5gow +LKFBpcEf +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Meross_Matter_PAA_vid_0x1345.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Meross_Matter_PAA_vid_0x1345.der new file mode 100644 index 00000000000000..e3adb2e269f409 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Meross_Matter_PAA_vid_0x1345.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Meross_Matter_PAA_vid_0x1345.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Meross_Matter_PAA_vid_0x1345.pem new file mode 100644 index 00000000000000..3896aff3f51a7c --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Meross_Matter_PAA_vid_0x1345.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBwTCCAWigAwIBAgIIEy+0SI9K220wCgYIKoZIzj0EAwIwMjEaMBgGA1UEAwwR +TWVyb3NzIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxMzQ1MCAXDTIyMTEw +MTAwMDAwMFoYDzIxMjIxMDA3MjM1OTU5WjAyMRowGAYDVQQDDBFNZXJvc3MgTWF0 +dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzNDUwWTATBgcqhkjOPQIBBggqhkjO +PQMBBwNCAARv1gvpF64D9mmepNE2vdKg2NS1CWrVnl9Ol5cEFTxDNsfv2vELo9lY +20tqtA29vmxnw0i0ca0QgW0HjjjbDQoro2YwZDASBgNVHRMBAf8ECDAGAQH/AgEB +MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUQJdGpD1+8VG2zdignqR2+pvfdWMw +HwYDVR0jBBgwFoAUQJdGpD1+8VG2zdignqR2+pvfdWMwCgYIKoZIzj0EAwIDRwAw +RAIgXDpmGQ3lC1TOwzgFE3kajyNCcb2jc8yL8CrWrfln+sMCIHBvg6KH7X52m7nT +ri9So5ut4XgTf3Mm5oPzEYnl+2c+ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Midea_Group_Matter_PAA_G1_Prod_vid_0x118C.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Midea_Group_Matter_PAA_G1_Prod_vid_0x118C.der new file mode 100644 index 00000000000000..bb14e504ff7123 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Midea_Group_Matter_PAA_G1_Prod_vid_0x118C.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Midea_Group_Matter_PAA_G1_Prod_vid_0x118C.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Midea_Group_Matter_PAA_G1_Prod_vid_0x118C.pem new file mode 100644 index 00000000000000..319501a70be056 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Midea_Group_Matter_PAA_G1_Prod_vid_0x118C.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB3jCCAYOgAwIBAgIJHNpcgyVSU4SYMAoGCCqGSM49BAMCMD8xJzAlBgNVBAMM +Hk1pZGVhIEdyb3VwIE1hdHRlciBQQUEgRzEgUHJvZDEUMBIGCisGAQQBgqJ8AgET +BDExOEMwIBcNMjIxMDMxMTYwMDAwWhgPOTk5OTEyMzEyMzU5NTlaMD8xJzAlBgNV +BAMMHk1pZGVhIEdyb3VwIE1hdHRlciBQQUEgRzEgUHJvZDEUMBIGCisGAQQBgqJ8 +AgETBDExOEMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASkFR7fS3Hfde4xru2n +E0XNQHjhBXLTzksZZ0DmDheY9AjyIElwzwLEr6UTcMJV9LLzKNiHfbMaJjBQ5kd7 +SuMqo2YwZDASBgNVHRMBAf8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUqV7nxHJ/ZGOlKUhAVQzor2JfMREwHwYDVR0jBBgwFoAUqV7nxHJ/ZGOl +KUhAVQzor2JfMREwCgYIKoZIzj0EAwIDSQAwRgIhAKsAXPqJk7j6V+7Ud4J7lq6h +JrJbypaJSCx0C4ZIpv7RAiEAgFHjdOwkBIifJjgh2ENpgLCbVALwCN1JFxTzx0X2 +7d8= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_ORVIBO_Matter_Test_PAA_vid_0x1219.der b/credentials/development/paa-root-certs/dcld_mirror_CN_ORVIBO_Matter_Test_PAA_vid_0x1219.der new file mode 100644 index 00000000000000..692e17b35db824 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_ORVIBO_Matter_Test_PAA_vid_0x1219.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_ORVIBO_Matter_Test_PAA_vid_0x1219.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_ORVIBO_Matter_Test_PAA_vid_0x1219.pem new file mode 100644 index 00000000000000..13ff93d4632e06 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_ORVIBO_Matter_Test_PAA_vid_0x1219.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByzCCAXKgAwIBAgIIXahA4LDaKu0wCgYIKoZIzj0EAwIwNzEfMB0GA1UEAwwW +T1JWSUJPIE1hdHRlciBUZXN0IFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEyMTkwIBcN +MjMwNDEyMDkzMDAwWhgPOTk5OTEyMzEyMzU5NTlaMDcxHzAdBgNVBAMMFk9SVklC +TyBNYXR0ZXIgVGVzdCBQQUExFDASBgorBgEEAYKifAIBDAQxMjE5MFkwEwYHKoZI +zj0CAQYIKoZIzj0DAQcDQgAEklwJ5gtZAPJXuXlGxeFoED9kMJGCPh7vWnd/muk9 +CDXD4Xy7vMSp2xMkUjmPj7R0S5OCEcKTJiR2Sn0KQdf5QqNmMGQwEgYDVR0TAQH/ +BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFOEaCQgcm3Pf37An +aHtCMTWFO5pVMB8GA1UdIwQYMBaAFOEaCQgcm3Pf37AnaHtCMTWFO5pVMAoGCCqG +SM49BAMCA0cAMEQCIEA+KzFUcRhl2tNkj5s36QjlJgQfe8nrVajZ9TM856TYAiAC +CUAB54ZfaEEyJcK8cmzEid0lB9jxze4lfsZT3OwYdw== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.der b/credentials/development/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.der new file mode 100644 index 00000000000000..8c2c3e5947e0ff Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.pem new file mode 100644 index 00000000000000..4f1efc399b642e --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBvTCCAWOgAwIBAgIRALR5sevvUSe9RFYCEgeDQzswCgYIKoZIzj0EAwIwPTET +MBEGA1UEAwwKUGFuS29yZVBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzMTYxEDAOBgNV +BAoMB1BhbktvcmUwIBcNMjMwNDE0MDUxOTI4WhgPMjEyMzAzMjEwNjE5MjhaMD0x +EzARBgNVBAMMClBhbktvcmVQQUExFDASBgorBgEEAYKifAIBDAQxMzE2MRAwDgYD +VQQKDAdQYW5Lb3JlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAES5EuELIS1Fr/ +FHhVUN2VVT1P+A7BjHwDKryrB8KBAX63m2cKnc8XiGqlgLISO7L26n7MYE4I4JcB +v844aPg03aNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVotIfZ/3up+G ++Xbv4a15BDNXq8MwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA0gAMEUCIEwO +wv9LR2IiYBmLqsaH+CSmTC1hpHK/Mxtnr3zHlRYYAiEA5l2A0iXoIPqCxN+yxKVy +hXP8m8zUz5JEdZR+BlrFLgU= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.der new file mode 100644 index 00000000000000..7ac6b1dddaf697 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.pem new file mode 100644 index 00000000000000..b0e30b457cb860 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByDCCAW6gAwIBAgIRAJjDAv4UCH2aIjBKyRuyE40wCgYIKoZIzj0EAwIwMjEa +MBgGA1UEAwwRUGhhdGVuIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxNDA0 +MCAXDTIzMDIwNjA0NDA1MVoYDzIyMjMxMjMxMjM1OTU5WjAyMRowGAYDVQQDDBFQ +aGF0ZW4gTWF0dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDE0MDQwWTATBgcqhkjO +PQIBBggqhkjOPQMBBwNCAAQARiZDxeEXWhJxOhqVex88/53FmxWqrqWCqfZynZS3 +BGXktXGGWIekPfkw/2l+7Kmt5pNJvEm7f2QPNpaWcL6vo2MwYTAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBSZIOhVuLRljx/ei3gvCbIcRbFBtzAOBgNVHQ8BAf8E +BAMCAYYwHwYDVR0jBBgwFoAUmSDoVbi0ZY8f3ot4LwmyHEWxQbcwCgYIKoZIzj0E +AwIDSAAwRQIhAJpLjv9zOxLKWcByT3AZjqmyq/SdfRa3B3aRfV5pWV6jAiAvnEtC +qHC2NiNvTKHtR0IzLzZJcCN1gNS8PWE7dgPy+g== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Prime_PAA_vid_0x1381.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Prime_PAA_vid_0x1381.der new file mode 100644 index 00000000000000..e170a9d793a6c7 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Prime_PAA_vid_0x1381.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Prime_PAA_vid_0x1381.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Prime_PAA_vid_0x1381.pem new file mode 100644 index 00000000000000..23e245be88394f --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Prime_PAA_vid_0x1381.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBuDCCAV6gAwIBAgIRAPp8t3DW0qJfh6CY0/RA7a4wCgYIKoZIzj0EAwIwKjES +MBAGA1UEAwwJUHJpbWUgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM4MTAgFw0yMjEy +MjExNzExNDdaGA8yMTIyMTEyNzE4MTE0N1owKjESMBAGA1UEAwwJUHJpbWUgUEFB +MRQwEgYKKwYBBAGConwCAQwEMTM4MTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA +BDJJ3y8N0AoGu1DvdNqz/zjyV/jhrkwb8jRhJw7ZwhutsZFCsHzZWz1lQZpVcF7/ +rt6aKjSzBkjMJ1ufAQfi/iajYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FOe5kbucntBhp8ub8YhkShVjwk4rMA4GA1UdDwEB/wQEAwIBhjAfBgNVHSMEGDAW +gBTnuZG7nJ7QYafLm/GIZEoVY8JOKzAKBggqhkjOPQQDAgNIADBFAiEA/Xmfa+Ep +VXkNumbQc5hNJ+UwIimsixaVJFo2nLXVhpICIHFLRTaZHOrElMkyO1i06xXg9Kc+ +ACaL+HKmXiXy94JL +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_QDhisense_Test_PAA_vid_0x138C.der b/credentials/development/paa-root-certs/dcld_mirror_CN_QDhisense_Test_PAA_vid_0x138C.der new file mode 100644 index 00000000000000..0b294897ad7300 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_QDhisense_Test_PAA_vid_0x138C.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_QDhisense_Test_PAA_vid_0x138C.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_QDhisense_Test_PAA_vid_0x138C.pem new file mode 100644 index 00000000000000..bb90ea5652f4c1 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_QDhisense_Test_PAA_vid_0x138C.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBxTCCAWqgAwIBAgIIW3/x5c8jVwIwCgYIKoZIzj0EAwIwMzEbMBkGA1UEAwwS +UURoaXNlbnNlIFRlc3QgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM4QzAgFw0yMzA1 +MjMxMDE0MDVaGA85OTk5MTIzMTIzNTk1OVowMzEbMBkGA1UEAwwSUURoaXNlbnNl +IFRlc3QgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM4QzBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABMl5YoORvXPcCwh8KV/WRdGS6vuekbJficrCEn3DTJsfHeTLuRii +3uSeS76dji3KJ+dYmXpu86JEb8Fqup7mvE+jZjBkMBIGA1UdEwEB/wQIMAYBAf8C +AQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTHpAvJ050XHkrXyAnmUEyIVtcZ +dzAfBgNVHSMEGDAWgBTHpAvJ050XHkrXyAnmUEyIVtcZdzAKBggqhkjOPQQDAgNJ +ADBGAiEAmYBizbAAtCpDMnw4ga2HAdcXfkLdYmSqB6Jm/kYj7mACIQDNK5Od93KR +3iJGblbUn8jq5xeVzFihO2sUJu7erBKkPA== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.der new file mode 100644 index 00000000000000..cd76bfcce5c32a Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.pem new file mode 100644 index 00000000000000..0b9fe29404930f --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByjCCAXCgAwIBAgIRALmDRJO1vv31wcqYjJYpxZQwCgYIKoZIzj0EAwIwMzEb +MBkGA1UEAwwSUWlhbnlhbiBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM4 +NzAgFw0yMzAzMTQwODIyNDRaGA85OTk5MTIzMTIzNTk1OVowMzEbMBkGA1UEAwwS +UWlhbnlhbiBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM4NzBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABAV999uorscml0N9OlulWuvb+6d06vsjmpwKPQd5 +mpaayy4f6ODdbycnNhHUZqxP4jQL8CLk509zlJCyTvX4f16jYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFDCn/GzW+lrLgn93bjJiB2u4EeQpMA4GA1UdDwEB +/wQEAwIBhjAfBgNVHSMEGDAWgBQwp/xs1vpay4J/d24yYgdruBHkKTAKBggqhkjO +PQQDAgNIADBFAiBo6kBk1wcJjH4XYaR6cPOrCOXmbTPk20EzfoaLrXXtrgIhANmh +IEohtRvlb6URoKv1v3jwfzATeqLNY2eLKBmQjUN8 +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.der new file mode 100644 index 00000000000000..a8e2fad2130542 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.pem new file mode 100644 index 00000000000000..6261addd938c7c --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB0DCCAXagAwIBAgIUSNDkSyf+uIE4cOtbUuqYbyoZm04wCgYIKoZIzj0EAwIw +MzEbMBkGA1UEAwwSUXVlY3RlbCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwE +MTQxMDAgFw0yMzAzMDEwNTIwMDZaGA85OTk5MTIzMTA1MjAwNlowMzEbMBkGA1UE +AwwSUXVlY3RlbCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTQxMDBZMBMG +ByqGSM49AgEGCCqGSM49AwEHA0IABPVapB0WnCRdF8JOm6sVjFaklJO9LguJljDA +wUlj8/udIxdOJ4r3aWcGhLzVsyj2vbrB1A+7eoq+zMLJ+lRAciOjZjBkMB0GA1Ud +DgQWBBTYzvSYQKNboQDcO+eGtUzaOH4lAjAfBgNVHSMEGDAWgBTYzvSYQKNboQDc +O+eGtUzaOH4lAjASBgNVHRMBAf8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAgNIADBFAiEA/+yF17n4XG81nLtV4CP0MWYppGAdN24AipnRdMza +AIECIFqMfQfNGQGejFSeyaWlhKTsYH5iJ2UdyUmHfKzg3FZV +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.der new file mode 100644 index 00000000000000..9aec36a9f66d06 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.pem new file mode 100644 index 00000000000000..9e74ebb26d4dd5 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBwjCCAWigAwIBAgIIMnjf1jSe7A4wCgYIKoZIzj0EAwIwMjEaMBgGA1UEAwwR +UmFmYWVsIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxMzQ2MCAXDTIzMDIy +MjAwMDAwMFoYDzIxMjMwMTI4MjM1OTU5WjAyMRowGAYDVQQDDBFSYWZhZWwgTWF0 +dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzNDYwWTATBgcqhkjOPQIBBggqhkjO +PQMBBwNCAATLDTcieWh6NPzh2K5geCxrrKxV/a/TthvTyDiLa5oUS/M7Wt08l85V +lYXPhiiidthGI1rCPsYCPgqul0EW/GeYo2YwZDASBgNVHRMBAf8ECDAGAQH/AgEB +MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxPfh1bv5nf/R7gF21WgnjOibIBcw +HwYDVR0jBBgwFoAUxPfh1bv5nf/R7gF21WgnjOibIBcwCgYIKoZIzj0EAwIDSAAw +RQIgQH90HCbluBm/JPRrkwEmVH1NpzV//gAQwj4A+MROoZgCIQCTKGMkpEd0AUM6 +BeCqOjan+OEarNXoqoOgUaX0rJcY8Q== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Test_PAA_vid_0x1346.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Test_PAA_vid_0x1346.der new file mode 100644 index 00000000000000..f4cd645aadd0ff Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Test_PAA_vid_0x1346.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Test_PAA_vid_0x1346.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Test_PAA_vid_0x1346.pem new file mode 100644 index 00000000000000..1f44f6469a5acf --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Rafael_Test_PAA_vid_0x1346.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBvTCCAWSgAwIBAgIIcl/D7qyjsRUwCgYIKoZIzj0EAwIwMDEYMBYGA1UEAwwP +UmFmYWVsIFRlc3QgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM0NjAgFw0yMzAyMjIw +MDAwMDBaGA8yMTIzMDEyODIzNTk1OVowMDEYMBYGA1UEAwwPUmFmYWVsIFRlc3Qg +UEFBMRQwEgYKKwYBBAGConwCAQwEMTM0NjBZMBMGByqGSM49AgEGCCqGSM49AwEH +A0IABFc7hPLv8B5PI5s5CQ/WYkOWwPyIYctILelqSUzGfW7xmrn9ZtnQ7vLt97WY +u/ZsoXvEa3ytjDJfiuNYAtHaL+yjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSOI2YNiJjRfOthopyrkeoNmYu8FDAfBgNV +HSMEGDAWgBSOI2YNiJjRfOthopyrkeoNmYu8FDAKBggqhkjOPQQDAgNHADBEAiBz +ooG/wy//a+iqRrr4hbGshe8UYQxQ64pEYgCDiNVtNAIgV5PCy2kqwDtgSCaJVtBd +BSEbsFus8H2KPj/2ork9a/k= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Schneider_Matter_Test_PAA_vid_0x105E.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Schneider_Matter_Test_PAA_vid_0x105E.der new file mode 100644 index 00000000000000..13828f51ba90ec Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Schneider_Matter_Test_PAA_vid_0x105E.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Schneider_Matter_Test_PAA_vid_0x105E.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Schneider_Matter_Test_PAA_vid_0x105E.pem new file mode 100644 index 00000000000000..90d7963f2906eb --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Schneider_Matter_Test_PAA_vid_0x105E.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB0jCCAXigAwIBAgIIZhfZDR0rSfowCgYIKoZIzj0EAwIwOjEiMCAGA1UEAwwZ +U2NobmVpZGVyIE1hdHRlciBUZXN0IFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEwNUUw +IBcNMjMwMjIzMTAwMDAwWhgPOTk5OTEyMzEyMzU5NTlaMDoxIjAgBgNVBAMMGVNj +aG5laWRlciBNYXR0ZXIgVGVzdCBQQUExFDASBgorBgEEAYKifAIBDAQxMDVFMFkw +EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuZd6smH9hIAz2hOkDe1gxx/JvwCAY/Xj +HcGh92P0O3lDoZTHV4obCsKQyb1RS0kHnhvsO8g7ByqexQhYo5ug16NmMGQwEgYD +VR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHNcZmYP +SE8y90bnDzymhxPNjL8bMB8GA1UdIwQYMBaAFHNcZmYPSE8y90bnDzymhxPNjL8b +MAoGCCqGSM49BAMCA0gAMEUCIB55mPdNuTn0KKmm8N1lK6CcrQSKf3rCBMTFIr8+ +2AliAiEAjeQw7Hs+tVw5gjZva90NaFHUZRJ1S983mg6M0nxDJxk= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Sengled_Matter_PAA_vid_0x1160.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Sengled_Matter_PAA_vid_0x1160.der new file mode 100644 index 00000000000000..63ce01d106293b Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Sengled_Matter_PAA_vid_0x1160.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Sengled_Matter_PAA_vid_0x1160.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Sengled_Matter_PAA_vid_0x1160.pem new file mode 100644 index 00000000000000..885056c9a77350 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Sengled_Matter_PAA_vid_0x1160.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBqDCCAU6gAwIBAgIQaVnpV7d9umB4dm0aORnqpDAKBggqhkjOPQQDAjAzMRsw +GQYDVQQDDBJTZW5nbGVkIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxMTYw +MCAXDTIyMTIyODA3NDA0N1oYDzIwNTIxMjI4MDg0MTAzWjAzMRswGQYDVQQDDBJT +ZW5nbGVkIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxMTYwMFkwEwYHKoZI +zj0CAQYIKoZIzj0DAQcDQgAEXp+xXQ144JichnUkcPlLvge/CYh1phyiqLNY4cnS +GPGesd09HqXufT7yHsQV6ajICocsW8GWnH84FP+AntMLOKNCMEAwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUD9nH1i8cU0+V9Q9RUg+7AHW1kpAwDgYDVR0PAQH/ +BAQDAgGGMAoGCCqGSM49BAMCA0gAMEUCIE7cEn6mE7IiiWGw7ZJajo50jfFGupei +Hb5v7ko0QAyvAiEA3PD5vJhIUIuF1H2UyOMz8nTzOc24yS56/epUBwisS6w= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_StrongKey_Matter_G1_PAA_O_StrongKey.der b/credentials/development/paa-root-certs/dcld_mirror_CN_StrongKey_Matter_G1_PAA_O_StrongKey.der new file mode 100644 index 00000000000000..1b667f2a11c038 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_StrongKey_Matter_G1_PAA_O_StrongKey.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_StrongKey_Matter_G1_PAA_O_StrongKey.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_StrongKey_Matter_G1_PAA_O_StrongKey.pem new file mode 100644 index 00000000000000..3700677aa18fed --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_StrongKey_Matter_G1_PAA_O_StrongKey.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB1DCCAXygAwIBAgIUc2o+vqQtP7EOoBw7/O0Wpob9HWUwCgYIKoZIzj0EAwIw +NjEgMB4GA1UEAwwXU3Ryb25nS2V5IE1hdHRlciBHMSBQQUExEjAQBgNVBAoMCVN0 +cm9uZ0tleTAgFw0yMjA5MTMyMTIyMzVaGA85OTk5MTIzMTIzNTk1OVowNjEgMB4G +A1UEAwwXU3Ryb25nS2V5IE1hdHRlciBHMSBQQUExEjAQBgNVBAoMCVN0cm9uZ0tl +eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEqgWEHD/XHc8QXOrtjCZn6x34i1 +l/vM1nYVdGfNT7HGQojTd3TMjKWQppKcTnl7pN6ua3XmuJQCm/RekenBvcujZjBk +MBIGA1UdEwEB/wQIMAYBAf8CAQEwHwYDVR0jBBgwFoAUN04pWsVRcwuvZdUpg5tO +4J05WIowHQYDVR0OBBYEFDdOKVrFUXMLr2XVKYObTuCdOViKMA4GA1UdDwEB/wQE +AwIBBjAKBggqhkjOPQQDAgNGADBDAh8a5dw6CObybMr8nqaou9lv9PqPbj3DSd+c +yQm19Mg7AiAVcSK0RXTwLjAef55gWgq7SBRM/u3f3nRV/fvCYgWZfA== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Sunricher_PAA_CN_vid_0x1224.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Sunricher_PAA_CN_vid_0x1224.der new file mode 100644 index 00000000000000..298b0d16f2a861 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Sunricher_PAA_CN_vid_0x1224.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Sunricher_PAA_CN_vid_0x1224.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Sunricher_PAA_CN_vid_0x1224.pem new file mode 100644 index 00000000000000..09f0b76d3575a8 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Sunricher_PAA_CN_vid_0x1224.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBvzCCAWagAwIBAgIICcLeHOZeSPcwCgYIKoZIzj0EAwIwMTEZMBcGA1UEAwwQ +U3VucmljaGVyIFBBQSBDTjEUMBIGCisGAQQBgqJ8AgEMBDEyMjQwIBcNMjMwNDEy +MDAwMDAwWhgPOTk5OTEyMzEyMzU5NTlaMDExGTAXBgNVBAMMEFN1bnJpY2hlciBQ +QUEgQ04xFDASBgorBgEEAYKifAIBDAQxMjI0MFkwEwYHKoZIzj0CAQYIKoZIzj0D +AQcDQgAEnlz9eoL7Mn4W61OUVsInkxIZ5nLydIha84BSJhra2Yos7DvdtKF0eejx +AQ0Rs9cTA40qAuekflTV2jH2F65A4qNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBATAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAxRbKEwrweSMMrbrBobG8npAD2bMB8G +A1UdIwQYMBaAFAxRbKEwrweSMMrbrBobG8npAD2bMAoGCCqGSM49BAMCA0cAMEQC +IFse5zdkqKqSq1NQENKFCRyJoJ1IWln/q5ohKV86pHQVAiBwjFXgIDJw1qqmS7ZE +0a77G9qFUIXsyrb+H3bHY+T5iQ== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_SwitchBot_Test_PAA_01_vid_0x1397.der b/credentials/development/paa-root-certs/dcld_mirror_CN_SwitchBot_Test_PAA_01_vid_0x1397.der new file mode 100644 index 00000000000000..f28da72b3942bb Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_SwitchBot_Test_PAA_01_vid_0x1397.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_SwitchBot_Test_PAA_01_vid_0x1397.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_SwitchBot_Test_PAA_01_vid_0x1397.pem new file mode 100644 index 00000000000000..e212d4cbb7265a --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_SwitchBot_Test_PAA_01_vid_0x1397.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByTCCAW6gAwIBAgIIewPVbbhPCzQwCgYIKoZIzj0EAwIwNjEeMBwGA1UEAwwV +U3dpdGNoQm90IFRlc3QgUEFBIDAxMRQwEgYKKwYBBAGConwCAQwEMTM5NzAeFw0y +MzAyMDEwMDAwMDBaFw00MzAxMzEyMzU5NTlaMDYxHjAcBgNVBAMMFVN3aXRjaEJv +dCBUZXN0IFBBQSAwMTEUMBIGCisGAQQBgqJ8AgEMBDEzOTcwWTATBgcqhkjOPQIB +BggqhkjOPQMBBwNCAATL3inkvt3Tdt+BYiB3hnSkye5ywivDb9lRPI4etnYrX/Ol +gYjJ/lW/CQgAsGVHB/DROmWa2Jf9qiC8wPhSoxuEo2YwZDASBgNVHRMBAf8ECDAG +AQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUNaojYdWa9fMyAREl02KP +/j7GunUwHwYDVR0jBBgwFoAUNaojYdWa9fMyAREl02KP/j7GunUwCgYIKoZIzj0E +AwIDSQAwRgIhAPIDEyoTE+ZsSkvHGRNIsSirbsMoDKRLYVwQ/JZwuaH+AiEA6NyE +6KZyx5Vkmv2c25ZwBgMEx/1SBMHOuujWZoY0zT0= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_TP-Link_Matter_PAA_vid_0x1188.der b/credentials/development/paa-root-certs/dcld_mirror_CN_TP-Link_Matter_PAA_vid_0x1188.der new file mode 100644 index 00000000000000..d1a4731c9449af Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_TP-Link_Matter_PAA_vid_0x1188.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_TP-Link_Matter_PAA_vid_0x1188.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_TP-Link_Matter_PAA_vid_0x1188.pem new file mode 100644 index 00000000000000..7be97c676bc32d --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_TP-Link_Matter_PAA_vid_0x1188.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBxDCCAWqgAwIBAgIICmgdKV4p8FgwCgYIKoZIzj0EAwIwMzEbMBkGA1UEAwwS +VFAtTGluayBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTE4ODAgFw0yMjEw +MTYxNDIzNDNaGA85OTk5MTIzMTIzNTk1OVowMzEbMBkGA1UEAwwSVFAtTGluayBN +YXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTE4ODBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABBthPNrOBLxk1aUHRQ0qNpp5jxrxD0IYU2VrkqPao+N5W8yXX0co +Ye5mQRUoKx/1auDoaKu56CgtKFbP7sHTsoCjZjBkMBIGA1UdEwEB/wQIMAYBAf8C +AQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTFhTFBnuA+5KHc9VHgNEDcK77C +CjAfBgNVHSMEGDAWgBTFhTFBnuA+5KHc9VHgNEDcK77CCjAKBggqhkjOPQQDAgNI +ADBFAiAPczAEcWoN58U17EoNmiFaBzDo1OknOOnJJ7ooAaSWcQIhAPOWwghDzToJ +FGEBvcYtYdEgv9Za5uwKYfQt9J4/loDc +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Tapo_Matter_PAA_vid_0x1392.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Tapo_Matter_PAA_vid_0x1392.der new file mode 100644 index 00000000000000..2c16b00dd3fa84 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Tapo_Matter_PAA_vid_0x1392.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Tapo_Matter_PAA_vid_0x1392.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Tapo_Matter_PAA_vid_0x1392.pem new file mode 100644 index 00000000000000..cddbb0f87b3d6f --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Tapo_Matter_PAA_vid_0x1392.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBvzCCAWSgAwIBAgIIMDmv+XzHSXUwCgYIKoZIzj0EAwIwMDEYMBYGA1UEAwwP +VGFwbyBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM5MjAgFw0yMjExMDMx +NDIzNDNaGA85OTk5MTIzMTIzNTk1OVowMDEYMBYGA1UEAwwPVGFwbyBNYXR0ZXIg +UEFBMRQwEgYKKwYBBAGConwCAQwEMTM5MjBZMBMGByqGSM49AgEGCCqGSM49AwEH +A0IABP6TyX8UY0Ek1bLaOgy+QeaanXMpZdQq0+1thMGohs+JIWCDtPxSPeGVXypy +bj/NUP9V//PkAJOSJqiqlfLyvmKjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSfY7NblSSAQFIieWdx9lrYTbGASTAfBgNV +HSMEGDAWgBSfY7NblSSAQFIieWdx9lrYTbGASTAKBggqhkjOPQQDAgNJADBGAiEA +ks2c4NJXUs9L1pPrcDsYTaox01za4LD5CXmWjocq9+0CIQDRu+X2D3ETsRrygOaA ++oDhvKphxoCLsYMYENDG16+aMA== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.der b/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.der new file mode 100644 index 00000000000000..cfd002a3fb3e5e Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.pem new file mode 100644 index 00000000000000..f8e9d7061bc492 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB6jCCAZCgAwIBAgIIQZHqtWurdTAwCgYIKoZIzj0EAwIwRjElMCMGA1UECgwc +VHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEdMBsGA1UEAwwUVHJ1c3RBc2lh +IE1hdHRlciBQQUEwIBcNMjMwMzE2MDkwMDAwWhgPOTk5OTEyMzEyMzU5NTlaMEYx +JTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIEluYy4xHTAbBgNVBAMM +FFRydXN0QXNpYSBNYXR0ZXIgUEFBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +OR22pd0spHC4jC7SIPEs+cBpiqkZcYe5FIvTVctWIjtXv4kVECplbOVEZU04LTbq +LLqtAqRfceMByJndQPo/GaNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8B +Af8EBAMCAQYwHQYDVR0OBBYEFLbP9grPxCTWHCYU2WO2MtvdA6iKMB8GA1UdIwQY +MBaAFLbP9grPxCTWHCYU2WO2MtvdA6iKMAoGCCqGSM49BAMCA0gAMEUCIEyDlC7G +8xZqt/D6wcF8nTxpErN/IC8D+nGiGJ9zdPJkAiEAv0cW5PHHvbY+XmI313NC3cXY +8Dqh8mau++ljhEm5/yI= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_Test_PAA_O_TrustAsia_Technologies__Inc.der b/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_Test_PAA_O_TrustAsia_Technologies__Inc.der new file mode 100644 index 00000000000000..a29d31cc160567 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_Test_PAA_O_TrustAsia_Technologies__Inc.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_Test_PAA_O_TrustAsia_Technologies__Inc.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_Test_PAA_O_TrustAsia_Technologies__Inc.pem new file mode 100644 index 00000000000000..4ccbe0132e8779 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_Test_PAA_O_TrustAsia_Technologies__Inc.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB8zCCAZqgAwIBAgIISlilq/A++ZMwCgYIKoZIzj0EAwIwSzElMCMGA1UECgwc +VHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAwwZVHJ1c3RBc2lh +IE1hdHRlciBUZXN0IFBBQTAgFw0yMzAzMTQwMjAwMDBaGA85OTk5MTIzMTIzNTk1 +OVowSzElMCMGA1UECgwcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAG +A1UEAwwZVHJ1c3RBc2lhIE1hdHRlciBUZXN0IFBBQTBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABPJnLS4cSJeksTuVbc85u1xVidBxFtavBtfvptIFzwYJZL7tq4Hp +0o/Ab3xaNb11m9y+A0eW0DS5cjcOEC+s9vCjZjBkMBIGA1UdEwEB/wQIMAYBAf8C +AQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSbSru4DYhrQM7bJ3dZ7fGmBTBo +SzAfBgNVHSMEGDAWgBSbSru4DYhrQM7bJ3dZ7fGmBTBoSzAKBggqhkjOPQQDAgNH +ADBEAiAdxWCkWHgY6rHkat75iK/ROa3mSG0q1lzLaMdQ1KTPFwIgTEL8xQ9eXyj5 +kj1J6ZCpsLpXHPTn2kd1a8d5hcLdPhU= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Tuya_Matter_PAA_vid_0x125D.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Tuya_Matter_PAA_vid_0x125D.pem index ac90a091b71803..729f81a554fc26 100644 --- a/credentials/development/paa-root-certs/dcld_mirror_CN_Tuya_Matter_PAA_vid_0x125D.pem +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Tuya_Matter_PAA_vid_0x125D.pem @@ -1,4 +1,3 @@ -Subject: CN=Tuya Matter PAA,vid=0x125D -----BEGIN CERTIFICATE----- MIIBvDCCAWKgAwIBAgIGAYRXDp5eMAoGCCqGSM49BAMCMDAxGDAWBgNVBAMMD1R1 eWEgTWF0dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEyNUQwIBcNMjIxMTA4MTE0 diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.der b/credentials/development/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.der new file mode 100644 index 00000000000000..93d982a0daf2a8 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.pem new file mode 100644 index 00000000000000..c9dc88d18e1791 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBqjCCAVCgAwIBAgIIQBewM13+lj4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwb +V0lTZUtleSBPSVNURSBNYXR0ZXIgUEFBIEdBMCAXDTIzMDIyMjExMTE0NloYDzk5 +OTkxMjMxMjM1OTU5WjAmMSQwIgYDVQQDDBtXSVNlS2V5IE9JU1RFIE1hdHRlciBQ +QUEgR0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATJjpFuVHclmIdj11Q/4kQh +K2vw5KuONO2lvC70fqpaJxZK8nx5WvwEh1nKmrQE3x/3mz5YnjaY4Bzy92um9Yxs +o2YwZDASBgNVHRMBAf8ECDAGAQH/AgEBMB8GA1UdIwQYMBaAFNiTWojcUlPqNU/O +2QPO0vYqXKr/MB0GA1UdDgQWBBTYk1qI3FJT6jVPztkDztL2Klyq/zAOBgNVHQ8B +Af8EBAMCAYYwCgYIKoZIzj0EAwIDSAAwRQIgIwWMdfZe9GjpmpGh8e9cv0yXQgoH +8NtAvUiaku7uWH0CIQCUyGey5oDGuN/4kjJ9e5WFY9Ldq9DI/l2VzAxR7/GVqg== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.der b/credentials/development/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.der new file mode 100644 index 00000000000000..1cb1764da36ff5 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.pem new file mode 100644 index 00000000000000..4b6076b165fac2 --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB0DCCAXagAwIBAgIUEVaPZC4WCRy6jfLzxPQPzA5HSR8wCgYIKoZIzj0EAwIw +MzEbMBkGA1UEAwwSWEZOIE1hdHRlciBQQUEgVklEMRQwEgYKKwYBBAGConwCAQwE +MTExRDAgFw0yMTEwMjcxNzM5MzdaGA8yMDUxMTAyMDE3MzkzN1owMzEbMBkGA1UE +AwwSWEZOIE1hdHRlciBQQUEgVklEMRQwEgYKKwYBBAGConwCAQwEMTExRDBZMBMG +ByqGSM49AgEGCCqGSM49AwEHA0IABOrVSyaumHozQkNsXGhId3uB7RiY/fggg2Ts +uIkYGxleT7WtMoEra98EOLWxZ0YpUJmoDjk2ywomql02YIus6oOjZjBkMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwHwYDVR0jBBgwFoAUELa1jWK96T1Itk7yAeOdgGiHkpIw +HQYDVR0OBBYEFBC2tY1ivek9SLZO8gHjnYBoh5KSMA4GA1UdDwEB/wQEAwIBhjAK +BggqhkjOPQQDAgNIADBFAiAHAOsEylKtETbk2vCb1p3+/ohza7pWxsQZGjFDlzcT +6QIhAOR4QOqegCxM9hHzmMpE0oNCwY0YMiwqhxb4cGvAIdBc +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.der new file mode 100644 index 00000000000000..441d705fa83f91 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.pem new file mode 100644 index 00000000000000..aa8944da59977b --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzzCCAXSgAwIBAgIIHD7Re2PC4v4wCgYIKoZIzj0EAwIwODEgMB4GA1UEAwwX +WGlhb21pIE1pamlhIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxMjZFMCAX +DTIyMTIwNzEyNTkzMVoYDzk5OTkxMjMxMjM1OTU5WjA4MSAwHgYDVQQDDBdYaWFv +bWkgTWlqaWEgTWF0dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEyNkUwWTATBgcq +hkjOPQIBBggqhkjOPQMBBwNCAAS8fHbfdztglyhDdSuhnvUkiQwEZwSdq2P7CqkX +g6hsuVR5Y3Bew/o5pMVwpPFqW/9dia2YGbBW4CPpZYiz/VhXo2YwZDASBgNVHRMB +Af8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUMbt+ENHwgebG +VDCRxEpqeR3U7gkwHwYDVR0jBBgwFoAUMbt+ENHwgebGVDCRxEpqeR3U7gkwCgYI +KoZIzj0EAwIDSQAwRgIhAJLuT66XntEO1+WBY5ovx/1HhwW6dbYPPyQWsIj0zJJC +AiEAifz6pqyxjuEXQPGGl2Au46DAPcHY5m7TGg7q0Uzp+6Y= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.der b/credentials/development/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.der new file mode 100644 index 00000000000000..16441ec6e394cf Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.pem b/credentials/development/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.pem new file mode 100644 index 00000000000000..00b429f75d69cd --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByjCCAXGgAwIBAgIQSqc9zdIOdLEk8SqWG56VmjAKBggqhkjOPQQDAjA0MRww +GgYDVQQDDBNZZWVsaWdodCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTMx +MjAgFw0yMzAzMjAwODI3NTZaGA8yMTIzMDIyNDA5Mjc1NlowNDEcMBoGA1UEAwwT +WWVlbGlnaHQgTWF0dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzMTIwWTATBgcq +hkjOPQIBBggqhkjOPQMBBwNCAAS1tzm+iYv1rsdh8bwXO8ncWryvKi17JaQt0P1l +qj4ArsHOBZZMPiz3WenbyhGzqYfn1yhigEJZ+GRv/SptZIDno2MwYTAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBTUhw1UsjBbhoyjr+6nJRiXOsggjjAOBgNVHQ8B +Af8EBAMCAYYwHwYDVR0jBBgwFoAU1IcNVLIwW4aMo6/upyUYlzrIII4wCgYIKoZI +zj0EAwIDRwAwRAIgXkjZ9nFLAu3aWnHMu3AfUdR3TE/eW5eZw03ISuPDMjQCIEcA +LnL4qXokODP80ooYjbP53CcaHAIBxlUGQQ50KzwH +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709330400001_CN_NXP_Matter_PAA_O_NXP_Semiconductors_NV_C_NL.der b/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709330400001_CN_NXP_Matter_PAA_O_NXP_Semiconductors_NV_C_NL.der new file mode 100644 index 00000000000000..ebca45453896c6 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709330400001_CN_NXP_Matter_PAA_O_NXP_Semiconductors_NV_C_NL.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709330400001_CN_NXP_Matter_PAA_O_NXP_Semiconductors_NV_C_NL.pem b/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709330400001_CN_NXP_Matter_PAA_O_NXP_Semiconductors_NV_C_NL.pem new file mode 100644 index 00000000000000..bf4fd769683fcb --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709330400001_CN_NXP_Matter_PAA_O_NXP_Semiconductors_NV_C_NL.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICKjCCAc6gAwIBAgIQZIhrnLD8JtUdBFKOg5azKDAMBggqhkjOPQQDAgUAMGEx +FzAVBgNVBAUMDjYzNzA5MzMwNDAwMDAxMSAwHgYDVQQKDBdOWFAgU2VtaWNvbmR1 +Y3RvcnMgTi5WLjELMAkGA1UEBgwCTkwxFzAVBgNVBAMMDk5YUCBNYXR0ZXIgUEFB +MB4XDTIyMTAwMTE0MjM0M1oXDTQ5MTIzMTIzNTk1OVowYTEXMBUGA1UEBQwONjM3 +MDkzMzA0MDAwMDExIDAeBgNVBAoMF05YUCBTZW1pY29uZHVjdG9ycyBOLlYuMQsw +CQYDVQQGDAJOTDEXMBUGA1UEAwwOTlhQIE1hdHRlciBQQUEwWTATBgcqhkjOPQIB +BggqhkjOPQMBBwNCAAQmG9CGuc3THfDL4EvdtnLGVa7HLvsWKITV6EDfswaqKGid +k2TYwuUIVKwU6LxEWhensDfKkEx05I33Gv8bNaAvo2YwZDASBgNVHRMBAf8ECDAG +AQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUl5ekL40HbyPDiIBNTYJC +2T3Xcf0wHwYDVR0jBBgwFoAUl5ekL40HbyPDiIBNTYJC2T3Xcf0wDAYIKoZIzj0E +AwIFAANIADBFAiAoIKgE0cFKmvPSG07jpNrjFX5+9BzTUrnY+ZzItV4q4wIhAKar ++mfA4WFw1ZlFODuQ1NeD7sAqEzDzgqzj+8Loafcn +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709380400001_CN_NXP_Matter_Test_PAA_O_NXP_Semiconductors_NV_C_NL.der b/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709380400001_CN_NXP_Matter_Test_PAA_O_NXP_Semiconductors_NV_C_NL.der new file mode 100644 index 00000000000000..79ed0d69ced6b6 Binary files /dev/null and b/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709380400001_CN_NXP_Matter_Test_PAA_O_NXP_Semiconductors_NV_C_NL.der differ diff --git a/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709380400001_CN_NXP_Matter_Test_PAA_O_NXP_Semiconductors_NV_C_NL.pem b/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709380400001_CN_NXP_Matter_Test_PAA_O_NXP_Semiconductors_NV_C_NL.pem new file mode 100644 index 00000000000000..72e524d9be093b --- /dev/null +++ b/credentials/development/paa-root-certs/dcld_mirror_SERIALNUMBER_63709380400001_CN_NXP_Matter_Test_PAA_O_NXP_Semiconductors_NV_C_NL.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICNDCCAdigAwIBAgIQdgHtufWwmgAmj5M5GMt6+TAMBggqhkjOPQQDAgUAMGYx +FzAVBgNVBAUMDjYzNzA5MzgwNDAwMDAxMSAwHgYDVQQKDBdOWFAgU2VtaWNvbmR1 +Y3RvcnMgTi5WLjELMAkGA1UEBgwCTkwxHDAaBgNVBAMME05YUCBNYXR0ZXIgVGVz +dCBQQUEwHhcNMjIxMDAxMTQyMzQzWhcNNDkxMjMxMjM1OTU5WjBmMRcwFQYDVQQF +DA42MzcwOTM4MDQwMDAwMTEgMB4GA1UECgwXTlhQIFNlbWljb25kdWN0b3JzIE4u +Vi4xCzAJBgNVBAYMAk5MMRwwGgYDVQQDDBNOWFAgTWF0dGVyIFRlc3QgUEFBMFkw +EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgUrOzPL8C3oqYOQgJ747iGOI7yN4TZnp +BJ9E3VqnN6Cxoj2K135lTnmANj20egROiapJXEC5IAgCbYIvm/+GVKNmMGQwEgYD +VR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFEnzI5up +mW7mYhWdvopH6m79D4yLMB8GA1UdIwQYMBaAFEnzI5upmW7mYhWdvopH6m79D4yL +MAwGCCqGSM49BAMCBQADSAAwRQIhAOAr4q+sw6jmUSR4oHRhIMnj4UDPPbScM7ZC +WX4BBTUhAiAIT+S24UIAnG4OCL3mTOoyCMB83YZSe7cnvjk4i4GCPQ== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/fetch-paa-certs-from-dcl.py b/credentials/fetch-paa-certs-from-dcl.py index 6499f0e9d21ab5..56950a8c86e239 100644 --- a/credentials/fetch-paa-certs-from-dcl.py +++ b/credentials/fetch-paa-certs-from-dcl.py @@ -86,12 +86,15 @@ def write_paa_root_cert(certificate, subject): with open(filename + '.pem', 'w+') as outfile: outfile.write(certificate) # convert pem file to der - with open(filename + '.pem', 'rb') as infile: - pem_certificate = x509.load_pem_x509_certificate(infile.read()) - with open(filename + '.der', 'wb+') as outfile: - der_certificate = pem_certificate.public_bytes( - serialization.Encoding.DER) - outfile.write(der_certificate) + try: + with open(filename + '.pem', 'rb') as infile: + pem_certificate = x509.load_pem_x509_certificate(infile.read()) + with open(filename + '.der', 'wb+') as outfile: + der_certificate = pem_certificate.public_bytes( + serialization.Encoding.DER) + outfile.write(der_certificate) + except (IOError, ValueError) as e: + print(f"ERROR: Failed to convert {filename + '.pem'}: {str(e)}. Skipping...") def parse_paa_root_cert_from_dcld(cmdpipe): @@ -160,7 +163,6 @@ def main(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_h parse_paa_root_certs(cmdpipe, paa_list) for paa in paa_list: - if use_rest: response = requests.get( f"{rest_node_url}/dcl/pki/certificates/{paa['subject']}/{paa['subjectKeyId']}").json()["approvedCertificates"]["certs"][0] @@ -175,6 +177,7 @@ def main(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_h certificate = certificate.rstrip('\n') + print(f"Downloaded certificate with subject: {subject}") write_paa_root_cert(certificate, subject) diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.der new file mode 100644 index 00000000000000..9353d4030d22d9 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.pem new file mode 100644 index 00000000000000..561591e8201cf1 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Beken_PAA_01_O_BEKEN_CORPORATION_C_CN_vid_0x1342.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDzCCAbWgAwIBAgIQaYNwS9sgTBq3o/fYlgTNRjAKBggqhkjOPQQDAjBWMQsw +CQYDVQQGEwJDTjEaMBgGA1UECgwRQkVLRU4gQ09SUE9SQVRJT04xFTATBgNVBAMM +DEJla2VuIFBBQSAwMTEUMBIGCisGAQQBgqJ8AgEMBDEzNDIwIBcNMjMwMjIxMDEx +MjEwWhgPOTk5OTEyMzEyMzU5NTlaMFYxCzAJBgNVBAYTAkNOMRowGAYDVQQKDBFC +RUtFTiBDT1JQT1JBVElPTjEVMBMGA1UEAwwMQmVrZW4gUEFBIDAxMRQwEgYKKwYB +BAGConwCAQwEMTM0MjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNAiesN6ioXB +ceNzUHakCBeHnWYclToAOMD+iN/+ZICwbYcNprK/3fwgNbW9wJjfgS1Ql7ncpFI1 +CuGIx1ixsvyjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPH7a4tsFdwj +q/GrUwRtGqMOygGJMA4GA1UdDwEB/wQEAwIBhjAfBgNVHSMEGDAWgBTx+2uLbBXc +I6vxq1MEbRqjDsoBiTAKBggqhkjOPQQDAgNIADBFAiAhLQDUaEN6D7bEEsDiZeWk +SgF4T78PnMu7djX7dA5WPwIhANi5ffmVk+EsdlhDk/50ojce09gvjar3RDSibyiE +xsch +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.der b/credentials/production/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.der new file mode 100644 index 00000000000000..24c85a7ccecb17 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.pem new file mode 100644 index 00000000000000..df1e675b2517a3 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_CommScope_Technologies_LLC_Matter_PAA.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByjCCAXCgAwIBAgIUXCGo9kb6IAuTbc++0INIKoRNdmkwCgYIKoZIzj0EAwIw +MDEuMCwGA1UEAwwlQ29tbVNjb3BlIFRlY2hub2xvZ2llcyBMTEMgTWF0dGVyIFBB +QTAgFw0yMzAzMjcxODAzMTVaGA8yMDc5MDYwNTIzNTk1OVowMDEuMCwGA1UEAwwl +Q29tbVNjb3BlIFRlY2hub2xvZ2llcyBMTEMgTWF0dGVyIFBBQTBZMBMGByqGSM49 +AgEGCCqGSM49AwEHA0IABKDQFia0cSkTzFVaowcLObj8kugxNblIJQI8+9T39HBS +MUt8BZLyF6fvpoMW3aFGty7QnSIEcUHsv3a+luWMOyWjZjBkMBIGA1UdEwEB/wQI +MAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB8GA1UdIwQYMBaAFFn47dFXVdLaZqie +VLx5cjRDXfRrMB0GA1UdDgQWBBRZ+O3RV1XS2maonlS8eXI0Q130azAKBggqhkjO +PQQDAgNIADBFAiEA2r/c+NN+uHyDSPnrPG0csWP/L4SCNl3RHEktM76RomoCIHZj +wzofFTNVqdsP/gAOyygrtvq9tOkz0s0PY+06N6Dr +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.der new file mode 100644 index 00000000000000..3eb961c3e64475 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.pem new file mode 100644 index 00000000000000..f3a3f9b032117c --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Coolkit_Matter_PAA_vid_0x1286.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByjCCAXCgAwIBAgIRALIYkZCkr7iJ8mZzIc7i0YUwCgYIKoZIzj0EAwIwMzEb +MBkGA1UEAwwSQ29vbGtpdCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTI4 +NjAgFw0yMjEyMjkwOTAxMjBaGA8yMTIyMTIwNTEwMDEyMFowMzEbMBkGA1UEAwwS +Q29vbGtpdCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTI4NjBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABFjRorUBNceySQx2NyglupAohrtcN7HhdhoXSpe7 +Q8NKPwEWgi8xGM8/I5aZpNyKWtIkiqQjOldveUsJ+E5huJ2jYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFNLMGSSoh8d9pu+VyV7evMxVOl6+MA4GA1UdDwEB +/wQEAwIBhjAfBgNVHSMEGDAWgBTSzBkkqIfHfabvlcle3rzMVTpevjAKBggqhkjO +PQQDAgNIADBFAiEA70Nk7lJT0kd3ldXbCeHjHCcjaNQSi6BEfW5t351S0TYCIEtA +7mST/iS08y+bmAc+Umw4w4korSG7mbA7SF+h4Bvq +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.der new file mode 100644 index 00000000000000..74f0bdc503d9b3 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.pem new file mode 100644 index 00000000000000..28ba6eec1e0d99 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Dooya_Matter_PAA_vid_0x1365.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBxjCCAWygAwIBAgIRAK8DIULbkf5secR3pEpneXkwCgYIKoZIzj0EAwIwMTEZ +MBcGA1UEAwwQRG9veWEgTWF0dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzNjUw +IBcNMjMwNTE3MDYzMDA5WhgPMjEyMzA0MjMwNzMwMDlaMDExGTAXBgNVBAMMEERv +b3lhIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxMzY1MFkwEwYHKoZIzj0C +AQYIKoZIzj0DAQcDQgAE13sUs7r/vScV3aC0keua5b3hN2HACJrsPVY0csOEvdmg +Ujb/DdhbB9II8egcUgNQhbhm1VA6aDweSVOlJUqW9KNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQU2H5GdarwvlK+Q5zywAaYbZrwLnUwDgYDVR0PAQH/BAQD +AgGGMB8GA1UdIwQYMBaAFNh+RnWq8L5SvkOc8sAGmG2a8C51MAoGCCqGSM49BAMC +A0gAMEUCICN3uiTptSE1TiDJ9595cGiBOHg30RN0XHIepd5xhzE+AiEA94oIq6eF +4Bf6vzl1brZb3/jRFa2Hb2KSF+pLby/nVDU= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.der b/credentials/production/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.der new file mode 100644 index 00000000000000..36dca99ce22cd9 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.pem new file mode 100644 index 00000000000000..5039036523762b --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_HooRii_Matter_PAA_G1_vid_0x1351.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzDCCAXOgAwIBAgIQRr59/poXhxyqM2WzNmpEZzAKBggqhkjOPQQDAjA1MR0w +GwYDVQQDDBRIb29SaWkgTWF0dGVyIFBBQSBHMTEUMBIGCisGAQQBgqJ8AgEMBDEz +NTEwIBcNMjMwMzE2MDg0OTQ0WhgPMzAyMjA3MTcwOTQ5NDRaMDUxHTAbBgNVBAMM +FEhvb1JpaSBNYXR0ZXIgUEFBIEcxMRQwEgYKKwYBBAGConwCAQwEMTM1MTBZMBMG +ByqGSM49AgEGCCqGSM49AwEHA0IABGu+QUB48KWjlQvmqlkrk+PFlgLwd7lhfJ+W +bCMjStSUC1dZXnN/L4SLfRAigweqnZDq4yDfZxGhRnbXIg20jGKjYzBhMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFLcW1z8tZsZ/eIzpwBETOgpaErH1MA4GA1Ud +DwEB/wQEAwIBhjAfBgNVHSMEGDAWgBS3Ftc/LWbGf3iM6cAREzoKWhKx9TAKBggq +hkjOPQQDAgNHADBEAiBPO4TUQTIwX9YZOMtMI1otjqGDrXa3V4DDGpRAv5DGjQIg +UdnJk5rtZFFYg/pH3paCCyPUx9hEsq9+XzyXzBNt+Jo= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.der new file mode 100644 index 00000000000000..fe7f2f9923eecb Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.pem new file mode 100644 index 00000000000000..96e43d9d35b9b3 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Kudelski_Matter_PAA_01.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBqDCCAU6gAwIBAgIQF0rI1t9Ic45LCbMNF4Ig3zAKBggqhkjOPQQDAjAhMR8w +HQYDVQQDExZLdWRlbHNraSBNYXR0ZXIgUEFBIDAxMCAXDTIzMDEyNTEzMTkyMVoY +Dzk5OTkxMjMxMjM1OTU5WjAhMR8wHQYDVQQDExZLdWRlbHNraSBNYXR0ZXIgUEFB +IDAxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwU6lHfS8xzeab2fOJgPCq6o8 +7E/oi4EoNS8ntrPSwVzeuZd/szyjSuuhQez8ivkcUBMwYF+7iAjEvYKMIKEVB6Nm +MGQwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYE +FKYHw2B7cVDjYiqwuoiebLw/xVL5MB8GA1UdIwQYMBaAFKYHw2B7cVDjYiqwuoie +bLw/xVL5MAoGCCqGSM49BAMCA0gAMEUCID5hu0qxMVEDtZ46tVZ9cSY1SwuAP4VB +FvxrqRS8y34sAiEA+fpUqi2nQF5Xk4lJwOPg04W32kBrYMiagfESVLZLqPM= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.der new file mode 100644 index 00000000000000..ec28a7968ee8a6 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.pem new file mode 100644 index 00000000000000..6983f6ee8628c0 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Longanlink_Matter_PAA_01_vid_0x131F.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB2zCCAYKgAwIBAgIUbUYhommf/eGmBpGVCftameBnrS0wCgYIKoZIzj0EAwIw +OjEiMCAGA1UEAwwZTG9uZ2FuLmxpbmsgTWF0dGVyIFBBQSAwMTEUMBIGCisGAQQB +gqJ8AgEMBDEzMUYwHhcNMjMwMTEyMTAxMTQ1WhcNMzMwMTA5MTAxMTQ1WjA6MSIw +IAYDVQQDDBlMb25nYW4ubGluayBNYXR0ZXIgUEFBIDAxMRQwEgYKKwYBBAGConwC +AQwEMTMxRjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDdOC+IV2GZJqU8viqtJ +ugH9RYp7m9q8j9Apy0VrdNOpZFJlMsvhWMoCavoiU8uQLetb7cWVP0uxWtngmxT2 +bSmjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBTBIEsJvP4s2mPOm34wgoTLxqJ4RzAfBgNVHSMEGDAWgBTBIEsJvP4s2mPO +m34wgoTLxqJ4RzAKBggqhkjOPQQDAgNHADBEAiBgrbitMHgD7Hj2gwQKSlXj8wUF +d+GiHTrCCA127lb8VQIgBrK/uzjn8vWR5uf1iTShsy0JrIQ/kIjuyL/qF1/otGY= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.der new file mode 100644 index 00000000000000..1945e372e51b38 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.pem new file mode 100644 index 00000000000000..659757913d14e6 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_ASR_PAA_C_CN_vid_0x133F.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB0zCCAXigAwIBAgIEEAAACDAKBggqhkjOPQQDAjA8MQswCQYDVQQGEwJDTjEU +MBIGCisGAQQBgqJ8AgEMBDEzM0YxFzAVBgNVBAMMDk1hdHRlciBBU1IgUEFBMCAX +DTIyMTIwODA1NDkyMloYDzIxMjIxMTE0MDU0OTIyWjA8MQswCQYDVQQGEwJDTjEU +MBIGCisGAQQBgqJ8AgEMBDEzM0YxFzAVBgNVBAMMDk1hdHRlciBBU1IgUEFBMFkw +EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmhOGoCqUtvdQvc8380R0/+JMYW7t3Rnu +Hn2jxPOWT4P33OuhT5ql/IW2XqnmVKAff83IeJn0edePIhLW8TR2UqNmMGQwHwYD +VR0jBBgwFoAU7+HwYTN8f14mdv6IU0N9vwO+gMAwEgYDVR0TAQH/BAgwBgEB/wIB +ATAdBgNVHQ4EFgQU7+HwYTN8f14mdv6IU0N9vwO+gMAwDgYDVR0PAQH/BAQDAgEG +MAoGCCqGSM49BAMCA0kAMEYCIQCHXUwKU8mFRyERBBw3vzzuFgobf2B8eqNqBHT5 +v8vpfAIhAO6jpKrVU36J+eiYVI8fc3aqjj0GxhlW6dxL6LDdBTmZ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.der new file mode 100644 index 00000000000000..980a599f3b6eec Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.pem new file mode 100644 index 00000000000000..4db28c632a2459 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_PAA_2_O_Google_C_US_vid_0x6006.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB7jCCAZOgAwIBAgIBATAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJVUzEPMA0G +A1UECgwGR29vZ2xlMRUwEwYDVQQDDAxNYXR0ZXIgUEFBIDIxFDASBgorBgEEAYKi +fAIBDAQ2MDA2MCAXDTIyMTIxNTAwMjIzMVoYDzIxMjIxMTIxMDAyMjMxWjBLMQsw +CQYDVQQGEwJVUzEPMA0GA1UECgwGR29vZ2xlMRUwEwYDVQQDDAxNYXR0ZXIgUEFB +IDIxFDASBgorBgEEAYKifAIBDAQ2MDA2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD +QgAEfBavdss9ivpYBX1TrjprN8ur+Mlw79ArbMSsF9yjKJZToX1qU52g530rGMyV +Um4/nSvDSHZLq3Mh/dYlsY57rqNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHq57adv6ctkYnUybdFFCLgA+OHIMB8GA1Ud +IwQYMBaAFHq57adv6ctkYnUybdFFCLgA+OHIMAoGCCqGSM49BAMCA0kAMEYCIQCJ +bSWN3tzLKE37QsmQa9LUUz58TKF8h6Vbx8oKNQDJCgIhAMWZC7jGeR9PMO/dGNJy +/FRDJTm2hVUYrvzOx74YAIew +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.der new file mode 100644 index 00000000000000..9d6fa54a028993 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.pem new file mode 100644 index 00000000000000..3b3d13da8cc0a3 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Matter_Uascent_PAA_0x1400_vid_0x1400.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB2DCCAX2gAwIBAgIQIgzBEIyd2pBoydOAodEFUzAKBggqhkjOPQQDAjA6MSIw +IAYDVQQDDBlNYXR0ZXIgVWFzY2VudCBQQUEgMHgxNDAwMRQwEgYKKwYBBAGConwC +AQwEMTQwMDAgFw0yMzAyMjQwMjEwMjJaGA8yMTIzMDEzMTAzMTAyMlowOjEiMCAG +A1UEAwwZTWF0dGVyIFVhc2NlbnQgUEFBIDB4MTQwMDEUMBIGCisGAQQBgqJ8AgEM +BDE0MDAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQGF1kPgQS3bN15r7TGypBU +kbVb3rENZJT+Yd1/XghtNsdn16aWuGfbfciNYrYHH3BowOjdDEa7Pg4WslzbQbxI +o2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQwg3mJZOCTqLJZ/rbDeAlu +JWhOmjAOBgNVHQ8BAf8EBAMCAYYwHwYDVR0jBBgwFoAUMIN5iWTgk6iyWf62w3gJ +biVoTpowCgYIKoZIzj0EAwIDSQAwRgIhAKgXdJqN0msFakfGusUP5rXtjspITudq +Gq+JB3u3WCcxAiEAx65fSjfiRle2djpp8SunICvCAkVKa386AdSKcXxlCRI= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.der b/credentials/production/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.der new file mode 100644 index 00000000000000..8c2c3e5947e0ff Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.pem new file mode 100644 index 00000000000000..4f1efc399b642e --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_PanKorePAA_O_PanKore_vid_0x1316.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBvTCCAWOgAwIBAgIRALR5sevvUSe9RFYCEgeDQzswCgYIKoZIzj0EAwIwPTET +MBEGA1UEAwwKUGFuS29yZVBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzMTYxEDAOBgNV +BAoMB1BhbktvcmUwIBcNMjMwNDE0MDUxOTI4WhgPMjEyMzAzMjEwNjE5MjhaMD0x +EzARBgNVBAMMClBhbktvcmVQQUExFDASBgorBgEEAYKifAIBDAQxMzE2MRAwDgYD +VQQKDAdQYW5Lb3JlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAES5EuELIS1Fr/ +FHhVUN2VVT1P+A7BjHwDKryrB8KBAX63m2cKnc8XiGqlgLISO7L26n7MYE4I4JcB +v844aPg03aNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVotIfZ/3up+G ++Xbv4a15BDNXq8MwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA0gAMEUCIEwO +wv9LR2IiYBmLqsaH+CSmTC1hpHK/Mxtnr3zHlRYYAiEA5l2A0iXoIPqCxN+yxKVy +hXP8m8zUz5JEdZR+BlrFLgU= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.der new file mode 100644 index 00000000000000..7ac6b1dddaf697 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.pem new file mode 100644 index 00000000000000..b0e30b457cb860 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Phaten_Matter_PAA_vid_0x1404.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByDCCAW6gAwIBAgIRAJjDAv4UCH2aIjBKyRuyE40wCgYIKoZIzj0EAwIwMjEa +MBgGA1UEAwwRUGhhdGVuIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxNDA0 +MCAXDTIzMDIwNjA0NDA1MVoYDzIyMjMxMjMxMjM1OTU5WjAyMRowGAYDVQQDDBFQ +aGF0ZW4gTWF0dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDE0MDQwWTATBgcqhkjO +PQIBBggqhkjOPQMBBwNCAAQARiZDxeEXWhJxOhqVex88/53FmxWqrqWCqfZynZS3 +BGXktXGGWIekPfkw/2l+7Kmt5pNJvEm7f2QPNpaWcL6vo2MwYTAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBSZIOhVuLRljx/ei3gvCbIcRbFBtzAOBgNVHQ8BAf8E +BAMCAYYwHwYDVR0jBBgwFoAUmSDoVbi0ZY8f3ot4LwmyHEWxQbcwCgYIKoZIzj0E +AwIDSAAwRQIhAJpLjv9zOxLKWcByT3AZjqmyq/SdfRa3B3aRfV5pWV6jAiAvnEtC +qHC2NiNvTKHtR0IzLzZJcCN1gNS8PWE7dgPy+g== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.der new file mode 100644 index 00000000000000..cd76bfcce5c32a Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.pem new file mode 100644 index 00000000000000..0b9fe29404930f --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Qianyan_Matter_PAA_vid_0x1387.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByjCCAXCgAwIBAgIRALmDRJO1vv31wcqYjJYpxZQwCgYIKoZIzj0EAwIwMzEb +MBkGA1UEAwwSUWlhbnlhbiBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM4 +NzAgFw0yMzAzMTQwODIyNDRaGA85OTk5MTIzMTIzNTk1OVowMzEbMBkGA1UEAwwS +UWlhbnlhbiBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTM4NzBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABAV999uorscml0N9OlulWuvb+6d06vsjmpwKPQd5 +mpaayy4f6ODdbycnNhHUZqxP4jQL8CLk509zlJCyTvX4f16jYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFDCn/GzW+lrLgn93bjJiB2u4EeQpMA4GA1UdDwEB +/wQEAwIBhjAfBgNVHSMEGDAWgBQwp/xs1vpay4J/d24yYgdruBHkKTAKBggqhkjO +PQQDAgNIADBFAiBo6kBk1wcJjH4XYaR6cPOrCOXmbTPk20EzfoaLrXXtrgIhANmh +IEohtRvlb6URoKv1v3jwfzATeqLNY2eLKBmQjUN8 +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.der new file mode 100644 index 00000000000000..a8e2fad2130542 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.pem new file mode 100644 index 00000000000000..6261addd938c7c --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Quectel_Matter_PAA_vid_0x1410.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB0DCCAXagAwIBAgIUSNDkSyf+uIE4cOtbUuqYbyoZm04wCgYIKoZIzj0EAwIw +MzEbMBkGA1UEAwwSUXVlY3RlbCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwE +MTQxMDAgFw0yMzAzMDEwNTIwMDZaGA85OTk5MTIzMTA1MjAwNlowMzEbMBkGA1UE +AwwSUXVlY3RlbCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTQxMDBZMBMG +ByqGSM49AgEGCCqGSM49AwEHA0IABPVapB0WnCRdF8JOm6sVjFaklJO9LguJljDA +wUlj8/udIxdOJ4r3aWcGhLzVsyj2vbrB1A+7eoq+zMLJ+lRAciOjZjBkMB0GA1Ud +DgQWBBTYzvSYQKNboQDcO+eGtUzaOH4lAjAfBgNVHSMEGDAWgBTYzvSYQKNboQDc +O+eGtUzaOH4lAjASBgNVHRMBAf8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAgNIADBFAiEA/+yF17n4XG81nLtV4CP0MWYppGAdN24AipnRdMza +AIECIFqMfQfNGQGejFSeyaWlhKTsYH5iJ2UdyUmHfKzg3FZV +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.der new file mode 100644 index 00000000000000..9aec36a9f66d06 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.pem new file mode 100644 index 00000000000000..9e74ebb26d4dd5 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Rafael_Matter_PAA_vid_0x1346.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBwjCCAWigAwIBAgIIMnjf1jSe7A4wCgYIKoZIzj0EAwIwMjEaMBgGA1UEAwwR +UmFmYWVsIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxMzQ2MCAXDTIzMDIy +MjAwMDAwMFoYDzIxMjMwMTI4MjM1OTU5WjAyMRowGAYDVQQDDBFSYWZhZWwgTWF0 +dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzNDYwWTATBgcqhkjOPQIBBggqhkjO +PQMBBwNCAATLDTcieWh6NPzh2K5geCxrrKxV/a/TthvTyDiLa5oUS/M7Wt08l85V +lYXPhiiidthGI1rCPsYCPgqul0EW/GeYo2YwZDASBgNVHRMBAf8ECDAGAQH/AgEB +MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxPfh1bv5nf/R7gF21WgnjOibIBcw +HwYDVR0jBBgwFoAUxPfh1bv5nf/R7gF21WgnjOibIBcwCgYIKoZIzj0EAwIDSAAw +RQIgQH90HCbluBm/JPRrkwEmVH1NpzV//gAQwj4A+MROoZgCIQCTKGMkpEd0AUM6 +BeCqOjan+OEarNXoqoOgUaX0rJcY8Q== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.der b/credentials/production/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.der new file mode 100644 index 00000000000000..cfd002a3fb3e5e Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.pem new file mode 100644 index 00000000000000..f8e9d7061bc492 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_TrustAsia_Matter_PAA_O_TrustAsia_Technologies__Inc.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB6jCCAZCgAwIBAgIIQZHqtWurdTAwCgYIKoZIzj0EAwIwRjElMCMGA1UECgwc +VHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEdMBsGA1UEAwwUVHJ1c3RBc2lh +IE1hdHRlciBQQUEwIBcNMjMwMzE2MDkwMDAwWhgPOTk5OTEyMzEyMzU5NTlaMEYx +JTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIEluYy4xHTAbBgNVBAMM +FFRydXN0QXNpYSBNYXR0ZXIgUEFBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +OR22pd0spHC4jC7SIPEs+cBpiqkZcYe5FIvTVctWIjtXv4kVECplbOVEZU04LTbq +LLqtAqRfceMByJndQPo/GaNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8B +Af8EBAMCAQYwHQYDVR0OBBYEFLbP9grPxCTWHCYU2WO2MtvdA6iKMB8GA1UdIwQY +MBaAFLbP9grPxCTWHCYU2WO2MtvdA6iKMAoGCCqGSM49BAMCA0gAMEUCIEyDlC7G +8xZqt/D6wcF8nTxpErN/IC8D+nGiGJ9zdPJkAiEAv0cW5PHHvbY+XmI313NC3cXY +8Dqh8mau++ljhEm5/yI= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.der b/credentials/production/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.der new file mode 100644 index 00000000000000..93d982a0daf2a8 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.pem new file mode 100644 index 00000000000000..c9dc88d18e1791 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_WISeKey_OISTE_Matter_PAA_GA.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBqjCCAVCgAwIBAgIIQBewM13+lj4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwb +V0lTZUtleSBPSVNURSBNYXR0ZXIgUEFBIEdBMCAXDTIzMDIyMjExMTE0NloYDzk5 +OTkxMjMxMjM1OTU5WjAmMSQwIgYDVQQDDBtXSVNlS2V5IE9JU1RFIE1hdHRlciBQ +QUEgR0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATJjpFuVHclmIdj11Q/4kQh +K2vw5KuONO2lvC70fqpaJxZK8nx5WvwEh1nKmrQE3x/3mz5YnjaY4Bzy92um9Yxs +o2YwZDASBgNVHRMBAf8ECDAGAQH/AgEBMB8GA1UdIwQYMBaAFNiTWojcUlPqNU/O +2QPO0vYqXKr/MB0GA1UdDgQWBBTYk1qI3FJT6jVPztkDztL2Klyq/zAOBgNVHQ8B +Af8EBAMCAYYwCgYIKoZIzj0EAwIDSAAwRQIgIwWMdfZe9GjpmpGh8e9cv0yXQgoH +8NtAvUiaku7uWH0CIQCUyGey5oDGuN/4kjJ9e5WFY9Ldq9DI/l2VzAxR7/GVqg== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.der b/credentials/production/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.der new file mode 100644 index 00000000000000..1cb1764da36ff5 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.pem new file mode 100644 index 00000000000000..4b6076b165fac2 --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_XFN_Matter_PAA_VID_vid_0x111D.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB0DCCAXagAwIBAgIUEVaPZC4WCRy6jfLzxPQPzA5HSR8wCgYIKoZIzj0EAwIw +MzEbMBkGA1UEAwwSWEZOIE1hdHRlciBQQUEgVklEMRQwEgYKKwYBBAGConwCAQwE +MTExRDAgFw0yMTEwMjcxNzM5MzdaGA8yMDUxMTAyMDE3MzkzN1owMzEbMBkGA1UE +AwwSWEZOIE1hdHRlciBQQUEgVklEMRQwEgYKKwYBBAGConwCAQwEMTExRDBZMBMG +ByqGSM49AgEGCCqGSM49AwEHA0IABOrVSyaumHozQkNsXGhId3uB7RiY/fggg2Ts +uIkYGxleT7WtMoEra98EOLWxZ0YpUJmoDjk2ywomql02YIus6oOjZjBkMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwHwYDVR0jBBgwFoAUELa1jWK96T1Itk7yAeOdgGiHkpIw +HQYDVR0OBBYEFBC2tY1ivek9SLZO8gHjnYBoh5KSMA4GA1UdDwEB/wQEAwIBhjAK +BggqhkjOPQQDAgNIADBFAiAHAOsEylKtETbk2vCb1p3+/ohza7pWxsQZGjFDlzcT +6QIhAOR4QOqegCxM9hHzmMpE0oNCwY0YMiwqhxb4cGvAIdBc +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.der new file mode 100644 index 00000000000000..441d705fa83f91 Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.pem new file mode 100644 index 00000000000000..aa8944da59977b --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Xiaomi_Mijia_Matter_PAA_vid_0x126E.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzzCCAXSgAwIBAgIIHD7Re2PC4v4wCgYIKoZIzj0EAwIwODEgMB4GA1UEAwwX +WGlhb21pIE1pamlhIE1hdHRlciBQQUExFDASBgorBgEEAYKifAIBDAQxMjZFMCAX +DTIyMTIwNzEyNTkzMVoYDzk5OTkxMjMxMjM1OTU5WjA4MSAwHgYDVQQDDBdYaWFv +bWkgTWlqaWEgTWF0dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEyNkUwWTATBgcq +hkjOPQIBBggqhkjOPQMBBwNCAAS8fHbfdztglyhDdSuhnvUkiQwEZwSdq2P7CqkX +g6hsuVR5Y3Bew/o5pMVwpPFqW/9dia2YGbBW4CPpZYiz/VhXo2YwZDASBgNVHRMB +Af8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUMbt+ENHwgebG +VDCRxEpqeR3U7gkwHwYDVR0jBBgwFoAUMbt+ENHwgebGVDCRxEpqeR3U7gkwCgYI +KoZIzj0EAwIDSQAwRgIhAJLuT66XntEO1+WBY5ovx/1HhwW6dbYPPyQWsIj0zJJC +AiEAifz6pqyxjuEXQPGGl2Au46DAPcHY5m7TGg7q0Uzp+6Y= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.der b/credentials/production/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.der new file mode 100644 index 00000000000000..16441ec6e394cf Binary files /dev/null and b/credentials/production/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.der differ diff --git a/credentials/production/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.pem b/credentials/production/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.pem new file mode 100644 index 00000000000000..00b429f75d69cd --- /dev/null +++ b/credentials/production/paa-root-certs/dcld_mirror_CN_Yeelight_Matter_PAA_vid_0x1312.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByjCCAXGgAwIBAgIQSqc9zdIOdLEk8SqWG56VmjAKBggqhkjOPQQDAjA0MRww +GgYDVQQDDBNZZWVsaWdodCBNYXR0ZXIgUEFBMRQwEgYKKwYBBAGConwCAQwEMTMx +MjAgFw0yMzAzMjAwODI3NTZaGA8yMTIzMDIyNDA5Mjc1NlowNDEcMBoGA1UEAwwT +WWVlbGlnaHQgTWF0dGVyIFBBQTEUMBIGCisGAQQBgqJ8AgEMBDEzMTIwWTATBgcq +hkjOPQIBBggqhkjOPQMBBwNCAAS1tzm+iYv1rsdh8bwXO8ncWryvKi17JaQt0P1l +qj4ArsHOBZZMPiz3WenbyhGzqYfn1yhigEJZ+GRv/SptZIDno2MwYTAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBTUhw1UsjBbhoyjr+6nJRiXOsggjjAOBgNVHQ8B +Af8EBAMCAYYwHwYDVR0jBBgwFoAU1IcNVLIwW4aMo6/upyUYlzrIII4wCgYIKoZI +zj0EAwIDRwAwRAIgXkjZ9nFLAu3aWnHMu3AfUdR3TE/eW5eZw03ISuPDMjQCIEcA +LnL4qXokODP80ooYjbP53CcaHAIBxlUGQQ50KzwH +-----END CERTIFICATE----- \ No newline at end of file diff --git a/docs/BUG_REPORT.md b/docs/BUG_REPORT.md index 20b61efc789e7b..ec4c16e9335743 100644 --- a/docs/BUG_REPORT.md +++ b/docs/BUG_REPORT.md @@ -106,4 +106,4 @@ report is different here. Some examples: - `While running this test, I observed device under test rebooting, logs attached.` -- `This only happens intermitently - I see it about 30% of the time` +- `This only happens intermittently - I see it about 30% of the time` diff --git a/docs/examples/index.md b/docs/examples/index.md index 46482fcbe8934e..7757cc78b75e05 100644 --- a/docs/examples/index.md +++ b/docs/examples/index.md @@ -69,15 +69,6 @@ chip-tool/README darwin-framework-tool/README ``` -## Dynamic bridge example - -```{toctree} -:glob: -:maxdepth: 1 - -dynamic-bridge-app/**/README -``` - ## Java matter controller example ```{toctree} @@ -202,6 +193,15 @@ shell/README* shell/**/README ``` +## Smoke CO Alarm example + +```{toctree} +:glob: +:maxdepth: 1 + +smoke-co-alarm-app/**/README +``` + ## Temperature measurement example ```{toctree} diff --git a/docs/guides/README.md b/docs/guides/README.md index 451a2c6d2fdff7..d37c959e3a602c 100644 --- a/docs/guides/README.md +++ b/docs/guides/README.md @@ -4,6 +4,7 @@ - [Android - Building](./android_building.md) - [Apple - Testing with iPhone, iPad, macOS, Apple TV, HomePod, Watch, etc](./darwin.md) +- [ASR - Getting Started Guide](./asr_getting_started_guide.md) - [Espressif (ESP32) - Getting Started Guide](./esp32/README.md) - [Infineon PSoC6 - Software Update](./infineon_psoc6_software_update.md) - [Linux - Simulated Devices](./simulated_device_linux.md) diff --git a/docs/guides/access-control-guide.md b/docs/guides/access-control-guide.md index 6aa20e032825d5..46878ab1cfca09 100644 --- a/docs/guides/access-control-guide.md +++ b/docs/guides/access-control-guide.md @@ -552,13 +552,13 @@ await devCtrl.WriteAttribute(1, [ (0, Clusters.AccessControl.Attributes.Acl( [ authMode = Clusters.AccessControl.Enums.AccessControlEntryAuthModeEnum.kGroup, subjects = [ 123, 456 ], targets = [ - Clusters.AccessControl.Structs.Target( + Clusters.AccessControl.Structs.AccessControlTargetStruct( cluster = Clusters.OnOff.id, ), - Clusters.AccessControl.Structs.Target( + Clusters.AccessControl.Structs.AccessControlTargetStruct( endpoint = 1, ), - Clusters.AccessControl.Structs.Target( + Clusters.AccessControl.Structs.AccessControlTargetStruct( cluster = Clusters.LevelControl.id, endpoint = 2, ), diff --git a/docs/guides/asr_getting_started_guide.md b/docs/guides/asr_getting_started_guide.md new file mode 100644 index 00000000000000..6d6b15230faf4d --- /dev/null +++ b/docs/guides/asr_getting_started_guide.md @@ -0,0 +1,147 @@ +# ASR Getting Started Guide + +The ASR platform is a [Matter](https://github.com/project-chip/connectedhomeip) +platform that uses ASR FreeRTOS SDK. + +--- + +- [ASR Getting Started Guide](#asr-getting-started-guide) + - [Supported Chips](#supported-chips) + - [Matter Example Applications](#matter-example-applications) + - [Building the Example Application](#building-the-example-application) + - [Commissioning](#commissioning) + - [BLE mode](#ble-mode) + - [IP mode](#ip-mode) + - [Shell](#shell) + - [OTA](#ota) + - [Factory](#factory) + +--- + +## Supported Chips + +The ASR platform is supported on: + +- [ASR582X](http://www.asrmicro.com/en/goods/proinfo/36.html) +- [ASR595X](http://www.asrmicro.com/en/goods/proinfo/42.html) + +## Matter Example Applications + +Sample Matter applications are provided for the ASR platform. They can be used +to speed up development. You can find them in the samples with `/asr` subfolder. + +## Building the Example Application + +- [Setup Matter Environment](./BUILDING.md) + +- Setup toolchain + - for ASR582X + ``` + cd toolchain + wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/RC2.1/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2 + tar -jxvf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2 + export ASR_TOOLCHAIN_PATH={abs-path-to-toolchain}/gcc-arm-none-eabi-9-2019-q4-major/bin/ + ``` + - for ASR595X + ``` + git clone --depth=1 https://github.com/asriot/Tools.git + cd Tools/toolchain + cat asr_riscv_gnu_toolchain_10.2_ubuntu-16.04.tar.bz2.part* > asr_riscv_gnu_toolchain_10.2_ubuntu-16.04.tar.bz2 + mkdir -p asr_riscv_gnu_toolchain_10.2_ubuntu-16.04 + tar -jxvf asr_riscv_gnu_toolchain_10.2_ubuntu-16.04.tar.bz2 -C asr_riscv_gnu_toolchain_10.2_ubuntu-16.04/ + export ASR_TOOLCHAIN_PATH={abs-path-to-toolchain}/asr_riscv_gnu_toolchain_10.2_ubuntu-16.04/bin/ + ``` +- Setup Chip environment + - for ASR582X: + ``` + export ASR_BOARD=asr582x + ``` + - for ASR595X: + ``` + export ASR_BOARD=asr595x + ``` +- Building the Application + + If the lighting example is to be built: + + ``` + ./scripts/build/build_examples.py --target asr-$ASR_BOARD-lighting build + ``` + +- The output image files are stored in the subdirectories under `out`, the + subdirectory name is the same as the argument specified after the option + `--target` when build the examples. + +- After building the application, `DOGO` tool is used to flash it to the + board, please refer to the + [DOGO Tool User Guide](https://asriot.readthedocs.io/en/latest/ASR550X/Download-Tool/ASR_IoT_DOGO_Tool_User_Guide.html). + +## Commissioning + +There are two commissioning modes supported by ASR platform: + +### BLE mode + +1. Build and Flash +2. The example will run automatically after booting the ASR board. +3. Restore factory settings using command `recovery` +4. Commissioning with + [Chip-Tool](https://github.com/project-chip/connectedhomeip/tree/master/examples/chip-tool),for + example: + ``` + ./chip-tool pairing ble-wifi + ``` + +### IP mode + +1. Build and Flash +2. The example will run automatically after booting the ASR board. +3. Restore factory settings using command `recovery` +4. Connect to AP using command `wifi_open sta [ssid] [password]` +5. Commissioning with + [Chip-Tool](https://github.com/project-chip/connectedhomeip/tree/master/examples/chip-tool),for + example: + ``` + ./chip-tool pairing onnetwork-long + ``` + +## Shell + +1. To build the example with Matter shell, exactly the same steps as above but + add argument `-shell` when using the `build_examples.py` script. For example: + `./scripts/build/build_examples.py --target asr-$ASR_BOARD-lighting-shell build` +2. The example will run automatically after booting the ASR board. +3. Use `help` command to list all supported commands: + ``` + help + base64 Base64 encode / decode utilities + exit Exit the shell application + help List out all top level commands + version Output the software version + ble BLE transport commands + wifi Usage: wifi + config Manage device configuration. Usage to dump value: config [param_name] and to set some values (discriminator): config [param_name] [param_value]. + device Device management commands + onboardingcodes Dump device onboarding codes. Usage: onboardingcodes none|softap|ble|onnetwork [qrcode|qrcodeurl|manualpairingcode] + dns Dns client commands + OnOff OnOff commands. Usage: OnOff [on|off] + Done + ``` + +## OTA + +1. To build the example with the Matter OTA Requestor functionality, exactly the + same steps as above but add argument `-ota` when using the + `build_examples.py` script. For example: + `./scripts/build/build_examples.py --target asr-$ASR_BOARD-lighting-ota build` +2. For more usage details, please refer to the + [OTA example](../../examples/ota-requestor-app/asr/README.md) + +## Factory + +1. To build the example with the ASR Factory Data Provider, exactly the same + steps as above but add argument `-factory` when using the `build_examples.py` + script. For example: + `./scripts/build/build_examples.py --target asr-$ASR_BOARD-lighting-factory build` +2. For more usage details, please refer to the + [Factory Tool User Guide](https://github.com/asriot/Tools/blob/main/factory_tool/README.md) diff --git a/docs/guides/darwin.md b/docs/guides/darwin.md index b83a943e325731..197023c3c99580 100644 --- a/docs/guides/darwin.md +++ b/docs/guides/darwin.md @@ -252,7 +252,7 @@ Example: ##### Guides - [Bouffalo Lab](/examples/lighting-app/bouffalolab/README.md) -- [EFR32 Window Covering](/examples/window-app/silabs/efr32/README.md) +- [EFR32 Window Covering](/examples/window-app/silabs/README.md) - [ESP32 All Clusters](/examples/all-clusters-app/esp32/README.md) - [ESP32 Lighting](/examples/lighting-app/esp32/README.md) - [ESP32 Temperature Sensor](/examples/temperature-measurement-app/esp32/README.md) diff --git a/docs/guides/esp32/build_app_and_commission.md b/docs/guides/esp32/build_app_and_commission.md index a9145a2efe7d21..d49cdd3e7c89e0 100644 --- a/docs/guides/esp32/build_app_and_commission.md +++ b/docs/guides/esp32/build_app_and_commission.md @@ -200,8 +200,9 @@ Note: In order to commission an ethernet device, from all-clusters-app enable these config options: select `ESP32-Ethernet-Kit` under `Demo->Device Type` and select `On-Network` rendezvous mode under `Demo->Rendezvous Mode`. Currently default ethernet board supported is IP101, if you want to use other types of -ethernet board then override the current implementation under -`ConnectivityManagerImpl::InitEthernet` +ethernet board then you can extend the `ESPEthernetDriver` class in your +application and override the current implementation under +`ESPEthernetDriver::Init` #### Commissioning Parameters diff --git a/docs/guides/esp32/ota.md b/docs/guides/esp32/ota.md index ab079250250b40..fb243735fc9696 100644 --- a/docs/guides/esp32/ota.md +++ b/docs/guides/esp32/ota.md @@ -67,3 +67,57 @@ chip-tool. On receiving this command OTA requestor will query for OTA image. ``` ./out/debug/chip-tool otasoftwareupdaterequestor announce-ota-provider 0 0 0 0 ``` + +## Encrypted OTA + +ESP32 supports transferring encrypted OTA images. Currently, an application +image can be encrypted/decrypted using an RSA-3072 key pair. + +### Firmware Changes + +- Enable configuration options for OTA requestor and Encrypted OTA: + + ``` + CONFIG_ENABLE_OTA_REQUESTOR=y + CONFIG_ENABLE_ENCRYPTED_OTA=y + ``` + +- Applications need to provide the key pair to the OTA image processor using + the `InitEncryptedOTA()` API to decrypt the received OTA image. + +- For testing purposes, in `examples/lighting-app/esp32`, there is a logic of + embedding the private key in the firmware. To quickly test, please generate + the key pair and rename it as `esp_image_encryption_public_key.pem` and copy + it to directory `examples/lighting-app/esp32`. + +Please follow the steps below to generate an application image for OTA upgrades: + +1. Generate a new RSA-3072 key pair or use an existing one. + + - To generate a key pair, use the following command: + + ``` + openssl genrsa -out esp_image_encryption_key.pem 3072 + ``` + + - Extract the public key from the key pair: + ``` + openssl rsa -in esp_image_encryption_key.pem -pubout -out esp_image_encryption_public_key.pem + ``` + +2. Encrypt the application binary using the + [esp_enc_img_gen.py](https://github.com/espressif/idf-extra-components/blob/master/esp_encrypted_img/tools/esp_enc_img_gen.py) + script. + + - Use the following command to encrypt the OTA image with the public key: + + ``` + python3 esp_enc_img_gen.py encrypt lighting-app.bin esp_image_encryption_public_key.pem lighting-app-encrypted.bin + ``` + + - Append the Matter OTA header: + ``` + src/app/ota_image_tool.py create --vendor-id 0xFFF1 --product-id 0x8000 --version 2 --version-str "v2.0" -da sha256 lighting-app-encrypted.bin lighting-app-encrypted-ota.bin + ``` + +3. Use the `lighting-app-encrypted-ota.bin` file with the OTA Provider app. diff --git a/docs/guides/esp32/setup_idf_chip.md b/docs/guides/esp32/setup_idf_chip.md index 2196109bea077e..7ee72089194645 100644 --- a/docs/guides/esp32/setup_idf_chip.md +++ b/docs/guides/esp32/setup_idf_chip.md @@ -69,6 +69,17 @@ source scripts/bootstrap.sh Whenever Matter environment is out of date, it can be updated by running above command. +In IDF v4.4.x, `esptool` is part of the esp-idf repository, but in IDF v5.x, it +is moved out as a Python package which can be installed using pip. + +If you are using IDF v5.x or later, please install `esptool` using the command +below: + +``` +# Please make sure to run this command in the Matter Python environment +python3 -m pip install esptool +``` + For MacOS, `gdbgui` python package will not be installed using `bootstrap.sh` script as it is restricted only for x64 Linux platforms. It is restricted because, building wheels for `gevent` (dependency of `gdbgui`) fails on MacOS. diff --git a/docs/guides/index.md b/docs/guides/index.md index 5d93bbb9b012ae..1cbfcabcf17c61 100644 --- a/docs/guides/index.md +++ b/docs/guides/index.md @@ -20,6 +20,7 @@ esp32/README - [Android - Building](./android_building.md) - [Apple - Testing with iPhone, iPad, macOS, Apple TV, HomePod, Watch, etc](./darwin.md) +- [ASR - Getting Started Guide](./asr_getting_started_guide.md) - [Espressif (ESP32) - Getting Started Guide](./esp32/README.md) - [Infineon PSoC6 - Software Update](./infineon_psoc6_software_update.md) - [Linux - Simulated Devices](./simulated_device_linux.md) diff --git a/docs/guides/nxp_manufacturing_flow.md b/docs/guides/nxp_manufacturing_flow.md index 019cfa67a38680..141f90c8b8b57c 100644 --- a/docs/guides/nxp_manufacturing_flow.md +++ b/docs/guides/nxp_manufacturing_flow.md @@ -6,141 +6,193 @@ orphan: true By default, the example application is configured to use generic test certificates and provisioning data embedded with the application code. It is -possible for a final stage application to generate its own manufacturing data: - -- Generate new certificates - - _PAI_VID_ and _PAI_PID_ variables must be changed accordingly inside - generate_cert.sh script - - _generate_cert.sh_ script needs as input parameter the path to chip-cert - tool (compile it from ./src/tools/chip-cert). The output of the script is: - the DAC, PAI and PAA certificates. The DAC and PAI certificates will be - written in a special section of the internal flash, while the PAA will be - used on the chip-tool side as trust anchor. Please note that for _real - production manufacturing_ the "production PAA" is trusted via the DCL rather - than thorough PAA certificate generated along with DAC and PAI. The PAI cert - may also have a different lifecycle. - - ``` - user@ubuntu:~/Desktop/git/connectedhomeip$ ./examples/platform/nxp/k32w/k32w0/scripts/generate_cert.sh ./src/tools/chip-cert/out/chip-cert - ``` - -- Generate new provisioning data and convert all the data to a binary - (unencrypted data): - - ``` - user@ubuntu:~/Desktop/git/connectedhomeip$ python3 ./scripts/tools/nxp/factory_data_generator/generate.py -i 10000 -s UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA= -p 14014 -d 1000 --vid 0x1037 --pid 0xa220 --vendor_name "NXP Semiconductors" --product_name "Lighting app" --serial_num "SN:12345678" --date "2022-10-21" --hw_version 1 --hw_version_str "1.0" --cert_declaration /home/ubuntu/manufacturing/Chip-Test-CD-1037-a220.der --dac_cert /home/ubuntu/manufacturing/Chip-DAC-NXP-Cert.der --dac_key /home/ubuntu/manufacturing/Chip-DAC-NXP-Key.der --pai_cert /home/ubuntu/manufacturing/Chip-PAI-NXP-Cert.der --spake2p_path ./src/tools/spake2p/out/spake2p --out out.bin - ``` - -- Same example as above, but with an already generated verifier passed as - input: - - ``` - user@ubuntu:~/Desktop/git/connectedhomeip$ python3 ./scripts/tools/nxp/factory_data_generator/generate.py -i 10000 -s UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA= -p 14014 -d 1000 --vid 0x1037 --pid 0xa220 --vendor_name "NXP Semiconductors" --product_name "Lighting app" --serial_num "SN:12345678" --date "2022-10-21" --hw_version 1 --hw_version_str "1.0" --cert_declaration /home/ubuntu/manufacturing/Chip-Test-CD-1037-a220.der --dac_cert /home/ubuntu/manufacturing/Chip-DAC-NXP-Cert.der --dac_key /home/ubuntu/manufacturing/Chip-DAC-NXP-Key.der --pai_cert /home/ubuntu/manufacturing/Chip-PAI-NXP-Cert.der --spake2p_path ./src/tools/spake2p/out/spake2p --spake2p_verifier ivD5n3L2t5+zeFt6SjW7BhHRF30gFXWZVvvXgDxgCNcE+BGuTA5AUaVm3qDZBcMMKn1a6CakI4SxyPUnJr0CpJ4pwpr0DvpTlkQKqaRvkOQfAQ1XDyf55DuavM5KVGdDrg== --out out.bin - ``` +possible for a final stage application to generate its own manufacturing data +using the procedure described below. -- Generate new provisioning data and convert all the data to a binary - (encrypted data with the AES key): +## 1. Prerequisites - ``` - user@ubuntu:~/Desktop/git/connectedhomeip$ python3 ./scripts/tools/nxp/factory_data_generator/generate.py -i 10000 -s UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA= -p 14014 -d 1000 --vid 0x1037 --pid 0xa220 --vendor_name "NXP Semiconductors" --product_name "Lighting app" --serial_num "SN:12345678" --date "2022-10-21" --hw_version 1 --hw_version_str "1.0" --cert_declaration /home/ubuntu/manufacturing/Chip-Test-CD-1037-a220.der --dac_cert /home/ubuntu/manufacturing/Chip-DAC-NXP-Cert.der --dac_key /home/ubuntu/manufacturing/Chip-DAC-NXP-Key.der --pai_cert /home/ubuntu/manufacturing/Chip-PAI-NXP-Cert.der --spake2p_path ./src/tools/spake2p/out/spake2p --out outEncrypted.bin --aes128_key 2B7E151628AED2A6ABF7158809CF4F3C - ``` +Build `chip-cert` tool: - Here is the interpretation of the parameters: +``` +cd src/tools/chip-cert +gn gen out +ninja -C out +``` - ``` - -i -> SPAKE2+ iteration - -s -> SPAKE2+ salt (passed as base64 encoded string) - -p -> SPAKE2+ passcode - -d -> discriminator - --vid -> Vendor ID - --pid -> Product ID - --vendor_name -> Vendor Name - --product_name -> Product Name - --serial_num -> Serial Number - --date -> Manufacturing Date (YYYY-MM-DD format) - --hw_version -> Hardware Version as number - --hw_version_str -> Hardware Version as string - --cert_declaration -> path to the Certification Declaration (der format) location - --dac_cert -> path to the DAC (der format) location - --dac_key -> path to the DAC key (der format) location - --pai_cert -> path to the PAI (der format) location - --spake2p_path -> path to the spake2p tool (compile it from ./src/tools/spake2p) - --out -> name of the binary that will be used for storing all the generated data - --aes128_key -> 128 bits AES key used to encrypt the whole dataset - --spake2p_verifier -> SPAKE2+ verifier (passed as base64 encoded string). If this option is set, - all SPAKE2+ inputs will be encoded in the final binary. The spake2p tool - will not be used to generate a new verifier on the fly. - ``` +Build `spake2p` tool: -- Write out.bin to the \$platform: +``` +cd src/tool/spake2p +gn gen out +ninja -C out +``` + +### Environment variables + +A user can customize the certificate generation by setting some environment +variables that are used within the utility scripts. Please note that the values +below are just an example and should be modified accordingly: - For the K32W0x1 platform, the binary needs to be written in the internal - flash at location 0x9D600 using DK6Programmer: +``` +export FACTORY_DATA_DEST=path/factory/data/dest +export DEVICE_TYPE=100 +export DATE=$(date +"%F") +export TIME=$(date +"%T") +export LIFETIME="7305" +export VID="1037" +export PID="A220" +``` + +`FACTORY_DATA_DEST` is the path where all factory related data is generated. + +`DEVICE_TYPE` should be updated according to the application device type (0x0100 +for the provided K32W0 lighting app). + +Additionally, `PAA_CERT` and `PAA_KEY` paths can be specified to use an already +existent **PAA**: + +``` +export PAA_CERT=path/certs/Chip-PAA-NXP-Cert.pem +export PAA_KEY=path/certs/Chip-PAA-NXP-Key.pem +``` + +## 2. Generate + +### a. Certificates + +``` +./scripts/tools/nxp/generate_cert.sh ./src/tools/chip-cert/out/chip-cert +``` + +The output of the script is the **DAC**, **PAI** and **PAA** certificates. If +`FACTORY_DATA_DEST` is set, the certificates will be moved there. The **DAC** +and **PAI** certificates will be written in a special section of the internal +flash, while the **PAA** will be used by `chip-tool` as trust anchor. Please +note that for _real production manufacturing_ the "production PAA" is trusted +via the **DCL** rather than through the generated **PAA** certificate. The +**PAI** certificate may also have a different lifecycle. - ``` - DK6Programmer.exe -Y -V2 -s -P 1000000 -Y -p FLASH@0x9D600="out.bin" - ``` +### b. Certification declaration (CD) -- Generate a new CD (certification declaration): +``` +./src/tools/chip-cert/out/chip-cert gen-cd --key ./credentials/test/certification-declaration/Chip-Test-CD-Signing-Key.pem --cert ./credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem --out $FACTORY_DATA_DEST/Chip-Test-CD-$VID-$PID.der --format-version 1 --vendor-id "0x$VID" --product-id "0x$PID" --device-type-id "0x$DEVICE_TYPE" --certificate-id "ZIG20142ZB330003-24" --security-level 0 --security-info 0 --version-number 9876 --certification-type 1 +``` - Inside _gen-test-cds.sh_, the parameters _vids_, _pid0_, _device_type_id_ - must be changed accordingly. Use _Chip-Test-CD-Signing-\*_ key and - certificate already available in - _./credentials/test/certification-declaration/_ which acts as CSA - Certificate. This CSA certificate is also hard-coded as Trust Anchor in the - current chip-tool version. To use this certificate and avoid generating a - new one, lines 69-70 must be commented in the _gen-test-cds.sh_ script (the - ones that are generating a new CD signing authority). +The command above is extracted from `./credentials/test/gen-test-cds.sh` script. +The CD generation uses predefined key and certificate found in +`./credentials/test/certification-declaration`. This **CSA** certificate is also +hard-coded as Trust Anchor in the current `chip-tool` version. - ``` - user@ubuntu:~/Desktop/git/connectedhomeip$ ./credentials/test/gen-test-cds.sh ./src/tools/chip-cert/out/chip-cert - ``` +By default, the CD is added to the factory data section. In order to have it +integrated in the application binary, set +`CHIP_USE_DEVICE_CONFIG_CERTIFICATION_DECLARATION` to 1 in the application's +CHIPProjectConfig.h file. -- Set the correct VID/PID and CD in the - examples/$APP_NAME/nxp/$platform/ChipProjectConfig.h file VID and PID values - should correspond to the ones used for DAC. CD bytes should be the ones - obtained at the step above: +### c. Provisioning data - ``` - user@ubuntu:~/manufacturing hexdump -ve '1/1 "0x%.2x, "' Chip-Test-CD-1037-A220.der - ``` +Generate new provisioning data and convert all the data to a binary (unencrypted +data): -- Use _chip_with_factory_data=1_ gn compilation argument +``` +python3 ./scripts/tools/nxp/factory_data_generator/generate.py -i 10000 -s UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA= -p 14014 -d 1000 --vid "0x$VID" --pid "0x$PID" --vendor_name "NXP Semiconductors" --product_name "Lighting app" --serial_num "12345678" --date "$DATE" --hw_version 1 --hw_version_str "1.0" --cert_declaration $FACTORY_DATA_DEST/Chip-Test-CD-$VID-$PID.der --dac_cert $FACTORY_DATA_DEST/Chip-DAC-NXP-$VID-$PID-Cert.der --dac_key $FACTORY_DATA_DEST/Chip-DAC-NXP-$VID-$PID-Key.der --pai_cert $FACTORY_DATA_DEST/Chip-PAI-NXP-$VID-$PID-Cert.der --spake2p_path ./src/tools/spake2p/out/spake2p --unique_id "00112233445566778899aabbccddeeff" --out $FACTORY_DATA_DEST/factory_data.bin +``` - This is needed in order to load the data from the special flash section. - Build and flash the application. +Same example as above, but with an already generated verifier passed as input: -- Run chip-tool with a new PAA: +``` +python3 ./scripts/tools/nxp/factory_data_generator/generate.py -i 10000 -s UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA= -p 14014 -d 1000 --vid "0x$VID" --pid "0x$PID" --vendor_name "NXP Semiconductors" --product_name "Lighting app" --serial_num "12345678" --date "$DATE" --hw_version 1 --hw_version_str "1.0" --cert_declaration $FACTORY_DATA_DEST/Chip-Test-CD-$VID-$PID.der --dac_cert $FACTORY_DATA_DEST/Chip-DAC-NXP-$VID-$PID-Cert.der --dac_key $FACTORY_DATA_DEST/Chip-DAC-NXP-$VID-$PID-Key.der --pai_cert $FACTORY_DATA_DEST/Chip-PAI-NXP-$VID-$PID-Cert.der --spake2p_path ./src/tools/spake2p/out/spake2p --spake2p_verifier ivD5n3L2t5+zeFt6SjW7BhHRF30gFXWZVvvXgDxgCNcE+BGuTA5AUaVm3qDZBcMMKn1a6CakI4SxyPUnJr0CpJ4pwpr0DvpTlkQKqaRvkOQfAQ1XDyf55DuavM5KVGdDrg== --unique_id "00112233445566778899aabbccddeeff" --out $FACTORY_DATA_DEST/factory_data.bin +``` - ``` - ./chip-tool pairing ble-thread 2 hex: $hex_value 14014 1000 --paa-trust-store-path /home/ubuntu/certs/paa - ``` +Generate new provisioning data and convert all the data to a binary (encrypted +data with the AES key). Add the following option to one of the above examples: - Here is the interpretation of the parameters: +``` +--aes128_key 2B7E151628AED2A6ABF7158809CF4F3C +``` - ``` - --paa-trust-store-path -> path to the generated PAA (der format) - ``` +Here is the interpretation of the **required** parameters: - _paa-trust-store-path_ must contain only the PAA certificate. Avoid placing - other certificates in the same location as this may confuse chip-tool. +``` +-i -> SPAKE2+ iteration +-s -> SPAKE2+ salt (passed as base64 encoded string) +-p -> SPAKE2+ passcode +-d -> discriminator +--vid -> Vendor ID +--pid -> Product ID +--vendor_name -> Vendor Name +--product_name -> Product Name +--hw_version -> Hardware Version as number +--hw_version_str -> Hardware Version as string +--cert_declaration -> path to the Certification Declaration (der format) location +--dac_cert -> path to the DAC (der format) location +--dac_key -> path to the DAC key (der format) location +--pai_cert -> path to the PAI (der format) location +--spake2p_path -> path to the spake2p tool (compile it from ./src/tools/spake2p) +--out -> name of the binary that will be used for storing all the generated data - PAA certificate can be copied to the chip-tool machine using SCP for - example. - This is needed for testing self-generated DACs, but likely not required for - "true production" with production PAI issued DACs. +``` -- Useful information/Known issues +Here is the interpretation of the **optional** parameters: - Implementation of manufacturing data provisioning has been validated using test certificates generated by OpenSSL 1.1.1l. +``` +--dac_key_password -> Password to decode DAC key +--spake2p_verifier -> SPAKE2+ verifier (passed as base64 encoded string). If this option is set, + all SPAKE2+ inputs will be encoded in the final binary. The spake2p tool + will not be used to generate a new verifier on the fly. +--aes128_key -> 128 bits AES key used to encrypt the whole dataset +--date -> Manufacturing Date (YYYY-MM-DD format) +--part_number -> Part number as string +--product_url -> Product URL as string +--product_label -> Product label as string +--serial_num -> Serial Number +--unique_id -> Unique id used for rotating device id generation +``` - Also, demo DAC, PAI and PAA certificates needed in case _chip_with_factory_data=1_ is used can be found in examples/platform/nxp/k32w/k32w0/scripts/demo_generated_certs. +## 3. Write provisioning data - dut1/dut2 folders contains different DACs/Private Keys and can be used for testing topologies with 2 DUTS. +For the **K32W0x1** variants, the binary needs to be written in the internal +flash at location **0x9D600** using `DK6Programmer.exe`: - out_dut1.bin/out2_dut2.bin contains the corresponding DACs/PAIs generated using generate_nxp_chip_factory_bin.py script. The discriminator is 14014 and the passcode is 1000. +``` +DK6Programmer.exe -Y -V2 -s -P 1000000 -Y -p FLASH@0x9D600="factory_data.bin" +``` - These demo certificates are working with the CDs installed in CHIPProjectConfig.h. +For the **RT1060**, **RT1170** and **RW61X** platform, the binary needs to be +written using `MCUXpresso Flash Tool GUI` at the address value corresponding to +`__FACTORY_DATA_START` (the map file of the application should be checked to get +the exact value). + +## 4. Build app and usage + +Use `chip_with_factory_data=1` when compiling to enable factory data usage. + +Run chip-tool with a new PAA: + +``` +./chip-tool pairing ble-thread 2 hex: $hex_value 14014 1000 --paa-trust-store-path /home/ubuntu/certs/paa +``` + +Here is the interpretation of the parameters: + +``` +--paa-trust-store-path -> path to the generated PAA (der format) +``` + +`paa-trust-store-path` must contain only the PAA certificate. Avoid placing +other certificates in the same location as this may confuse `chip-tool`. + +**PAA** certificate can be copied to the chip-tool machine using **SCP** for +example. + +This is needed for testing self-generated **DACs**, but likely not required for +"true production" with production **PAI** issued **DACs**. + +## 5. Useful information/Known issues + +Implementation of manufacturing data provisioning has been validated using test +certificates generated by `OpenSSL 1.1.1l`. + +Also, demo **DAC**, **PAI** and **PAA** certificates needed in case +`chip_with_factory_data=1` is used can be found in +`./scripts/tools/nxp/demo_generated_certs`. diff --git a/docs/guides/repl/.ipynb_checkpoints/Matter - Basic Interactions-checkpoint.ipynb b/docs/guides/repl/.ipynb_checkpoints/Matter - Basic Interactions-checkpoint.ipynb index 12427060a4c542..4eda97c156b110 100644 --- a/docs/guides/repl/.ipynb_checkpoints/Matter - Basic Interactions-checkpoint.ipynb +++ b/docs/guides/repl/.ipynb_checkpoints/Matter - Basic Interactions-checkpoint.ipynb @@ -1477,7 +1477,7 @@ "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.ScanMaxTimeSeconds'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.ConnectMaxTimeSeconds'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.InterfaceEnabled'>: False,\n", - "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'>: <NetworkCommissioningStatus.kSuccess: 0>,\n", + "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'>: <NetworkCommissioningStatusEnum.kSuccess: 0>,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkID'>: b'',\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastConnectErrorValue'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.FeatureMap'>: 1,\n", @@ -1799,7 +1799,7 @@ "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.ScanMaxTimeSeconds'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.ConnectMaxTimeSeconds'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.InterfaceEnabled'>: False,\n", - "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'>: <NetworkCommissioningStatus.kSuccess: 0>,\n", + "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'>: <NetworkCommissioningStatusEnum.kSuccess: 0>,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkID'>: b'',\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastConnectErrorValue'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.FeatureMap'>: 0,\n", @@ -2493,7 +2493,7 @@ "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.ScanMaxTimeSeconds'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.ConnectMaxTimeSeconds'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.InterfaceEnabled'\u001b[0m\u001b[1m>\u001b[0m: \u001b[3;91mFalse\u001b[0m,\n", - "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1m<\u001b[0m\u001b[1;95mNetworkCommissioningStatus.kSuccess:\u001b[0m\u001b[39m \u001b[0m\u001b[1;36m0\u001b[0m\u001b[1m>\u001b[0m,\n", + "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1m<\u001b[0m\u001b[1;95mNetworkCommissioningStatusEnum.kSuccess:\u001b[0m\u001b[39m \u001b[0m\u001b[1;36m0\u001b[0m\u001b[1m>\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkID'\u001b[0m\u001b[1m>\u001b[0m: \u001b[32mb''\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastConnectErrorValue'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.FeatureMap'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m1\u001b[0m,\n", @@ -2815,7 +2815,7 @@ "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.ScanMaxTimeSeconds'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.ConnectMaxTimeSeconds'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.InterfaceEnabled'\u001b[0m\u001b[1m>\u001b[0m: \u001b[3;91mFalse\u001b[0m,\n", - "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1m<\u001b[0m\u001b[1;95mNetworkCommissioningStatus.kSuccess:\u001b[0m\u001b[39m \u001b[0m\u001b[1;36m0\u001b[0m\u001b[1m>\u001b[0m,\n", + "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1m<\u001b[0m\u001b[1;95mNetworkCommissioningStatusEnum.kSuccess:\u001b[0m\u001b[39m \u001b[0m\u001b[1;36m0\u001b[0m\u001b[1m>\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkID'\u001b[0m\u001b[1m>\u001b[0m: \u001b[32mb''\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastConnectErrorValue'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.FeatureMap'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", diff --git a/docs/guides/repl/Matter_Access_Control.ipynb b/docs/guides/repl/Matter_Access_Control.ipynb index 8bc0c44a72a5ac..4d0d1853af206e 100644 --- a/docs/guides/repl/Matter_Access_Control.ipynb +++ b/docs/guides/repl/Matter_Access_Control.ipynb @@ -733,7 +733,7 @@ " fabricIndex = 1,\n", " privilege = Clusters.AccessControl.Enums.AccessControlEntryPrivilegeEnum.kOperate,\n", " authMode = Clusters.AccessControl.Enums.AccessControlEntryAuthModeEnum.kCase,\n", - " targets = [ Clusters.AccessControl.Structs.Target(\n", + " targets = [ Clusters.AccessControl.Structs.AccessControlTargetStruct(\n", " endpoint = 1,\n", " ) ] ) )\n", "acl" diff --git a/docs/guides/repl/Matter_Basic_Interactions.ipynb b/docs/guides/repl/Matter_Basic_Interactions.ipynb index f1ca29e36cc6ac..c87663f6e26959 100644 --- a/docs/guides/repl/Matter_Basic_Interactions.ipynb +++ b/docs/guides/repl/Matter_Basic_Interactions.ipynb @@ -1470,7 +1470,7 @@ "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.ScanMaxTimeSeconds'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.ConnectMaxTimeSeconds'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.InterfaceEnabled'>: False,\n", - "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'>: <NetworkCommissioningStatus.kSuccess: 0>,\n", + "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'>: <NetworkCommissioningStatusEnum.kSuccess: 0>,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkID'>: b'',\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastConnectErrorValue'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.FeatureMap'>: 1,\n", @@ -1792,7 +1792,7 @@ "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.ScanMaxTimeSeconds'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.ConnectMaxTimeSeconds'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.InterfaceEnabled'>: False,\n", - "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'>: <NetworkCommissioningStatus.kSuccess: 0>,\n", + "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'>: <NetworkCommissioningStatusEnum.kSuccess: 0>,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkID'>: b'',\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.LastConnectErrorValue'>: 0,\n", "│ │ │ <class 'chip.clusters.Objects.NetworkCommissioning.Attributes.FeatureMap'>: 0,\n", @@ -2486,7 +2486,7 @@ "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.ScanMaxTimeSeconds'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.ConnectMaxTimeSeconds'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.InterfaceEnabled'\u001b[0m\u001b[1m>\u001b[0m: \u001b[3;91mFalse\u001b[0m,\n", - "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1m<\u001b[0m\u001b[1;95mNetworkCommissioningStatus.kSuccess:\u001b[0m\u001b[39m \u001b[0m\u001b[1;36m0\u001b[0m\u001b[1m>\u001b[0m,\n", + "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1m<\u001b[0m\u001b[1;95mNetworkCommissioningStatusEnum.kSuccess:\u001b[0m\u001b[39m \u001b[0m\u001b[1;36m0\u001b[0m\u001b[1m>\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkID'\u001b[0m\u001b[1m>\u001b[0m: \u001b[32mb''\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastConnectErrorValue'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.FeatureMap'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m1\u001b[0m,\n", @@ -2808,7 +2808,7 @@ "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.ScanMaxTimeSeconds'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.ConnectMaxTimeSeconds'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.InterfaceEnabled'\u001b[0m\u001b[1m>\u001b[0m: \u001b[3;91mFalse\u001b[0m,\n", - "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1m<\u001b[0m\u001b[1;95mNetworkCommissioningStatus.kSuccess:\u001b[0m\u001b[39m \u001b[0m\u001b[1;36m0\u001b[0m\u001b[1m>\u001b[0m,\n", + "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkingStatus'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1m<\u001b[0m\u001b[1;95mNetworkCommissioningStatusEnum.kSuccess:\u001b[0m\u001b[39m \u001b[0m\u001b[1;36m0\u001b[0m\u001b[1m>\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastNetworkID'\u001b[0m\u001b[1m>\u001b[0m: \u001b[32mb''\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.LastConnectErrorValue'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.clusters.Objects.NetworkCommissioning.Attributes.FeatureMap'\u001b[0m\u001b[1m>\u001b[0m: \u001b[1;36m0\u001b[0m,\n", 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 946139ffd745b8..dd8e49f387652d 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 @@ -1,6 +1,18 @@ // This IDL was generated automatically by ZAP. // It is for view/code review purposes only. +struct ModeTagStruct { + optional vendor_id mfgCode = 0; + enum16 value = 1; + optional char_string<64> tagName = 2; +} + +struct ModeOptionStruct { + char_string<64> label = 0; + int8u mode = 1; + ModeTagStruct modeTags[] = 2; +} + struct ApplicationStruct { int16u catalogVendorID = 0; char_string applicationID = 1; @@ -13,7 +25,7 @@ struct LabelStruct { /** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */ server cluster Identify = 3 { - enum IdentifyEffectIdentifier : ENUM8 { + enum EffectIdentifierEnum : ENUM8 { kBlink = 0; kBreathe = 1; kOkay = 2; @@ -22,21 +34,21 @@ server cluster Identify = 3 { kStopEffect = 255; } - enum IdentifyEffectVariant : ENUM8 { + enum EffectVariantEnum : ENUM8 { kDefault = 0; } - enum IdentifyIdentifyType : ENUM8 { + enum IdentifyTypeEnum : ENUM8 { kNone = 0; - kVisibleLight = 1; - kVisibleLED = 2; + kLightOutput = 1; + kVisibleIndicator = 2; kAudibleBeep = 3; kDisplay = 4; kActuator = 5; } attribute int16u identifyTime = 0; - readonly attribute enum8 identifyType = 1; + readonly attribute IdentifyTypeEnum identifyType = 1; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -49,8 +61,8 @@ server cluster Identify = 3 { } request struct TriggerEffectRequest { - IdentifyEffectIdentifier effectIdentifier = 0; - IdentifyEffectVariant effectVariant = 1; + EffectIdentifierEnum effectIdentifier = 0; + EffectVariantEnum effectVariant = 1; } command access(invoke: manage) Identify(IdentifyRequest): DefaultSuccess = 0; @@ -63,7 +75,11 @@ server cluster Groups = 4 { kGroupNames = 0x1; } - readonly attribute bitmap8 nameSupport = 0; + bitmap NameSupportBitmap : BITMAP8 { + kGroupNames = 0x80; + } + + readonly attribute NameSupportBitmap nameSupport = 0; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -134,7 +150,7 @@ server cluster Scenes = 5 { struct AttributeValuePair { optional attrib_id attributeID = 0; - int8u attributeValue[] = 1; + int32u attributeValue = 1; } struct ExtensionFieldSet { @@ -147,6 +163,9 @@ server cluster Scenes = 5 { readonly attribute group_id currentGroup = 2; readonly attribute boolean sceneValid = 3; readonly attribute bitmap8 nameSupport = 4; + readonly attribute nullable node_id lastConfiguredBy = 5; + readonly attribute int16u sceneTableSize = 6; + readonly attribute int8u remainingCapacity = 7; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -565,7 +584,7 @@ server cluster AccessControl = 31 { kRemoved = 2; } - struct Target { + struct AccessControlTargetStruct { nullable cluster_id cluster = 0; nullable endpoint_no endpoint = 1; nullable devtype_id deviceType = 2; @@ -575,7 +594,7 @@ server cluster AccessControl = 31 { fabric_sensitive AccessControlEntryPrivilegeEnum privilege = 1; fabric_sensitive AccessControlEntryAuthModeEnum authMode = 2; nullable fabric_sensitive int64u subjects[] = 3; - nullable fabric_sensitive Target targets[] = 4; + nullable fabric_sensitive AccessControlTargetStruct targets[] = 4; fabric_idx fabricIndex = 254; } @@ -1320,7 +1339,7 @@ server cluster GeneralCommissioning = 48 { /** Functionality to configure, enable, disable network credentials and access on a Matter device. */ server cluster NetworkCommissioning = 49 { - enum NetworkCommissioningStatus : ENUM8 { + enum NetworkCommissioningStatusEnum : ENUM8 { kSuccess = 0; kOutOfRange = 1; kBoundsExceeded = 2; @@ -1336,12 +1355,13 @@ server cluster NetworkCommissioning = 49 { kUnknownError = 12; } - enum WiFiBand : ENUM8 { + enum WiFiBandEnum : ENUM8 { k2g4 = 0; k3g65 = 1; k5g = 2; k6g = 3; k60g = 4; + k1g = 5; } bitmap Feature : BITMAP32 { @@ -1350,7 +1370,7 @@ server cluster NetworkCommissioning = 49 { kEthernetNetworkInterface = 0x4; } - bitmap WiFiSecurity : BITMAP8 { + bitmap WiFiSecurityBitmap : BITMAP8 { kUnencrypted = 0x1; kWep = 0x2; kWpaPersonal = 0x4; @@ -1358,12 +1378,12 @@ server cluster NetworkCommissioning = 49 { kWpa3Personal = 0x10; } - struct NetworkInfo { + struct NetworkInfoStruct { octet_string<32> networkID = 0; boolean connected = 1; } - struct ThreadInterfaceScanResult { + struct ThreadInterfaceScanResultStruct { int16u panId = 0; int64u extendedPanId = 1; char_string<16> networkName = 2; @@ -1374,21 +1394,21 @@ server cluster NetworkCommissioning = 49 { int8u lqi = 7; } - struct WiFiInterfaceScanResult { - WiFiSecurity security = 0; + struct WiFiInterfaceScanResultStruct { + WiFiSecurityBitmap security = 0; octet_string<32> ssid = 1; octet_string<6> bssid = 2; int16u channel = 3; - WiFiBand wiFiBand = 4; + WiFiBandEnum wiFiBand = 4; int8s rssi = 5; } readonly attribute access(read: administer) int8u maxNetworks = 0; - readonly attribute access(read: administer) NetworkInfo networks[] = 1; + readonly attribute access(read: administer) NetworkInfoStruct networks[] = 1; readonly attribute int8u scanMaxTimeSeconds = 2; readonly attribute int8u connectMaxTimeSeconds = 3; attribute access(write: administer) boolean interfaceEnabled = 4; - readonly attribute access(read: administer) nullable NetworkCommissioningStatus lastNetworkingStatus = 5; + readonly attribute access(read: administer) nullable NetworkCommissioningStatusEnum lastNetworkingStatus = 5; readonly attribute access(read: administer) nullable octet_string<32> lastNetworkID = 6; readonly attribute access(read: administer) nullable int32s lastConnectErrorValue = 7; readonly attribute command_id generatedCommandList[] = 65528; @@ -1431,20 +1451,20 @@ server cluster NetworkCommissioning = 49 { } response struct ScanNetworksResponse = 1 { - NetworkCommissioningStatus networkingStatus = 0; + NetworkCommissioningStatusEnum networkingStatus = 0; optional CHAR_STRING debugText = 1; - optional WiFiInterfaceScanResult wiFiScanResults[] = 2; - optional ThreadInterfaceScanResult threadScanResults[] = 3; + optional WiFiInterfaceScanResultStruct wiFiScanResults[] = 2; + optional ThreadInterfaceScanResultStruct threadScanResults[] = 3; } response struct NetworkConfigResponse = 5 { - NetworkCommissioningStatus networkingStatus = 0; + NetworkCommissioningStatusEnum networkingStatus = 0; optional CHAR_STRING<512> debugText = 1; optional INT8U networkIndex = 2; } response struct ConnectNetworkResponse = 7 { - NetworkCommissioningStatus networkingStatus = 0; + NetworkCommissioningStatusEnum networkingStatus = 0; optional CHAR_STRING debugText = 1; nullable INT32S errorValue = 2; } @@ -1640,14 +1660,14 @@ server cluster ThreadNetworkDiagnostics = 53 { kNotConnected = 1; } - enum NetworkFault : ENUM8 { + enum NetworkFaultEnum : ENUM8 { kUnspecified = 0; kLinkDown = 1; kHardwareFailure = 2; kNetworkJammed = 3; } - enum RoutingRole : ENUM8 { + enum RoutingRoleEnum : ENUM8 { kUnspecified = 0; kUnassigned = 1; kSleepyEndDevice = 2; @@ -1664,7 +1684,7 @@ server cluster ThreadNetworkDiagnostics = 53 { kMACCounts = 0x8; } - struct NeighborTable { + struct NeighborTableStruct { int64u extAddress = 0; int32u age = 1; int16u rloc16 = 2; @@ -1696,7 +1716,7 @@ server cluster ThreadNetworkDiagnostics = 53 { boolean channelMaskPresent = 11; } - struct RouteTable { + struct RouteTableStruct { int64u extAddress = 0; int16u rloc16 = 1; int8u routerId = 2; @@ -1719,19 +1739,19 @@ server cluster ThreadNetworkDiagnostics = 53 { } info event NetworkFaultChange = 1 { - NetworkFault current[] = 0; - NetworkFault previous[] = 1; + NetworkFaultEnum current[] = 0; + NetworkFaultEnum previous[] = 1; } readonly attribute nullable int16u channel = 0; - readonly attribute nullable RoutingRole routingRole = 1; + readonly attribute nullable RoutingRoleEnum routingRole = 1; readonly attribute nullable char_string<16> networkName = 2; readonly attribute nullable int16u panId = 3; readonly attribute nullable int64u extendedPanId = 4; readonly attribute nullable octet_string<17> meshLocalPrefix = 5; readonly attribute int64u overrunCount = 6; - readonly attribute NeighborTable neighborTable[] = 7; - readonly attribute RouteTable routeTable[] = 8; + 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; @@ -1785,7 +1805,7 @@ server cluster ThreadNetworkDiagnostics = 53 { readonly attribute nullable SecurityPolicy securityPolicy = 59; readonly attribute nullable octet_string<4> channelPage0Mask = 60; readonly attribute nullable OperationalDatasetComponents operationalDatasetComponents = 61; - readonly attribute NetworkFault activeNetworkFaultsList[] = 62; + readonly attribute NetworkFaultEnum activeNetworkFaultsList[] = 62; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -1826,6 +1846,7 @@ server cluster WiFiNetworkDiagnostics = 54 { kN = 3; kAc = 4; kAx = 5; + kAh = 6; } bitmap Feature : BITMAP32 { @@ -2172,10 +2193,6 @@ server cluster GroupKeyManagement = 63 { INT16U groupKeySetID = 0; } - request struct KeySetReadAllIndicesRequest { - INT16U groupKeySetIDs[] = 0; - } - response struct KeySetReadResponse = 2 { GroupKeySetStruct groupKeySet = 0; } @@ -2187,7 +2204,7 @@ server cluster GroupKeyManagement = 63 { fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0; fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1; fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3; - fabric command access(invoke: administer) KeySetReadAllIndices(KeySetReadAllIndicesRequest): KeySetReadAllIndicesResponse = 4; + fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4; } /** The Fixed Label Cluster provides a feature for the device to tag an endpoint with zero or more read only @@ -2287,22 +2304,43 @@ server cluster IcdManagement = 70 { /** Attributes and commands for selecting a mode from a list of supported options. */ server cluster ModeSelect = 80 { + enum ModeTag : ENUM16 { + kAuto = 0; + kQuick = 1; + kQuiet = 2; + kLowNoise = 3; + kLowEnergy = 4; + kVacation = 5; + kMin = 6; + kMax = 7; + kNight = 8; + kDay = 9; + } + + enum StatusCode : ENUM8 { + kSuccess = 0; + kUnsupportedMode = 1; + kGenericFailure = 2; + } + bitmap Feature : BITMAP32 { - kDeponoff = 0x1; + kOnOff = 0x1; + kExtendedStatus = 0x2; } - struct SemanticTagStruct { - vendor_id mfgCode = 0; + struct ModeTagStruct { + optional vendor_id mfgCode = 0; enum16 value = 1; + optional char_string<64> tagName = 2; } struct ModeOptionStruct { char_string<64> label = 0; int8u mode = 1; - SemanticTagStruct semanticTags[] = 2; + ModeTagStruct modeTags[] = 2; } - readonly attribute char_string<32> description = 0; + readonly attribute char_string<64> description = 0; readonly attribute nullable enum16 standardNamespace = 1; readonly attribute ModeOptionStruct supportedModes[] = 2; readonly attribute int8u currentMode = 3; @@ -2323,193 +2361,581 @@ server cluster ModeSelect = 80 { command ChangeToMode(ChangeToModeRequest): DefaultSuccess = 0; } -/** An interface to a generic way to secure a door */ -server cluster DoorLock = 257 { - enum AlarmCodeEnum : ENUM8 { - kLockJammed = 0; - kLockFactoryReset = 1; - kLockRadioPowerCycled = 3; - kWrongCodeEntryLimit = 4; - kFrontEsceutcheonRemoved = 5; - kDoorForcedOpen = 6; - kDoorAjar = 7; - kForcedUser = 8; +/** Attributes for reporting air quality classification */ +server cluster AirQuality = 91 { + enum AirQualityEnum : ENUM8 { + kUnknown = 0; + kGood = 1; + kFair = 2; + kModerate = 3; + kPoor = 4; + kVeryPoor = 5; + kExtremelyPoor = 6; } - enum CredentialRuleEnum : ENUM8 { - kSingle = 0; - kDual = 1; - kTri = 2; + bitmap Feature : BITMAP32 { + kFair = 0x1; + kModerate = 0x2; + kVeryPoor = 0x4; + kExtremelyPoor = 0x8; } - enum CredentialTypeEnum : ENUM8 { - kProgrammingPIN = 0; - kPin = 1; - kRfid = 2; - kFingerprint = 3; - kFingerVein = 4; - kFace = 5; + readonly attribute AirQualityEnum airQuality = 0; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring HEPA filters in a device */ +server cluster HepaFilterMonitoring = 113 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; } - enum DataOperationTypeEnum : ENUM8 { - kAdd = 0; - kClear = 1; - kModify = 2; + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; } - enum DlLockState : ENUM8 { - kNotFullyLocked = 0; - kLocked = 1; - kUnlocked = 2; - kUnlatched = 3; + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; } - enum DlLockType : ENUM8 { - kDeadBolt = 0; - kMagnetic = 1; - kOther = 2; - kMortise = 3; - kRim = 4; - kLatchBolt = 5; - kCylindricalLock = 6; - kTubularLock = 7; - kInterconnectedLock = 8; - kDeadLatch = 9; - kDoorFurniture = 10; - kEurocylinder = 11; + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring activated carbon filters in a device */ +server cluster ActivatedCarbonFilterMonitoring = 114 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; } - enum DlStatus : ENUM8 { - kSuccess = 0; - kFailure = 1; - kDuplicate = 2; - kOccupied = 3; - kInvalidField = 133; - kResourceExhausted = 137; - kNotFound = 139; + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; } - enum DoorLockOperationEventCode : ENUM8 { - kUnknownOrMfgSpecific = 0; - kLock = 1; - kUnlock = 2; - kLockInvalidPinOrId = 3; - kLockInvalidSchedule = 4; - kUnlockInvalidPinOrId = 5; - kUnlockInvalidSchedule = 6; - kOneTouchLock = 7; - kKeyLock = 8; - kKeyUnlock = 9; - kAutoLock = 10; - kScheduleLock = 11; - kScheduleUnlock = 12; - kManualLock = 13; - kManualUnlock = 14; + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; } - enum DoorLockProgrammingEventCode : ENUM8 { - kUnknownOrMfgSpecific = 0; - kMasterCodeChanged = 1; - kPinAdded = 2; - kPinDeleted = 3; - kPinChanged = 4; - kIdAdded = 5; - kIdDeleted = 6; + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring ceramic filters in a device */ +server cluster CeramicFilterMonitoring = 115 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; } - enum DoorLockSetPinOrIdStatus : ENUM8 { - kSuccess = 0; - kGeneralFailure = 1; - kMemoryFull = 2; - kDuplicateCodeError = 3; + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; } - enum DoorLockUserStatus : ENUM8 { - kAvailable = 0; - kOccupiedEnabled = 1; - kOccupiedDisabled = 3; - kNotSupported = 255; + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; } - enum DoorLockUserType : ENUM8 { - kUnrestricted = 0; - kYearDayScheduleUser = 1; - kWeekDayScheduleUser = 2; - kMasterUser = 3; - kNonAccessUser = 4; - kNotSupported = 255; + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring electrostatic filters in a device */ +server cluster ElectrostaticFilterMonitoring = 116 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; } - enum DoorStateEnum : ENUM8 { - kDoorOpen = 0; - kDoorClosed = 1; - kDoorJammed = 2; - kDoorForcedOpen = 3; - kDoorUnspecifiedError = 4; - kDoorAjar = 5; + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; } - enum LockDataTypeEnum : ENUM8 { - kUnspecified = 0; - kProgrammingCode = 1; - kUserIndex = 2; - kWeekDaySchedule = 3; - kYearDaySchedule = 4; - kHolidaySchedule = 5; - kPin = 6; - kRfid = 7; - kFingerprint = 8; - kFingerVein = 9; - kFace = 10; + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; } - enum LockOperationTypeEnum : ENUM8 { - kLock = 0; - kUnlock = 1; - kNonAccessUserEvent = 2; - kForcedUserEvent = 3; - kUnlatch = 4; + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring UV filters in a device */ +server cluster UvFilterMonitoring = 117 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; } - enum OperatingModeEnum : ENUM8 { - kNormal = 0; - kVacation = 1; - kPrivacy = 2; - kNoRemoteLockUnlock = 3; - kPassage = 4; + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; } - enum OperationErrorEnum : ENUM8 { - kUnspecified = 0; - kInvalidCredential = 1; - kDisabledUserDenied = 2; - kRestricted = 3; - kInsufficientBattery = 4; + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; } - enum OperationSourceEnum : ENUM8 { - kUnspecified = 0; - kManual = 1; - kProprietaryRemote = 2; - kKeypad = 3; - kAuto = 4; - kButton = 5; - kSchedule = 6; - kRemote = 7; - kRfid = 8; - kBiometric = 9; + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring ionizing filters in a device */ +server cluster IonizingFilterMonitoring = 118 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; } - enum UserStatusEnum : ENUM8 { - kAvailable = 0; - kOccupiedEnabled = 1; - kOccupiedDisabled = 3; + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; } - enum UserTypeEnum : ENUM8 { - kUnrestrictedUser = 0; - kYearDayScheduleUser = 1; - kWeekDayScheduleUser = 2; + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; + } + + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring zeolite filters in a device */ +server cluster ZeoliteFilterMonitoring = 119 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; + } + + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; + } + + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; + } + + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring ozone filters in a device */ +server cluster OzoneFilterMonitoring = 120 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; + } + + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; + } + + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; + } + + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring water tanks in a device */ +server cluster WaterTankMonitoring = 121 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; + } + + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; + } + + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; + } + + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring fuel tanks in a device */ +server cluster FuelTankMonitoring = 122 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; + } + + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; + } + + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; + } + + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring ink cartridges in a device */ +server cluster InkCartridgeMonitoring = 123 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; + } + + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; + } + + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; + } + + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for monitoring toner cartridges in a device */ +server cluster TonerCartridgeMonitoring = 124 { + enum ChangeIndicationEnum : ENUM8 { + kOk = 0; + kWarning = 1; + kCritical = 2; + } + + enum DegradationDirectionEnum : ENUM8 { + kUp = 0; + kDown = 1; + } + + bitmap Feature : BITMAP32 { + kCondition = 0x1; + kWarning = 0x2; + } + + readonly attribute percent condition = 0; + readonly attribute DegradationDirectionEnum degradationDirection = 1; + readonly attribute ChangeIndicationEnum changeIndication = 2; + readonly attribute boolean inPlaceIndicator = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** An interface to a generic way to secure a door */ +server cluster DoorLock = 257 { + enum AlarmCodeEnum : ENUM8 { + kLockJammed = 0; + kLockFactoryReset = 1; + kLockRadioPowerCycled = 3; + kWrongCodeEntryLimit = 4; + kFrontEsceutcheonRemoved = 5; + kDoorForcedOpen = 6; + kDoorAjar = 7; + kForcedUser = 8; + } + + enum CredentialRuleEnum : ENUM8 { + kSingle = 0; + kDual = 1; + kTri = 2; + } + + enum CredentialTypeEnum : ENUM8 { + kProgrammingPIN = 0; + kPin = 1; + kRfid = 2; + kFingerprint = 3; + kFingerVein = 4; + kFace = 5; + } + + enum DataOperationTypeEnum : ENUM8 { + kAdd = 0; + kClear = 1; + kModify = 2; + } + + enum DlLockState : ENUM8 { + kNotFullyLocked = 0; + kLocked = 1; + kUnlocked = 2; + kUnlatched = 3; + } + + enum DlLockType : ENUM8 { + kDeadBolt = 0; + kMagnetic = 1; + kOther = 2; + kMortise = 3; + kRim = 4; + kLatchBolt = 5; + kCylindricalLock = 6; + kTubularLock = 7; + kInterconnectedLock = 8; + kDeadLatch = 9; + kDoorFurniture = 10; + kEurocylinder = 11; + } + + enum DlStatus : ENUM8 { + kSuccess = 0; + kFailure = 1; + kDuplicate = 2; + kOccupied = 3; + kInvalidField = 133; + kResourceExhausted = 137; + kNotFound = 139; + } + + enum DoorLockOperationEventCode : ENUM8 { + kUnknownOrMfgSpecific = 0; + kLock = 1; + kUnlock = 2; + kLockInvalidPinOrId = 3; + kLockInvalidSchedule = 4; + kUnlockInvalidPinOrId = 5; + kUnlockInvalidSchedule = 6; + kOneTouchLock = 7; + kKeyLock = 8; + kKeyUnlock = 9; + kAutoLock = 10; + kScheduleLock = 11; + kScheduleUnlock = 12; + kManualLock = 13; + kManualUnlock = 14; + } + + enum DoorLockProgrammingEventCode : ENUM8 { + kUnknownOrMfgSpecific = 0; + kMasterCodeChanged = 1; + kPinAdded = 2; + kPinDeleted = 3; + kPinChanged = 4; + kIdAdded = 5; + kIdDeleted = 6; + } + + enum DoorLockSetPinOrIdStatus : ENUM8 { + kSuccess = 0; + kGeneralFailure = 1; + kMemoryFull = 2; + kDuplicateCodeError = 3; + } + + enum DoorLockUserStatus : ENUM8 { + kAvailable = 0; + kOccupiedEnabled = 1; + kOccupiedDisabled = 3; + kNotSupported = 255; + } + + enum DoorLockUserType : ENUM8 { + kUnrestricted = 0; + kYearDayScheduleUser = 1; + kWeekDayScheduleUser = 2; + kMasterUser = 3; + kNonAccessUser = 4; + kNotSupported = 255; + } + + enum DoorStateEnum : ENUM8 { + kDoorOpen = 0; + kDoorClosed = 1; + kDoorJammed = 2; + kDoorForcedOpen = 3; + kDoorUnspecifiedError = 4; + kDoorAjar = 5; + } + + enum LockDataTypeEnum : ENUM8 { + kUnspecified = 0; + kProgrammingCode = 1; + kUserIndex = 2; + kWeekDaySchedule = 3; + kYearDaySchedule = 4; + kHolidaySchedule = 5; + kPin = 6; + kRfid = 7; + kFingerprint = 8; + kFingerVein = 9; + kFace = 10; + } + + enum LockOperationTypeEnum : ENUM8 { + kLock = 0; + kUnlock = 1; + kNonAccessUserEvent = 2; + kForcedUserEvent = 3; + kUnlatch = 4; + } + + enum OperatingModeEnum : ENUM8 { + kNormal = 0; + kVacation = 1; + kPrivacy = 2; + kNoRemoteLockUnlock = 3; + kPassage = 4; + } + + enum OperationErrorEnum : ENUM8 { + kUnspecified = 0; + kInvalidCredential = 1; + kDisabledUserDenied = 2; + kRestricted = 3; + kInsufficientBattery = 4; + } + + enum OperationSourceEnum : ENUM8 { + kUnspecified = 0; + kManual = 1; + kProprietaryRemote = 2; + kKeypad = 3; + kAuto = 4; + kButton = 5; + kSchedule = 6; + kRemote = 7; + kRfid = 8; + kBiometric = 9; + } + + enum UserStatusEnum : ENUM8 { + kAvailable = 0; + kOccupiedEnabled = 1; + kOccupiedDisabled = 3; + } + + enum UserTypeEnum : ENUM8 { + kUnrestrictedUser = 0; + kYearDayScheduleUser = 1; + kWeekDayScheduleUser = 2; kProgrammingUser = 3; kNonAccessUser = 4; kForcedUser = 5; @@ -2820,6 +3246,10 @@ server cluster DoorLock = 257 { nullable CredentialStruct credential = 0; } + request struct UnboltDoorRequest { + optional OCTET_STRING PINCode = 0; + } + response struct GetUserResponse = 28 { INT16U userIndex = 0; nullable CHAR_STRING userName = 1; @@ -2861,6 +3291,7 @@ server cluster DoorLock = 257 { timed command access(invoke: administer) SetCredential(SetCredentialRequest): SetCredentialResponse = 34; command access(invoke: administer) GetCredentialStatus(GetCredentialStatusRequest): GetCredentialStatusResponse = 36; timed command access(invoke: administer) ClearCredential(ClearCredentialRequest): DefaultSuccess = 38; + timed command UnboltDoor(UnboltDoorRequest): DefaultSuccess = 39; } /** Provides an interface for controlling and adjusting automatic window coverings. */ @@ -3248,6 +3679,16 @@ server cluster Thermostat = 513 { /** An interface for controlling a fan in a heating/cooling system. */ server cluster FanControl = 514 { + enum AirflowDirectionEnum : ENUM8 { + kForward = 0; + kReverse = 1; + } + + enum DirectionEnum : ENUM8 { + kIncrease = 0; + kDecrease = 1; + } + enum FanModeSequenceType : ENUM8 { kOffLowMedHigh = 0; kOffLowHigh = 1; @@ -3272,6 +3713,8 @@ server cluster FanControl = 514 { kAuto = 0x2; kRocking = 0x4; kWind = 0x8; + kStep = 0x10; + kAirflowDirection = 0x20; } bitmap RockSupportMask : BITMAP8 { @@ -3301,12 +3744,21 @@ server cluster FanControl = 514 { attribute bitmap8 rockSetting = 8; readonly attribute bitmap8 windSupport = 9; attribute bitmap8 windSetting = 10; + attribute AirflowDirectionEnum airflowDirection = 11; 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 StepRequest { + DirectionEnum direction = 0; + optional boolean wrap = 1; + optional boolean lowestOff = 2; + } + + command Step(StepRequest): DefaultSuccess = 0; } /** An interface for configuring the user interface of a thermostat (which may be remote from the thermostat). */ @@ -3647,7 +4099,7 @@ server cluster BallastConfiguration = 769 { /** Attributes and commands for configuring the measurement of illuminance, and reporting illuminance measurements. */ server cluster IlluminanceMeasurement = 1024 { - enum LightSensorType : ENUM8 { + enum LightSensorTypeEnum : ENUM8 { kPhotodiode = 0; kCmos = 1; } @@ -3656,7 +4108,7 @@ server cluster IlluminanceMeasurement = 1024 { readonly attribute nullable int16u minMeasuredValue = 1; readonly attribute nullable int16u maxMeasuredValue = 2; readonly attribute int16u tolerance = 3; - readonly attribute nullable enum8 lightSensorType = 4; + readonly attribute nullable LightSensorTypeEnum lightSensorType = 4; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -3679,15 +4131,434 @@ server cluster TemperatureMeasurement = 1026 { readonly attribute int16u clusterRevision = 65533; } -/** Attributes and commands for configuring the measurement of pressure, and reporting pressure measurements. */ -server cluster PressureMeasurement = 1027 { - bitmap Feature : BITMAP32 { - kExtended = 0x1; +/** Attributes and commands for configuring the measurement of pressure, and reporting pressure measurements. */ +server cluster PressureMeasurement = 1027 { + bitmap Feature : BITMAP32 { + kExtended = 0x1; + } + + readonly attribute nullable int16s measuredValue = 0; + readonly attribute nullable int16s minMeasuredValue = 1; + readonly attribute nullable int16s maxMeasuredValue = 2; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for configuring the measurement of flow, and reporting flow measurements. */ +server cluster FlowMeasurement = 1028 { + readonly attribute nullable int16u measuredValue = 0; + readonly attribute nullable int16u minMeasuredValue = 1; + readonly attribute nullable int16u maxMeasuredValue = 2; + readonly attribute int16u tolerance = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for configuring the measurement of relative humidity, and reporting relative humidity measurements. */ +server cluster RelativeHumidityMeasurement = 1029 { + readonly attribute nullable int16u measuredValue = 0; + readonly attribute nullable int16u minMeasuredValue = 1; + readonly attribute nullable int16u maxMeasuredValue = 2; + readonly attribute int16u tolerance = 3; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes and commands for configuring occupancy sensing, and reporting occupancy status. */ +server cluster OccupancySensing = 1030 { + enum OccupancySensorTypeEnum : ENUM8 { + kPir = 0; + kUltrasonic = 1; + kPIRAndUltrasonic = 2; + kPhysicalContact = 3; + } + + bitmap OccupancyBitmap : BITMAP8 { + kOccupied = 0x1; + } + + bitmap OccupancySensorTypeBitmap : BITMAP8 { + kPir = 0x1; + kUltrasonic = 0x2; + kPhysicalContact = 0x4; + } + + readonly attribute OccupancyBitmap occupancy = 0; + readonly attribute OccupancySensorTypeEnum occupancySensorType = 1; + readonly attribute OccupancySensorTypeBitmap occupancySensorTypeBitmap = 2; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes for reporting carbon monoxide concentration measurements */ +server cluster CarbonMonoxideConcentrationMeasurement = 1036 { + enum LevelValueEnum : ENUM8 { + kUnknown = 0; + kLow = 1; + kMedium = 2; + kHigh = 3; + kCritical = 4; + } + + enum MeasurementMediumEnum : ENUM8 { + kGas = 0; + kLiquid = 1; + kSoil = 2; + } + + enum MeasurementUnitEnum : ENUM8 { + kPpm = 0; + kPpb = 1; + kPpt = 2; + kMgm3 = 3; + kUgm3 = 4; + kNgm3 = 5; + kPm3 = 6; + kBqm3 = 7; + } + + bitmap Feature : BITMAP32 { + kNumericMeasurement = 0x1; + kLevelIndication = 0x2; + kMediumLevel = 0x4; + kCriticalLevel = 0x8; + kPeakMeasurement = 0x10; + kAverageMeasurement = 0x20; + } + + readonly attribute nullable single measuredValue = 0; + readonly attribute nullable single minMeasuredValue = 1; + readonly attribute nullable single maxMeasuredValue = 2; + readonly attribute nullable single peakMeasuredValue = 3; + readonly attribute elapsed_s peakMeasuredValueWindow = 4; + readonly attribute nullable single averageMeasuredValue = 5; + readonly attribute elapsed_s averageMeasuredValueWindow = 6; + readonly attribute single uncertainty = 7; + readonly attribute MeasurementUnitEnum measurementUnit = 8; + readonly attribute MeasurementMediumEnum measurementMedium = 9; + readonly attribute LevelValueEnum levelValue = 10; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes for reporting carbon dioxide concentration measurements */ +server cluster CarbonDioxideConcentrationMeasurement = 1037 { + enum LevelValueEnum : ENUM8 { + kUnknown = 0; + kLow = 1; + kMedium = 2; + kHigh = 3; + kCritical = 4; + } + + enum MeasurementMediumEnum : ENUM8 { + kGas = 0; + kLiquid = 1; + kSoil = 2; + } + + enum MeasurementUnitEnum : ENUM8 { + kPpm = 0; + kPpb = 1; + kPpt = 2; + kMgm3 = 3; + kUgm3 = 4; + kNgm3 = 5; + kPm3 = 6; + kBqm3 = 7; + } + + bitmap Feature : BITMAP32 { + kNumericMeasurement = 0x1; + kLevelIndication = 0x2; + kMediumLevel = 0x4; + kCriticalLevel = 0x8; + kPeakMeasurement = 0x10; + kAverageMeasurement = 0x20; + } + + readonly attribute nullable single measuredValue = 0; + readonly attribute nullable single minMeasuredValue = 1; + readonly attribute nullable single maxMeasuredValue = 2; + readonly attribute nullable single peakMeasuredValue = 3; + readonly attribute elapsed_s peakMeasuredValueWindow = 4; + readonly attribute nullable single averageMeasuredValue = 5; + readonly attribute elapsed_s averageMeasuredValueWindow = 6; + readonly attribute single uncertainty = 7; + readonly attribute MeasurementUnitEnum measurementUnit = 8; + readonly attribute MeasurementMediumEnum measurementMedium = 9; + readonly attribute LevelValueEnum levelValue = 10; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes for reporting nitrogen dioxide concentration measurements */ +server cluster NitrogenDioxideConcentrationMeasurement = 1043 { + enum LevelValueEnum : ENUM8 { + kUnknown = 0; + kLow = 1; + kMedium = 2; + kHigh = 3; + kCritical = 4; + } + + enum MeasurementMediumEnum : ENUM8 { + kGas = 0; + kLiquid = 1; + kSoil = 2; + } + + enum MeasurementUnitEnum : ENUM8 { + kPpm = 0; + kPpb = 1; + kPpt = 2; + kMgm3 = 3; + kUgm3 = 4; + kNgm3 = 5; + kPm3 = 6; + kBqm3 = 7; + } + + bitmap Feature : BITMAP32 { + kNumericMeasurement = 0x1; + kLevelIndication = 0x2; + kMediumLevel = 0x4; + kCriticalLevel = 0x8; + kPeakMeasurement = 0x10; + kAverageMeasurement = 0x20; + } + + readonly attribute nullable single measuredValue = 0; + readonly attribute nullable single minMeasuredValue = 1; + readonly attribute nullable single maxMeasuredValue = 2; + readonly attribute single uncertainty = 7; + readonly attribute MeasurementUnitEnum measurementUnit = 8; + readonly attribute MeasurementMediumEnum measurementMedium = 9; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes for reporting ozone concentration measurements */ +server cluster OzoneConcentrationMeasurement = 1045 { + enum LevelValueEnum : ENUM8 { + kUnknown = 0; + kLow = 1; + kMedium = 2; + kHigh = 3; + kCritical = 4; + } + + enum MeasurementMediumEnum : ENUM8 { + kGas = 0; + kLiquid = 1; + kSoil = 2; + } + + enum MeasurementUnitEnum : ENUM8 { + kPpm = 0; + kPpb = 1; + kPpt = 2; + kMgm3 = 3; + kUgm3 = 4; + kNgm3 = 5; + kPm3 = 6; + kBqm3 = 7; + } + + bitmap Feature : BITMAP32 { + kNumericMeasurement = 0x1; + kLevelIndication = 0x2; + kMediumLevel = 0x4; + kCriticalLevel = 0x8; + kPeakMeasurement = 0x10; + kAverageMeasurement = 0x20; + } + + readonly attribute MeasurementMediumEnum measurementMedium = 9; + readonly attribute LevelValueEnum levelValue = 10; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes for reporting PM2.5 concentration measurements */ +server cluster Pm25ConcentrationMeasurement = 1066 { + enum LevelValueEnum : ENUM8 { + kUnknown = 0; + kLow = 1; + kMedium = 2; + kHigh = 3; + kCritical = 4; + } + + enum MeasurementMediumEnum : ENUM8 { + kGas = 0; + kLiquid = 1; + kSoil = 2; + } + + enum MeasurementUnitEnum : ENUM8 { + kPpm = 0; + kPpb = 1; + kPpt = 2; + kMgm3 = 3; + kUgm3 = 4; + kNgm3 = 5; + kPm3 = 6; + kBqm3 = 7; + } + + bitmap Feature : BITMAP32 { + kNumericMeasurement = 0x1; + kLevelIndication = 0x2; + kMediumLevel = 0x4; + kCriticalLevel = 0x8; + kPeakMeasurement = 0x10; + kAverageMeasurement = 0x20; + } + + readonly attribute nullable single measuredValue = 0; + readonly attribute nullable single minMeasuredValue = 1; + readonly attribute nullable single maxMeasuredValue = 2; + readonly attribute nullable single peakMeasuredValue = 3; + readonly attribute elapsed_s peakMeasuredValueWindow = 4; + readonly attribute nullable single averageMeasuredValue = 5; + readonly attribute elapsed_s averageMeasuredValueWindow = 6; + readonly attribute single uncertainty = 7; + readonly attribute MeasurementUnitEnum measurementUnit = 8; + readonly attribute MeasurementMediumEnum measurementMedium = 9; + readonly attribute LevelValueEnum levelValue = 10; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes for reporting formaldehyde concentration measurements */ +server cluster FormaldehydeConcentrationMeasurement = 1067 { + enum LevelValueEnum : ENUM8 { + kUnknown = 0; + kLow = 1; + kMedium = 2; + kHigh = 3; + kCritical = 4; + } + + enum MeasurementMediumEnum : ENUM8 { + kGas = 0; + kLiquid = 1; + kSoil = 2; + } + + enum MeasurementUnitEnum : ENUM8 { + kPpm = 0; + kPpb = 1; + kPpt = 2; + kMgm3 = 3; + kUgm3 = 4; + kNgm3 = 5; + kPm3 = 6; + kBqm3 = 7; + } + + bitmap Feature : BITMAP32 { + kNumericMeasurement = 0x1; + kLevelIndication = 0x2; + kMediumLevel = 0x4; + kCriticalLevel = 0x8; + kPeakMeasurement = 0x10; + kAverageMeasurement = 0x20; + } + + readonly attribute LevelValueEnum levelValue = 10; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; +} + +/** Attributes for reporting PM1 concentration measurements */ +server cluster Pm1ConcentrationMeasurement = 1068 { + enum LevelValueEnum : ENUM8 { + kUnknown = 0; + kLow = 1; + kMedium = 2; + kHigh = 3; + kCritical = 4; } - readonly attribute nullable int16s measuredValue = 0; - readonly attribute nullable int16s minMeasuredValue = 1; - readonly attribute nullable int16s maxMeasuredValue = 2; + enum MeasurementMediumEnum : ENUM8 { + kGas = 0; + kLiquid = 1; + kSoil = 2; + } + + enum MeasurementUnitEnum : ENUM8 { + kPpm = 0; + kPpb = 1; + kPpt = 2; + kMgm3 = 3; + kUgm3 = 4; + kNgm3 = 5; + kPm3 = 6; + kBqm3 = 7; + } + + bitmap Feature : BITMAP32 { + kNumericMeasurement = 0x1; + kLevelIndication = 0x2; + kMediumLevel = 0x4; + kCriticalLevel = 0x8; + kPeakMeasurement = 0x10; + kAverageMeasurement = 0x20; + } + + readonly attribute nullable single measuredValue = 0; + readonly attribute nullable single minMeasuredValue = 1; + readonly attribute nullable single maxMeasuredValue = 2; + readonly attribute nullable single peakMeasuredValue = 3; + readonly attribute elapsed_s peakMeasuredValueWindow = 4; + readonly attribute nullable single averageMeasuredValue = 5; + readonly attribute elapsed_s averageMeasuredValueWindow = 6; + readonly attribute single uncertainty = 7; + readonly attribute MeasurementUnitEnum measurementUnit = 8; + readonly attribute MeasurementMediumEnum measurementMedium = 9; + readonly attribute LevelValueEnum levelValue = 10; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -3696,12 +4567,53 @@ server cluster PressureMeasurement = 1027 { readonly attribute int16u clusterRevision = 65533; } -/** Attributes and commands for configuring the measurement of flow, and reporting flow measurements. */ -server cluster FlowMeasurement = 1028 { - readonly attribute nullable int16u measuredValue = 0; - readonly attribute nullable int16u minMeasuredValue = 1; - readonly attribute nullable int16u maxMeasuredValue = 2; - readonly attribute int16u tolerance = 3; +/** Attributes for reporting PM10 concentration measurements */ +server cluster Pm10ConcentrationMeasurement = 1069 { + enum LevelValueEnum : ENUM8 { + kUnknown = 0; + kLow = 1; + kMedium = 2; + kHigh = 3; + kCritical = 4; + } + + enum MeasurementMediumEnum : ENUM8 { + kGas = 0; + kLiquid = 1; + kSoil = 2; + } + + enum MeasurementUnitEnum : ENUM8 { + kPpm = 0; + kPpb = 1; + kPpt = 2; + kMgm3 = 3; + kUgm3 = 4; + kNgm3 = 5; + kPm3 = 6; + kBqm3 = 7; + } + + bitmap Feature : BITMAP32 { + kNumericMeasurement = 0x1; + kLevelIndication = 0x2; + kMediumLevel = 0x4; + kCriticalLevel = 0x8; + kPeakMeasurement = 0x10; + kAverageMeasurement = 0x20; + } + + readonly attribute nullable single measuredValue = 0; + readonly attribute nullable single minMeasuredValue = 1; + readonly attribute nullable single maxMeasuredValue = 2; + readonly attribute nullable single peakMeasuredValue = 3; + readonly attribute elapsed_s peakMeasuredValueWindow = 4; + readonly attribute nullable single averageMeasuredValue = 5; + readonly attribute elapsed_s averageMeasuredValueWindow = 6; + readonly attribute single uncertainty = 7; + readonly attribute MeasurementUnitEnum measurementUnit = 8; + readonly attribute MeasurementMediumEnum measurementMedium = 9; + readonly attribute LevelValueEnum levelValue = 10; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -3710,12 +4622,52 @@ server cluster FlowMeasurement = 1028 { readonly attribute int16u clusterRevision = 65533; } -/** Attributes and commands for configuring the measurement of relative humidity, and reporting relative humidity measurements. */ -server cluster RelativeHumidityMeasurement = 1029 { - readonly attribute nullable int16u measuredValue = 0; - readonly attribute nullable int16u minMeasuredValue = 1; - readonly attribute nullable int16u maxMeasuredValue = 2; - readonly attribute int16u tolerance = 3; +/** Attributes for reporting total volatile organic compounds concentration measurements */ +server cluster TotalVolatileOrganicCompoundsConcentrationMeasurement = 1070 { + enum LevelValueEnum : ENUM8 { + kUnknown = 0; + kLow = 1; + kMedium = 2; + kHigh = 3; + kCritical = 4; + } + + enum MeasurementMediumEnum : ENUM8 { + kGas = 0; + kLiquid = 1; + kSoil = 2; + } + + enum MeasurementUnitEnum : ENUM8 { + kPpm = 0; + kPpb = 1; + kPpt = 2; + kMgm3 = 3; + kUgm3 = 4; + kNgm3 = 5; + kPm3 = 6; + kBqm3 = 7; + } + + bitmap Feature : BITMAP32 { + kNumericMeasurement = 0x1; + kLevelIndication = 0x2; + kMediumLevel = 0x4; + kCriticalLevel = 0x8; + kPeakMeasurement = 0x10; + kAverageMeasurement = 0x20; + } + + readonly attribute nullable single measuredValue = 0; + readonly attribute nullable single minMeasuredValue = 1; + readonly attribute nullable single maxMeasuredValue = 2; + readonly attribute nullable single peakMeasuredValue = 3; + readonly attribute elapsed_s peakMeasuredValueWindow = 4; + readonly attribute nullable single averageMeasuredValue = 5; + readonly attribute elapsed_s averageMeasuredValueWindow = 6; + readonly attribute single uncertainty = 7; + readonly attribute MeasurementUnitEnum measurementUnit = 8; + readonly attribute MeasurementMediumEnum measurementMedium = 9; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -3724,28 +4676,44 @@ server cluster RelativeHumidityMeasurement = 1029 { readonly attribute int16u clusterRevision = 65533; } -/** Attributes and commands for configuring occupancy sensing, and reporting occupancy status. */ -server cluster OccupancySensing = 1030 { - enum OccupancySensorTypeEnum : ENUM8 { - kPir = 0; - kUltrasonic = 1; - kPIRAndUltrasonic = 2; - kPhysicalContact = 3; +/** Attributes for reporting radon concentration measurements */ +server cluster RadonConcentrationMeasurement = 1071 { + enum LevelValueEnum : ENUM8 { + kUnknown = 0; + kLow = 1; + kMedium = 2; + kHigh = 3; + kCritical = 4; } - bitmap OccupancyBitmap : BITMAP8 { - kOccupied = 0x1; + enum MeasurementMediumEnum : ENUM8 { + kGas = 0; + kLiquid = 1; + kSoil = 2; } - bitmap OccupancySensorTypeBitmap : BITMAP8 { - kPir = 0x1; - kUltrasonic = 0x2; - kPhysicalContact = 0x4; + enum MeasurementUnitEnum : ENUM8 { + kPpm = 0; + kPpb = 1; + kPpt = 2; + kMgm3 = 3; + kUgm3 = 4; + kNgm3 = 5; + kPm3 = 6; + kBqm3 = 7; } - readonly attribute OccupancyBitmap occupancy = 0; - readonly attribute OccupancySensorTypeEnum occupancySensorType = 1; - readonly attribute OccupancySensorTypeBitmap occupancySensorTypeBitmap = 2; + bitmap Feature : BITMAP32 { + kNumericMeasurement = 0x1; + kLevelIndication = 0x2; + kMediumLevel = 0x4; + kCriticalLevel = 0x8; + kPeakMeasurement = 0x10; + kAverageMeasurement = 0x20; + } + + readonly attribute MeasurementMediumEnum measurementMedium = 9; + readonly attribute LevelValueEnum levelValue = 10; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -4966,7 +5934,7 @@ endpoint 0 { ram attribute activeModeThreshold default = 300; callback attribute registeredClients; ram attribute ICDCounter default = 0; - ram attribute clientsSupportedPerFabric default = 1; + ram attribute clientsSupportedPerFabric default = 2; callback attribute generatedCommandList; callback attribute acceptedCommandList; callback attribute eventList; @@ -5009,13 +5977,16 @@ endpoint 1 { } server cluster Scenes { - ram attribute sceneCount default = 0x00; + callback attribute sceneCount default = 0x00; ram attribute currentScene default = 0x00; ram attribute currentGroup default = 0x0000; ram attribute sceneValid default = 0x00; ram attribute nameSupport; + ram attribute lastConfiguredBy; + ram attribute sceneTableSize; + callback attribute remainingCapacity; ram attribute featureMap default = 0; - ram attribute clusterRevision default = 4; + ram attribute clusterRevision default = 5; } server cluster OnOff { @@ -5139,6 +6110,172 @@ endpoint 1 { ram attribute manufacturerExtension default = 255; } + server cluster AirQuality { + ram attribute airQuality default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 15; + ram attribute clusterRevision default = 1; + } + + server cluster HepaFilterMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster ActivatedCarbonFilterMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster CeramicFilterMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster ElectrostaticFilterMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster UvFilterMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster IonizingFilterMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster ZeoliteFilterMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster OzoneFilterMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster WaterTankMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster FuelTankMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster InkCartridgeMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + + server cluster TonerCartridgeMonitoring { + ram attribute condition; + ram attribute degradationDirection; + ram attribute changeIndication default = 0; + ram attribute inPlaceIndicator; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 3; + ram attribute clusterRevision default = 1; + } + server cluster DoorLock { emits event DoorLockAlarm; emits event LockOperation; @@ -5175,7 +6312,7 @@ endpoint 1 { ram attribute wrongCodeEntryLimit default = 3; ram attribute userCodeTemporaryDisableTime default = 10; ram attribute requirePINforRemoteOperation default = 0; - ram attribute featureMap default = 0xD13; + ram attribute featureMap default = 0x1D13; ram attribute clusterRevision default = 6; } @@ -5280,6 +6417,7 @@ endpoint 1 { ram attribute rockSetting default = 0x00; ram attribute windSupport default = 0x00; ram attribute windSetting default = 0x00; + ram attribute airflowDirection default = 0; ram attribute featureMap default = 0x0F; ram attribute clusterRevision default = 2; } @@ -5293,14 +6431,14 @@ endpoint 1 { } server cluster ColorControl { - ram attribute currentHue default = 0x00; - ram attribute currentSaturation default = 0x00; + persist attribute currentHue default = 0x00; + persist attribute currentSaturation default = 0x00; ram attribute remainingTime default = 0x0000; - ram attribute currentX default = 0x616B; - ram attribute currentY default = 0x607D; + persist attribute currentX default = 0x616B; + persist attribute currentY default = 0x607D; ram attribute driftCompensation; ram attribute compensationText; - ram attribute colorTemperatureMireds default = 0x00FA; + persist attribute colorTemperatureMireds default = 0x00FA; ram attribute colorMode default = 0x01; ram attribute options default = 0x00; ram attribute numberOfPrimaries; @@ -5333,18 +6471,18 @@ endpoint 1 { ram attribute colorPointBX; ram attribute colorPointBY; ram attribute colorPointBIntensity; - ram attribute enhancedCurrentHue default = 0x0000; - ram attribute enhancedColorMode default = 0x01; - ram attribute colorLoopActive default = 0x00; - ram attribute colorLoopDirection default = 0x00; - ram attribute colorLoopTime default = 0x0019; + persist attribute enhancedCurrentHue default = 0x0000; + persist attribute enhancedColorMode default = 0x01; + persist attribute colorLoopActive default = 0x00; + persist attribute colorLoopDirection default = 0x00; + persist attribute colorLoopTime default = 0x0019; ram attribute colorLoopStartEnhancedHue default = 0x2300; ram attribute colorLoopStoredEnhancedHue default = 0x0000; ram attribute colorCapabilities default = 0x1F; ram attribute colorTempPhysicalMinMireds default = 0x0000; ram attribute colorTempPhysicalMaxMireds default = 0xFEFF; ram attribute coupleColorTempToLevelMinMireds; - ram attribute startUpColorTemperatureMireds; + persist attribute startUpColorTemperatureMireds; ram attribute featureMap default = 0x1F; ram attribute clusterRevision default = 5; } @@ -5424,6 +6562,172 @@ endpoint 1 { ram attribute clusterRevision default = 3; } + server cluster CarbonMonoxideConcentrationMeasurement { + ram attribute measuredValue default = 401; + ram attribute minMeasuredValue default = 50; + ram attribute maxMeasuredValue default = 1500; + ram attribute peakMeasuredValue default = 511; + ram attribute peakMeasuredValueWindow default = 3600; + ram attribute averageMeasuredValue default = 213; + ram attribute averageMeasuredValueWindow default = 3600; + ram attribute uncertainty default = 10; + ram attribute measurementUnit default = 1; + ram attribute measurementMedium default = 0; + ram attribute levelValue default = 3; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 63; + ram attribute clusterRevision default = 1; + } + + server cluster CarbonDioxideConcentrationMeasurement { + ram attribute measuredValue default = 458; + ram attribute minMeasuredValue default = 300; + ram attribute maxMeasuredValue default = 2000; + ram attribute peakMeasuredValue default = 523; + ram attribute peakMeasuredValueWindow default = 3600; + ram attribute averageMeasuredValue default = 421; + ram attribute averageMeasuredValueWindow default = 3600; + ram attribute uncertainty default = 5; + ram attribute measurementUnit default = 0; + ram attribute measurementMedium default = 0; + ram attribute levelValue default = 1; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 63; + ram attribute clusterRevision default = 1; + } + + server cluster NitrogenDioxideConcentrationMeasurement { + ram attribute measuredValue default = 3; + ram attribute minMeasuredValue default = 1; + ram attribute maxMeasuredValue default = 150; + ram attribute uncertainty default = 1; + ram attribute measurementUnit default = 1; + ram attribute measurementMedium default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 1; + ram attribute clusterRevision default = 1; + } + + server cluster OzoneConcentrationMeasurement { + ram attribute measurementMedium default = 0; + ram attribute levelValue default = 1; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 14; + ram attribute clusterRevision default = 1; + } + + server cluster Pm25ConcentrationMeasurement { + ram attribute measuredValue default = 42; + ram attribute minMeasuredValue default = 1; + ram attribute maxMeasuredValue default = 400; + ram attribute peakMeasuredValue default = 90; + ram attribute peakMeasuredValueWindow default = 3600; + ram attribute averageMeasuredValue default = 35; + ram attribute averageMeasuredValueWindow default = 3600; + ram attribute uncertainty default = 4; + ram attribute measurementUnit default = 4; + ram attribute measurementMedium default = 0; + ram attribute levelValue default = 2; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 63; + ram attribute clusterRevision default = 1; + } + + server cluster FormaldehydeConcentrationMeasurement { + ram attribute levelValue default = 3; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 2; + ram attribute clusterRevision default = 1; + } + + server cluster Pm1ConcentrationMeasurement { + ram attribute measuredValue default = 39; + ram attribute minMeasuredValue default = 1; + ram attribute maxMeasuredValue default = 400; + ram attribute peakMeasuredValue default = 70; + ram attribute peakMeasuredValueWindow default = 3600; + ram attribute averageMeasuredValue default = 41; + ram attribute averageMeasuredValueWindow default = 3600; + ram attribute uncertainty default = 4; + ram attribute measurementUnit default = 4; + ram attribute measurementMedium default = 0; + ram attribute levelValue default = 1; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 63; + ram attribute clusterRevision default = 1; + } + + server cluster Pm10ConcentrationMeasurement { + ram attribute measuredValue; + ram attribute minMeasuredValue default = 2; + ram attribute maxMeasuredValue default = 400; + ram attribute peakMeasuredValue default = 49; + ram attribute peakMeasuredValueWindow default = 3600; + ram attribute averageMeasuredValue default = 43; + ram attribute averageMeasuredValueWindow default = 3600; + ram attribute uncertainty default = 2; + ram attribute measurementUnit default = 4; + ram attribute measurementMedium default = 0; + ram attribute levelValue default = 1; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 63; + ram attribute clusterRevision default = 1; + } + + server cluster TotalVolatileOrganicCompoundsConcentrationMeasurement { + ram attribute measuredValue default = 5; + ram attribute minMeasuredValue default = 1; + ram attribute maxMeasuredValue default = 100; + ram attribute peakMeasuredValue default = 8; + ram attribute peakMeasuredValueWindow default = 3600; + ram attribute averageMeasuredValue default = 2; + ram attribute averageMeasuredValueWindow default = 3600; + ram attribute uncertainty default = 1; + ram attribute measurementUnit default = 1; + ram attribute measurementMedium default = 0; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 49; + ram attribute clusterRevision default = 1; + } + + server cluster RadonConcentrationMeasurement { + ram attribute measurementMedium default = 0; + ram attribute levelValue default = 4; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 14; + ram attribute clusterRevision default = 1; + } + server cluster WakeOnLan { ram attribute MACAddress; ram attribute featureMap default = 0; 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 c8145f2aed189a..e9d11230130810 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 @@ -111,7 +111,7 @@ "code": 1, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "IdentifyTypeEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -279,7 +279,7 @@ "code": 0, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "NameSupportBitmap", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -400,7 +400,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -473,7 +473,7 @@ "side": "server", "type": "int8u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "0x00", @@ -556,7 +556,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -3239,7 +3239,7 @@ "code": 5, "mfgCode": null, "side": "server", - "type": "NetworkCommissioningStatus", + "type": "NetworkCommissioningStatusEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -3882,7 +3882,7 @@ "code": 1, "mfgCode": null, "side": "server", - "type": "RoutingRole", + "type": "RoutingRoleEnum", "included": 1, "storageOption": "External", "singleton": 0, @@ -6432,7 +6432,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "2", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -8097,7 +8097,7 @@ "code": 4, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "LightSensorTypeEnum", "included": 0, "storageOption": "RAM", "singleton": 0, @@ -9097,7 +9097,7 @@ "code": 1, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "IdentifyTypeEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -9265,7 +9265,7 @@ "code": 0, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "NameSupportBitmap", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -9386,7 +9386,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -9459,7 +9459,7 @@ "side": "server", "type": "int8u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "0x00", @@ -9532,6 +9532,54 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "LastConfiguredBy", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "node_id", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SceneTableSize", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RemainingCapacity", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -9558,7 +9606,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -12270,7 +12318,7 @@ "code": 5, "mfgCode": null, "side": "server", - "type": "NetworkCommissioningStatus", + "type": "NetworkCommissioningStatusEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -13029,127 +13077,29 @@ ] }, { - "name": "Door Lock", - "code": 257, + "name": "Air Quality", + "code": 91, "mfgCode": null, - "define": "DOOR_LOCK_CLUSTER", + "define": "AIR_QUALITY_CLUSTER", "side": "client", "enabled": 0, - "commands": [ - { - "name": "LockDoor", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "UnlockDoor", - "code": 1, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "UnlockWithTimeout", - "code": 3, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "SetWeekDaySchedule", - "code": 11, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "GetWeekDaySchedule", - "code": 12, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "ClearWeekDaySchedule", - "code": 13, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "SetYearDaySchedule", - "code": 14, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "GetYearDaySchedule", - "code": 15, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "SetUser", - "code": 26, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "GetUser", - "code": 27, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "ClearUser", - "code": 29, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "SetCredential", - "code": 34, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, + "attributes": [ { - "name": "GetCredentialStatus", - "code": 36, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, - { - "name": "ClearCredential", - "code": 38, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - } - ], - "attributes": [ { "name": "ClusterRevision", "code": 65533, @@ -13160,120 +13110,94 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Door Lock", - "code": 257, + "name": "Air Quality", + "code": 91, "mfgCode": null, - "define": "DOOR_LOCK_CLUSTER", + "define": "AIR_QUALITY_CLUSTER", "side": "server", "enabled": 1, - "commands": [ - { - "name": "GetUserResponse", - "code": 28, - "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 - }, - { - "name": "SetCredentialResponse", - "code": 35, - "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 - }, - { - "name": "GetCredentialStatusResponse", - "code": 37, - "mfgCode": null, - "source": "server", - "incoming": 0, - "outgoing": 1 - } - ], "attributes": [ { - "name": "LockState", + "name": "AirQuality", "code": 0, "mfgCode": null, "side": "server", - "type": "DlLockState", + "type": "AirQualityEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LockType", - "code": 1, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "DlLockType", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ActuatorEnabled", - "code": 2, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "DoorState", - "code": 3, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "DoorStateEnum", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "DoorOpenEvents", - "code": 4, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -13283,24 +13207,24 @@ "reportableChange": 0 }, { - "name": "DoorClosedEvents", - "code": 5, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "15", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OpenPeriod", - "code": 6, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", "type": "int16u", @@ -13308,387 +13232,453 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "HEPA Filter Monitoring", + "code": 113, + "mfgCode": null, + "define": "HEPA_FILTER_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "NumberOfTotalUsersSupported", - "code": 17, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "side": "server", - "type": "int16u", + "side": "client", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "10", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "NumberOfPINUsersSupported", - "code": 18, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", + "side": "client", "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "10", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "HEPA Filter Monitoring", + "code": 113, + "mfgCode": null, + "define": "HEPA_FILTER_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "NumberOfRFIDUsersSupported", - "code": 19, + "name": "Condition", + "code": 0, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "percent", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "10", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "NumberOfWeekDaySchedulesSupportedPerUser", - "code": 20, + "name": "DegradationDirection", + "code": 1, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "DegradationDirectionEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "10", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "NumberOfYearDaySchedulesSupportedPerUser", - "code": 21, + "name": "ChangeIndication", + "code": 2, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "ChangeIndicationEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "10", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "NumberOfHolidaySchedulesSupported", - "code": 22, + "name": "InPlaceIndicator", + "code": 3, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "boolean", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxPINCodeLength", - "code": 23, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinPINCodeLength", - "code": 24, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxRFIDCodeLength", - "code": 25, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "20", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinRFIDCodeLength", - "code": 26, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "10", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "CredentialRulesSupport", - "code": 27, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "DlCredentialRuleMask", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "3", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "NumberOfCredentialsSupportedPerUser", - "code": 28, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Activated Carbon Filter Monitoring", + "code": 114, + "mfgCode": null, + "define": "ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "Language", - "code": 33, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "side": "server", - "type": "char_string", + "side": "client", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "en", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LEDSettings", - "code": 34, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "int8u", - "included": 0, + "side": "client", + "type": "int16u", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Activated Carbon Filter Monitoring", + "code": 114, + "mfgCode": null, + "define": "ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "AutoRelockTime", - "code": 35, + "name": "Condition", + "code": 0, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "percent", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "60", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SoundVolume", - "code": 36, + "name": "DegradationDirection", + "code": 1, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "DegradationDirectionEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OperatingMode", - "code": 37, + "name": "ChangeIndication", + "code": 2, "mfgCode": null, "side": "server", - "type": "OperatingModeEnum", + "type": "ChangeIndicationEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SupportedOperatingModes", - "code": 38, + "name": "InPlaceIndicator", + "code": 3, "mfgCode": null, "side": "server", - "type": "DlSupportedOperatingModes", + "type": "boolean", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0xFFF6", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "DefaultConfigurationRegister", - "code": 39, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "DlDefaultConfigurationRegister", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "EnableLocalProgramming", - "code": 40, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "boolean", - "included": 0, - "storageOption": "RAM", + "type": "array", + "included": 1, + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "EnableOneTouchLocking", - "code": 41, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "EnableInsideStatusLED", - "code": 42, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "EnablePrivacyModeButton", - "code": 43, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "3", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LocalProgrammingFeatures", - "code": 44, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "DlLocalProgrammingFeatures", - "included": 0, + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Ceramic Filter Monitoring", + "code": 115, + "mfgCode": null, + "define": "CERAMIC_FILTER_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -13699,59 +13689,69 @@ "reportableChange": 0 }, { - "name": "WrongCodeEntryLimit", - "code": 48, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "int8u", + "side": "client", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Ceramic Filter Monitoring", + "code": 115, + "mfgCode": null, + "define": "CERAMIC_FILTER_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "UserCodeTemporaryDisableTime", - "code": 49, + "name": "Condition", + "code": 0, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "percent", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "10", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SendPINOverTheAir", - "code": 50, + "name": "DegradationDirection", + "code": 1, "mfgCode": null, "side": "server", - "type": "boolean", - "included": 0, + "type": "DegradationDirectionEnum", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RequirePINforRemoteOperation", - "code": 51, + "name": "ChangeIndication", + "code": 2, "mfgCode": null, "side": "server", - "type": "boolean", + "type": "ChangeIndicationEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -13763,12 +13763,12 @@ "reportableChange": 0 }, { - "name": "ExpiringUserTimeout", - "code": 53, + "name": "InPlaceIndicator", + "code": 3, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 0, + "type": "boolean", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, @@ -13784,7 +13784,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -13800,7 +13800,23 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "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, @@ -13816,7 +13832,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -13836,7 +13852,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0xD13", + "defaultValue": "3", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -13852,109 +13868,6381 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } - ], - "events": [ - { - "name": "DoorLockAlarm", - "code": 0, - "mfgCode": null, - "side": "server", - "included": 1 - }, - { - "name": "LockOperation", - "code": 2, - "mfgCode": null, - "side": "server", - "included": 1 - }, + ] + }, + { + "name": "Electrostatic Filter Monitoring", + "code": 116, + "mfgCode": null, + "define": "ELECTROSTATIC_FILTER_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "LockOperationError", - "code": 3, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "side": "server", - "included": 1 + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "LockUserChange", - "code": 4, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "included": 1 + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 } ] }, { - "name": "Window Covering", - "code": 258, + "name": "Electrostatic Filter Monitoring", + "code": 116, "mfgCode": null, - "define": "WINDOW_COVERING_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ + "define": "ELECTROSTATIC_FILTER_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "UpOrOpen", + "name": "Condition", "code": 0, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "server", + "type": "percent", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "DownOrClose", + "name": "DegradationDirection", "code": 1, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "server", + "type": "DegradationDirectionEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "StopMotion", + "name": "ChangeIndication", "code": 2, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "server", + "type": "ChangeIndicationEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InPlaceIndicator", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "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": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "UV Filter Monitoring", + "code": 117, + "mfgCode": null, + "define": "UV_FILTER_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "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": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "UV Filter Monitoring", + "code": 117, + "mfgCode": null, + "define": "UV_FILTER_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Condition", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "percent", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DegradationDirection", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "DegradationDirectionEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ChangeIndication", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "ChangeIndicationEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InPlaceIndicator", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "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": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Ionizing Filter Monitoring", + "code": 118, + "mfgCode": null, + "define": "IONIZING_FILTER_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "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": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Ionizing Filter Monitoring", + "code": 118, + "mfgCode": null, + "define": "IONIZING_FILTER_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Condition", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "percent", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DegradationDirection", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "DegradationDirectionEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ChangeIndication", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "ChangeIndicationEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InPlaceIndicator", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "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": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Zeolite Filter Monitoring", + "code": 119, + "mfgCode": null, + "define": "ZEOLITE_FILTER_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "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": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Zeolite Filter Monitoring", + "code": 119, + "mfgCode": null, + "define": "ZEOLITE_FILTER_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Condition", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "percent", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DegradationDirection", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "DegradationDirectionEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ChangeIndication", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "ChangeIndicationEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InPlaceIndicator", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "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": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Ozone Filter Monitoring", + "code": 120, + "mfgCode": null, + "define": "OZONE_FILTER_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "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": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Ozone Filter Monitoring", + "code": 120, + "mfgCode": null, + "define": "OZONE_FILTER_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Condition", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "percent", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DegradationDirection", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "DegradationDirectionEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ChangeIndication", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "ChangeIndicationEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InPlaceIndicator", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "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": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Water Tank Monitoring", + "code": 121, + "mfgCode": null, + "define": "WATER_TANK_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "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": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Water Tank Monitoring", + "code": 121, + "mfgCode": null, + "define": "WATER_TANK_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Condition", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "percent", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DegradationDirection", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "DegradationDirectionEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ChangeIndication", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "ChangeIndicationEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InPlaceIndicator", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "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": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Fuel Tank Monitoring", + "code": 122, + "mfgCode": null, + "define": "FUEL_TANK_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "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": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Fuel Tank Monitoring", + "code": 122, + "mfgCode": null, + "define": "FUEL_TANK_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Condition", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "percent", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DegradationDirection", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "DegradationDirectionEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ChangeIndication", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "ChangeIndicationEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InPlaceIndicator", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "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": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Ink Cartridge Monitoring", + "code": 123, + "mfgCode": null, + "define": "INK_CARTRIDGE_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "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": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Ink Cartridge Monitoring", + "code": 123, + "mfgCode": null, + "define": "INK_CARTRIDGE_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Condition", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "percent", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DegradationDirection", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "DegradationDirectionEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ChangeIndication", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "ChangeIndicationEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InPlaceIndicator", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "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": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Toner Cartridge Monitoring", + "code": 124, + "mfgCode": null, + "define": "TONER_CARTRIDGE_MONITORING_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "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": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Toner Cartridge Monitoring", + "code": 124, + "mfgCode": null, + "define": "TONER_CARTRIDGE_MONITORING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Condition", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "percent", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DegradationDirection", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "DegradationDirectionEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ChangeIndication", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "ChangeIndicationEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InPlaceIndicator", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "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": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Door Lock", + "code": 257, + "mfgCode": null, + "define": "DOOR_LOCK_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "LockDoor", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "UnlockDoor", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "UnlockWithTimeout", + "code": 3, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "SetWeekDaySchedule", + "code": 11, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "GetWeekDaySchedule", + "code": 12, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "ClearWeekDaySchedule", + "code": 13, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "SetYearDaySchedule", + "code": 14, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "GetYearDaySchedule", + "code": 15, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "SetUser", + "code": 26, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "GetUser", + "code": 27, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "ClearUser", + "code": 29, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "SetCredential", + "code": 34, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "GetCredentialStatus", + "code": 36, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "ClearCredential", + "code": 38, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "UnboltDoor", + "code": 39, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "6", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Door Lock", + "code": 257, + "mfgCode": null, + "define": "DOOR_LOCK_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "GetUserResponse", + "code": 28, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + }, + { + "name": "SetCredentialResponse", + "code": 35, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + }, + { + "name": "GetCredentialStatusResponse", + "code": 37, + "mfgCode": null, + "source": "server", + "incoming": 0, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "LockState", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "DlLockState", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "2", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "LockType", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "DlLockType", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ActuatorEnabled", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "DoorState", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "DoorStateEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "DoorOpenEvents", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DoorClosedEvents", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OpenPeriod", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "NumberOfTotalUsersSupported", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "10", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "NumberOfPINUsersSupported", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "10", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "NumberOfRFIDUsersSupported", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "10", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "NumberOfWeekDaySchedulesSupportedPerUser", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "10", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "NumberOfYearDaySchedulesSupportedPerUser", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "10", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "NumberOfHolidaySchedulesSupported", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxPINCodeLength", + "code": 23, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "6", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinPINCodeLength", + "code": 24, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "6", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxRFIDCodeLength", + "code": 25, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "20", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinRFIDCodeLength", + "code": 26, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "10", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CredentialRulesSupport", + "code": 27, + "mfgCode": null, + "side": "server", + "type": "DlCredentialRuleMask", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "NumberOfCredentialsSupportedPerUser", + "code": 28, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Language", + "code": 33, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "en", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "LEDSettings", + "code": 34, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AutoRelockTime", + "code": 35, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "60", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "SoundVolume", + "code": 36, + "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": "OperatingMode", + "code": 37, + "mfgCode": null, + "side": "server", + "type": "OperatingModeEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "SupportedOperatingModes", + "code": 38, + "mfgCode": null, + "side": "server", + "type": "DlSupportedOperatingModes", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFFF6", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DefaultConfigurationRegister", + "code": 39, + "mfgCode": null, + "side": "server", + "type": "DlDefaultConfigurationRegister", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EnableLocalProgramming", + "code": 40, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EnableOneTouchLocking", + "code": 41, + "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": "EnableInsideStatusLED", + "code": 42, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EnablePrivacyModeButton", + "code": 43, + "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": "LocalProgrammingFeatures", + "code": 44, + "mfgCode": null, + "side": "server", + "type": "DlLocalProgrammingFeatures", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "WrongCodeEntryLimit", + "code": 48, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "UserCodeTemporaryDisableTime", + "code": 49, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "10", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "SendPINOverTheAir", + "code": 50, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RequirePINforRemoteOperation", + "code": 51, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ExpiringUserTimeout", + "code": 53, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "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": 0, + "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": 0, + "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": "0x1D13", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "6", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ], + "events": [ + { + "name": "DoorLockAlarm", + "code": 0, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "LockOperation", + "code": 2, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "LockOperationError", + "code": 3, + "mfgCode": null, + "side": "server", + "included": 1 + }, + { + "name": "LockUserChange", + "code": 4, + "mfgCode": null, + "side": "server", + "included": 1 + } + ] + }, + { + "name": "Window Covering", + "code": 258, + "mfgCode": null, + "define": "WINDOW_COVERING_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "UpOrOpen", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "DownOrClose", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "StopMotion", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 }, { "name": "GoToLiftValue", "code": 4, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "GoToLiftPercentage", + "code": 5, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "GoToTiltValue", + "code": 7, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "GoToTiltPercentage", + "code": 8, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Window Covering", + "code": 258, + "mfgCode": null, + "define": "WINDOW_COVERING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Type", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "Type", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x08", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "PhysicalClosedLimitLift", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFFFF", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65545, + "reportableChange": 0 + }, + { + "name": "PhysicalClosedLimitTilt", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFFFF", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65545, + "reportableChange": 0 + }, + { + "name": "CurrentPositionLift", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x7FFF", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentPositionTilt", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x7FFF", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "NumberOfActuationsLift", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65545, + "reportableChange": 0 + }, + { + "name": "NumberOfActuationsTilt", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65545, + "reportableChange": 0 + }, + { + "name": "ConfigStatus", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "ConfigStatus", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x03", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentPositionLiftPercentage", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "Percent", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "50", + "reportable": 1, + "minInterval": 0, + "maxInterval": 100, + "reportableChange": 0 + }, + { + "name": "CurrentPositionTiltPercentage", + "code": 9, + "mfgCode": null, + "side": "server", + "type": "Percent", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "50", + "reportable": 1, + "minInterval": 0, + "maxInterval": 100, + "reportableChange": 0 + }, + { + "name": "OperationalStatus", + "code": 10, + "mfgCode": null, + "side": "server", + "type": "OperationalStatus", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 127, + "reportableChange": 0 + }, + { + "name": "TargetPositionLiftPercent100ths", + "code": 11, + "mfgCode": null, + "side": "server", + "type": "Percent100ths", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 10000, + "reportableChange": 0 + }, + { + "name": "TargetPositionTiltPercent100ths", + "code": 12, + "mfgCode": null, + "side": "server", + "type": "Percent100ths", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 10000, + "reportableChange": 0 + }, + { + "name": "EndProductType", + "code": 13, + "mfgCode": null, + "side": "server", + "type": "EndProductType", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentPositionLiftPercent100ths", + "code": 14, + "mfgCode": null, + "side": "server", + "type": "Percent100ths", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 10000, + "reportableChange": 0 + }, + { + "name": "CurrentPositionTiltPercent100ths", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "Percent100ths", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 10000, + "reportableChange": 0 + }, + { + "name": "InstalledOpenLimitLift", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "InstalledClosedLimitLift", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFFFF", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "InstalledOpenLimitTilt", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "InstalledClosedLimitTilt", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFFFF", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Mode", + "code": 23, + "mfgCode": null, + "side": "server", + "type": "Mode", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 15, + "reportableChange": 0 + }, + { + "name": "SafetyStatus", + "code": 26, + "mfgCode": null, + "side": "server", + "type": "SafetyStatus", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "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": "0x17", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Barrier Control", + "code": 259, + "mfgCode": null, + "define": "BARRIER_CONTROL_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "BarrierControlGoToPercent", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "BarrierControlStop", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Barrier Control", + "code": 259, + "mfgCode": null, + "define": "BARRIER_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "barrier moving state", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "barrier safety status", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "bitmap16", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "barrier capabilities", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "barrier position", + "code": 10, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Pump Configuration and Control", + "code": 512, + "mfgCode": null, + "define": "PUMP_CONFIGURATION_AND_CONTROL_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Pump Configuration and Control", + "code": 512, + "mfgCode": null, + "define": "PUMP_CONFIGURATION_AND_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "MaxPressure", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "MaxSpeed", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "MaxFlow", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "MinConstPressure", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxConstPressure", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinCompPressure", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxCompPressure", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinConstSpeed", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxConstSpeed", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinConstFlow", + "code": 9, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxConstFlow", + "code": 10, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinConstTemp", + "code": 11, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxConstTemp", + "code": 12, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PumpStatus", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "PumpStatusBitmap", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "EffectiveOperationMode", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "OperationModeEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "EffectiveControlMode", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "ControlModeEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Capacity", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Speed", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LifetimeRunningHours", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "int24u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x000000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Power", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "int24u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LifetimeEnergyConsumed", + "code": 23, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00000000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OperationMode", + "code": 32, + "mfgCode": null, + "side": "server", + "type": "OperationModeEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ControlMode", + "code": 33, + "mfgCode": null, + "side": "server", + "type": "ControlModeEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "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": "0x1F", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Thermostat", + "code": 513, + "mfgCode": null, + "define": "THERMOSTAT_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "SetpointRaiseLower", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "SetWeeklySchedule", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 0, + "outgoing": 1 + }, + { + "name": "GetWeeklySchedule", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 0, + "outgoing": 1 + }, + { + "name": "ClearWeeklySchedule", + "code": 3, + "mfgCode": null, + "source": "client", + "incoming": 0, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Thermostat", + "code": 513, + "mfgCode": null, + "define": "THERMOSTAT_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "GetWeeklyScheduleResponse", + "code": 0, + "mfgCode": null, + "source": "server", + "incoming": 1, + "outgoing": 0 + } + ], + "attributes": [ + { + "name": "LocalTemperature", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "AbsMinHeatSetpointLimit", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x02BC", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "AbsMaxHeatSetpointLimit", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0BB8", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "AbsMinCoolSetpointLimit", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0640", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "AbsMaxCoolSetpointLimit", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0C80", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "PICoolingDemand", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "PIHeatingDemand", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OccupiedCoolingSetpoint", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0A28", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "OccupiedHeatingSetpoint", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x07D0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "MinHeatSetpointLimit", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x02BC", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "MaxHeatSetpointLimit", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0BB8", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "MinCoolSetpointLimit", + "code": 23, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0640", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "MaxCoolSetpointLimit", + "code": 24, + "mfgCode": null, + "side": "server", + "type": "int16s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0C80", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "MinSetpointDeadBand", + "code": 25, + "mfgCode": null, + "side": "server", + "type": "int8s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x19", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ControlSequenceOfOperation", + "code": 27, + "mfgCode": null, + "side": "server", + "type": "ThermostatControlSequence", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x04", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "SystemMode", + "code": 28, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ThermostatRunningMode", + "code": 30, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "StartOfWeek", + "code": 32, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "NumberOfWeeklyTransitions", + "code": 33, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "7", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "NumberOfDailyTransitions", + "code": 34, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "TemperatureSetpointHold", + "code": 35, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "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": "0x0023", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Fan Control", + "code": 514, + "mfgCode": null, + "define": "FAN_CONTROL_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "Step", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + } + ] + }, + { + "name": "Fan Control", + "code": 514, + "mfgCode": null, + "define": "FAN_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "FanMode", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "FanModeType", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FanModeSequence", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "FanModeSequenceType", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x02", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PercentSetting", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PercentCurrent", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SpeedMax", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "100", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SpeedSetting", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SpeedCurrent", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RockSupport", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RockSetting", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "WindSupport", + "code": 9, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "WindSetting", + "code": 10, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AirflowDirection", + "code": 11, + "mfgCode": null, + "side": "server", + "type": "AirflowDirectionEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 0, + "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": 0, + "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": 0, + "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": "0x0F", + "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": "Thermostat User Interface Configuration", + "code": 516, + "mfgCode": null, + "define": "THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "2", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Thermostat User Interface Configuration", + "code": 516, + "mfgCode": null, + "define": "THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "TemperatureDisplayMode", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "KeypadLockout", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ScheduleProgrammingVisibility", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "2", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Color Control", + "code": 768, + "mfgCode": null, + "define": "COLOR_CONTROL_CLUSTER", + "side": "client", + "enabled": 0, + "commands": [ + { + "name": "MoveToHue", + "code": 0, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "MoveHue", + "code": 1, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "StepHue", + "code": 2, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "MoveToSaturation", + "code": 3, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "MoveSaturation", + "code": 4, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "StepSaturation", + "code": 5, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "MoveToHueAndSaturation", + "code": 6, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "MoveToColor", + "code": 7, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "MoveColor", + "code": 8, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "StepColor", + "code": 9, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "MoveToColorTemperature", + "code": 10, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "EnhancedMoveToHue", + "code": 64, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "EnhancedMoveHue", + "code": 65, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "EnhancedStepHue", + "code": 66, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "EnhancedMoveToHueAndSaturation", + "code": 67, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "ColorLoopSet", + "code": 68, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 0 + }, + { + "name": "StopMoveStep", + "code": 71, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "MoveColorTemperature", + "code": 75, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + }, + { + "name": "StepColorTemperature", + "code": 76, + "mfgCode": null, + "source": "client", + "incoming": 1, + "outgoing": 1 + } + ], + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Color Control", + "code": 768, + "mfgCode": null, + "define": "COLOR_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "CurrentHue", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentSaturation", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "RemainingTime", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentX", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x616B", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CurrentY", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x607D", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "DriftCompensation", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CompensationText", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorTemperatureMireds", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00FA", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorMode", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Options", + "code": 15, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "NumberOfPrimaries", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary1X", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary1Y", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary1Intensity", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary2X", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary2Y", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary2Intensity", + "code": 23, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary3X", + "code": 25, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary3Y", + "code": 26, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary3Intensity", + "code": 27, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary4X", + "code": 32, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary4Y", + "code": 33, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary4Intensity", + "code": 34, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary5X", + "code": 36, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary5Y", + "code": 37, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary5Intensity", + "code": 38, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary6X", + "code": 40, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary6Y", + "code": 41, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "Primary6Intensity", + "code": 42, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "WhitePointX", + "code": 48, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "WhitePointY", + "code": 49, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorPointRX", + "code": 50, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorPointRY", + "code": 51, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorPointRIntensity", + "code": 52, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorPointGX", + "code": 54, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorPointGY", + "code": 55, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorPointGIntensity", + "code": 56, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorPointBX", + "code": 58, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorPointBY", + "code": 59, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorPointBIntensity", + "code": 60, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "EnhancedCurrentHue", + "code": 16384, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "EnhancedColorMode", + "code": 16385, + "mfgCode": null, + "side": "server", + "type": "enum8", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopActive", + "code": 16386, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopDirection", + "code": 16387, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopTime", + "code": 16388, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0019", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopStartEnhancedHue", + "code": 16389, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x2300", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorLoopStoredEnhancedHue", + "code": 16390, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorCapabilities", + "code": 16394, + "mfgCode": null, + "side": "server", + "type": "bitmap16", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x1F", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorTempPhysicalMinMireds", + "code": 16395, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "ColorTempPhysicalMaxMireds", + "code": 16396, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFEFF", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "CoupleColorTempToLevelMinMireds", + "code": 16397, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "StartUpColorTemperatureMireds", + "code": 16400, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "NVM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x1F", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "5", + "reportable": 1, + "minInterval": 0, + "maxInterval": 65344, + "reportableChange": 0 + } + ] + }, + { + "name": "Ballast Configuration", + "code": 769, + "mfgCode": null, + "define": "BALLAST_CONFIGURATION_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "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": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Ballast Configuration", + "code": 769, + "mfgCode": null, + "define": "BALLAST_CONFIGURATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "PhysicalMinLevel", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PhysicalMaxLevel", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFE", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BallastStatus", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinLevel", + "code": 16, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxLevel", + "code": 17, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFE", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "IntrinsicBallastFactor", + "code": 20, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BallastFactorAdjustment", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFF", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LampQuantity", + "code": 32, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LampType", + "code": 48, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LampManufacturer", + "code": 49, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LampRatedHours", + "code": 50, + "mfgCode": null, + "side": "server", + "type": "int24u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFFFFFF", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LampBurnHours", + "code": 51, + "mfgCode": null, + "side": "server", + "type": "int24u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x000000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LampAlarmMode", + "code": 52, + "mfgCode": null, + "side": "server", + "type": "bitmap8", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x00", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LampBurnHoursTripPoint", + "code": 53, + "mfgCode": null, + "side": "server", + "type": "int24u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFFFFFF", + "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": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Illuminance Measurement", + "code": 1024, + "mfgCode": null, + "define": "ILLUMINANCE_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Illuminance Measurement", + "code": 1024, + "mfgCode": null, + "define": "ILLUMINANCE_MEASUREMENT_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "MeasuredValue", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MinMeasuredValue", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x01", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxMeasuredValue", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFFFE", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Tolerance", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "GoToLiftPercentage", - "code": 5, + "name": "LightSensorType", + "code": 4, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "server", + "type": "LightSensorTypeEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0xFF", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "GoToTiltValue", - "code": 7, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "GoToTiltPercentage", - "code": 8, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 } - ], + ] + }, + { + "name": "Temperature Measurement", + "code": 1026, + "mfgCode": null, + "define": "TEMPERATURE_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, "attributes": [ { "name": "ClusterRevision", @@ -13966,7 +20254,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "4", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -13975,411 +20263,503 @@ ] }, { - "name": "Window Covering", - "code": 258, + "name": "Temperature Measurement", + "code": 1026, "mfgCode": null, - "define": "WINDOW_COVERING_CLUSTER", + "define": "TEMPERATURE_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "Type", + "name": "MeasuredValue", "code": 0, "mfgCode": null, "side": "server", - "type": "Type", + "type": "int16s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x08", + "defaultValue": "0x8000", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PhysicalClosedLimitLift", + "name": "MinMeasuredValue", "code": 1, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int16s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0xFFFF", + "defaultValue": "0x8000", "reportable": 1, "minInterval": 0, - "maxInterval": 65545, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "PhysicalClosedLimitTilt", + "name": "MaxMeasuredValue", "code": 2, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int16s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0xFFFF", + "defaultValue": "0x8000", "reportable": 1, "minInterval": 0, - "maxInterval": 65545, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CurrentPositionLift", + "name": "Tolerance", "code": 3, "mfgCode": null, "side": "server", "type": "int16u", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x7FFF", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CurrentPositionTilt", - "code": 4, + "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": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x7FFF", + "defaultValue": "4", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Pressure Measurement", + "code": 1027, + "mfgCode": null, + "define": "PRESSURE_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "NumberOfActuationsLift", - "code": 5, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", + "side": "client", "type": "int16u", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "3", "reportable": 1, "minInterval": 0, - "maxInterval": 65545, + "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Pressure Measurement", + "code": 1027, + "mfgCode": null, + "define": "PRESSURE_MEASUREMENT_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "NumberOfActuationsTilt", - "code": 6, + "name": "MeasuredValue", + "code": 0, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "int16s", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, - "maxInterval": 65545, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "ConfigStatus", - "code": 7, + "name": "MinMeasuredValue", + "code": 1, "mfgCode": null, "side": "server", - "type": "ConfigStatus", + "type": "int16s", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x03", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CurrentPositionLiftPercentage", - "code": 8, + "name": "MaxMeasuredValue", + "code": 2, "mfgCode": null, "side": "server", - "type": "Percent", + "type": "int16s", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "50", + "defaultValue": "", "reportable": 1, "minInterval": 0, - "maxInterval": 100, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CurrentPositionTiltPercentage", - "code": 9, + "name": "Tolerance", + "code": 3, "mfgCode": null, "side": "server", - "type": "Percent", - "included": 1, - "storageOption": "NVM", + "type": "int16u", + "included": 0, + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "50", + "defaultValue": "", "reportable": 1, "minInterval": 0, - "maxInterval": 100, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "OperationalStatus", - "code": 10, + "name": "ScaledValue", + "code": 16, "mfgCode": null, "side": "server", - "type": "OperationalStatus", - "included": 1, + "type": "int16s", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "0x0000", "reportable": 1, "minInterval": 0, - "maxInterval": 127, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "TargetPositionLiftPercent100ths", - "code": 11, + "name": "ScaledTolerance", + "code": 19, "mfgCode": null, "side": "server", - "type": "Percent100ths", - "included": 1, + "type": "int16u", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5000", + "defaultValue": "", "reportable": 1, "minInterval": 0, - "maxInterval": 10000, + "maxInterval": 65344, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TargetPositionTiltPercent100ths", - "code": 12, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "Percent100ths", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5000", + "defaultValue": "3", "reportable": 1, "minInterval": 0, - "maxInterval": 10000, + "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Flow Measurement", + "code": 1028, + "mfgCode": null, + "define": "FLOW_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "EndProductType", - "code": 13, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "EndProductType", + "side": "client", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "3", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Flow Measurement", + "code": 1028, + "mfgCode": null, + "define": "FLOW_MEASUREMENT_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "CurrentPositionLiftPercent100ths", - "code": 14, + "name": "MeasuredValue", + "code": 0, "mfgCode": null, "side": "server", - "type": "Percent100ths", + "type": "int16u", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5000", + "defaultValue": "", "reportable": 1, "minInterval": 0, - "maxInterval": 10000, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "CurrentPositionTiltPercent100ths", - "code": 15, + "name": "MinMeasuredValue", + "code": 1, "mfgCode": null, "side": "server", - "type": "Percent100ths", + "type": "int16u", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5000", + "defaultValue": "", "reportable": 1, "minInterval": 0, - "maxInterval": 10000, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "InstalledOpenLimitLift", - "code": 16, + "name": "MaxMeasuredValue", + "code": 2, "mfgCode": null, "side": "server", "type": "int16u", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "InstalledClosedLimitLift", - "code": 17, + "name": "Tolerance", + "code": 3, "mfgCode": null, "side": "server", "type": "int16u", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0xFFFF", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "InstalledOpenLimitTilt", - "code": 18, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "bitmap32", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "InstalledClosedLimitTilt", - "code": 19, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", "type": "int16u", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0xFFFF", + "defaultValue": "3", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Relative Humidity Measurement", + "code": 1029, + "mfgCode": null, + "define": "RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "Mode", - "code": 23, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "Mode", + "side": "client", + "type": "int16u", "included": 1, - "storageOption": "NVM", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "3", "reportable": 1, "minInterval": 0, - "maxInterval": 15, + "maxInterval": 65344, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Relative Humidity Measurement", + "code": 1029, + "mfgCode": null, + "define": "RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "SafetyStatus", - "code": 26, + "name": "MeasuredValue", + "code": 0, "mfgCode": null, "side": "server", - "type": "SafetyStatus", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 }, { - "name": "GeneratedCommandList", - "code": 65528, + "name": "MinMeasuredValue", + "code": 1, "mfgCode": null, "side": "server", - "type": "array", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "AcceptedCommandList", - "code": 65529, + "name": "MaxMeasuredValue", + "code": 2, "mfgCode": null, "side": "server", - "type": "array", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0x2710", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { - "name": "AttributeList", - "code": 65531, + "name": "Tolerance", + "code": 3, "mfgCode": null, "side": "server", - "type": "array", + "type": "int16u", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, + "minInterval": 0, + "maxInterval": 65344, "reportableChange": 0 }, { @@ -14392,10 +20772,10 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x17", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -14408,7 +20788,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "3", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -14417,30 +20797,12 @@ ] }, { - "name": "Barrier Control", - "code": 259, + "name": "Occupancy Sensing", + "code": 1030, "mfgCode": null, - "define": "BARRIER_CONTROL_CLUSTER", + "define": "OCCUPANCY_SENSING_CLUSTER", "side": "client", "enabled": 0, - "commands": [ - { - "name": "BarrierControlGoToPercent", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "BarrierControlStop", - "code": 1, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], "attributes": [ { "name": "ClusterRevision", @@ -14452,44 +20814,28 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "3", "reportable": 1, "minInterval": 0, "maxInterval": 65344, "reportableChange": 0 } ] - }, - { - "name": "Barrier Control", - "code": 259, - "mfgCode": null, - "define": "BARRIER_CONTROL_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ - { - "name": "barrier moving state", - "code": 1, - "mfgCode": null, - "side": "server", - "type": "enum8", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "", - "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, - "reportableChange": 0 - }, + }, + { + "name": "Occupancy Sensing", + "code": 1030, + "mfgCode": null, + "define": "OCCUPANCY_SENSING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "barrier safety status", - "code": 2, + "name": "Occupancy", + "code": 0, "mfgCode": null, "side": "server", - "type": "bitmap16", + "type": "OccupancyBitmap", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -14501,11 +20847,11 @@ "reportableChange": 0 }, { - "name": "barrier capabilities", - "code": 3, + "name": "OccupancySensorType", + "code": 1, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "OccupancySensorTypeEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -14517,11 +20863,11 @@ "reportableChange": 0 }, { - "name": "barrier position", - "code": 10, + "name": "OccupancySensorTypeBitmap", + "code": 2, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "OccupancySensorTypeBitmap", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -14558,7 +20904,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "3", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -14567,13 +20913,29 @@ ] }, { - "name": "Pump Configuration and Control", - "code": 512, + "name": "Carbon Monoxide Concentration Measurement", + "code": 1036, "mfgCode": null, - "define": "PUMP_CONFIGURATION_AND_CONTROL_CLUSTER", + "define": "CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER", "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -14584,206 +20946,206 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Pump Configuration and Control", - "code": 512, + "name": "Carbon Monoxide Concentration Measurement", + "code": 1036, "mfgCode": null, - "define": "PUMP_CONFIGURATION_AND_CONTROL_CLUSTER", + "define": "CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "MaxPressure", + "name": "MeasuredValue", "code": 0, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "401", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxSpeed", + "name": "MinMeasuredValue", "code": 1, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "50", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxFlow", + "name": "MaxMeasuredValue", "code": 2, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1500", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinConstPressure", + "name": "PeakMeasuredValue", "code": 3, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "511", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxConstPressure", + "name": "PeakMeasuredValueWindow", "code": 4, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "elapsed_s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "3600", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinCompPressure", + "name": "AverageMeasuredValue", "code": 5, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "213", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxCompPressure", + "name": "AverageMeasuredValueWindow", "code": 6, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "elapsed_s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "3600", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinConstSpeed", + "name": "Uncertainty", "code": 7, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "10", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxConstSpeed", + "name": "MeasurementUnit", "code": 8, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "MeasurementUnitEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinConstFlow", + "name": "MeasurementMedium", "code": 9, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "MeasurementMediumEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxConstFlow", + "name": "LevelValue", "code": 10, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "LevelValueEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "3", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinConstTemp", - "code": 11, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -14793,13 +21155,13 @@ "reportableChange": 0 }, { - "name": "MaxConstTemp", - "code": 12, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -14809,611 +21171,619 @@ "reportableChange": 0 }, { - "name": "PumpStatus", - "code": 16, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "PumpStatusBitmap", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "EffectiveOperationMode", - "code": 17, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "OperationModeEnum", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "EffectiveControlMode", - "code": 18, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "ControlModeEnum", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "63", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Capacity", - "code": 19, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Carbon Dioxide Concentration Measurement", + "code": 1037, + "mfgCode": null, + "define": "CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Speed", - "code": 20, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", + "side": "client", "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Carbon Dioxide Concentration Measurement", + "code": 1037, + "mfgCode": null, + "define": "CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "MeasuredValue", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "single", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "458", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LifetimeRunningHours", - "code": 21, + "name": "MinMeasuredValue", + "code": 1, "mfgCode": null, "side": "server", - "type": "int24u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x000000", + "defaultValue": "300", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Power", - "code": 22, + "name": "MaxMeasuredValue", + "code": 2, "mfgCode": null, "side": "server", - "type": "int24u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "2000", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LifetimeEnergyConsumed", - "code": 23, + "name": "PeakMeasuredValue", + "code": 3, "mfgCode": null, "side": "server", - "type": "int32u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00000000", + "defaultValue": "523", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OperationMode", - "code": 32, + "name": "PeakMeasuredValueWindow", + "code": 4, "mfgCode": null, "side": "server", - "type": "OperationModeEnum", + "type": "elapsed_s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "3600", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ControlMode", - "code": 33, + "name": "AverageMeasuredValue", + "code": 5, "mfgCode": null, "side": "server", - "type": "ControlModeEnum", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "421", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "AverageMeasuredValueWindow", + "code": 6, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "elapsed_s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x1F", + "defaultValue": "3600", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "Uncertainty", + "code": 7, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Thermostat", - "code": 513, - "mfgCode": null, - "define": "THERMOSTAT_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "SetpointRaiseLower", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "SetWeeklySchedule", - "code": 1, - "mfgCode": null, - "source": "client", - "incoming": 0, - "outgoing": 1 - }, - { - "name": "GetWeeklySchedule", - "code": 2, - "mfgCode": null, - "source": "client", - "incoming": 0, - "outgoing": 1 }, { - "name": "ClearWeeklySchedule", - "code": 3, - "mfgCode": null, - "source": "client", - "incoming": 0, - "outgoing": 1 - } - ], - "attributes": [ - { - "name": "ClusterRevision", - "code": 65533, + "name": "MeasurementUnit", + "code": 8, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "MeasurementUnitEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Thermostat", - "code": 513, - "mfgCode": null, - "define": "THERMOSTAT_CLUSTER", - "side": "server", - "enabled": 1, - "commands": [ - { - "name": "GetWeeklyScheduleResponse", - "code": 0, - "mfgCode": null, - "source": "server", - "incoming": 1, - "outgoing": 0 - } - ], - "attributes": [ + }, { - "name": "LocalTemperature", - "code": 0, + "name": "MeasurementMedium", + "code": 9, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "MeasurementMediumEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AbsMinHeatSetpointLimit", - "code": 3, + "name": "LevelValue", + "code": 10, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "LevelValueEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x02BC", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AbsMaxHeatSetpointLimit", - "code": 4, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0BB8", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AbsMinCoolSetpointLimit", - "code": 5, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0640", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AbsMaxCoolSetpointLimit", - "code": 6, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0C80", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PICoolingDemand", - "code": 7, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 0, - "storageOption": "RAM", + "type": "array", + "included": 1, + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PIHeatingDemand", - "code": 8, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 0, + "type": "bitmap32", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "63", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OccupiedCoolingSetpoint", - "code": 17, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0A28", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Nitric Oxide Concentration Measurement", + "code": 1042, + "mfgCode": null, + "define": "NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "OccupiedHeatingSetpoint", - "code": 18, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "side": "server", - "type": "int16s", + "side": "client", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x07D0", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinHeatSetpointLimit", - "code": 21, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "int16s", + "side": "client", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x02BC", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Nitric Oxide Concentration Measurement", + "code": 1042, + "mfgCode": null, + "define": "NITRIC_OXIDE_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "server", + "enabled": 0, + "attributes": [ { - "name": "MaxHeatSetpointLimit", - "code": 22, + "name": "MeasuredValue", + "code": 0, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0BB8", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinCoolSetpointLimit", - "code": 23, + "name": "MinMeasuredValue", + "code": 1, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0640", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxCoolSetpointLimit", - "code": 24, + "name": "MaxMeasuredValue", + "code": 2, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0C80", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinSetpointDeadBand", - "code": 25, + "name": "PeakMeasuredValue", + "code": 3, "mfgCode": null, "side": "server", - "type": "int8s", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x19", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ControlSequenceOfOperation", - "code": 27, + "name": "PeakMeasuredValueWindow", + "code": 4, "mfgCode": null, "side": "server", - "type": "ThermostatControlSequence", - "included": 1, + "type": "elapsed_s", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x04", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SystemMode", - "code": 28, + "name": "AverageMeasuredValue", + "code": 5, "mfgCode": null, "side": "server", - "type": "enum8", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x01", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ThermostatRunningMode", - "code": 30, + "name": "AverageMeasuredValueWindow", + "code": 6, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "elapsed_s", "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "StartOfWeek", - "code": 32, + "name": "Uncertainty", + "code": 7, "mfgCode": null, "side": "server", - "type": "enum8", - "included": 0, + "type": "single", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "NumberOfWeeklyTransitions", - "code": 33, + "name": "MeasurementUnit", + "code": 8, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 0, + "type": "MeasurementUnitEnum", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "7", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "NumberOfDailyTransitions", - "code": 34, + "name": "MeasurementMedium", + "code": 9, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 0, + "type": "MeasurementMediumEnum", + "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "TemperatureSetpointHold", - "code": 35, + "name": "LevelValue", + "code": 10, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "LevelValueEnum", "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -15448,6 +21818,22 @@ "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, @@ -15474,10 +21860,10 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0023", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -15490,213 +21876,263 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Fan Control", - "code": 514, + "name": "Nitrogen Dioxide Concentration Measurement", + "code": 1043, "mfgCode": null, - "define": "FAN_CONTROL_CLUSTER", + "define": "NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER", "side": "client", - "enabled": 0 + "enabled": 0, + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "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": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] }, { - "name": "Fan Control", - "code": 514, + "name": "Nitrogen Dioxide Concentration Measurement", + "code": 1043, "mfgCode": null, - "define": "FAN_CONTROL_CLUSTER", + "define": "NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "FanMode", + "name": "MeasuredValue", "code": 0, "mfgCode": null, "side": "server", - "type": "FanModeType", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "3", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FanModeSequence", + "name": "MinMeasuredValue", "code": 1, "mfgCode": null, "side": "server", - "type": "FanModeSequenceType", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x02", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PercentSetting", + "name": "MaxMeasuredValue", "code": 2, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "150", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PercentCurrent", + "name": "PeakMeasuredValue", "code": 3, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SpeedMax", + "name": "PeakMeasuredValueWindow", "code": 4, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 1, + "type": "elapsed_s", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "100", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SpeedSetting", + "name": "AverageMeasuredValue", "code": 5, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "SpeedCurrent", + "name": "AverageMeasuredValueWindow", "code": 6, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 1, + "type": "elapsed_s", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RockSupport", + "name": "Uncertainty", "code": 7, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RockSetting", + "name": "MeasurementUnit", "code": 8, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "MeasurementUnitEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WindSupport", + "name": "MeasurementMedium", "code": 9, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "MeasurementMediumEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LevelValue", + "code": 10, + "mfgCode": null, + "side": "server", + "type": "LevelValueEnum", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WindSetting", - "code": 10, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "GeneratedCommandList", - "code": 65528, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -15707,12 +22143,12 @@ "reportableChange": 0 }, { - "name": "AcceptedCommandList", - "code": 65529, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -15728,7 +22164,7 @@ "mfgCode": null, "side": "server", "type": "array", - "included": 0, + "included": 1, "storageOption": "External", "singleton": 0, "bounded": 0, @@ -15748,7 +22184,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0F", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -15764,7 +22200,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -15773,13 +22209,29 @@ ] }, { - "name": "Thermostat User Interface Configuration", - "code": 516, + "name": "Ozone Concentration Measurement", + "code": 1045, "mfgCode": null, - "define": "THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER", + "define": "OZONE_CONCENTRATION_MEASUREMENT_CLUSTER", "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -15790,407 +22242,281 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Thermostat User Interface Configuration", - "code": 516, + "name": "Ozone Concentration Measurement", + "code": 1045, "mfgCode": null, - "define": "THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER", + "define": "OZONE_CONCENTRATION_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, "attributes": [ { - "name": "TemperatureDisplayMode", + "name": "MeasuredValue", "code": 0, "mfgCode": null, "side": "server", - "type": "enum8", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "KeypadLockout", + "name": "MinMeasuredValue", "code": 1, "mfgCode": null, "side": "server", - "type": "enum8", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ScheduleProgrammingVisibility", + "name": "MaxMeasuredValue", "code": 2, "mfgCode": null, "side": "server", - "type": "enum8", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "PeakMeasuredValue", + "code": 3, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "PeakMeasuredValueWindow", + "code": 4, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "elapsed_s", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Color Control", - "code": 768, - "mfgCode": null, - "define": "COLOR_CONTROL_CLUSTER", - "side": "client", - "enabled": 0, - "commands": [ - { - "name": "MoveToHue", - "code": 0, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "MoveHue", - "code": 1, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "StepHue", - "code": 2, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "MoveToSaturation", - "code": 3, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "MoveSaturation", - "code": 4, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 }, { - "name": "StepSaturation", + "name": "AverageMeasuredValue", "code": 5, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "MoveToHueAndSaturation", - "code": 6, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "MoveToColor", - "code": 7, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "MoveColor", - "code": 8, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "StepColor", - "code": 9, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "MoveToColorTemperature", - "code": 10, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - }, - { - "name": "EnhancedMoveToHue", - "code": 64, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "EnhancedMoveHue", - "code": 65, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "EnhancedStepHue", - "code": 66, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "EnhancedMoveToHueAndSaturation", - "code": 67, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 - }, - { - "name": "ColorLoopSet", - "code": 68, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 0 + "side": "server", + "type": "single", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "StopMoveStep", - "code": 71, + "name": "AverageMeasuredValueWindow", + "code": 6, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "elapsed_s", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "MoveColorTemperature", - "code": 75, + "name": "Uncertainty", + "code": 7, "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 + "side": "server", + "type": "single", + "included": 0, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 }, { - "name": "StepColorTemperature", - "code": 76, - "mfgCode": null, - "source": "client", - "incoming": 1, - "outgoing": 1 - } - ], - "attributes": [ - { - "name": "ClusterRevision", - "code": 65533, + "name": "MeasurementUnit", + "code": 8, "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, + "side": "server", + "type": "MeasurementUnitEnum", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Color Control", - "code": 768, - "mfgCode": null, - "define": "COLOR_CONTROL_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "CurrentHue", - "code": 0, + "name": "MeasurementMedium", + "code": 9, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "MeasurementMediumEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "CurrentSaturation", - "code": 1, + "name": "LevelValue", + "code": 10, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "LevelValueEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "RemainingTime", - "code": 2, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "CurrentX", - "code": 3, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x616B", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "CurrentY", - "code": 4, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x607D", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "DriftCompensation", - "code": 5, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "CompensationText", - "code": 6, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "14", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorTemperatureMireds", - "code": 7, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", "type": "int16u", @@ -16198,303 +22524,323 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00FA", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "PM2.5 Concentration Measurement", + "code": 1066, + "mfgCode": null, + "define": "PM2_5_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "ColorMode", - "code": 8, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "side": "server", - "type": "enum8", + "side": "client", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x01", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Options", - "code": 15, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "bitmap8", + "side": "client", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "PM2.5 Concentration Measurement", + "code": 1066, + "mfgCode": null, + "define": "PM2_5_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "NumberOfPrimaries", - "code": 16, + "name": "MeasuredValue", + "code": 0, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "42", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary1X", - "code": 17, + "name": "MinMeasuredValue", + "code": 1, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary1Y", - "code": 18, + "name": "MaxMeasuredValue", + "code": 2, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "400", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary1Intensity", - "code": 19, + "name": "PeakMeasuredValue", + "code": 3, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "90", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary2X", - "code": 21, + "name": "PeakMeasuredValueWindow", + "code": 4, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "elapsed_s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "3600", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary2Y", - "code": 22, + "name": "AverageMeasuredValue", + "code": 5, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "35", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary2Intensity", - "code": 23, + "name": "AverageMeasuredValueWindow", + "code": 6, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "elapsed_s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "3600", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary3X", - "code": 25, + "name": "Uncertainty", + "code": 7, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "4", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary3Y", - "code": 26, + "name": "MeasurementUnit", + "code": 8, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "MeasurementUnitEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "4", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary3Intensity", - "code": 27, + "name": "MeasurementMedium", + "code": 9, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "MeasurementMediumEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary4X", - "code": 32, + "name": "LevelValue", + "code": 10, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "LevelValueEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "2", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary4Y", - "code": 33, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary4Intensity", - "code": 34, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary5X", - "code": 36, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary5Y", - "code": 37, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary5Intensity", - "code": 38, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "63", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary6X", - "code": 40, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", "type": "int16u", @@ -16502,303 +22848,323 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Formaldehyde Concentration Measurement", + "code": 1067, + "mfgCode": null, + "define": "FORMALDEHYDE_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "Primary6Y", - "code": 41, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "side": "server", - "type": "int16u", + "side": "client", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Primary6Intensity", - "code": 42, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "int8u", + "side": "client", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "Formaldehyde Concentration Measurement", + "code": 1067, + "mfgCode": null, + "define": "FORMALDEHYDE_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "WhitePointX", - "code": 48, + "name": "MeasuredValue", + "code": 0, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "WhitePointY", - "code": 49, + "name": "MinMeasuredValue", + "code": 1, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorPointRX", - "code": 50, + "name": "MaxMeasuredValue", + "code": 2, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorPointRY", - "code": 51, + "name": "PeakMeasuredValue", + "code": 3, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorPointRIntensity", - "code": 52, + "name": "PeakMeasuredValueWindow", + "code": 4, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 1, + "type": "elapsed_s", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorPointGX", - "code": 54, + "name": "AverageMeasuredValue", + "code": 5, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorPointGY", - "code": 55, + "name": "AverageMeasuredValueWindow", + "code": 6, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "elapsed_s", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorPointGIntensity", - "code": 56, + "name": "Uncertainty", + "code": 7, "mfgCode": null, "side": "server", - "type": "int8u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorPointBX", - "code": 58, + "name": "MeasurementUnit", + "code": 8, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "MeasurementUnitEnum", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorPointBY", - "code": 59, + "name": "MeasurementMedium", + "code": 9, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "MeasurementMediumEnum", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorPointBIntensity", - "code": 60, + "name": "LevelValue", + "code": 10, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "LevelValueEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "3", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "EnhancedCurrentHue", - "code": 16384, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "EnhancedColorMode", - "code": 16385, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x01", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorLoopActive", - "code": 16386, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorLoopDirection", - "code": 16387, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorLoopTime", - "code": 16388, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0019", + "defaultValue": "2", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorLoopStartEnhancedHue", - "code": 16389, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", "type": "int16u", @@ -16806,172 +23172,182 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x2300", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "PM1 Concentration Measurement", + "code": 1068, + "mfgCode": null, + "define": "PM1_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "ColorLoopStoredEnhancedHue", - "code": 16390, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "side": "server", - "type": "int16u", + "side": "client", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorCapabilities", - "code": 16394, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, - "side": "server", - "type": "bitmap16", + "side": "client", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x1F", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "PM1 Concentration Measurement", + "code": 1068, + "mfgCode": null, + "define": "PM1_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ { - "name": "ColorTempPhysicalMinMireds", - "code": 16395, + "name": "MeasuredValue", + "code": 0, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "39", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ColorTempPhysicalMaxMireds", - "code": 16396, + "name": "MinMeasuredValue", + "code": 1, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0xFEFF", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "CoupleColorTempToLevelMinMireds", - "code": 16397, + "name": "MaxMeasuredValue", + "code": 2, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "400", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "StartUpColorTemperatureMireds", - "code": 16400, + "name": "PeakMeasuredValue", + "code": 3, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "70", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "PeakMeasuredValueWindow", + "code": 4, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "elapsed_s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x1F", + "defaultValue": "3600", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "AverageMeasuredValue", + "code": 5, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "41", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Ballast Configuration", - "code": 769, - "mfgCode": null, - "define": "BALLAST_CONFIGURATION_CLUSTER", - "side": "client", - "enabled": 0, - "attributes": [ + }, { - "name": "FeatureMap", - "code": 65532, + "name": "AverageMeasuredValueWindow", + "code": 6, "mfgCode": null, - "side": "client", - "type": "bitmap32", + "side": "server", + "type": "elapsed_s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "3600", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "Uncertainty", + "code": 7, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -16981,105 +23357,95 @@ "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Ballast Configuration", - "code": 769, - "mfgCode": null, - "define": "BALLAST_CONFIGURATION_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "PhysicalMinLevel", - "code": 0, + "name": "MeasurementUnit", + "code": 8, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "MeasurementUnitEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x01", + "defaultValue": "4", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "PhysicalMaxLevel", - "code": 1, + "name": "MeasurementMedium", + "code": 9, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "MeasurementMediumEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0xFE", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "BallastStatus", - "code": 2, + "name": "LevelValue", + "code": 10, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "LevelValueEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinLevel", - "code": 16, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x01", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxLevel", - "code": 17, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0xFE", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "IntrinsicBallastFactor", - "code": 20, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -17089,203 +23455,239 @@ "reportableChange": 0 }, { - "name": "BallastFactorAdjustment", - "code": 21, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0xFF", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LampQuantity", - "code": 32, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, "side": "server", - "type": "int8u", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "63", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LampType", - "code": 48, + "name": "ClusterRevision", + "code": 65533, "mfgCode": null, "side": "server", - "type": "char_string", + "type": "int16u", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - }, + } + ] + }, + { + "name": "PM10 Concentration Measurement", + "code": 1069, + "mfgCode": null, + "define": "PM10_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "client", + "enabled": 0, + "attributes": [ { - "name": "LampManufacturer", - "code": 49, + "name": "FeatureMap", + "code": 65532, "mfgCode": null, - "side": "server", - "type": "char_string", + "side": "client", + "type": "bitmap32", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LampRatedHours", - "code": 50, + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "PM10 Concentration Measurement", + "code": 1069, + "mfgCode": null, + "define": "PM10_CONCENTRATION_MEASUREMENT_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "MeasuredValue", + "code": 0, "mfgCode": null, "side": "server", - "type": "int24u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0xFFFFFF", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LampBurnHours", - "code": 51, + "name": "MinMeasuredValue", + "code": 1, "mfgCode": null, "side": "server", - "type": "int24u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x000000", + "defaultValue": "2", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LampAlarmMode", - "code": 52, + "name": "MaxMeasuredValue", + "code": 2, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x00", + "defaultValue": "400", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "LampBurnHoursTripPoint", - "code": 53, + "name": "PeakMeasuredValue", + "code": 3, "mfgCode": null, "side": "server", - "type": "int24u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0xFFFFFF", + "defaultValue": "49", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "GeneratedCommandList", - "code": 65528, + "name": "PeakMeasuredValueWindow", + "code": 4, "mfgCode": null, "side": "server", - "type": "array", + "type": "elapsed_s", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "3600", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AcceptedCommandList", - "code": 65529, + "name": "AverageMeasuredValue", + "code": 5, "mfgCode": null, "side": "server", - "type": "array", + "type": "single", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "43", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "AttributeList", - "code": 65531, + "name": "AverageMeasuredValueWindow", + "code": 6, "mfgCode": null, "side": "server", - "type": "array", + "type": "elapsed_s", "included": 1, - "storageOption": "External", + "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "3600", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "Uncertainty", + "code": 7, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "2", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "MeasurementUnit", + "code": 8, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "MeasurementUnitEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -17295,99 +23697,79 @@ "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Illuminance Measurement", - "code": 1024, - "mfgCode": null, - "define": "ILLUMINANCE_MEASUREMENT_CLUSTER", - "side": "client", - "enabled": 0, - "attributes": [ + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "MeasurementMedium", + "code": 9, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "MeasurementMediumEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "0", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Illuminance Measurement", - "code": 1024, - "mfgCode": null, - "define": "ILLUMINANCE_MEASUREMENT_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "MeasuredValue", - "code": 0, + "name": "LevelValue", + "code": 10, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "LevelValueEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinMeasuredValue", - "code": 1, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x01", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxMeasuredValue", - "code": 2, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0xFFFE", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Tolerance", - "code": 3, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", @@ -17397,16 +23779,16 @@ "reportableChange": 0 }, { - "name": "LightSensorType", - "code": 4, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0xFF", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -17422,7 +23804,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "63", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -17438,7 +23820,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -17447,13 +23829,29 @@ ] }, { - "name": "Temperature Measurement", - "code": 1026, + "name": "Total Volatile Organic Compounds Concentration Measurement", + "code": 1070, "mfgCode": null, - "define": "TEMPERATURE_MEASUREMENT_CLUSTER", + "define": "TVOC_CONCENTRATION_MEASUREMENT_CLUSTER", "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -17464,19 +23862,19 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Temperature Measurement", - "code": 1026, + "name": "Total Volatile Organic Compounds Concentration Measurement", + "code": 1070, "mfgCode": null, - "define": "TEMPERATURE_MEASUREMENT_CLUSTER", + "define": "TVOC_CONCENTRATION_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, "attributes": [ @@ -17485,15 +23883,15 @@ "code": 0, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x8000", + "defaultValue": "5", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -17501,15 +23899,15 @@ "code": 1, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x8000", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -17517,195 +23915,207 @@ "code": 2, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x8000", + "defaultValue": "100", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Tolerance", + "name": "PeakMeasuredValue", "code": 3, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "8", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "PeakMeasuredValueWindow", + "code": 4, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "elapsed_s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "3600", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "AverageMeasuredValue", + "code": 5, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "2", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Pressure Measurement", - "code": 1027, - "mfgCode": null, - "define": "PRESSURE_MEASUREMENT_CLUSTER", - "side": "client", - "enabled": 0, - "attributes": [ + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "AverageMeasuredValueWindow", + "code": 6, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "elapsed_s", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "3600", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Pressure Measurement", - "code": 1027, - "mfgCode": null, - "define": "PRESSURE_MEASUREMENT_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "MeasuredValue", - "code": 0, + "name": "Uncertainty", + "code": 7, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "single", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinMeasuredValue", - "code": 1, + "name": "MeasurementUnit", + "code": 8, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "MeasurementUnitEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxMeasuredValue", - "code": 2, + "name": "MeasurementMedium", + "code": 9, "mfgCode": null, "side": "server", - "type": "int16s", + "type": "MeasurementMediumEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Tolerance", - "code": 3, + "name": "LevelValue", + "code": 10, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "LevelValueEnum", "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ScaledValue", - "code": 16, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "int16s", - "included": 0, - "storageOption": "RAM", + "type": "array", + "included": 1, + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "0x0000", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "ScaledTolerance", - "code": 19, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 0, - "storageOption": "RAM", + "type": "array", + "included": 1, + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "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 }, { @@ -17718,7 +24128,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "49", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -17734,22 +24144,38 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Flow Measurement", - "code": 1028, + "name": "Radon Concentration Measurement", + "code": 1071, "mfgCode": null, - "define": "FLOW_MEASUREMENT_CLUSTER", + "define": "RADON_CONCENTRATION_MEASUREMENT_CLUSTER", "side": "client", "enabled": 0, "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "ClusterRevision", "code": 65533, @@ -17760,19 +24186,19 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] }, { - "name": "Flow Measurement", - "code": 1028, + "name": "Radon Concentration Measurement", + "code": 1071, "mfgCode": null, - "define": "FLOW_MEASUREMENT_CLUSTER", + "define": "RADON_CONCENTRATION_MEASUREMENT_CLUSTER", "side": "server", "enabled": 1, "attributes": [ @@ -17781,15 +24207,15 @@ "code": 0, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -17797,15 +24223,15 @@ "code": 1, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -17813,171 +24239,119 @@ "code": 2, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Tolerance", + "name": "PeakMeasuredValue", "code": 3, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "", "reportable": 1, "minInterval": 1, "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "PeakMeasuredValueWindow", + "code": 4, "mfgCode": null, "side": "server", - "type": "bitmap32", - "included": 1, + "type": "elapsed_s", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "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": "3", - "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, - "reportableChange": 0 - } - ] - }, - { - "name": "Relative Humidity Measurement", - "code": 1029, - "mfgCode": null, - "define": "RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER", - "side": "client", - "enabled": 0, - "attributes": [ - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "3", - "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, - "reportableChange": 0 - } - ] - }, - { - "name": "Relative Humidity Measurement", - "code": 1029, - "mfgCode": null, - "define": "RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ - { - "name": "MeasuredValue", - "code": 0, + "name": "AverageMeasuredValue", + "code": 5, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MinMeasuredValue", - "code": 1, + "name": "AverageMeasuredValueWindow", + "code": 6, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "elapsed_s", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "MaxMeasuredValue", - "code": 2, + "name": "Uncertainty", + "code": 7, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "single", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x2710", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "Tolerance", - "code": 3, + "name": "MeasurementUnit", + "code": 8, "mfgCode": null, "side": "server", - "type": "int16u", - "included": 1, + "type": "MeasurementUnitEnum", + "included": 0, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": "0", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "FeatureMap", - "code": 65532, + "name": "MeasurementMedium", + "code": 9, "mfgCode": null, "side": "server", - "type": "bitmap32", + "type": "MeasurementMediumEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -17989,103 +24363,83 @@ "reportableChange": 0 }, { - "name": "ClusterRevision", - "code": 65533, + "name": "LevelValue", + "code": 10, "mfgCode": null, "side": "server", - "type": "int16u", + "type": "LevelValueEnum", "included": 1, "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "4", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Occupancy Sensing", - "code": 1030, - "mfgCode": null, - "define": "OCCUPANCY_SENSING_CLUSTER", - "side": "client", - "enabled": 0, - "attributes": [ + }, { - "name": "ClusterRevision", - "code": 65533, + "name": "GeneratedCommandList", + "code": 65528, "mfgCode": null, - "side": "client", - "type": "int16u", + "side": "server", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 - } - ] - }, - { - "name": "Occupancy Sensing", - "code": 1030, - "mfgCode": null, - "define": "OCCUPANCY_SENSING_CLUSTER", - "side": "server", - "enabled": 1, - "attributes": [ + }, { - "name": "Occupancy", - "code": 0, + "name": "AcceptedCommandList", + "code": 65529, "mfgCode": null, "side": "server", - "type": "OccupancyBitmap", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OccupancySensorType", - "code": 1, + "name": "EventList", + "code": 65530, "mfgCode": null, "side": "server", - "type": "OccupancySensorTypeEnum", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { - "name": "OccupancySensorTypeBitmap", - "code": 2, + "name": "AttributeList", + "code": 65531, "mfgCode": null, "side": "server", - "type": "OccupancySensorTypeBitmap", + "type": "array", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 }, { @@ -18098,7 +24452,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "14", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -18114,10 +24468,10 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "3", + "defaultValue": "1", "reportable": 1, - "minInterval": 0, - "maxInterval": 65344, + "minInterval": 1, + "maxInterval": 65534, "reportableChange": 0 } ] @@ -21815,7 +28169,7 @@ "code": 0, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "NameSupportBitmap", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -21936,7 +28290,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -22009,7 +28363,7 @@ "side": "server", "type": "int8u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "0x00", @@ -22092,7 +28446,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -25415,7 +31769,7 @@ "code": 5, "mfgCode": null, "side": "server", - "type": "NetworkCommissioningStatus", + "type": "NetworkCommissioningStatusEnum", "included": 1, "storageOption": "External", "singleton": 0, @@ -25580,5 +31934,6 @@ "endpointVersion": 1, "deviceIdentifier": 61442 } - ] + ], + "log": [] } \ No newline at end of file diff --git a/examples/all-clusters-app/all-clusters-common/src/fan-stub.cpp b/examples/all-clusters-app/all-clusters-common/src/fan-stub.cpp new file mode 100644 index 00000000000000..4f70f80f7ccb24 --- /dev/null +++ b/examples/all-clusters-app/all-clusters-common/src/fan-stub.cpp @@ -0,0 +1,115 @@ +/* + * + * Copyright (c) 2023 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace chip; +using namespace chip::app; +using namespace chip::app::Clusters; +using namespace chip::app::Clusters::FanControl::Attributes; + +namespace { + +/* + * TODO: This is a stop-gap solution to allow the existing fan control cluster tests to run after changes to + * the cluster objects for TE1. This should be removed once #6496 is resolved as it will likely result in a + * FanControl delegate added to the SDK. + * + * FYI... The previous implementation of the FanControl cluster set the speedCurrent/percentCurrent when it received + * speedSetting/percentSetting. The new implementation of the FanControl cluster does not do this as this should + * really be done by the application. + */ + +class FanAttrAccess : public AttributeAccessInterface +{ +public: + // Register for the FanControl cluster on all endpoints. + FanAttrAccess() : AttributeAccessInterface(Optional::Missing(), FanControl::Id) {} + + CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override; + +private: + CHIP_ERROR ReadPercentCurrent(EndpointId endpoint, AttributeValueEncoder & aEncoder); + CHIP_ERROR ReadSpeedCurrent(EndpointId endpoint, AttributeValueEncoder & aEncoder); +}; + +CHIP_ERROR FanAttrAccess::ReadPercentCurrent(EndpointId endpoint, AttributeValueEncoder & aEncoder) +{ + // Return PercentSetting attribute value for now + DataModel::Nullable percentSetting; + PercentSetting::Get(endpoint, percentSetting); + uint8_t ret = 0; + if (!percentSetting.IsNull()) + { + ret = percentSetting.Value(); + } + + return aEncoder.Encode(ret); +} + +CHIP_ERROR FanAttrAccess::ReadSpeedCurrent(EndpointId endpoint, AttributeValueEncoder & aEncoder) +{ + // Return SpeedCurrent attribute value for now + DataModel::Nullable speedSetting; + SpeedSetting::Get(endpoint, speedSetting); + uint8_t ret = 0; + if (!speedSetting.IsNull()) + { + ret = speedSetting.Value(); + } + + return aEncoder.Encode(ret); +} + +FanAttrAccess gAttrAccess; + +CHIP_ERROR FanAttrAccess::Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) +{ + VerifyOrDie(aPath.mClusterId == FanControl::Id); + + switch (aPath.mAttributeId) + { + case SpeedCurrent::Id: + return ReadSpeedCurrent(aPath.mEndpointId, aEncoder); + case PercentCurrent::Id: + return ReadPercentCurrent(aPath.mEndpointId, aEncoder); + default: + break; + } + return CHIP_NO_ERROR; +} +} // anonymous namespace + +void emberAfFanControlClusterInitCallback(EndpointId endpoint) +{ + uint32_t featureMap = 0; + + featureMap |= to_underlying(FanControl::Feature::kMultiSpeed); + featureMap |= to_underlying(FanControl::Feature::kMultiSpeed); + featureMap |= to_underlying(FanControl::Feature::kAuto); + + FeatureMap::Set(endpoint, featureMap); + + registerAttributeAccessOverride(&gAttrAccess); +} diff --git a/examples/all-clusters-app/all-clusters-common/src/static-supported-modes-manager.cpp b/examples/all-clusters-app/all-clusters-common/src/static-supported-modes-manager.cpp index cab8f9730a8514..a806a22c2757e2 100644 --- a/examples/all-clusters-app/all-clusters-common/src/static-supported-modes-manager.cpp +++ b/examples/all-clusters-app/all-clusters-common/src/static-supported-modes-manager.cpp @@ -8,31 +8,30 @@ using namespace chip::app::Clusters::ModeSelect; using chip::Protocols::InteractionModel::Status; using ModeOptionStructType = Structs::ModeOptionStruct::Type; -using SemanticTag = Structs::SemanticTagStruct::Type; +using ModeTagType = Structs::ModeTagStruct::Type; template using List = app::DataModel::List; using storage_value_type = const ModeOptionStructType; namespace { -Structs::ModeOptionStruct::Type buildModeOptionStruct(const char * label, uint8_t mode, - const List & semanticTags) +Structs::ModeOptionStruct::Type buildModeOptionStruct(const char * label, uint8_t mode, const List & modeTags) { Structs::ModeOptionStruct::Type option; - option.label = CharSpan::fromCharString(label); - option.mode = mode; - option.semanticTags = semanticTags; + option.label = CharSpan::fromCharString(label); + option.mode = mode; + option.modeTags = modeTags; return option; } } // namespace -constexpr SemanticTag semanticTagsBlack[] = { { .value = 0 } }; -constexpr SemanticTag semanticTagsCappucino[] = { { .value = 0 } }; -constexpr SemanticTag semanticTagsEspresso[] = { { .value = 0 } }; +ModeTagType modeTagsBlack[] = { detail::Structs::ModeTagStruct::Type{ .value = 0 } }; +ModeTagType modeTagsCappucino[] = { detail::Structs::ModeTagStruct::Type{ .value = 0 } }; +ModeTagType modeTagsEspresso[] = { detail::Structs::ModeTagStruct::Type{ .value = 0 } }; // TODO: Configure your options for each endpoint storage_value_type StaticSupportedModesManager::coffeeOptions[] = { - buildModeOptionStruct("Black", 0, List(semanticTagsBlack)), - buildModeOptionStruct("Cappuccino", 4, List(semanticTagsCappucino)), - buildModeOptionStruct("Espresso", 7, List(semanticTagsEspresso)) + buildModeOptionStruct("Black", 0, List(modeTagsBlack)), + buildModeOptionStruct("Cappuccino", 4, List(modeTagsCappucino)), + buildModeOptionStruct("Espresso", 7, List(modeTagsEspresso)) }; const StaticSupportedModesManager::EndpointSpanPair StaticSupportedModesManager::supportedOptionsByEndpoints[EMBER_AF_MODE_SELECT_CLUSTER_SERVER_ENDPOINT_COUNT] = { @@ -73,7 +72,7 @@ Status StaticSupportedModesManager::getModeOptionByMode(unsigned short endpointI return Status::Success; } } - emberAfPrintln(EMBER_AF_PRINT_DEBUG, "Cannot find the mode %u", mode); + ChipLogProgress(Zcl, "Cannot find the mode %u", mode); return Status::InvalidCommand; } diff --git a/examples/all-clusters-app/ameba/main/chipinterface.cpp b/examples/all-clusters-app/ameba/main/chipinterface.cpp index c8b2e9a4333e14..8f32c8d0d5664b 100644 --- a/examples/all-clusters-app/ameba/main/chipinterface.cpp +++ b/examples/all-clusters-app/ameba/main/chipinterface.cpp @@ -48,6 +48,7 @@ #endif using namespace ::chip; +using namespace ::chip::app; using namespace ::chip::DeviceManager; using namespace ::chip::DeviceLayer; using namespace ::chip::System; @@ -73,17 +74,17 @@ void OnIdentifyTriggerEffect(Identify * identify) { switch (identify->mCurrentEffectIdentifier) { - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK"); + case Clusters::Identify::EffectIdentifierEnum::kBlink: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBlink"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE"); + case Clusters::Identify::EffectIdentifierEnum::kBreathe: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBreathe"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY"); + case Clusters::Identify::EffectIdentifierEnum::kOkay: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kOkay"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE"); + case Clusters::Identify::EffectIdentifierEnum::kChannelChange: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kChannelChange"); break; default: ChipLogProgress(Zcl, "No identifier effect"); @@ -96,7 +97,7 @@ Identify gIdentify0 = { chip::EndpointId{ 0 }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStart"); }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, OnIdentifyTriggerEffect, }; @@ -104,7 +105,7 @@ Identify gIdentify1 = { chip::EndpointId{ 1 }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStart"); }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, OnIdentifyTriggerEffect, }; diff --git a/examples/all-clusters-app/ameba/main/include/IdentifyCommand.h b/examples/all-clusters-app/ameba/main/include/IdentifyCommand.h index ab93460a84a300..472b66e44397cf 100644 --- a/examples/all-clusters-app/ameba/main/include/IdentifyCommand.h +++ b/examples/all-clusters-app/ameba/main/include/IdentifyCommand.h @@ -96,8 +96,8 @@ void ProcessIdentifyUnicastBindingCommand(BindingCommandData * data, const Ember break; case Clusters::Identify::Commands::TriggerEffect::Id: - triggerEffectCommand.effectIdentifier = static_cast(data->args[0]); - triggerEffectCommand.effectVariant = static_cast(data->args[1]); + triggerEffectCommand.effectIdentifier = static_cast(data->args[0]); + triggerEffectCommand.effectVariant = static_cast(data->args[1]); Controller::InvokeCommandRequest(peer_device->GetExchangeManager(), peer_device->GetSecureSession().Value(), binding.remote, triggerEffectCommand, onSuccess, onFailure); break; @@ -119,8 +119,8 @@ void ProcessIdentifyGroupBindingCommand(BindingCommandData * data, const EmberBi break; case Clusters::Identify::Commands::TriggerEffect::Id: - triggerEffectCommand.effectIdentifier = static_cast(data->args[0]); - triggerEffectCommand.effectVariant = static_cast(data->args[1]); + triggerEffectCommand.effectIdentifier = static_cast(data->args[0]); + triggerEffectCommand.effectVariant = static_cast(data->args[1]); Controller::InvokeGroupCommandRequest(&exchangeMgr, binding.fabricIndex, binding.groupId, triggerEffectCommand); break; } diff --git a/examples/dynamic-bridge-app/linux/.gn b/examples/all-clusters-app/asr/.gn old mode 100644 new mode 100755 similarity index 89% rename from examples/dynamic-bridge-app/linux/.gn rename to examples/all-clusters-app/asr/.gn index 70728706ea4a14..8d75f1eafcdb89 --- a/examples/dynamic-bridge-app/linux/.gn +++ b/examples/all-clusters-app/asr/.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Project CHIP Authors +# Copyright (c) 2023 Project CHIP Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,5 +21,9 @@ buildconfig = "${build_root}/config/BUILDCONFIG.gn" check_system_includes = true default_args = { + target_cpu = "arm" + + target_os = "freertos" + import("//args.gni") } diff --git a/examples/all-clusters-app/asr/BUILD.gn b/examples/all-clusters-app/asr/BUILD.gn new file mode 100755 index 00000000000000..d639d658589519 --- /dev/null +++ b/examples/all-clusters-app/asr/BUILD.gn @@ -0,0 +1,135 @@ +# Copyright (c) 2023 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build_overrides/asr.gni") +import("//build_overrides/build.gni") +import("//build_overrides/chip.gni") +import("${asr_sdk_build_root}/asr_sdk.gni") +import("${build_root}/config/defaults.gni") +import("${chip_root}/src/lib/lib.gni") +import("${chip_root}/src/platform/device.gni") +import("${chip_root}/third_party/asr/asr_executable.gni") + +import("cfg.gni") + +assert(current_os == "freertos") + +asr_project_dir = "${chip_root}/examples/all-clusters-app/asr" +examples_plat_dir = "${chip_root}/examples/platform/asr" + +declare_args() { + # Dump memory usage at link time. + chip_print_memory_usage = false +} + +asr_sdk_sources("all_clusters_app_sdk_sources") { + include_dirs = [ + "${chip_root}/src/platform/ASR", + "${asr_project_dir}/include", + "${examples_plat_dir}", + ] + + defines = [ + "ASR_LOG_ENABLED=1", + "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE=${setupPinCode}", + "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR=${setupDiscriminator}", + ] + + if (chip_enable_factory_data) { + defines += [ + "CONFIG_ENABLE_ASR_FACTORY_DATA_PROVIDER=1", + "CONFIG_ENABLE_ASR_FACTORY_DEVICE_INFO_PROVIDER=1", + ] + } + + if (chip_lwip_ip6_hook) { + defines += [ + "CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT", + "CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT", + ] + } + + sources = [ "${asr_project_dir}/include/CHIPProjectConfig.h" ] + + public_configs = [ "${asr_sdk_build_root}:asr_sdk_config" ] +} + +asr_executable("clusters_app") { + include_dirs = [] + defines = [] + output_name = "chip-asr-clusters-example.out" + + sources = [ + "${chip_root}/examples/all-clusters-app/all-clusters-common/src/bridged-actions-stub.cpp", + "${chip_root}/examples/all-clusters-app/all-clusters-common/src/static-supported-modes-manager.cpp", + "${examples_plat_dir}/CHIPDeviceManager.cpp", + "${examples_plat_dir}/LEDWidget.cpp", + "${examples_plat_dir}/init_Matter.cpp", + "${examples_plat_dir}/init_asrPlatform.cpp", + "${examples_plat_dir}/shell/matter_shell.cpp", + "src/AppTask.cpp", + "src/ButtonHandler.cpp", + "src/DeviceCallbacks.cpp", + "src/main.cpp", + ] + + if (chip_enable_ota_requestor) { + sources += [ "${examples_plat_dir}/init_OTARequestor.cpp" ] + } + + deps = [ + ":all_clusters_app_sdk_sources", + "${chip_root}/examples/all-clusters-app/all-clusters-common", + "${chip_root}/examples/common/QRCode", + "${chip_root}/examples/providers:device_info_provider", + "${chip_root}/src/lib", + "${chip_root}/src/setup_payload", + ] + + include_dirs += [ + "include", + "${examples_plat_dir}", + "${asr_project_dir}/include", + "${chip_root}/examples/all-clusters-app/all-clusters-common/include", + "${chip_root}/src", + "${chip_root}/src/lib", + "${chip_root}/src/lib/support", + "${chip_root}/src/app/util", + ] + + defines = [ "ASR_NETWORK_LAYER_BLE=${chip_config_network_layer_ble}" ] + + if (chip_build_libshell) { + defines += [ "CONFIG_ENABLE_CHIP_SHELL=1" ] + sources += [ "${examples_plat_dir}/shell/launch_shell.cpp" ] + include_dirs += [ "${examples_plat_dir}/shell" ] + } + + if (chip_print_memory_usage) { + ldflags += [ + "-Wl,--print-memory-usage", + "-fstack-usage", + ] + } + + output_dir = root_out_dir +} + +group("asr") { + deps = [ ":clusters_app" ] +} + +group("default") { + deps = [ ":asr" ] +} diff --git a/examples/all-clusters-app/asr/README.md b/examples/all-clusters-app/asr/README.md new file mode 100755 index 00000000000000..287da141fc0e24 --- /dev/null +++ b/examples/all-clusters-app/asr/README.md @@ -0,0 +1,62 @@ +# Matter ASR All Clusters Example + +A prototype application that demonstrates device commissioning and cluster +control on ASR platform. + +--- + +- [Matter ASR All Clusters Example](#matter-asr-all-clusters-example) + - [Supported Chips](#supported-chips) + - [Building and Commissioning](#building-and-commissioning) + - [Cluster Control](#cluster-control) + - [Light switch press button and light status LED](#light-switch-press-button-and-light-status-led) + +--- + +## Supported Chips + +The Matter demo application is supported on: + +- ASR582X +- ASR595X + +## Building and Commissioning + +Please refer +[Building and Commissioning](../../../docs/guides/asr_getting_started_guide.md#building-the-example-application) +guides to get started + +``` +./scripts/build/build_examples.py --target asr-$ASR_BOARD-all-clusters build +``` + +## Cluster Control + +After successful commissioning, use `chip-tool` to control the board + +For example, read sensor measured value: + +``` +./chip-tool temperaturemeasurement read measured-value 1 +./chip-tool relativehumiditymeasurement read measured-value 1 +./chip-tool pressuremeasurement read measured-value 1 +``` + +Or,control the OnOff Cluster attribute: + +``` +./chip-tool onoff read on-off 1 +./chip-tool onoff on 1 +./chip-tool onoff off 1 +./chip-tool onoff toggle 1 +``` + +## Light switch press button and light status LED + +This demo uses button to test changing the light states and LED to show the +state of these changes. + +| Name | Pin | +| :----: | :---: | +| LED | PAD6 | +| BUTTON | PAD12 | diff --git a/examples/all-clusters-app/asr/args.gni b/examples/all-clusters-app/asr/args.gni new file mode 100755 index 00000000000000..66a2de849083d4 --- /dev/null +++ b/examples/all-clusters-app/asr/args.gni @@ -0,0 +1,27 @@ +# Copyright (c) 2023 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build_overrides/chip.gni") +import("//build_overrides/pigweed.gni") +import("//cfg.gni") +import("${chip_root}/src/platform/ASR/args.gni") + +asr_target_project = + get_label_info(":all_clusters_app_sdk_sources", "label_no_toolchain") + +declare_args() { + # Disable lock tracking, since our FreeRTOS configuration does not set + # INCLUDE_xSemaphoreGetMutexHolder + chip_stack_lock_tracking = "none" +} diff --git a/examples/all-clusters-app/asr/build_overrides b/examples/all-clusters-app/asr/build_overrides new file mode 120000 index 00000000000000..194ee0b812dc3d --- /dev/null +++ b/examples/all-clusters-app/asr/build_overrides @@ -0,0 +1 @@ +../../build_overrides/ \ No newline at end of file diff --git a/src/lib/assign/BUILD.gn b/examples/all-clusters-app/asr/cfg.gni old mode 100644 new mode 100755 similarity index 76% rename from src/lib/assign/BUILD.gn rename to examples/all-clusters-app/asr/cfg.gni index 12eec411187142..15fe50e79efb6d --- a/src/lib/assign/BUILD.gn +++ b/examples/all-clusters-app/asr/cfg.gni @@ -12,11 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. -import("//build_overrides/build.gni") -import("//build_overrides/chip.gni") +declare_args() { + chip_enable_factory_data = false -static_library("assign") { - sources = [ "ValueAssign.h" ] + chip_lwip_ip6_hook = false - public_deps = [ "${chip_root}/src/lib/support" ] + setupPinCode = 20202021 + + setupDiscriminator = 3840 } diff --git a/examples/all-clusters-app/asr/include/AppConfig.h b/examples/all-clusters-app/asr/include/AppConfig.h new file mode 100644 index 00000000000000..40abc79020f59e --- /dev/null +++ b/examples/all-clusters-app/asr/include/AppConfig.h @@ -0,0 +1,60 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * + * 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 + +// ---- Lighting Example App Config ---- + +#define APP_TASK_NAME "APP" + +#define APP_EVENT_QUEUE_SIZE 10 +#define APP_TASK_STACK_SIZE (1024 * 4) +#define APP_WAIT_LOOP 1000 + +#define MATTER_DEVICE_NAME "ASR-Clusters" + +#define GPIO_TASK_NAME "gpio" +#define GPIO_TASK_STACK_SIZE 1024 + +#define APP_BUTTON_PRESSED 0 +#define APP_BUTTON_RELEASED 1 + +#define SWITCH1_BUTTON GPIO12_INDEX +#define SWITCH2_BUTTON GPIO13_INDEX + +#define LIGHT1_LED PWM_OUTPUT_CH4 +#define LIGHT2_LED PWM_OUTPUT_CH6 + +// Time it takes in ms for the simulated actuator to move from one +// state to another. +#define ACTUATOR_MOVEMENT_PERIOS_MS 2000 + +// ASR Logging +#ifdef __cplusplus +extern "C" { +#endif + +void appError(int err); +void ASR_LOG(const char * aFormat, ...); + +#ifdef __cplusplus +} + +#include +void appError(CHIP_ERROR error); +#endif diff --git a/examples/all-clusters-app/asr/include/AppEvent.h b/examples/all-clusters-app/asr/include/AppEvent.h new file mode 100755 index 00000000000000..2c59845f3bb577 --- /dev/null +++ b/examples/all-clusters-app/asr/include/AppEvent.h @@ -0,0 +1,51 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2018 Nest Labs, Inc. + * + * 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 + +struct AppEvent; +typedef void (*EventHandler)(AppEvent *); + +struct AppEvent +{ + enum AppEventTypes + { + kEventType_Button = 0, + kEventType_Timer, + kEventType_Light, + kEventType_Install, + }; + + uint16_t Type; + + union + { + struct + { + uint8_t ButtonIdx; + uint8_t Action; + } ButtonEvent; + struct + { + void * Context; + } TimerEvent; + }; + + EventHandler Handler; +}; diff --git a/examples/all-clusters-app/asr/include/AppTask.h b/examples/all-clusters-app/asr/include/AppTask.h new file mode 100644 index 00000000000000..184e309af5eeba --- /dev/null +++ b/examples/all-clusters-app/asr/include/AppTask.h @@ -0,0 +1,64 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * + * 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 "AppEvent.h" +#include +#include +#include +#include +#include + +// Application-defined error codes in the CHIP_ERROR space. +#define APP_ERROR_EVENT_QUEUE_FAILED CHIP_APPLICATION_ERROR(0x01) +#define APP_ERROR_CREATE_TASK_FAILED CHIP_APPLICATION_ERROR(0x02) +#define APP_ERROR_UNHANDLED_EVENT CHIP_APPLICATION_ERROR(0x03) +#define APP_ERROR_CREATE_TIMER_FAILED CHIP_APPLICATION_ERROR(0x04) +#define APP_ERROR_START_TIMER_FAILED CHIP_APPLICATION_ERROR(0x05) +#define APP_ERROR_STOP_TIMER_FAILED CHIP_APPLICATION_ERROR(0x06) + +class AppTask +{ + +public: + CHIP_ERROR StartAppTask(); + static void AppTaskMain(void * pvParameter); + static void AppEventHandler(AppEvent * aEvent); + void PostButtonEvent(uint8_t btnIdx, uint8_t btnAction); + void PostEvent(const AppEvent * event); + /** + * Use internally for registration of the ChipDeviceEvents + */ + static void CommonDeviceEventHandler(const chip::DeviceLayer::ChipDeviceEvent * event, intptr_t arg); + +private: + friend AppTask & GetAppTask(void); + + CHIP_ERROR Init(); + + static AppTask sAppTask; + static void AppTimerCallback(void * params); + void DispatchEvent(AppEvent * event); + static void OnOffUpdateClusterState(void); +}; + +inline AppTask & GetAppTask(void) +{ + return AppTask::sAppTask; +} diff --git a/examples/dynamic-bridge-app/linux/bridge_service.h b/examples/all-clusters-app/asr/include/ButtonHandler.h similarity index 53% rename from examples/dynamic-bridge-app/linux/bridge_service.h rename to examples/all-clusters-app/asr/include/ButtonHandler.h index 4e5cc1e057b4dc..621459d464c322 100644 --- a/examples/dynamic-bridge-app/linux/bridge_service.h +++ b/examples/all-clusters-app/asr/include/ButtonHandler.h @@ -18,25 +18,36 @@ #pragma once -#include "app/util/attribute-storage.h" -#include "bridge_service/bridge_service.rpc.pb.h" -#include "pigweed/rpc_services/internal/StatusUtils.h" -#include - -namespace chip { -namespace rpc { - -class Bridge : public bridge::pw_rpc::nanopb::Bridge::Service +#include "AppEvent.h" +#include "FreeRTOS.h" +#include "timers.h" // provides FreeRTOS timer support +#include +#ifdef CFG_PLF_RV32 +#include "asr_gpio.h" +#else +#include "duet_gpio.h" +#endif + +class ButtonHandler { public: - Bridge() = default; + static void Init(void); - virtual ~Bridge() = default; + struct KeyInformation + { + uint8_t keyDown; + uint8_t keyImPulse; + uint8_t keyReleasePulse; + }; - ::pw::Status Add(const ::chip_rpc_bridge_AddDevice & request, ::chip_rpc_bridge_AddDeviceResponse & response); + static KeyInformation keyInfo; - ::pw::Status Remove(const ::chip_rpc_bridge_RemoveDevice & request, ::chip_rpc_bridge_Empty & response); -}; + static ButtonHandler & GetInstance() + { + static ButtonHandler sButtonHandler; + return sButtonHandler; + } -} // namespace rpc -} // namespace chip +private: + static void GpioInit(void); +}; diff --git a/examples/all-clusters-app/asr/include/CHIPProjectConfig.h b/examples/all-clusters-app/asr/include/CHIPProjectConfig.h new file mode 100755 index 00000000000000..6a81ee6517aedb --- /dev/null +++ b/examples/all-clusters-app/asr/include/CHIPProjectConfig.h @@ -0,0 +1,92 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file + * Example project configuration file for CHIP. + * + * This is a place to put application or project-specific overrides + * to the default configuration values for general CHIP features. + * + */ + +#pragma once + +// Use a default pairing code if one hasn't been provisioned in flash. +#ifndef CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE +#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE 20202021 +#endif + +#ifndef CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR +#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR 0xF00 +#endif + +// For convenience, Chip Security Test Mode can be enabled and the +// requirement for authentication in various protocols can be disabled. +// +// WARNING: These options make it possible to circumvent basic Chip security functionality, +// including message encryption. Because of this they MUST NEVER BE ENABLED IN PRODUCTION BUILDS. +// +#define CHIP_CONFIG_SECURITY_TEST_MODE 0 +#define CHIP_CONFIG_REQUIRE_AUTH 1 + +/** + * CHIP_DEVICE_CONFIG_DEVICE_HARDWARE_VERSION + * + * The hardware version number assigned to device or product by the device vendor. This + * number is scoped to the device product id, and typically corresponds to a version of the + * physical device, a change to its packaging, and/or a change to its marketing presentation. + * This value is generally *not* incremented for device software versions. + */ +#define CHIP_DEVICE_CONFIG_DEVICE_HARDWARE_VERSION 1 + +/** + * CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING + * + * A string identifying the software version running on the device. + * CHIP service currently expects the software version to be in the format + * {MAJOR_VERSION}.0d{MINOR_VERSION} + */ +#ifndef CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING +#define CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING "1.0" +#endif + +/** + * CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION + * + * A uint32_t identifying the software version running on the device. + */ +/* The SoftwareVersion attribute of the Basic cluster. */ +#ifndef CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION +#define CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION 1 +#endif + +/** + * CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER + * + * Enables the use of a hard-coded default serial number if none + * is found in Chip NV storage. + */ +#define CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER "TEST_SN" + +/** + * CHIP_DEVICE_CONFIG_EVENT_LOGGING_DEBUG_BUFFER_SIZE + * + * A size, in bytes, of the individual debug event logging buffer. + */ +#define CHIP_DEVICE_CONFIG_EVENT_LOGGING_DEBUG_BUFFER_SIZE (512) diff --git a/examples/all-clusters-app/asr/include/DeviceCallbacks.h b/examples/all-clusters-app/asr/include/DeviceCallbacks.h new file mode 100644 index 00000000000000..d30939cd28b424 --- /dev/null +++ b/examples/all-clusters-app/asr/include/DeviceCallbacks.h @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2020 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file DeviceCallbacks.h + * + * Implementations for the DeviceManager callbacks for this application + * + **/ + +#pragma once + +#include "CHIPDeviceManager.h" +#include +#include +#include + +class DeviceCallbacks : public chip::DeviceManager::CHIPDeviceManagerCallbacks +{ +public: + void DeviceEventCallback(const chip::DeviceLayer::ChipDeviceEvent * event, intptr_t arg) override; + void PostAttributeChangeCallback(chip::EndpointId endpointId, chip::ClusterId clusterId, chip::AttributeId attributeId, + uint8_t type, uint16_t size, uint8_t * value) override; + +private: + void OnInternetConnectivityChange(const chip::DeviceLayer::ChipDeviceEvent * event); + void OnOnOffPostAttributeChangeCallback(chip::EndpointId endpointId, chip::AttributeId attributeId, uint8_t * value); + void OnLevelPostAttributeChangeCallback(chip::EndpointId endpointId, chip::AttributeId attributeId, uint16_t size, + uint8_t * value); + void OnColorPostAttributeChangeCallback(chip::EndpointId endpointId, chip::AttributeId attributeId, uint8_t * value); + void OnIdentifyPostAttributeChangeCallback(chip::EndpointId endpointId, chip::AttributeId attributeId, uint8_t * value); +}; diff --git a/examples/all-clusters-app/asr/src/AppTask.cpp b/examples/all-clusters-app/asr/src/AppTask.cpp new file mode 100644 index 00000000000000..d55ef713dde3f2 --- /dev/null +++ b/examples/all-clusters-app/asr/src/AppTask.cpp @@ -0,0 +1,274 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * Copyright 2021, Cypress Semiconductor Corporation (an Infineon company) + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "AppTask.h" +#include "AppConfig.h" +#include "AppEvent.h" +#include "ButtonHandler.h" +#include "CHIPDeviceManager.h" +#include "DeviceCallbacks.h" +#include "LEDWidget.h" +#include "init_Matter.h" +#include "qrcodegen.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace ::chip; +using namespace ::chip::Credentials; +using namespace ::chip::DeviceManager; +using namespace ::chip::DeviceLayer; +using namespace ::chip::System; + +LEDWidget sStatusLED; +LEDWidget sLightLED; + +namespace { +lega_thread_t sAppTaskHandle; +lega_queue_t sAppEventQueue; +lega_timer_t sAppTimer; + +constexpr EndpointId kNetworkCommissioningEndpointMain = 0; +constexpr EndpointId kNetworkCommissioningEndpointSecondary = 0xFFFE; + +app::Clusters::NetworkCommissioning::Instance + sWiFiNetworkCommissioningInstance(kNetworkCommissioningEndpointMain /* Endpoint Id */, + &(NetworkCommissioning::ASRWiFiDriver::GetInstance())); +} // namespace + +AppTask AppTask::sAppTask; + +void NetWorkCommissioningInstInit() +{ + sWiFiNetworkCommissioningInstance.Init(); + + // We only have network commissioning on endpoint 0. + emberAfEndpointEnableDisable(kNetworkCommissioningEndpointSecondary, false); +} + +static DeviceCallbacks EchoCallbacks; + +CHIP_ERROR AppTask::StartAppTask() +{ + CHIP_ERROR err = CHIP_NO_ERROR; + OSStatus status; + + status = lega_rtos_init_queue(&sAppEventQueue, "EventQueue", sizeof(AppEvent), APP_EVENT_QUEUE_SIZE); + + VerifyOrExit(status == kNoErr, err = CHIP_ERROR_NO_MEMORY); + + status = lega_rtos_init_timer(&sAppTimer, 3000, (timer_handler_t) AppTimerCallback, (void *) this); + + VerifyOrExit(status == kNoErr, err = CHIP_ERROR_NO_MEMORY); + + status = lega_rtos_create_thread(&sAppTaskHandle, 2, APP_TASK_NAME, (lega_thread_function_t) AppTaskMain, APP_TASK_STACK_SIZE, + (lega_thread_arg_t) this); + + VerifyOrExit(status == kNoErr, err = APP_ERROR_CREATE_TASK_FAILED); + +exit: + return err; +} + +CHIP_ERROR AppTask::Init() +{ + ASR_LOG("App Task started"); + + if (MatterInitializer::Init_Matter_Stack(MATTER_DEVICE_NAME) != CHIP_NO_ERROR) + return CHIP_ERROR_INTERNAL; + + CHIPDeviceManager & deviceMgr = CHIPDeviceManager::GetInstance(); + + if (deviceMgr.Init(&EchoCallbacks) != CHIP_NO_ERROR) + return CHIP_ERROR_INTERNAL; + + if (MatterInitializer::Init_Matter_Server() != CHIP_NO_ERROR) + return CHIP_ERROR_INTERNAL; + + NetWorkCommissioningInstInit(); + + ASR_LOG("Current Software Version: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); + + ConfigurationMgr().LogDeviceConfig(); + + // Print setup info + PrintOnboardingCodes(chip::RendezvousInformationFlag(chip::RendezvousInformationFlag::kBLE)); + + return CHIP_NO_ERROR; +} + +void AppTask::AppTaskMain(void * pvParameter) +{ + AppEvent event; + CHIP_ERROR err = sAppTask.Init(); + + ButtonHandler::Init(); + + sLightLED.Init(LIGHT1_LED); // embedded board light + sStatusLED.Init(LIGHT2_LED); + + lega_rtos_start_timer(&sAppTimer); + + if (err != CHIP_NO_ERROR) + { + ASR_LOG("AppTask.Init() failed"); + appError(err); + } + + while (true) + { + /* Check the event queue. */ + if (lega_rtos_is_queue_empty(&sAppEventQueue)) + { + lega_rtos_delay_milliseconds(1); + continue; + } + + /* Pop one event from the event queue. */ + lega_rtos_pop_from_queue(&sAppEventQueue, &event, LEGA_WAIT_FOREVER); + + sAppTask.DispatchEvent(&event); + } +} + +void AppTask::AppEventHandler(AppEvent * aEvent) +{ + static char lightState; + int16_t temperature = 2550; + int16_t humidity = 5000; + int16_t pressure = 1234; + + switch (aEvent->Type) + { + case AppEvent::kEventType_Timer: { + chip::app::Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Set( + /* endpoint ID */ 1, /* temperature in 0.01*C */ int16_t(temperature)); + + chip::app::Clusters::RelativeHumidityMeasurement::Attributes::MeasuredValue::Set( + /* endpoint ID */ 1, /* humidity in 0.01% */ int16_t(humidity)); + + chip::app::Clusters::PressureMeasurement::Attributes::MeasuredValue::Set( + /* endpoint ID */ 1, /* pressure in 0.01 */ int16_t(pressure)); + + break; + } + + case AppEvent::kEventType_Button: { + lightState = !lightState; + /* ON/OFF Light Led based on Button interrupt */ + if (lightState) + { + sLightLED.Set(1); + sLightLED.SetBrightness(100); + } + else + { + sLightLED.Set(0); + } + + /* Update OnOff Cluster state */ + sAppTask.OnOffUpdateClusterState(); + break; + } + + default: + break; + } +} + +void AppTask::AppTimerCallback(void * params) +{ + AppEvent timer_event = {}; + timer_event.Type = AppEvent::kEventType_Timer; + timer_event.TimerEvent.Context = nullptr; + + timer_event.Handler = AppEventHandler; + sAppTask.PostEvent(&timer_event); +} + +void AppTask::PostButtonEvent(uint8_t btnIdx, uint8_t btnAction) +{ + ASR_LOG("%s %s\n", btnIdx == SWITCH1_BUTTON ? "btn1" : "btn2", btnAction == APP_BUTTON_PRESSED ? "Pressed" : "Released"); + + if (btnIdx != SWITCH1_BUTTON && btnIdx != SWITCH2_BUTTON) + { + return; + } + + AppEvent button_event = {}; + button_event.Type = AppEvent::kEventType_Button; + button_event.ButtonEvent.ButtonIdx = btnIdx; + button_event.ButtonEvent.Action = btnAction; + + if (btnAction == APP_BUTTON_RELEASED) + { + button_event.Handler = AppEventHandler; + sAppTask.PostEvent(&button_event); + } +} + +void AppTask::PostEvent(const AppEvent * aEvent) +{ + OSStatus status = lega_rtos_push_to_queue(&sAppEventQueue, const_cast(aEvent), LEGA_NO_WAIT); + if (kNoErr != status) + { + ASR_LOG("Post event failed."); + } +} + +void AppTask::DispatchEvent(AppEvent * aEvent) +{ + if (aEvent->Handler) + { + aEvent->Handler(aEvent); + } + else + { + ASR_LOG("Event received with no handler. Dropping event."); + } +} + +void AppTask::OnOffUpdateClusterState(void) +{ + uint8_t onoff = sLightLED.Get(); + + // write the new on/off value + EmberAfStatus status = app::Clusters::OnOff::Attributes::OnOff::Set(1, onoff); + + if (status != EMBER_ZCL_STATUS_SUCCESS) + { + ASR_LOG("ERR: updating on/off %x", status); + } +} + +bool lowPowerClusterSleep() +{ + return true; +} diff --git a/examples/all-clusters-app/asr/src/ButtonHandler.cpp b/examples/all-clusters-app/asr/src/ButtonHandler.cpp new file mode 100644 index 00000000000000..1faa7f7f56fbe1 --- /dev/null +++ b/examples/all-clusters-app/asr/src/ButtonHandler.cpp @@ -0,0 +1,117 @@ +/* + * + * Copyright (c) 2022 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 "ButtonHandler.h" +#include "AppConfig.h" +#include "AppTask.h" +#include + +#ifdef CFG_PLF_RV32 +#define duet_gpio_dev_t asr_gpio_dev_t +#define duet_gpio_init asr_gpio_init +#define duet_gpio_input_get asr_gpio_input_get +#define DUET_INPUT_PULL_UP ASR_INPUT_PULL_UP +#endif + +TaskHandle_t sGpioTaskHandle; +ButtonHandler::KeyInformation ButtonHandler::keyInfo = { 0 }; + +static void GpioTaskMain(void * pvParameter); + +void ButtonHandler::Init(void) +{ + GpioInit(); + + xTaskCreate(GpioTaskMain, GPIO_TASK_NAME, GPIO_TASK_STACK_SIZE, 0, 2, &sGpioTaskHandle); +} + +// port pin +duet_gpio_dev_t switch1_btn; +duet_gpio_dev_t switch2_btn; + +void ButtonHandler::GpioInit(void) +{ + // light switch1 button + switch1_btn.port = SWITCH1_BUTTON; + switch1_btn.config = DUET_INPUT_PULL_UP; + switch1_btn.priv = NULL; + duet_gpio_init(&switch1_btn); + + switch2_btn.port = SWITCH2_BUTTON; + switch2_btn.config = DUET_INPUT_PULL_UP; + switch2_btn.priv = NULL; + duet_gpio_init(&switch2_btn); +} + +void GpioTaskMain(void * pvParameter) +{ + ASR_LOG("GPIO Task started"); + uint32_t btnValue; + uint8_t currentKeys = 0; + + for (;;) + { + vTaskDelay(50 / portTICK_PERIOD_MS); + + duet_gpio_input_get(&switch1_btn, &btnValue); + + if (!btnValue) + { + currentKeys |= 0x01; + } + else + { + currentKeys &= ~0x01; + } + + duet_gpio_input_get(&switch2_btn, &btnValue); + + if (!btnValue) + { + currentKeys |= 0x02; + } + else + { + currentKeys &= ~0x02; + } + + ButtonHandler::keyInfo.keyImPulse = (ButtonHandler::keyInfo.keyDown ^ currentKeys) & ~ButtonHandler::keyInfo.keyDown; + ButtonHandler::keyInfo.keyReleasePulse = (ButtonHandler::keyInfo.keyDown ^ currentKeys) & ButtonHandler::keyInfo.keyDown; + ButtonHandler::keyInfo.keyDown = currentKeys; + + if (ButtonHandler::keyInfo.keyImPulse & 0x01) + { + GetAppTask().PostButtonEvent(SWITCH1_BUTTON, APP_BUTTON_PRESSED); + } + + if (ButtonHandler::keyInfo.keyImPulse & 0x02) + { + GetAppTask().PostButtonEvent(SWITCH2_BUTTON, APP_BUTTON_PRESSED); + } + + if (ButtonHandler::keyInfo.keyReleasePulse & 0x01) + { + GetAppTask().PostButtonEvent(SWITCH1_BUTTON, APP_BUTTON_RELEASED); + } + + if (ButtonHandler::keyInfo.keyReleasePulse & 0x02) + { + GetAppTask().PostButtonEvent(SWITCH2_BUTTON, APP_BUTTON_RELEASED); + } + } +} diff --git a/examples/all-clusters-app/asr/src/DeviceCallbacks.cpp b/examples/all-clusters-app/asr/src/DeviceCallbacks.cpp new file mode 100644 index 00000000000000..7b284250787382 --- /dev/null +++ b/examples/all-clusters-app/asr/src/DeviceCallbacks.cpp @@ -0,0 +1,276 @@ +/* + * + * Copyright (c) 2020 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file DeviceCallbacks.cpp + * + * Implements all the callbacks to the application from the CHIP Stack + * + **/ +#include "DeviceCallbacks.h" + +#include "CHIPDeviceManager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "LEDWidget.h" +#include "init_OTARequestor.h" +#if defined CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT || defined CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT +#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; +using namespace ::chip::DeviceLayer; +using namespace ::chip::DeviceManager; +using namespace ::chip::Logging; + +extern LEDWidget sLightLED; +extern LEDWidget sStatusLED; + +uint32_t identifyTimerCount; +constexpr uint32_t kIdentifyTimerDelayMS = 250; + +#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR +constexpr uint32_t kInitOTARequestorDelaySec = 3; + +void InitOTARequestorHandler(System::Layer * systemLayer, void * appState) +{ + OTAInitializer::Instance().InitOTARequestor(); +} +#endif +void DeviceCallbacks::DeviceEventCallback(const ChipDeviceEvent * event, intptr_t arg) +{ + switch (event->Type) + { + case DeviceEventType::kInternetConnectivityChange: + OnInternetConnectivityChange(event); + break; + + case DeviceEventType::kInterfaceIpAddressChanged: + if ((event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV4_Assigned) || + (event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV6_Assigned)) + { + // MDNS server restart on any ip assignment: if link local ipv6 is configured, that + // will not trigger a 'internet connectivity change' as there is no internet + // connectivity. MDNS still wants to refresh its listening interfaces to include the + // newly selected address. + chip::app::DnssdServer::Instance().StartServer(); + + if (event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV6_Assigned) + { +#if defined CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT || defined CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT + ChipLogProgress(NotSpecified, "Initializing route hook..."); + asr_route_hook_init(); +#endif + } + } + break; + } +} + +void DeviceCallbacks::PostAttributeChangeCallback(EndpointId endpointId, ClusterId clusterId, AttributeId attributeId, uint8_t type, + uint16_t size, uint8_t * value) +{ + switch (clusterId) + { + case app::Clusters::OnOff::Id: + OnOnOffPostAttributeChangeCallback(endpointId, attributeId, value); + break; + + case app::Clusters::Identify::Id: + OnIdentifyPostAttributeChangeCallback(endpointId, attributeId, value); + break; + + default: + break; + } +} + +void DeviceCallbacks::OnInternetConnectivityChange(const ChipDeviceEvent * event) +{ +#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR + static bool isOTAInitialized = false; +#endif + if (event->InternetConnectivityChange.IPv4 == kConnectivity_Established) + { + ChipLogProgress(DeviceLayer, "IPv4 Server ready..."); + chip::app::DnssdServer::Instance().StartServer(); + } + else if (event->InternetConnectivityChange.IPv4 == kConnectivity_Lost) + { + ChipLogProgress(DeviceLayer, "Lost IPv4 connectivity..."); + } + if (event->InternetConnectivityChange.IPv6 == kConnectivity_Established) + { + ChipLogProgress(DeviceLayer, "IPv6 Server ready..."); + chip::app::DnssdServer::Instance().StartServer(); +#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR + // Init OTA requestor only when we have gotten IPv6 address + if (!isOTAInitialized) + { + chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Seconds32(kInitOTARequestorDelaySec), + InitOTARequestorHandler, nullptr); + isOTAInitialized = true; + } +#endif + } + else if (event->InternetConnectivityChange.IPv6 == kConnectivity_Lost) + { + ChipLogProgress(DeviceLayer, "Lost IPv6 connectivity..."); + } +} + +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)); + + switch (attributeId) + { + case chip::app::Clusters::OnOff::Attributes::OnOff::Id: { + ChipLogProgress(Zcl, "ON/OFF level: %u ", *value); + // At this point we can assume that value points to a bool value. + sLightLED.Set(*value); + } + break; + + case chip::app::Clusters::OnOff::Attributes::OnTime::Id: + case chip::app::Clusters::OnOff::Attributes::OffWaitTime::Id: + case chip::app::Clusters::OnOff::Attributes::StartUpOnOff::Id: + case chip::app::Clusters::OnOff::Attributes::GlobalSceneControl::Id: { + ChipLogProgress(Zcl, "Unprocessed attribute ID: %" PRIx32, attributeId); + } + break; + + default: + ChipLogProgress(Zcl, "Unknown attribute ID: %" PRIx32, attributeId); + return; + } // switch (attributeId) +exit: + return; +} + +void DeviceCallbacks::OnLevelPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint16_t size, + uint8_t * value) +{ + switch (attributeId) + { + case chip::app::Clusters::LevelControl::Attributes::CurrentLevel::Id: { + if (size == 1) + { + uint8_t tmp = *value; + ChipLogProgress(Zcl, "New level: %u ", tmp); + sLightLED.SetBrightness(tmp); + } + else + { + ChipLogError(Zcl, "wrong length for level: %d\n", size); + } + } + break; + + case chip::app::Clusters::LevelControl::Attributes::MinLevel::Id: + case chip::app::Clusters::LevelControl::Attributes::MaxLevel::Id: + case chip::app::Clusters::LevelControl::Attributes::CurrentFrequency::Id: + case chip::app::Clusters::LevelControl::Attributes::MinFrequency::Id: + case chip::app::Clusters::LevelControl::Attributes::MaxFrequency::Id: + case chip::app::Clusters::LevelControl::Attributes::Options::Id: + case chip::app::Clusters::LevelControl::Attributes::OnOffTransitionTime::Id: + case chip::app::Clusters::LevelControl::Attributes::OnLevel::Id: + case chip::app::Clusters::LevelControl::Attributes::OnTransitionTime::Id: + case chip::app::Clusters::LevelControl::Attributes::OffTransitionTime::Id: + case chip::app::Clusters::LevelControl::Attributes::DefaultMoveRate::Id: + case chip::app::Clusters::LevelControl::Attributes::StartUpCurrentLevel::Id: { + ChipLogProgress(Zcl, "Unprocessed attribute ID: %" PRIx32, attributeId); + } + break; + + default: + ChipLogProgress(Zcl, "Unknown attribute ID: %" PRIx32, attributeId); + return; + + } // switch (attributeId) +} + +void DeviceCallbacks::OnColorPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value) +{ + using namespace app::Clusters::ColorControl::Attributes; + + uint8_t hue, saturation; + + if ((attributeId != CurrentHue::Id) && (attributeId != CurrentSaturation::Id)) + { + ChipLogProgress(Zcl, "Unknown attribute ID: %" PRIx32, attributeId); + return; + } + + if (attributeId == CurrentHue::Id) + { + hue = *value; + CurrentSaturation::Get(endpointId, &saturation); + } + if (attributeId == CurrentSaturation::Id) + { + saturation = *value; + CurrentHue::Get(endpointId, &hue); + } + + ChipLogProgress(Zcl, "New hue: %d, New saturation: %d ", hue, saturation); +} + +void IdentifyTimerHandler(Layer * systemLayer, void * appState) +{ + if (identifyTimerCount) + { + systemLayer->StartTimer(Clock::Milliseconds32(kIdentifyTimerDelayMS), IdentifyTimerHandler, appState); + identifyTimerCount--; + } +} + +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)); + + // timerCount represents the number of callback executions before we stop the timer. + // value is expressed in seconds and the timer is fired every 250ms, so just multiply value by 4. + // Also, we want timerCount to be odd number, so the ligth state ends in the same state it starts. + identifyTimerCount = (*value) * 4; + + DeviceLayer::SystemLayer().CancelTimer(IdentifyTimerHandler, this); + DeviceLayer::SystemLayer().StartTimer(Clock::Milliseconds32(kIdentifyTimerDelayMS), IdentifyTimerHandler, this); +exit: + return; +} diff --git a/examples/all-clusters-app/asr/src/main.cpp b/examples/all-clusters-app/asr/src/main.cpp new file mode 100644 index 00000000000000..98048869353676 --- /dev/null +++ b/examples/all-clusters-app/asr/src/main.cpp @@ -0,0 +1,86 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * Copyright 2021, Cypress Semiconductor Corporation (an Infineon company) + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include +#include + +#include +#include + +#include "CHIPDeviceManager.h" +#include "DeviceCallbacks.h" +#include +#include +#include +#include + +#include + +#include "AppConfig.h" +#include "init_asrPlatform.h" +#include + +using namespace ::chip; +using namespace ::chip::Inet; +using namespace ::chip::DeviceLayer; +// ================================================================================ +// App Error +//================================================================================= +void appError(int err) +{ + ASR_LOG("!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); + lega_rtos_declare_critical(); + lega_rtos_enter_critical(); + while (1) + ; +} + +void appError(CHIP_ERROR error) +{ + appError(static_cast(error.AsInteger())); +} +// ================================================================================ +// Main Code +// ================================================================================ +int main(void) +{ + init_asrPlatform(); + + CHIP_ERROR ret = GetAppTask().StartAppTask(); + if (ret != CHIP_NO_ERROR) + { + ASR_LOG("GetAppTask().Init() failed"); + appError(ret); + } + /* Start the FreeRTOS scheduler */ + vTaskStartScheduler(); + + chip::Platform::MemoryShutdown(); + PlatformMgr().StopEventLoopTask(); + PlatformMgr().Shutdown(); + + // Should never get here. + ASR_LOG("vTaskStartScheduler() failed"); + appError(ret); +} diff --git a/examples/dynamic-bridge-app/linux/third_party/connectedhomeip b/examples/all-clusters-app/asr/third_party/connectedhomeip similarity index 100% rename from examples/dynamic-bridge-app/linux/third_party/connectedhomeip rename to examples/all-clusters-app/asr/third_party/connectedhomeip diff --git a/examples/all-clusters-app/cc13x2x7_26x2x7/main/ClusterManager.cpp b/examples/all-clusters-app/cc13x2x7_26x2x7/main/ClusterManager.cpp index 17922c679e2135..df12e131ca069a 100644 --- a/examples/all-clusters-app/cc13x2x7_26x2x7/main/ClusterManager.cpp +++ b/examples/all-clusters-app/cc13x2x7_26x2x7/main/ClusterManager.cpp @@ -29,6 +29,7 @@ #endif using namespace ::chip; +using namespace ::chip::app; using namespace ::chip::Inet; using namespace ::chip::System; using namespace ::chip::DeviceLayer; @@ -45,17 +46,17 @@ void OnIdentifyTriggerEffect(Identify * identify) { switch (identify->mCurrentEffectIdentifier) { - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK: - PLAT_LOG("EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK"); + case Clusters::Identify::EffectIdentifierEnum::kBlink: + PLAT_LOG("Clusters::Identify::EffectIdentifierEnum::kBlink"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE: - PLAT_LOG("EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE"); + case Clusters::Identify::EffectIdentifierEnum::kBreathe: + PLAT_LOG("Clusters::Identify::EffectIdentifierEnum::kBreathe"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY: - PLAT_LOG("EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY"); + case Clusters::Identify::EffectIdentifierEnum::kOkay: + PLAT_LOG("Clusters::Identify::EffectIdentifierEnum::kOkay"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE: - PLAT_LOG("EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE"); + case Clusters::Identify::EffectIdentifierEnum::kChannelChange: + PLAT_LOG("Clusters::Identify::EffectIdentifierEnum::kChannelChange"); break; default: PLAT_LOG("No identifier effect"); @@ -68,7 +69,7 @@ Identify gIdentify0 = { chip::EndpointId{ 0 }, [](Identify *) { PLAT_LOG("onIdentifyStart"); }, [](Identify *) { PLAT_LOG("onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, OnIdentifyTriggerEffect, }; @@ -76,7 +77,7 @@ Identify gIdentify1 = { chip::EndpointId{ 1 }, [](Identify *) { PLAT_LOG("onIdentifyStart"); }, [](Identify *) { PLAT_LOG("onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, OnIdentifyTriggerEffect, }; diff --git a/examples/all-clusters-app/cc13x4_26x4/main/ClusterManager.cpp b/examples/all-clusters-app/cc13x4_26x4/main/ClusterManager.cpp index 7e6173a5a5b6a1..bf5176fc060ae9 100644 --- a/examples/all-clusters-app/cc13x4_26x4/main/ClusterManager.cpp +++ b/examples/all-clusters-app/cc13x4_26x4/main/ClusterManager.cpp @@ -28,6 +28,7 @@ #endif using namespace ::chip; +using namespace ::chip::app; using namespace ::chip::Inet; using namespace ::chip::System; using namespace ::chip::DeviceLayer; @@ -44,17 +45,17 @@ void OnIdentifyTriggerEffect(Identify * identify) { switch (identify->mCurrentEffectIdentifier) { - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK: - PLAT_LOG("EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK"); + case Clusters::Identify::EffectIdentifierEnum::kBlink: + PLAT_LOG("Clusters::Identify::EffectIdentifierEnum::kBlink"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE: - PLAT_LOG("EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE"); + case Clusters::Identify::EffectIdentifierEnum::kBreathe: + PLAT_LOG("Clusters::Identify::EffectIdentifierEnum::kBreathe"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY: - PLAT_LOG("EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY"); + case Clusters::Identify::EffectIdentifierEnum::kOkay: + PLAT_LOG("Clusters::Identify::EffectIdentifierEnum::kOkay"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE: - PLAT_LOG("EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE"); + case Clusters::Identify::EffectIdentifierEnum::kChannelChange: + PLAT_LOG("Clusters::Identify::EffectIdentifierEnum::kChannelChange"); break; default: PLAT_LOG("No identifier effect"); @@ -67,7 +68,7 @@ Identify gIdentify0 = { chip::EndpointId{ 0 }, [](Identify *) { PLAT_LOG("onIdentifyStart"); }, [](Identify *) { PLAT_LOG("onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, OnIdentifyTriggerEffect, }; @@ -75,7 +76,7 @@ Identify gIdentify1 = { chip::EndpointId{ 1 }, [](Identify *) { PLAT_LOG("onIdentifyStart"); }, [](Identify *) { PLAT_LOG("onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, OnIdentifyTriggerEffect, }; diff --git a/examples/all-clusters-app/esp32/main/CMakeLists.txt b/examples/all-clusters-app/esp32/main/CMakeLists.txt index a2f72015840bae..ed62e67b6d26f7 100644 --- a/examples/all-clusters-app/esp32/main/CMakeLists.txt +++ b/examples/all-clusters-app/esp32/main/CMakeLists.txt @@ -70,7 +70,7 @@ set(SRC_DIRS_LIST "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/thermostat-user-interface-configuration-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/thread-network-diagnostics-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/channel-server" - "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/scenes" + "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/scenes-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/software-diagnostics-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/switch-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/general-diagnostics-server" diff --git a/examples/all-clusters-app/esp32/main/DeviceCallbacks.cpp b/examples/all-clusters-app/esp32/main/DeviceCallbacks.cpp index 277cdb28cacbf6..271dc3711e3c15 100644 --- a/examples/all-clusters-app/esp32/main/DeviceCallbacks.cpp +++ b/examples/all-clusters-app/esp32/main/DeviceCallbacks.cpp @@ -54,18 +54,18 @@ void OnIdentifyTriggerEffect(Identify * identify) { switch (identify->mCurrentEffectIdentifier) { - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK: + case Clusters::Identify::EffectIdentifierEnum::kBlink: statusLED1.Blink(kIdentifyTimerDelayMS * 2); - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK"); + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBlink"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE"); + case Clusters::Identify::EffectIdentifierEnum::kBreathe: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBreathe"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY"); + case Clusters::Identify::EffectIdentifierEnum::kOkay: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kOkay"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE"); + case Clusters::Identify::EffectIdentifierEnum::kChannelChange: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kChannelChange"); break; default: ChipLogProgress(Zcl, "No identifier effect"); @@ -78,7 +78,7 @@ Identify gIdentify0 = { chip::EndpointId{ 0 }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStart"); }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, OnIdentifyTriggerEffect, }; @@ -86,7 +86,7 @@ Identify gIdentify1 = { chip::EndpointId{ 1 }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStart"); }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, OnIdentifyTriggerEffect, }; diff --git a/examples/all-clusters-app/esp32/main/main.cpp b/examples/all-clusters-app/esp32/main/main.cpp index 6d9c4e2c488af4..4f4450c882767c 100644 --- a/examples/all-clusters-app/esp32/main/main.cpp +++ b/examples/all-clusters-app/esp32/main/main.cpp @@ -51,6 +51,8 @@ #endif #if CONFIG_OPENTHREAD_ENABLED +#include +#include #include #endif @@ -192,6 +194,13 @@ extern "C" void app_main() ESP_LOGE(TAG, "GetAppTask().StartAppTask() failed : %" CHIP_ERROR_FORMAT, error.Format()); } #if CHIP_DEVICE_CONFIG_ENABLE_THREAD + esp_openthread_platform_config_t config = { + .radio_config = ESP_OPENTHREAD_DEFAULT_RADIO_CONFIG(), + .host_config = ESP_OPENTHREAD_DEFAULT_HOST_CONFIG(), + .port_config = ESP_OPENTHREAD_DEFAULT_PORT_CONFIG(), + }; + set_openthread_platform_config(&config); + if (DeviceLayer::ThreadStackMgr().InitThreadStack() != CHIP_NO_ERROR) { ESP_LOGE(TAG, "Failed to initialize Thread stack"); diff --git a/examples/all-clusters-app/esp32/sdkconfig_m5stack.defaults b/examples/all-clusters-app/esp32/sdkconfig_m5stack.defaults index d8d54e5eea03a8..a7d058bc7fe30a 100644 --- a/examples/all-clusters-app/esp32/sdkconfig_m5stack.defaults +++ b/examples/all-clusters-app/esp32/sdkconfig_m5stack.defaults @@ -67,3 +67,6 @@ CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=n # Enable HKDF in mbedtls CONFIG_MBEDTLS_HKDF_C=y + +# Build chip tests +CONFIG_BUILD_CHIP_TESTS=y diff --git a/examples/all-clusters-app/esp32/sdkconfig_m5stack_rpc.defaults b/examples/all-clusters-app/esp32/sdkconfig_m5stack_rpc.defaults index 35fd87ed9f690c..e0cf1a0f22a874 100644 --- a/examples/all-clusters-app/esp32/sdkconfig_m5stack_rpc.defaults +++ b/examples/all-clusters-app/esp32/sdkconfig_m5stack_rpc.defaults @@ -71,3 +71,6 @@ CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=n # Enable HKDF in mbedtls CONFIG_MBEDTLS_HKDF_C=y + +# Build chip tests +CONFIG_BUILD_CHIP_TESTS=y diff --git a/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp b/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp index 1dd6a389abbba8..e3118377d51772 100644 --- a/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp +++ b/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp @@ -214,12 +214,12 @@ void AllClustersAppCommandHandler::OnGeneralFaultEventHandler(uint32_t eventId) GeneralFaults current; // On Linux Simulation, set following radio faults statically. - ReturnOnFailure(previous.add(EMBER_ZCL_NETWORK_FAULT_ENUM_HARDWARE_FAILURE)); - ReturnOnFailure(previous.add(EMBER_ZCL_NETWORK_FAULT_ENUM_NETWORK_JAMMED)); + ReturnOnFailure(previous.add(to_underlying(Clusters::GeneralDiagnostics::NetworkFaultEnum::kHardwareFailure))); + ReturnOnFailure(previous.add(to_underlying(Clusters::GeneralDiagnostics::NetworkFaultEnum::kNetworkJammed))); - ReturnOnFailure(current.add(EMBER_ZCL_NETWORK_FAULT_ENUM_HARDWARE_FAILURE)); - ReturnOnFailure(current.add(EMBER_ZCL_NETWORK_FAULT_ENUM_NETWORK_JAMMED)); - ReturnOnFailure(current.add(EMBER_ZCL_NETWORK_FAULT_ENUM_CONNECTION_FAILED)); + ReturnOnFailure(current.add(to_underlying(Clusters::GeneralDiagnostics::NetworkFaultEnum::kHardwareFailure))); + ReturnOnFailure(current.add(to_underlying(Clusters::GeneralDiagnostics::NetworkFaultEnum::kNetworkJammed))); + ReturnOnFailure(current.add(to_underlying(Clusters::GeneralDiagnostics::NetworkFaultEnum::kConnectionFailed))); Clusters::GeneralDiagnosticsServer::Instance().OnNetworkFaultsDetect(previous, current); } else @@ -245,8 +245,12 @@ void AllClustersAppCommandHandler::OnSoftwareFaultEventHandler(uint32_t eventId) softwareFault.name.SetValue(CharSpan::fromCharString(threadName)); std::time_t result = std::time(nullptr); - char * asctime = std::asctime(std::localtime(&result)); - softwareFault.faultRecording.SetValue(ByteSpan(Uint8::from_const_char(asctime), strlen(asctime))); + // Using size of 50 as it is double the expected 25 characters "Www Mmm dd hh:mm:ss yyyy\n". + char timeChar[50]; + if (std::strftime(timeChar, sizeof(timeChar), "%c", std::localtime(&result))) + { + softwareFault.faultRecording.SetValue(ByteSpan(Uint8::from_const_char(timeChar), strlen(timeChar))); + } Clusters::SoftwareDiagnosticsServer::Instance().OnSoftwareFaultDetect(softwareFault); } diff --git a/examples/all-clusters-app/linux/BUILD.gn b/examples/all-clusters-app/linux/BUILD.gn index 1b8ff71bc66e76..402649c13bba05 100644 --- a/examples/all-clusters-app/linux/BUILD.gn +++ b/examples/all-clusters-app/linux/BUILD.gn @@ -23,6 +23,7 @@ source_set("chip-all-clusters-common") { sources = [ "${chip_root}/examples/all-clusters-app/all-clusters-common/src/binding-handler.cpp", "${chip_root}/examples/all-clusters-app/all-clusters-common/src/bridged-actions-stub.cpp", + "${chip_root}/examples/all-clusters-app/all-clusters-common/src/fan-stub.cpp", "${chip_root}/examples/all-clusters-app/all-clusters-common/src/static-supported-modes-manager.cpp", "AllClustersCommandDelegate.cpp", "AppOptions.cpp", diff --git a/examples/all-clusters-app/linux/main-common.cpp b/examples/all-clusters-app/linux/main-common.cpp index dcce3f14ad12d5..4c22561146b237 100644 --- a/examples/all-clusters-app/linux/main-common.cpp +++ b/examples/all-clusters-app/linux/main-common.cpp @@ -77,17 +77,17 @@ void OnTriggerEffect(::Identify * identify) { switch (identify->mCurrentEffectIdentifier) { - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK"); + case Clusters::Identify::EffectIdentifierEnum::kBlink: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBlink"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE"); + case Clusters::Identify::EffectIdentifierEnum::kBreathe: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBreathe"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY"); + case Clusters::Identify::EffectIdentifierEnum::kOkay: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kOkay"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE"); + case Clusters::Identify::EffectIdentifierEnum::kChannelChange: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kChannelChange"); break; default: ChipLogProgress(Zcl, "No identifier effect"); @@ -96,11 +96,13 @@ void OnTriggerEffect(::Identify * identify) } static Identify gIdentify0 = { - chip::EndpointId{ 0 }, OnIdentifyStart, OnIdentifyStop, EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, OnTriggerEffect, + chip::EndpointId{ 0 }, OnIdentifyStart, OnIdentifyStop, Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, + OnTriggerEffect, }; static Identify gIdentify1 = { - chip::EndpointId{ 1 }, OnIdentifyStart, OnIdentifyStop, EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, OnTriggerEffect, + chip::EndpointId{ 1 }, OnIdentifyStart, OnIdentifyStop, Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, + OnTriggerEffect, }; // Network commissioning diff --git a/examples/all-clusters-app/nrfconnect/CMakeLists.txt b/examples/all-clusters-app/nrfconnect/CMakeLists.txt index fc50ade57e9c96..6b28a6e1a61c3c 100644 --- a/examples/all-clusters-app/nrfconnect/CMakeLists.txt +++ b/examples/all-clusters-app/nrfconnect/CMakeLists.txt @@ -67,7 +67,7 @@ chip_configure_data_model(app ZAP_FILE ${ALL_CLUSTERS_COMMON_DIR}/all-clusters-app.zap ) -if(CONFIG_CHIP_OTA_REQUESTOR OR CONFIG_MCUMGR_SMP_BT) +if(CONFIG_CHIP_OTA_REQUESTOR OR CONFIG_MCUMGR_TRANSPORT_BT) target_sources(app PRIVATE ${NRFCONNECT_COMMON}/util/OTAUtil.cpp) endif() diff --git a/examples/all-clusters-app/nrfconnect/main/AppTask.cpp b/examples/all-clusters-app/nrfconnect/main/AppTask.cpp index 05103f4c87f25d..cb3087217ab11c 100644 --- a/examples/all-clusters-app/nrfconnect/main/AppTask.cpp +++ b/examples/all-clusters-app/nrfconnect/main/AppTask.cpp @@ -71,7 +71,7 @@ k_timer sFunctionTimer; chip::DeviceLayer::DeviceInfoProviderImpl gExampleDeviceInfoProvider; Identify sIdentify = { kIdentifyEndpointId, AppTask::IdentifyStartHandler, AppTask::IdentifyStopHandler, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED }; + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator }; LEDWidget sStatusLED; LEDWidget sIdentifyLED; @@ -358,7 +358,7 @@ void AppTask::FunctionHandler(const AppEvent & event) Instance().CancelTimer(); Instance().mFunction = FunctionEvent::NoneSelected; -#ifdef CONFIG_MCUMGR_SMP_BT +#ifdef CONFIG_MCUMGR_TRANSPORT_BT GetDFUOverSMP().StartServer(); #else LOG_INF("Software update is disabled"); diff --git a/examples/all-clusters-app/nrfconnect/main/include/AppTask.h b/examples/all-clusters-app/nrfconnect/main/include/AppTask.h index 4b57d1dc3f249c..4db18dba683c0e 100644 --- a/examples/all-clusters-app/nrfconnect/main/include/AppTask.h +++ b/examples/all-clusters-app/nrfconnect/main/include/AppTask.h @@ -28,7 +28,7 @@ #include #endif -#ifdef CONFIG_MCUMGR_SMP_BT +#ifdef CONFIG_MCUMGR_TRANSPORT_BT #include "DFUOverSMP.h" #endif diff --git a/examples/all-clusters-app/telink/Readme.md b/examples/all-clusters-app/telink/Readme.md index 719656cbcb8484..ececcdb4a1fd0b 100644 --- a/examples/all-clusters-app/telink/Readme.md +++ b/examples/all-clusters-app/telink/Readme.md @@ -83,14 +83,14 @@ following states: Identify command of the Identify cluster is received. The command's argument can be used to specify the the effect. It is able to be in following effects: -| Effect | Description | -| :------------------------------ | :------------------------------------------------------------------- | -| Blinks (200 ms on/200 ms off) | Blink (EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK) | -| Breathe (during 1000 ms) | Breathe (EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE) | -| Blinks (50 ms on/950 ms off) | Okay (EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY) | -| Blinks (1000 ms on/1000 ms off) | Channel Change (EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE) | -| Blinks (950 ms on/50 ms off) | Finish (EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_FINISH_EFFECT) | -| LED off | Stop (EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_STOP_EFFECT) | +| Effect | Description | +| :------------------------------ | :--------------------------------------------------------------------------- | +| Blinks (200 ms on/200 ms off) | Blink (`Clusters::Identify::EffectIdentifierEnum::kBlink`) | +| Breathe (during 1000 ms) | Breathe (`Clusters::Identify::EffectIdentifierEnum::kBreathe`) | +| Blinks (50 ms on/950 ms off) | Okay (`Clusters::Identify::EffectIdentifierEnum::kOkay`) | +| Blinks (1000 ms on/1000 ms off) | Channel Change ( `Clusters::Identify::EffectIdentifierEnum::kChannelChange`) | +| Blinks (950 ms on/50 ms off) | Finish ( `Clusters::Identify::EffectIdentifierEnum::kFinishEffect`) | +| LED off | Stop (`Clusters::Identify::EffectIdentifierEnum::kStopEffect`) | ### CHIP tool commands diff --git a/examples/all-clusters-app/telink/include/AppConfig.h b/examples/all-clusters-app/telink/include/AppConfig.h index 880f3aa7b98c50..bf3fcd959f86e2 100644 --- a/examples/all-clusters-app/telink/include/AppConfig.h +++ b/examples/all-clusters-app/telink/include/AppConfig.h @@ -23,6 +23,4 @@ #define APP_USE_THREAD_START_BUTTON 1 #define APP_SET_DEVICE_INFO_PROVIDER 1 #define APP_SET_NETWORK_COMM_ENDPOINT_SEC 1 -#define APP_USE_IDENTIFY_PWM 1 // APP_USE_IDENTIFY_PWM must be defined before including "AppConfigCommon.h" - -#include "AppConfigCommon.h" +#define APP_USE_IDENTIFY_PWM 1 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 a1c11bf2222ad3..ac09d5456eb636 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 @@ -1,6 +1,18 @@ // This IDL was generated automatically by ZAP. // It is for view/code review purposes only. +struct ModeTagStruct { + optional vendor_id mfgCode = 0; + enum16 value = 1; + optional char_string<64> tagName = 2; +} + +struct ModeOptionStruct { + char_string<64> label = 0; + int8u mode = 1; + ModeTagStruct modeTags[] = 2; +} + struct ApplicationStruct { int16u catalogVendorID = 0; char_string applicationID = 1; @@ -13,7 +25,7 @@ struct LabelStruct { /** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */ server cluster Identify = 3 { - enum IdentifyEffectIdentifier : ENUM8 { + enum EffectIdentifierEnum : ENUM8 { kBlink = 0; kBreathe = 1; kOkay = 2; @@ -22,21 +34,21 @@ server cluster Identify = 3 { kStopEffect = 255; } - enum IdentifyEffectVariant : ENUM8 { + enum EffectVariantEnum : ENUM8 { kDefault = 0; } - enum IdentifyIdentifyType : ENUM8 { + enum IdentifyTypeEnum : ENUM8 { kNone = 0; - kVisibleLight = 1; - kVisibleLED = 2; + kLightOutput = 1; + kVisibleIndicator = 2; kAudibleBeep = 3; kDisplay = 4; kActuator = 5; } attribute int16u identifyTime = 0; - readonly attribute enum8 identifyType = 1; + readonly attribute IdentifyTypeEnum identifyType = 1; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -57,7 +69,11 @@ server cluster Groups = 4 { kGroupNames = 0x1; } - readonly attribute bitmap8 nameSupport = 0; + bitmap NameSupportBitmap : BITMAP8 { + kGroupNames = 0x80; + } + + readonly attribute NameSupportBitmap nameSupport = 0; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -128,7 +144,7 @@ server cluster Scenes = 5 { struct AttributeValuePair { optional attrib_id attributeID = 0; - int8u attributeValue[] = 1; + int32u attributeValue = 1; } struct ExtensionFieldSet { @@ -141,6 +157,9 @@ server cluster Scenes = 5 { readonly attribute group_id currentGroup = 2; readonly attribute boolean sceneValid = 3; readonly attribute bitmap8 nameSupport = 4; + readonly attribute nullable node_id lastConfiguredBy = 5; + readonly attribute int16u sceneTableSize = 6; + readonly attribute int8u remainingCapacity = 7; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -437,7 +456,7 @@ server cluster AccessControl = 31 { kRemoved = 2; } - struct Target { + struct AccessControlTargetStruct { nullable cluster_id cluster = 0; nullable endpoint_no endpoint = 1; nullable devtype_id deviceType = 2; @@ -447,7 +466,7 @@ server cluster AccessControl = 31 { fabric_sensitive AccessControlEntryPrivilegeEnum privilege = 1; fabric_sensitive AccessControlEntryAuthModeEnum authMode = 2; nullable fabric_sensitive int64u subjects[] = 3; - nullable fabric_sensitive Target targets[] = 4; + nullable fabric_sensitive AccessControlTargetStruct targets[] = 4; fabric_idx fabricIndex = 254; } @@ -1176,7 +1195,7 @@ server cluster GeneralCommissioning = 48 { /** Functionality to configure, enable, disable network credentials and access on a Matter device. */ server cluster NetworkCommissioning = 49 { - enum NetworkCommissioningStatus : ENUM8 { + enum NetworkCommissioningStatusEnum : ENUM8 { kSuccess = 0; kOutOfRange = 1; kBoundsExceeded = 2; @@ -1192,12 +1211,13 @@ server cluster NetworkCommissioning = 49 { kUnknownError = 12; } - enum WiFiBand : ENUM8 { + enum WiFiBandEnum : ENUM8 { k2g4 = 0; k3g65 = 1; k5g = 2; k6g = 3; k60g = 4; + k1g = 5; } bitmap Feature : BITMAP32 { @@ -1206,7 +1226,7 @@ server cluster NetworkCommissioning = 49 { kEthernetNetworkInterface = 0x4; } - bitmap WiFiSecurity : BITMAP8 { + bitmap WiFiSecurityBitmap : BITMAP8 { kUnencrypted = 0x1; kWep = 0x2; kWpaPersonal = 0x4; @@ -1214,12 +1234,12 @@ server cluster NetworkCommissioning = 49 { kWpa3Personal = 0x10; } - struct NetworkInfo { + struct NetworkInfoStruct { octet_string<32> networkID = 0; boolean connected = 1; } - struct ThreadInterfaceScanResult { + struct ThreadInterfaceScanResultStruct { int16u panId = 0; int64u extendedPanId = 1; char_string<16> networkName = 2; @@ -1230,21 +1250,21 @@ server cluster NetworkCommissioning = 49 { int8u lqi = 7; } - struct WiFiInterfaceScanResult { - WiFiSecurity security = 0; + struct WiFiInterfaceScanResultStruct { + WiFiSecurityBitmap security = 0; octet_string<32> ssid = 1; octet_string<6> bssid = 2; int16u channel = 3; - WiFiBand wiFiBand = 4; + WiFiBandEnum wiFiBand = 4; int8s rssi = 5; } readonly attribute access(read: administer) int8u maxNetworks = 0; - readonly attribute access(read: administer) NetworkInfo networks[] = 1; + readonly attribute access(read: administer) NetworkInfoStruct networks[] = 1; readonly attribute int8u scanMaxTimeSeconds = 2; readonly attribute int8u connectMaxTimeSeconds = 3; attribute access(write: administer) boolean interfaceEnabled = 4; - readonly attribute access(read: administer) nullable NetworkCommissioningStatus lastNetworkingStatus = 5; + readonly attribute access(read: administer) nullable NetworkCommissioningStatusEnum lastNetworkingStatus = 5; readonly attribute access(read: administer) nullable octet_string<32> lastNetworkID = 6; readonly attribute access(read: administer) nullable int32s lastConnectErrorValue = 7; readonly attribute command_id generatedCommandList[] = 65528; @@ -1287,20 +1307,20 @@ server cluster NetworkCommissioning = 49 { } response struct ScanNetworksResponse = 1 { - NetworkCommissioningStatus networkingStatus = 0; + NetworkCommissioningStatusEnum networkingStatus = 0; optional CHAR_STRING debugText = 1; - optional WiFiInterfaceScanResult wiFiScanResults[] = 2; - optional ThreadInterfaceScanResult threadScanResults[] = 3; + optional WiFiInterfaceScanResultStruct wiFiScanResults[] = 2; + optional ThreadInterfaceScanResultStruct threadScanResults[] = 3; } response struct NetworkConfigResponse = 5 { - NetworkCommissioningStatus networkingStatus = 0; + NetworkCommissioningStatusEnum networkingStatus = 0; optional CHAR_STRING<512> debugText = 1; optional INT8U networkIndex = 2; } response struct ConnectNetworkResponse = 7 { - NetworkCommissioningStatus networkingStatus = 0; + NetworkCommissioningStatusEnum networkingStatus = 0; optional CHAR_STRING debugText = 1; nullable INT32S errorValue = 2; } @@ -1484,14 +1504,14 @@ server cluster ThreadNetworkDiagnostics = 53 { kNotConnected = 1; } - enum NetworkFault : ENUM8 { + enum NetworkFaultEnum : ENUM8 { kUnspecified = 0; kLinkDown = 1; kHardwareFailure = 2; kNetworkJammed = 3; } - enum RoutingRole : ENUM8 { + enum RoutingRoleEnum : ENUM8 { kUnspecified = 0; kUnassigned = 1; kSleepyEndDevice = 2; @@ -1508,7 +1528,7 @@ server cluster ThreadNetworkDiagnostics = 53 { kMACCounts = 0x8; } - struct NeighborTable { + struct NeighborTableStruct { int64u extAddress = 0; int32u age = 1; int16u rloc16 = 2; @@ -1540,7 +1560,7 @@ server cluster ThreadNetworkDiagnostics = 53 { boolean channelMaskPresent = 11; } - struct RouteTable { + struct RouteTableStruct { int64u extAddress = 0; int16u rloc16 = 1; int8u routerId = 2; @@ -1563,18 +1583,18 @@ server cluster ThreadNetworkDiagnostics = 53 { } info event NetworkFaultChange = 1 { - NetworkFault current[] = 0; - NetworkFault previous[] = 1; + NetworkFaultEnum current[] = 0; + NetworkFaultEnum previous[] = 1; } readonly attribute nullable int16u channel = 0; - readonly attribute nullable RoutingRole routingRole = 1; + readonly attribute nullable RoutingRoleEnum routingRole = 1; readonly attribute nullable char_string<16> networkName = 2; readonly attribute nullable int16u panId = 3; readonly attribute nullable int64u extendedPanId = 4; readonly attribute nullable octet_string<17> meshLocalPrefix = 5; - readonly attribute NeighborTable neighborTable[] = 7; - readonly attribute RouteTable routeTable[] = 8; + 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; @@ -1583,7 +1603,7 @@ server cluster ThreadNetworkDiagnostics = 53 { readonly attribute nullable SecurityPolicy securityPolicy = 59; readonly attribute nullable octet_string<4> channelPage0Mask = 60; readonly attribute nullable OperationalDatasetComponents operationalDatasetComponents = 61; - readonly attribute NetworkFault activeNetworkFaultsList[] = 62; + readonly attribute NetworkFaultEnum activeNetworkFaultsList[] = 62; readonly attribute command_id generatedCommandList[] = 65528; readonly attribute command_id acceptedCommandList[] = 65529; readonly attribute event_id eventList[] = 65530; @@ -1622,6 +1642,7 @@ server cluster WiFiNetworkDiagnostics = 54 { kN = 3; kAc = 4; kAx = 5; + kAh = 6; } bitmap Feature : BITMAP32 { @@ -1952,10 +1973,6 @@ server cluster GroupKeyManagement = 63 { INT16U groupKeySetID = 0; } - request struct KeySetReadAllIndicesRequest { - INT16U groupKeySetIDs[] = 0; - } - response struct KeySetReadResponse = 2 { GroupKeySetStruct groupKeySet = 0; } @@ -1967,7 +1984,7 @@ server cluster GroupKeyManagement = 63 { fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0; fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1; fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3; - fabric command access(invoke: administer) KeySetReadAllIndices(KeySetReadAllIndicesRequest): KeySetReadAllIndicesResponse = 4; + fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4; } /** The Fixed Label Cluster provides a feature for the device to tag an endpoint with zero or more read only @@ -2020,22 +2037,43 @@ server cluster BooleanState = 69 { /** Attributes and commands for selecting a mode from a list of supported options. */ server cluster ModeSelect = 80 { + enum ModeTag : ENUM16 { + kAuto = 0; + kQuick = 1; + kQuiet = 2; + kLowNoise = 3; + kLowEnergy = 4; + kVacation = 5; + kMin = 6; + kMax = 7; + kNight = 8; + kDay = 9; + } + + enum StatusCode : ENUM8 { + kSuccess = 0; + kUnsupportedMode = 1; + kGenericFailure = 2; + } + bitmap Feature : BITMAP32 { - kDeponoff = 0x1; + kOnOff = 0x1; + kExtendedStatus = 0x2; } - struct SemanticTagStruct { - vendor_id mfgCode = 0; + struct ModeTagStruct { + optional vendor_id mfgCode = 0; enum16 value = 1; + optional char_string<64> tagName = 2; } struct ModeOptionStruct { char_string<64> label = 0; int8u mode = 1; - SemanticTagStruct semanticTags[] = 2; + ModeTagStruct modeTags[] = 2; } - readonly attribute char_string<32> description = 0; + readonly attribute char_string<64> description = 0; readonly attribute nullable enum16 standardNamespace = 1; readonly attribute ModeOptionStruct supportedModes[] = 2; readonly attribute int8u currentMode = 3; @@ -2760,6 +2798,16 @@ server cluster Thermostat = 513 { /** An interface for controlling a fan in a heating/cooling system. */ server cluster FanControl = 514 { + enum AirflowDirectionEnum : ENUM8 { + kForward = 0; + kReverse = 1; + } + + enum DirectionEnum : ENUM8 { + kIncrease = 0; + kDecrease = 1; + } + enum FanModeSequenceType : ENUM8 { kOffLowMedHigh = 0; kOffLowHigh = 1; @@ -2784,6 +2832,8 @@ server cluster FanControl = 514 { kAuto = 0x2; kRocking = 0x4; kWind = 0x8; + kStep = 0x10; + kAirflowDirection = 0x20; } bitmap RockSupportMask : BITMAP8 { @@ -2927,7 +2977,7 @@ server cluster BallastConfiguration = 769 { /** Attributes and commands for configuring the measurement of illuminance, and reporting illuminance measurements. */ server cluster IlluminanceMeasurement = 1024 { - enum LightSensorType : ENUM8 { + enum LightSensorTypeEnum : ENUM8 { kPhotodiode = 0; kCmos = 1; } @@ -4160,13 +4210,16 @@ endpoint 1 { } server cluster Scenes { - ram attribute sceneCount default = 0x00; + callback attribute sceneCount default = 0x00; ram attribute currentScene default = 0x00; ram attribute currentGroup default = 0x0000; ram attribute sceneValid default = 0x00; ram attribute nameSupport; + ram attribute lastConfiguredBy; + ram attribute sceneTableSize; + callback attribute remainingCapacity; ram attribute featureMap default = 0; - ram attribute clusterRevision default = 4; + ram attribute clusterRevision default = 5; } server cluster OnOff { 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 9b143d014c8d08..2a1eb98e4d3ae1 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 @@ -111,7 +111,7 @@ "code": 1, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "IdentifyTypeEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -279,7 +279,7 @@ "code": 0, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "NameSupportBitmap", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -400,7 +400,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -473,7 +473,7 @@ "side": "server", "type": "int8u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "0x00", @@ -556,7 +556,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -3202,7 +3202,7 @@ "code": 5, "mfgCode": null, "side": "server", - "type": "NetworkCommissioningStatus", + "type": "NetworkCommissioningStatusEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -3806,7 +3806,7 @@ "code": 1, "mfgCode": null, "side": "server", - "type": "RoutingRole", + "type": "RoutingRoleEnum", "included": 1, "storageOption": "External", "singleton": 0, @@ -7718,7 +7718,7 @@ "code": 4, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "LightSensorTypeEnum", "included": 0, "storageOption": "RAM", "singleton": 0, @@ -8568,7 +8568,7 @@ "code": 1, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "IdentifyTypeEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -8736,7 +8736,7 @@ "code": 0, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "NameSupportBitmap", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -8857,7 +8857,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -8930,7 +8930,7 @@ "side": "server", "type": "int8u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "0x00", @@ -9003,6 +9003,54 @@ "maxInterval": 65344, "reportableChange": 0 }, + { + "name": "LastConfiguredBy", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "node_id", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SceneTableSize", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RemainingCapacity", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "FeatureMap", "code": 65532, @@ -9029,7 +9077,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -11732,7 +11780,7 @@ "code": 5, "mfgCode": null, "side": "server", - "type": "NetworkCommissioningStatus", + "type": "NetworkCommissioningStatusEnum", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -16703,7 +16751,7 @@ "code": 4, "mfgCode": null, "side": "server", - "type": "enum8", + "type": "LightSensorTypeEnum", "included": 0, "storageOption": "RAM", "singleton": 0, @@ -21187,7 +21235,7 @@ "code": 0, "mfgCode": null, "side": "server", - "type": "bitmap8", + "type": "NameSupportBitmap", "included": 1, "storageOption": "RAM", "singleton": 0, @@ -21308,7 +21356,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -21381,7 +21429,7 @@ "side": "server", "type": "int8u", "included": 1, - "storageOption": "RAM", + "storageOption": "External", "singleton": 0, "bounded": 0, "defaultValue": "0x00", @@ -21464,7 +21512,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -24787,7 +24835,7 @@ "code": 5, "mfgCode": null, "side": "server", - "type": "NetworkCommissioningStatus", + "type": "NetworkCommissioningStatusEnum", "included": 1, "storageOption": "External", "singleton": 0, diff --git a/examples/all-clusters-minimal-app/ameba/main/chipinterface.cpp b/examples/all-clusters-minimal-app/ameba/main/chipinterface.cpp index 306d9c36717e00..870870bbf41999 100644 --- a/examples/all-clusters-minimal-app/ameba/main/chipinterface.cpp +++ b/examples/all-clusters-minimal-app/ameba/main/chipinterface.cpp @@ -54,6 +54,7 @@ #endif using namespace ::chip; +using namespace ::chip::app; using namespace ::chip::Credentials; using namespace ::chip::DeviceManager; using namespace ::chip::DeviceLayer; @@ -80,14 +81,14 @@ Identify gIdentify0 = { chip::EndpointId{ 0 }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStart"); }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, }; Identify gIdentify1 = { chip::EndpointId{ 1 }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStart"); }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, }; #ifdef CONFIG_PLATFORM_8721D diff --git a/examples/all-clusters-minimal-app/asr/.gn b/examples/all-clusters-minimal-app/asr/.gn new file mode 100755 index 00000000000000..8d75f1eafcdb89 --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/.gn @@ -0,0 +1,29 @@ +# Copyright (c) 2023 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build_overrides/build.gni") + +# The location of the build configuration file. +buildconfig = "${build_root}/config/BUILDCONFIG.gn" + +# CHIP uses angle bracket includes. +check_system_includes = true + +default_args = { + target_cpu = "arm" + + target_os = "freertos" + + import("//args.gni") +} diff --git a/examples/all-clusters-minimal-app/asr/BUILD.gn b/examples/all-clusters-minimal-app/asr/BUILD.gn new file mode 100755 index 00000000000000..752062a9b96ebf --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/BUILD.gn @@ -0,0 +1,134 @@ +# Copyright (c) 2023 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build_overrides/asr.gni") +import("//build_overrides/build.gni") +import("//build_overrides/chip.gni") +import("${asr_sdk_build_root}/asr_sdk.gni") +import("${build_root}/config/defaults.gni") +import("${chip_root}/src/lib/lib.gni") +import("${chip_root}/src/platform/device.gni") +import("${chip_root}/third_party/asr/asr_executable.gni") + +import("cfg.gni") + +assert(current_os == "freertos") + +asr_project_dir = "${chip_root}/examples/all-clusters-minimal-app/asr" +examples_plat_dir = "${chip_root}/examples/platform/asr" + +declare_args() { + # Dump memory usage at link time. + chip_print_memory_usage = false +} + +asr_sdk_sources("all_clusters_app_sdk_sources") { + include_dirs = [ + "${chip_root}/src/platform/ASR", + "${asr_project_dir}/include", + "${examples_plat_dir}", + ] + + defines = [ + "ASR_LOG_ENABLED=1", + "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE=${setupPinCode}", + "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR=${setupDiscriminator}", + ] + + if (chip_enable_factory_data) { + defines += [ + "CONFIG_ENABLE_ASR_FACTORY_DATA_PROVIDER=1", + "CONFIG_ENABLE_ASR_FACTORY_DEVICE_INFO_PROVIDER=1", + ] + } + + if (chip_lwip_ip6_hook) { + defines += [ + "CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT", + "CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT", + ] + } + + sources = [ "${asr_project_dir}/include/CHIPProjectConfig.h" ] + + public_configs = [ "${asr_sdk_build_root}:asr_sdk_config" ] +} + +asr_executable("clusters_minimal_app") { + include_dirs = [] + defines = [] + output_name = "chip-asr-clusters-minimal-example.out" + + sources = [ + "${chip_root}/examples/all-clusters-app/all-clusters-common/src/bridged-actions-stub.cpp", + "${chip_root}/examples/all-clusters-app/all-clusters-common/src/static-supported-modes-manager.cpp", + "${examples_plat_dir}/CHIPDeviceManager.cpp", + "${examples_plat_dir}/LEDWidget.cpp", + "${examples_plat_dir}/init_Matter.cpp", + "${examples_plat_dir}/init_asrPlatform.cpp", + "${examples_plat_dir}/shell/matter_shell.cpp", + "src/AppTask.cpp", + "src/DeviceCallbacks.cpp", + "src/main.cpp", + ] + + if (chip_enable_ota_requestor) { + sources += [ "${examples_plat_dir}/init_OTARequestor.cpp" ] + } + + deps = [ + ":all_clusters_app_sdk_sources", + "${chip_root}/examples/all-clusters-minimal-app/all-clusters-common", + "${chip_root}/examples/common/QRCode", + "${chip_root}/examples/providers:device_info_provider", + "${chip_root}/src/lib", + "${chip_root}/src/setup_payload", + ] + + include_dirs += [ + "include", + "${examples_plat_dir}", + "${asr_project_dir}/include", + "${chip_root}/examples/all-clusters-app/all-clusters-common/include", + "${chip_root}/src", + "${chip_root}/src/lib", + "${chip_root}/src/lib/support", + "${chip_root}/src/app/util", + ] + + defines = [ "ASR_NETWORK_LAYER_BLE=${chip_config_network_layer_ble}" ] + + if (chip_build_libshell) { + defines += [ "CONFIG_ENABLE_CHIP_SHELL=1" ] + sources += [ "${examples_plat_dir}/shell/launch_shell.cpp" ] + include_dirs += [ "${examples_plat_dir}/shell" ] + } + + if (chip_print_memory_usage) { + ldflags += [ + "-Wl,--print-memory-usage", + "-fstack-usage", + ] + } + + output_dir = root_out_dir +} + +group("asr") { + deps = [ ":clusters_minimal_app" ] +} + +group("default") { + deps = [ ":asr" ] +} diff --git a/examples/all-clusters-minimal-app/asr/README.md b/examples/all-clusters-minimal-app/asr/README.md new file mode 100755 index 00000000000000..8926066fccece9 --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/README.md @@ -0,0 +1,54 @@ +# Matter ASR All Clusters Example + +A prototype application that demonstrates device commissioning and cluster +control on ASR platform. + +--- + +- [Matter ASR All Clusters Example](#matter-asr-all-clusters-example) + - [Supported Chips](#supported-chips) + - [Building and Commissioning](#building-and-commissioning) + - [Cluster Control](#cluster-control) + - [Light switch press button and light status LED](#light-switch-press-button-and-light-status-led) + +--- + +## Supported Chips + +The Matter demo application is supported on: + +- ASR582X +- ASR595X + +## Building and Commissioning + +Please refer +[Building and Commissioning](../../../docs/guides/asr_getting_started_guide.md#building-the-example-application) +guides to get started + +``` +./scripts/build/build_examples.py --target asr-$ASR_BOARD-all-clusters-minimal build +``` + +## Cluster Control + +After successful commissioning, use `chip-tool` to control the board + +For example,control the OnOff Cluster attribute: + +``` +./chip-tool onoff read on-off 1 +./chip-tool onoff on 1 +./chip-tool onoff off 1 +./chip-tool onoff toggle 1 +``` + +## Light switch press button and light status LED + +This demo uses button to test changing the light states and LED to show the +state of these changes. + +| Name | Pin | +| :----: | :---: | +| LED | PAD6 | +| BUTTON | PAD12 | diff --git a/examples/all-clusters-minimal-app/asr/args.gni b/examples/all-clusters-minimal-app/asr/args.gni new file mode 100755 index 00000000000000..66a2de849083d4 --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/args.gni @@ -0,0 +1,27 @@ +# Copyright (c) 2023 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build_overrides/chip.gni") +import("//build_overrides/pigweed.gni") +import("//cfg.gni") +import("${chip_root}/src/platform/ASR/args.gni") + +asr_target_project = + get_label_info(":all_clusters_app_sdk_sources", "label_no_toolchain") + +declare_args() { + # Disable lock tracking, since our FreeRTOS configuration does not set + # INCLUDE_xSemaphoreGetMutexHolder + chip_stack_lock_tracking = "none" +} diff --git a/examples/all-clusters-minimal-app/asr/build_overrides b/examples/all-clusters-minimal-app/asr/build_overrides new file mode 120000 index 00000000000000..194ee0b812dc3d --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/build_overrides @@ -0,0 +1 @@ +../../build_overrides/ \ No newline at end of file diff --git a/examples/all-clusters-minimal-app/asr/cfg.gni b/examples/all-clusters-minimal-app/asr/cfg.gni new file mode 100755 index 00000000000000..15fe50e79efb6d --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/cfg.gni @@ -0,0 +1,23 @@ +# Copyright (c) 2023 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +declare_args() { + chip_enable_factory_data = false + + chip_lwip_ip6_hook = false + + setupPinCode = 20202021 + + setupDiscriminator = 3840 +} diff --git a/examples/all-clusters-minimal-app/asr/include/AppConfig.h b/examples/all-clusters-minimal-app/asr/include/AppConfig.h new file mode 100644 index 00000000000000..6a633267878a8d --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/include/AppConfig.h @@ -0,0 +1,54 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * + * 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 + +// ---- Lighting Example App Config ---- + +#define APP_TASK_NAME "APP" + +#define APP_EVENT_QUEUE_SIZE 10 +#define APP_TASK_STACK_SIZE (1024 * 4) +#define APP_WAIT_LOOP 1000 + +#define MATTER_DEVICE_NAME "ASR-Clusters-m" + +#define APP_LIGHT_BUTTON_IDX 0 +#define APP_BUTTON_DEBOUNCE_PERIOD_MS 50 + +#define APP_BUTTON_PRESSED 0 +#define APP_BUTTON_RELEASED 1 + +// Time it takes in ms for the simulated actuator to move from one +// state to another. +#define ACTUATOR_MOVEMENT_PERIOS_MS 2000 + +// ASR Logging +#ifdef __cplusplus +extern "C" { +#endif + +void appError(int err); +void ASR_LOG(const char * aFormat, ...); + +#ifdef __cplusplus +} + +#include +void appError(CHIP_ERROR error); +#endif diff --git a/examples/all-clusters-minimal-app/asr/include/AppEvent.h b/examples/all-clusters-minimal-app/asr/include/AppEvent.h new file mode 100755 index 00000000000000..2c59845f3bb577 --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/include/AppEvent.h @@ -0,0 +1,51 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2018 Nest Labs, Inc. + * + * 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 + +struct AppEvent; +typedef void (*EventHandler)(AppEvent *); + +struct AppEvent +{ + enum AppEventTypes + { + kEventType_Button = 0, + kEventType_Timer, + kEventType_Light, + kEventType_Install, + }; + + uint16_t Type; + + union + { + struct + { + uint8_t ButtonIdx; + uint8_t Action; + } ButtonEvent; + struct + { + void * Context; + } TimerEvent; + }; + + EventHandler Handler; +}; diff --git a/examples/all-clusters-minimal-app/asr/include/AppTask.h b/examples/all-clusters-minimal-app/asr/include/AppTask.h new file mode 100755 index 00000000000000..97d1bfe538fb64 --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/include/AppTask.h @@ -0,0 +1,65 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * + * 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 "AppEvent.h" +#include "FreeRTOS.h" +#include "timers.h" // provides FreeRTOS timer support +#include +#include + +// Application-defined error codes in the CHIP_ERROR space. +#define APP_ERROR_EVENT_QUEUE_FAILED CHIP_APPLICATION_ERROR(0x01) +#define APP_ERROR_CREATE_TASK_FAILED CHIP_APPLICATION_ERROR(0x02) +#define APP_ERROR_UNHANDLED_EVENT CHIP_APPLICATION_ERROR(0x03) +#define APP_ERROR_CREATE_TIMER_FAILED CHIP_APPLICATION_ERROR(0x04) +#define APP_ERROR_START_TIMER_FAILED CHIP_APPLICATION_ERROR(0x05) +#define APP_ERROR_STOP_TIMER_FAILED CHIP_APPLICATION_ERROR(0x06) + +class AppTask +{ + +public: + CHIP_ERROR StartAppTask(); + static void AppTaskMain(void * pvParameter); + static void LightActionEventHandler(AppEvent * aEvent); + void ButtonEventHandler(uint8_t btnIdx, uint8_t btnAction); + void PostEvent(const AppEvent * event); + /** + * Use internally for registration of the ChipDeviceEvents + */ + static void CommonDeviceEventHandler(const chip::DeviceLayer::ChipDeviceEvent * event, intptr_t arg); + +private: + friend AppTask & GetAppTask(void); + + CHIP_ERROR Init(); + + static AppTask sAppTask; + void DispatchEvent(AppEvent * event); + static void OnOffUpdateClusterState(void); +}; + +inline AppTask & GetAppTask(void) +{ + return AppTask::sAppTask; +} diff --git a/examples/all-clusters-minimal-app/asr/include/CHIPProjectConfig.h b/examples/all-clusters-minimal-app/asr/include/CHIPProjectConfig.h new file mode 100755 index 00000000000000..6a81ee6517aedb --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/include/CHIPProjectConfig.h @@ -0,0 +1,92 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file + * Example project configuration file for CHIP. + * + * This is a place to put application or project-specific overrides + * to the default configuration values for general CHIP features. + * + */ + +#pragma once + +// Use a default pairing code if one hasn't been provisioned in flash. +#ifndef CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE +#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE 20202021 +#endif + +#ifndef CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR +#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR 0xF00 +#endif + +// For convenience, Chip Security Test Mode can be enabled and the +// requirement for authentication in various protocols can be disabled. +// +// WARNING: These options make it possible to circumvent basic Chip security functionality, +// including message encryption. Because of this they MUST NEVER BE ENABLED IN PRODUCTION BUILDS. +// +#define CHIP_CONFIG_SECURITY_TEST_MODE 0 +#define CHIP_CONFIG_REQUIRE_AUTH 1 + +/** + * CHIP_DEVICE_CONFIG_DEVICE_HARDWARE_VERSION + * + * The hardware version number assigned to device or product by the device vendor. This + * number is scoped to the device product id, and typically corresponds to a version of the + * physical device, a change to its packaging, and/or a change to its marketing presentation. + * This value is generally *not* incremented for device software versions. + */ +#define CHIP_DEVICE_CONFIG_DEVICE_HARDWARE_VERSION 1 + +/** + * CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING + * + * A string identifying the software version running on the device. + * CHIP service currently expects the software version to be in the format + * {MAJOR_VERSION}.0d{MINOR_VERSION} + */ +#ifndef CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING +#define CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING "1.0" +#endif + +/** + * CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION + * + * A uint32_t identifying the software version running on the device. + */ +/* The SoftwareVersion attribute of the Basic cluster. */ +#ifndef CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION +#define CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION 1 +#endif + +/** + * CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER + * + * Enables the use of a hard-coded default serial number if none + * is found in Chip NV storage. + */ +#define CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER "TEST_SN" + +/** + * CHIP_DEVICE_CONFIG_EVENT_LOGGING_DEBUG_BUFFER_SIZE + * + * A size, in bytes, of the individual debug event logging buffer. + */ +#define CHIP_DEVICE_CONFIG_EVENT_LOGGING_DEBUG_BUFFER_SIZE (512) diff --git a/examples/all-clusters-minimal-app/asr/include/DeviceCallbacks.h b/examples/all-clusters-minimal-app/asr/include/DeviceCallbacks.h new file mode 100755 index 00000000000000..18ebb25ed75f36 --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/include/DeviceCallbacks.h @@ -0,0 +1,44 @@ +/* + * + * Copyright (c) 2020 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file DeviceCallbacks.h + * + * Implementations for the DeviceManager callbacks for this application + * + **/ + +#pragma once + +#include "CHIPDeviceManager.h" +#include +#include +#include + +class DeviceCallbacks : public chip::DeviceManager::CHIPDeviceManagerCallbacks +{ +public: + void DeviceEventCallback(const chip::DeviceLayer::ChipDeviceEvent * event, intptr_t arg) override; + void PostAttributeChangeCallback(chip::EndpointId endpointId, chip::ClusterId clusterId, chip::AttributeId attributeId, + uint8_t type, uint16_t size, uint8_t * value) override; + +private: + void OnInternetConnectivityChange(const chip::DeviceLayer::ChipDeviceEvent * event); + void OnOnOffPostAttributeChangeCallback(chip::EndpointId endpointId, chip::AttributeId attributeId, uint8_t * value); + void OnIdentifyPostAttributeChangeCallback(chip::EndpointId endpointId, chip::AttributeId attributeId, uint8_t * value); +}; diff --git a/examples/all-clusters-minimal-app/asr/src/AppTask.cpp b/examples/all-clusters-minimal-app/asr/src/AppTask.cpp new file mode 100644 index 00000000000000..6b97d430953867 --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/src/AppTask.cpp @@ -0,0 +1,230 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * Copyright 2021, Cypress Semiconductor Corporation (an Infineon company) + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "AppTask.h" +#include "AppConfig.h" +#include "AppEvent.h" +#include "CHIPDeviceManager.h" +#include "DeviceCallbacks.h" +#include "LEDWidget.h" +#include "qrcodegen.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "init_Matter.h" +#include "lega_rtos_api.h" + +using namespace ::chip; +using namespace ::chip::Credentials; +using namespace ::chip::DeviceManager; +using namespace ::chip::DeviceLayer; +using namespace ::chip::System; + +LEDWidget sStatusLED; +LEDWidget sLightLED; +LEDWidget sClusterLED; + +namespace { +TaskHandle_t sAppTaskHandle; +QueueHandle_t sAppEventQueue; +constexpr EndpointId kNetworkCommissioningEndpointMain = 0; +constexpr EndpointId kNetworkCommissioningEndpointSecondary = 0xFFFE; + +app::Clusters::NetworkCommissioning::Instance + sWiFiNetworkCommissioningInstance(kNetworkCommissioningEndpointMain /* Endpoint Id */, + &(NetworkCommissioning::ASRWiFiDriver::GetInstance())); +} // namespace + +AppTask AppTask::sAppTask; + +void NetWorkCommissioningInstInit() +{ + sWiFiNetworkCommissioningInstance.Init(); + + // We only have network commissioning on endpoint 0. + emberAfEndpointEnableDisable(kNetworkCommissioningEndpointSecondary, false); +} + +static DeviceCallbacks EchoCallbacks; + +CHIP_ERROR AppTask::StartAppTask() +{ + sAppEventQueue = xQueueCreate(APP_EVENT_QUEUE_SIZE, sizeof(AppEvent)); + if (sAppEventQueue == NULL) + { + ASR_LOG("Failed to allocate app event queue"); + appError(APP_ERROR_EVENT_QUEUE_FAILED); + } + // Start App task. + xTaskCreate(AppTaskMain, APP_TASK_NAME, APP_TASK_STACK_SIZE, 0, 2, &sAppTaskHandle); + return (sAppTaskHandle == nullptr) ? APP_ERROR_CREATE_TASK_FAILED : CHIP_NO_ERROR; +} + +CHIP_ERROR AppTask::Init() +{ + ASR_LOG("App Task started"); + + if (MatterInitializer::Init_Matter_Stack(MATTER_DEVICE_NAME) != CHIP_NO_ERROR) + return CHIP_ERROR_INTERNAL; + + CHIPDeviceManager & deviceMgr = CHIPDeviceManager::GetInstance(); + + if (deviceMgr.Init(&EchoCallbacks) != CHIP_NO_ERROR) + return CHIP_ERROR_INTERNAL; + + if (MatterInitializer::Init_Matter_Server() != CHIP_NO_ERROR) + appError(CHIP_ERROR_INTERNAL); + + NetWorkCommissioningInstInit(); + + ASR_LOG("Current Software Version: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); + + ConfigurationMgr().LogDeviceConfig(); + + // Print setup info + PrintOnboardingCodes(chip::RendezvousInformationFlag(chip::RendezvousInformationFlag::kBLE)); + + return CHIP_NO_ERROR; +} + +void AppTask::AppTaskMain(void * pvParameter) +{ + AppEvent event; + CHIP_ERROR err = sAppTask.Init(); + + if (err != CHIP_NO_ERROR) + { + ASR_LOG("AppTask.Init() failed"); + appError(err); + } + + while (true) + { + BaseType_t eventReceived = xQueueReceive(sAppEventQueue, &event, pdMS_TO_TICKS(10)); + while (eventReceived == pdTRUE) + { + sAppTask.DispatchEvent(&event); + eventReceived = xQueueReceive(sAppEventQueue, &event, 0); + } + } +} + +void AppTask::LightActionEventHandler(AppEvent * aEvent) +{ + /* ON/OFF Light Led based on Button interrupt */ + sLightLED.Invert(); + + /* Update OnOff Cluster state */ + sAppTask.OnOffUpdateClusterState(); +} + +void AppTask::ButtonEventHandler(uint8_t btnIdx, uint8_t btnAction) +{ + if (btnIdx != APP_LIGHT_BUTTON_IDX) + { + return; + } + + AppEvent button_event = {}; + button_event.Type = AppEvent::kEventType_Button; + button_event.ButtonEvent.ButtonIdx = btnIdx; + button_event.ButtonEvent.Action = btnAction; + + if ((btnIdx == APP_LIGHT_BUTTON_IDX) && (btnAction == APP_BUTTON_RELEASED)) + { + button_event.Handler = LightActionEventHandler; + sAppTask.PostEvent(&button_event); + } +} + +void AppTask::PostEvent(const AppEvent * aEvent) +{ + if (sAppEventQueue != NULL) + { + BaseType_t status; + if (lega_rtos_is_in_interrupt_context()) + { + BaseType_t higherPrioTaskWoken = pdFALSE; + status = xQueueSendFromISR(sAppEventQueue, aEvent, &higherPrioTaskWoken); + +#ifdef portYIELD_FROM_ISR + portYIELD_FROM_ISR(higherPrioTaskWoken); +#elif portEND_SWITCHING_ISR // portYIELD_FROM_ISR or portEND_SWITCHING_ISR + portEND_SWITCHING_ISR(higherPrioTaskWoken); +#else // portYIELD_FROM_ISR or portEND_SWITCHING_ISR +#error "Must have portYIELD_FROM_ISR or portEND_SWITCHING_ISR" +#endif // portYIELD_FROM_ISR or portEND_SWITCHING_ISR + } + else + { + status = xQueueSend(sAppEventQueue, aEvent, 1); + } + + if (!status) + ASR_LOG("Failed to post event to app task event queue"); + } + else + { + ASR_LOG("Event Queue is NULL should never happen"); + } +} + +void AppTask::DispatchEvent(AppEvent * aEvent) +{ + if (aEvent->Handler) + { + aEvent->Handler(aEvent); + } + else + { + ASR_LOG("Event received with no handler. Dropping event."); + } +} + +void AppTask::OnOffUpdateClusterState(void) +{ + uint8_t onoff = sLightLED.Get(); + + // write the new on/off value + EmberAfStatus status = app::Clusters::OnOff::Attributes::OnOff::Set(2, onoff); + + if (status != EMBER_ZCL_STATUS_SUCCESS) + { + ASR_LOG("ERR: updating on/off %x", status); + } +} + +bool lowPowerClusterSleep() +{ + return true; +} diff --git a/examples/all-clusters-minimal-app/asr/src/DeviceCallbacks.cpp b/examples/all-clusters-minimal-app/asr/src/DeviceCallbacks.cpp new file mode 100644 index 00000000000000..104b3f52a46364 --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/src/DeviceCallbacks.cpp @@ -0,0 +1,180 @@ +/* + * + * Copyright (c) 2020 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file DeviceCallbacks.cpp + * + * Implements all the callbacks to the application from the CHIP Stack + * + **/ +#include "DeviceCallbacks.h" + +#include "CHIPDeviceManager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "LEDWidget.h" +#include "init_OTARequestor.h" +#if defined CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT || defined CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT +#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; +using namespace ::chip::DeviceLayer; +using namespace ::chip::DeviceManager; +using namespace ::chip::Logging; + +uint32_t identifyTimerCount; +constexpr uint32_t kIdentifyTimerDelayMS = 250; +#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR +constexpr uint32_t kInitOTARequestorDelaySec = 3; + +void InitOTARequestorHandler(System::Layer * systemLayer, void * appState) +{ + OTAInitializer::Instance().InitOTARequestor(); +} +#endif +void DeviceCallbacks::DeviceEventCallback(const ChipDeviceEvent * event, intptr_t arg) +{ + switch (event->Type) + { + case DeviceEventType::kInternetConnectivityChange: + OnInternetConnectivityChange(event); + break; + + case DeviceEventType::kInterfaceIpAddressChanged: + if ((event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV4_Assigned) || + (event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV6_Assigned)) + { + // MDNS server restart on any ip assignment: if link local ipv6 is configured, that + // will not trigger a 'internet connectivity change' as there is no internet + // connectivity. MDNS still wants to refresh its listening interfaces to include the + // newly selected address. + chip::app::DnssdServer::Instance().StartServer(); + + if (event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV6_Assigned) + { +#if defined CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT || defined CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT + ChipLogProgress(NotSpecified, "Initializing route hook..."); + asr_route_hook_init(); +#endif + } + } + break; + } +} + +void DeviceCallbacks::PostAttributeChangeCallback(EndpointId endpointId, ClusterId clusterId, AttributeId attributeId, uint8_t type, + uint16_t size, uint8_t * value) +{ + switch (clusterId) + { + case app::Clusters::OnOff::Id: + OnOnOffPostAttributeChangeCallback(endpointId, attributeId, value); + break; + + case app::Clusters::Identify::Id: + OnIdentifyPostAttributeChangeCallback(endpointId, attributeId, value); + break; + + default: + break; + } +} + +void DeviceCallbacks::OnInternetConnectivityChange(const ChipDeviceEvent * event) +{ +#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR + static bool isOTAInitialized = false; +#endif + if (event->InternetConnectivityChange.IPv4 == kConnectivity_Established) + { + ChipLogProgress(DeviceLayer, "IPv4 Server ready..."); + chip::app::DnssdServer::Instance().StartServer(); + } + else if (event->InternetConnectivityChange.IPv4 == kConnectivity_Lost) + { + ChipLogProgress(DeviceLayer, "Lost IPv4 connectivity..."); + } + if (event->InternetConnectivityChange.IPv6 == kConnectivity_Established) + { + ChipLogProgress(DeviceLayer, "IPv6 Server ready..."); + chip::app::DnssdServer::Instance().StartServer(); +#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR + // Init OTA requestor only when we have gotten IPv6 address + if (!isOTAInitialized) + { + chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Seconds32(kInitOTARequestorDelaySec), + InitOTARequestorHandler, nullptr); + isOTAInitialized = true; + } +#endif + } + else if (event->InternetConnectivityChange.IPv6 == kConnectivity_Lost) + { + ChipLogProgress(DeviceLayer, "Lost IPv6 connectivity..."); + } +} + +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)); + + // At this point we can assume that value points to a bool value. + // statusLED1.Set(*value); + +exit: + return; +} + +void IdentifyTimerHandler(Layer * systemLayer, void * appState, CHIP_ERROR error) +{ + if (identifyTimerCount) + { + identifyTimerCount--; + } +} + +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)); + + // timerCount represents the number of callback executions before we stop the timer. + // value is expressed in seconds and the timer is fired every 250ms, so just multiply value by 4. + // Also, we want timerCount to be odd number, so the ligth state ends in the same state it starts. + identifyTimerCount = (*value) * 4; +exit: + return; +} diff --git a/examples/all-clusters-minimal-app/asr/src/main.cpp b/examples/all-clusters-minimal-app/asr/src/main.cpp new file mode 100644 index 00000000000000..7ef86db3591b1f --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/src/main.cpp @@ -0,0 +1,85 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * Copyright (c) 2019 Google LLC. + * Copyright 2021, Cypress Semiconductor Corporation (an Infineon company) + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include +#include + +#include + +#include "CHIPDeviceManager.h" +#include "DeviceCallbacks.h" +#include +#include +#include +#include + +#include + +#include "AppConfig.h" +#include "init_asrPlatform.h" +#include + +using namespace ::chip; +using namespace ::chip::Inet; +using namespace ::chip::DeviceLayer; +// ================================================================================ +// App Error +//================================================================================= +void appError(int err) +{ + ASR_LOG("!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); + lega_rtos_declare_critical(); + lega_rtos_enter_critical(); + while (1) + ; +} + +void appError(CHIP_ERROR error) +{ + appError(static_cast(error.AsInteger())); +} +// ================================================================================ +// Main Code +// ================================================================================ +int main(void) +{ + init_asrPlatform(); + + CHIP_ERROR ret = GetAppTask().StartAppTask(); + if (ret != CHIP_NO_ERROR) + { + ASR_LOG("GetAppTask().Init() failed"); + appError(ret); + } + /* Start the FreeRTOS scheduler */ + vTaskStartScheduler(); + + chip::Platform::MemoryShutdown(); + PlatformMgr().StopEventLoopTask(); + PlatformMgr().Shutdown(); + + // Should never get here. + ASR_LOG("vTaskStartScheduler() failed"); + appError(ret); +} diff --git a/examples/all-clusters-minimal-app/asr/third_party/connectedhomeip b/examples/all-clusters-minimal-app/asr/third_party/connectedhomeip new file mode 120000 index 00000000000000..11a54ed360106c --- /dev/null +++ b/examples/all-clusters-minimal-app/asr/third_party/connectedhomeip @@ -0,0 +1 @@ +../../../../ \ No newline at end of file diff --git a/examples/all-clusters-minimal-app/esp32/README.md b/examples/all-clusters-minimal-app/esp32/README.md deleted file mode 120000 index ded193451e596c..00000000000000 --- a/examples/all-clusters-minimal-app/esp32/README.md +++ /dev/null @@ -1 +0,0 @@ -../../all-clusters-app/esp32/README.md \ No newline at end of file diff --git a/examples/all-clusters-minimal-app/esp32/README.md b/examples/all-clusters-minimal-app/esp32/README.md new file mode 100644 index 00000000000000..6cb3f9093da13b --- /dev/null +++ b/examples/all-clusters-minimal-app/esp32/README.md @@ -0,0 +1,51 @@ +# CHIP ESP32 All Clusters Example + +A prototype application that demonstrates device commissioning and cluster +control. + +Please +[setup ESP-IDF and CHIP Environment](../../../docs/guides/esp32/setup_idf_chip.md) +and refer +[building and commissioning](../../../docs/guides/esp32/build_app_and_commission.md) +guides to get started. + +--- + +- [Cluster control](#cluster-control) +- [Matter OTA guide](../../../docs/guides/esp32/ota.md) +- [RPC console and Device Tracing](../../../docs/guides/esp32/rpc_console.md) + +--- + +### Cluster control + +#### onoff + +To use the Client to send Matter commands, run the built executable and pass it +the target cluster name, the target command name as well as an endpoint id. + +``` +$ ./out/debug/chip-tool onoff on +``` + +The client will send a single command packet and then exit. + +#### levelcontrol + +```bash +Usage: + $ ./out/debug/chip-tool levelcontrol move-to-level Level=10 TransitionTime=0 OptionMask=0 OptionOverride=0 +``` + +--- + +This demo app illustrates controlling OnOff cluster (Server) attributes of an +endpoint. For `ESP32-DevKitC`, `ESP32-WROVER-KIT_V4.1` and `ESP32C3-DevKitM`, a +GPIO (configurable through `STATUS_LED_GPIO_NUM` in `main/main.cpp`) is updated +through the on/off/toggle commands from the `python-controller`. For `M5Stack`, +a virtual Green LED on the display is used for the same. + +If you wish to see the actual effect of the commands on `ESP32-DevKitC`, +`ESP32-WROVER-KIT_V4.1`, you will have to connect an external LED to GPIO +`STATUS_LED_GPIO_NUM`. For `ESP32C3-DevKitM`, the on-board LED will show the +actual effect of the commands. diff --git a/examples/all-clusters-minimal-app/esp32/main/CMakeLists.txt b/examples/all-clusters-minimal-app/esp32/main/CMakeLists.txt index 9587e26f048d7d..d8d00a950ba892 100644 --- a/examples/all-clusters-minimal-app/esp32/main/CMakeLists.txt +++ b/examples/all-clusters-minimal-app/esp32/main/CMakeLists.txt @@ -67,7 +67,7 @@ set(SRC_DIRS_LIST "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/thermostat-user-interface-configuration-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/thread-network-diagnostics-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/channel-server" - "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/scenes" + "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/scenes-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/software-diagnostics-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/switch-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/general-diagnostics-server" diff --git a/examples/all-clusters-minimal-app/esp32/main/DeviceCallbacks.cpp b/examples/all-clusters-minimal-app/esp32/main/DeviceCallbacks.cpp index 333ec5886baba4..cff72337968ef4 100644 --- a/examples/all-clusters-minimal-app/esp32/main/DeviceCallbacks.cpp +++ b/examples/all-clusters-minimal-app/esp32/main/DeviceCallbacks.cpp @@ -53,18 +53,18 @@ void OnIdentifyTriggerEffect(Identify * identify) { switch (identify->mCurrentEffectIdentifier) { - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK: + case Clusters::Identify::EffectIdentifierEnum::kBlink: statusLED1.Blink(kIdentifyTimerDelayMS * 2); - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK"); + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBlink"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE"); + case Clusters::Identify::EffectIdentifierEnum::kBreathe: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBreathe"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY"); + case Clusters::Identify::EffectIdentifierEnum::kOkay: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kOkay"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE"); + case Clusters::Identify::EffectIdentifierEnum::kChannelChange: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kChannelChange"); break; default: ChipLogProgress(Zcl, "No identifier effect"); @@ -77,7 +77,7 @@ Identify gIdentify0 = { chip::EndpointId{ 0 }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStart"); }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, OnIdentifyTriggerEffect, }; @@ -85,7 +85,7 @@ Identify gIdentify1 = { chip::EndpointId{ 1 }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStart"); }, [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStop"); }, - EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, + Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, OnIdentifyTriggerEffect, }; diff --git a/examples/all-clusters-minimal-app/esp32/main/main.cpp b/examples/all-clusters-minimal-app/esp32/main/main.cpp index 989c221f6de5f9..f62a30a71d7a96 100644 --- a/examples/all-clusters-minimal-app/esp32/main/main.cpp +++ b/examples/all-clusters-minimal-app/esp32/main/main.cpp @@ -52,6 +52,8 @@ #endif #if CONFIG_OPENTHREAD_ENABLED +#include +#include #include #endif @@ -186,6 +188,13 @@ extern "C" void app_main() } #if CHIP_DEVICE_CONFIG_ENABLE_THREAD + esp_openthread_platform_config_t config = { + .radio_config = ESP_OPENTHREAD_DEFAULT_RADIO_CONFIG(), + .host_config = ESP_OPENTHREAD_DEFAULT_HOST_CONFIG(), + .port_config = ESP_OPENTHREAD_DEFAULT_PORT_CONFIG(), + }; + set_openthread_platform_config(&config); + if (DeviceLayer::ThreadStackMgr().InitThreadStack() != CHIP_NO_ERROR) { ESP_LOGE(TAG, "Failed to initialize Thread stack"); diff --git a/examples/all-clusters-minimal-app/esp32/sdkconfig_m5stack.defaults b/examples/all-clusters-minimal-app/esp32/sdkconfig_m5stack.defaults index d8d54e5eea03a8..a7d058bc7fe30a 100644 --- a/examples/all-clusters-minimal-app/esp32/sdkconfig_m5stack.defaults +++ b/examples/all-clusters-minimal-app/esp32/sdkconfig_m5stack.defaults @@ -67,3 +67,6 @@ CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=n # Enable HKDF in mbedtls CONFIG_MBEDTLS_HKDF_C=y + +# Build chip tests +CONFIG_BUILD_CHIP_TESTS=y diff --git a/examples/all-clusters-minimal-app/esp32/sdkconfig_m5stack_rpc.defaults b/examples/all-clusters-minimal-app/esp32/sdkconfig_m5stack_rpc.defaults index 35fd87ed9f690c..e0cf1a0f22a874 100644 --- a/examples/all-clusters-minimal-app/esp32/sdkconfig_m5stack_rpc.defaults +++ b/examples/all-clusters-minimal-app/esp32/sdkconfig_m5stack_rpc.defaults @@ -71,3 +71,6 @@ CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=n # Enable HKDF in mbedtls CONFIG_MBEDTLS_HKDF_C=y + +# Build chip tests +CONFIG_BUILD_CHIP_TESTS=y diff --git a/examples/all-clusters-minimal-app/linux/main-common.cpp b/examples/all-clusters-minimal-app/linux/main-common.cpp index 7ff4635b7ce9ed..fadc7fc7246ab8 100644 --- a/examples/all-clusters-minimal-app/linux/main-common.cpp +++ b/examples/all-clusters-minimal-app/linux/main-common.cpp @@ -56,17 +56,17 @@ void OnTriggerEffect(::Identify * identify) { switch (identify->mCurrentEffectIdentifier) { - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK"); + case Clusters::Identify::EffectIdentifierEnum::kBlink: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBlink"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE"); + case Clusters::Identify::EffectIdentifierEnum::kBreathe: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBreathe"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY"); + case Clusters::Identify::EffectIdentifierEnum::kOkay: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kOkay"); break; - case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE: - ChipLogProgress(Zcl, "EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE"); + case Clusters::Identify::EffectIdentifierEnum::kChannelChange: + ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kChannelChange"); break; default: ChipLogProgress(Zcl, "No identifier effect"); @@ -75,11 +75,13 @@ void OnTriggerEffect(::Identify * identify) } static Identify gIdentify0 = { - chip::EndpointId{ 0 }, OnIdentifyStart, OnIdentifyStop, EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, OnTriggerEffect, + chip::EndpointId{ 0 }, OnIdentifyStart, OnIdentifyStop, Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, + OnTriggerEffect, }; static Identify gIdentify1 = { - chip::EndpointId{ 1 }, OnIdentifyStart, OnIdentifyStop, EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, OnTriggerEffect, + chip::EndpointId{ 1 }, OnIdentifyStart, OnIdentifyStop, Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator, + OnTriggerEffect, }; // Network commissioning diff --git a/examples/all-clusters-minimal-app/nrfconnect/CMakeLists.txt b/examples/all-clusters-minimal-app/nrfconnect/CMakeLists.txt index 6fdc49b494018e..00ecc2ca2fbfc5 100644 --- a/examples/all-clusters-minimal-app/nrfconnect/CMakeLists.txt +++ b/examples/all-clusters-minimal-app/nrfconnect/CMakeLists.txt @@ -65,7 +65,7 @@ chip_configure_data_model(app ZAP_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../all-clusters-common/all-clusters-minimal-app.zap ) -if(CONFIG_CHIP_OTA_REQUESTOR OR CONFIG_MCUMGR_SMP_BT) +if(CONFIG_CHIP_OTA_REQUESTOR OR CONFIG_MCUMGR_TRANSPORT_BT) target_sources(app PRIVATE ${NRFCONNECT_COMMON}/util/OTAUtil.cpp) endif() diff --git a/examples/all-clusters-minimal-app/nrfconnect/main/AppTask.cpp b/examples/all-clusters-minimal-app/nrfconnect/main/AppTask.cpp index 19ce36436419b3..3307789c9e5989 100644 --- a/examples/all-clusters-minimal-app/nrfconnect/main/AppTask.cpp +++ b/examples/all-clusters-minimal-app/nrfconnect/main/AppTask.cpp @@ -279,7 +279,7 @@ void AppTask::FunctionHandler(const AppEvent & event) { Instance().CancelTimer(); -#ifdef CONFIG_MCUMGR_SMP_BT +#ifdef CONFIG_MCUMGR_TRANSPORT_BT GetDFUOverSMP().StartServer(); #else LOG_INF("Software update is disabled"); diff --git a/examples/all-clusters-minimal-app/nrfconnect/main/include/AppTask.h b/examples/all-clusters-minimal-app/nrfconnect/main/include/AppTask.h index 9921de58383521..0d5a9f1f1dc84f 100644 --- a/examples/all-clusters-minimal-app/nrfconnect/main/include/AppTask.h +++ b/examples/all-clusters-minimal-app/nrfconnect/main/include/AppTask.h @@ -28,7 +28,7 @@ #include #endif -#ifdef CONFIG_MCUMGR_SMP_BT +#ifdef CONFIG_MCUMGR_TRANSPORT_BT #include "DFUOverSMP.h" #endif diff --git a/examples/all-clusters-minimal-app/telink/include/AppConfig.h b/examples/all-clusters-minimal-app/telink/include/AppConfig.h index 10d4d5f281d67a..0575d9a70693a3 100644 --- a/examples/all-clusters-minimal-app/telink/include/AppConfig.h +++ b/examples/all-clusters-minimal-app/telink/include/AppConfig.h @@ -24,6 +24,4 @@ #define APP_USE_THREAD_START_BUTTON 0 #define APP_SET_DEVICE_INFO_PROVIDER 0 #define APP_SET_NETWORK_COMM_ENDPOINT_SEC 1 -#define APP_USE_IDENTIFY_PWM 0 // APP_USE_IDENTIFY_PWM must be defined before including "AppConfigCommon.h" - -#include "AppConfigCommon.h" +#define APP_USE_IDENTIFY_PWM 0 diff --git a/examples/android/CHIPTool/app/build.gradle b/examples/android/CHIPTool/app/build.gradle index bdbd03ff48d822..9f116f92d04cd4 100644 --- a/examples/android/CHIPTool/app/build.gradle +++ b/examples/android/CHIPTool/app/build.gradle @@ -5,6 +5,8 @@ apply plugin: 'kotlin-parcelize' android { compileSdkVersion 31 + ndkVersion "23.2.8568313" + defaultConfig { applicationId "com.google.chip.chiptool" minSdkVersion 24 diff --git a/examples/android/CHIPTool/app/src/main/cpp/native-lib.cpp b/examples/android/CHIPTool/app/src/main/cpp/native-lib.cpp index 4cf34c56cac0d4..4a0235adbff06e 100644 --- a/examples/android/CHIPTool/app/src/main/cpp/native-lib.cpp +++ b/examples/android/CHIPTool/app/src/main/cpp/native-lib.cpp @@ -24,13 +24,14 @@ #include #include #include +#include // This is just a sample function to demonstrate end-to-end calling in/out of CHIP stack // is working. std::string base38Encode(void) { - const uint8_t buf[6] = { 0, 1, 2, 3, 4, 5 }; - size_t size = 6; + const uint8_t buf[] = { 0, 1, 2, 3, 4, 5 }; + size_t size = ArraySize(buf); return chip::base38Encode(&buf[0], size); } diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/CHIPToolActivity.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/CHIPToolActivity.kt index 7797aef19fa233..59c75e2a976a59 100644 --- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/CHIPToolActivity.kt +++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/CHIPToolActivity.kt @@ -28,9 +28,9 @@ import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment -import chip.setuppayload.SetupPayload -import chip.setuppayload.SetupPayloadParser -import chip.setuppayload.SetupPayloadParser.UnrecognizedQrCodeException +import chip.onboardingpayload.OnboardingPayload +import chip.onboardingpayload.OnboardingPayloadParser +import chip.onboardingpayload.UnrecognizedQrCodeException import com.google.chip.chiptool.provisioning.AddressCommissioningFragment import com.google.chip.chiptool.provisioning.DeviceProvisioningFragment import com.google.chip.chiptool.provisioning.EnterNetworkFragment @@ -151,10 +151,10 @@ class CHIPToolActivity : val uri = records[0].toUri() if (!uri?.scheme.equals("mt", true)) return - lateinit var setupPayload: SetupPayload + lateinit var setupPayload: OnboardingPayload try { setupPayload = - SetupPayloadParser().parseQrCode(uri.toString().toUpperCase()) + OnboardingPayloadParser().parseQrCode(uri.toString().toUpperCase()) } catch (ex: UnrecognizedQrCodeException) { Log.e(TAG, "Unrecognized QR Code", ex) Toast.makeText(this, "Unrecognized QR Code", Toast.LENGTH_SHORT).show() @@ -208,10 +208,10 @@ class CHIPToolActivity : val payload = JSONObject(payloadString) // parse payload from JSON - val setupPayload = SetupPayload() + val setupPayload = OnboardingPayload() // set defaults setupPayload.discoveryCapabilities = setOf() - setupPayload.optionalQRCodeInfo = mapOf() + setupPayload.optionalQRCodeInfo = HashMap() // read from payload setupPayload.version = payload.getInt("version") diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/MultiAdminClientFragment.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/MultiAdminClientFragment.kt index ffff2139f7d2d9..ed7ba6f4f692f0 100644 --- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/MultiAdminClientFragment.kt +++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/MultiAdminClientFragment.kt @@ -8,10 +8,14 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import chip.devicecontroller.ChipDeviceController -import chip.devicecontroller.ClusterIDMapping +import chip.devicecontroller.ClusterIDMapping.AdministratorCommissioning import chip.devicecontroller.InvokeCallback import chip.devicecontroller.OpenCommissioningCallback +import chip.devicecontroller.ReportCallback +import chip.devicecontroller.model.ChipAttributePath +import chip.devicecontroller.model.ChipEventPath import chip.devicecontroller.model.InvokeElement +import chip.devicecontroller.model.NodeState import chip.tlv.AnonymousTag import chip.tlv.TlvWriter import com.google.chip.chiptool.ChipClient @@ -47,6 +51,9 @@ class MultiAdminClientFragment : Fragment() { binding.basicCommissioningMethodBtn.setOnClickListener { scope.launch { sendBasicCommissioningCommandClick() } } binding.enhancedCommissioningMethodBtn.setOnClickListener { scope.launch { sendEnhancedCommissioningCommandClick() } } binding.revokeBtn.setOnClickListener { scope.launch { sendRevokeCommandClick() } } + binding.readWindowStatusBtn.setOnClickListener { scope.launch { readAdministratorCommissioningClusterAttributeClick(AdministratorCommissioning.Attribute.WindowStatus) } } + binding.readAdminFabricIndexBtn.setOnClickListener { scope.launch { readAdministratorCommissioningClusterAttributeClick(AdministratorCommissioning.Attribute.AdminFabricIndex) } } + binding.readAdminVendorIdBtn.setOnClickListener { scope.launch { readAdministratorCommissioningClusterAttributeClick(AdministratorCommissioning.Attribute.AdminVendorId) } } return binding.root } @@ -137,9 +144,9 @@ class MultiAdminClientFragment : Fragment() { val tlvWriter = TlvWriter() tlvWriter.startStructure(AnonymousTag) tlvWriter.endStructure() - val invokeElement = InvokeElement.newInstance(0 - , ClusterIDMapping.AdministratorCommissioning.ID - , ClusterIDMapping.AdministratorCommissioning.Command.RevokeCommissioning.id + val invokeElement = InvokeElement.newInstance(ADMINISTRATOR_COMMISSIONING_CLUSTER_ENDPOINT_ID + , AdministratorCommissioning.ID + , AdministratorCommissioning.Command.RevokeCommissioning.id , tlvWriter.getEncoded(), null) deviceController.invoke(object: InvokeCallback { @@ -156,6 +163,25 @@ class MultiAdminClientFragment : Fragment() { }, getConnectedDevicePointer(), invokeElement, timedInvokeTimeout, 0) } + private suspend fun readAdministratorCommissioningClusterAttributeClick(attribute: AdministratorCommissioning.Attribute) { + val endpointId = ADMINISTRATOR_COMMISSIONING_CLUSTER_ENDPOINT_ID + val clusterId = AdministratorCommissioning.ID + val attributeId = attribute.id + val attributeName = attribute.name + val attributePath = ChipAttributePath.newInstance(endpointId, clusterId, attributeId) + deviceController.readAttributePath(object: ReportCallback { + override fun onReport(nodeState: NodeState?) { + val value = nodeState?.getEndpointState(endpointId)?.getClusterState(clusterId)?.getAttributeState(attributeId)?.value ?: "null" + Log.i(TAG,"read $attributeName: $value") + showMessage("read $attributeName: $value") + } + + override fun onError(attributePath: ChipAttributePath?, eventPath: ChipEventPath?, e: Exception) { + showMessage("read $attributeName - error : ${e?.message}") + } + }, getConnectedDevicePointer(), listOf(attributePath), 0) + } + private suspend fun getConnectedDevicePointer(): Long { return ChipClient.getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId) } @@ -168,6 +194,7 @@ class MultiAdminClientFragment : Fragment() { companion object { private const val TAG = "MultiAdminClientFragment" + private const val ADMINISTRATOR_COMMISSIONING_CLUSTER_ENDPOINT_ID = 0 fun newInstance(): MultiAdminClientFragment = MultiAdminClientFragment() } } diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/OpCredClientFragment.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/OpCredClientFragment.kt index 15fe990b6a6c4e..02dc9912c5597f 100644 --- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/OpCredClientFragment.kt +++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/OpCredClientFragment.kt @@ -15,11 +15,16 @@ import com.google.chip.chiptool.databinding.OpCredClientFragmentBinding import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import chip.devicecontroller.ClusterIDMapping.* +import chip.devicecontroller.ClusterIDMapping.OperationalCredentials +import chip.devicecontroller.InvokeCallback import chip.devicecontroller.ReportCallback import chip.devicecontroller.model.ChipAttributePath import chip.devicecontroller.model.ChipEventPath +import chip.devicecontroller.model.InvokeElement import chip.devicecontroller.model.NodeState +import chip.tlv.AnonymousTag +import chip.tlv.ContextSpecificTag +import chip.tlv.TlvWriter class OpCredClientFragment : Fragment() { private val deviceController: ChipDeviceController @@ -47,6 +52,8 @@ class OpCredClientFragment : Fragment() { binding.readSupportedFabricBtn.setOnClickListener { scope.launch { readClusterAttribute(OperationalCredentials.Attribute.SupportedFabrics) } } binding.readCommissionedFabricBtn.setOnClickListener { scope.launch { readClusterAttribute(OperationalCredentials.Attribute.CommissionedFabrics) } } + binding.readFabricsBtn.setOnClickListener { scope.launch { readClusterAttribute(OperationalCredentials.Attribute.Fabrics) } } + binding.removeFabricsBtn.setOnClickListener { scope.launch { sendRemoveFabricsBtnClick(binding.fabricIndexEd.text.toString().toUInt()) } } return binding.root } @@ -99,6 +106,32 @@ class OpCredClientFragment : Fragment() { }, devicePtr, listOf(ChipAttributePath.newInstance(endpointId, clusterId, attributeId)), null, false, 0 /* imTimeoutMs */) } + private suspend fun sendRemoveFabricsBtnClick(fabricIndex: UInt) { + val devicePtr = ChipClient.getConnectedDevicePointer(requireContext(), addressUpdateFragment.deviceId) + // TODO : Need to be implement poj-to-tlv + val tlvWriter = TlvWriter() + tlvWriter.startStructure(AnonymousTag) + tlvWriter.put(ContextSpecificTag(OperationalCredentials.RemoveFabricCommandField.FabricIndex.id), fabricIndex) + tlvWriter.endStructure() + val invokeElement = InvokeElement.newInstance(addressUpdateFragment.endpointId + , OperationalCredentials.ID + , OperationalCredentials.Command.RemoveFabric.id + , tlvWriter.getEncoded(), null) + + deviceController.invoke(object: InvokeCallback { + override fun onError(ex: Exception?) { + showMessage("RemoveFabric failure $ex") + Log.e(TAG, "RemoveFabric failure", ex) + } + + override fun onResponse(invokeElement: InvokeElement?, successCode: Long) { + Log.e(TAG, "onResponse : $invokeElement, Code : $successCode") + showMessage("RemoveFabric success") + } + + }, devicePtr, invokeElement, 0, 0) + } + private fun showMessage(msg: String) { requireActivity().runOnUiThread { binding.opCredClusterCommandStatus.text = msg diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/BarcodeFragment.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/BarcodeFragment.kt index e591fd64ebd948..0e911d3233d278 100644 --- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/BarcodeFragment.kt +++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/BarcodeFragment.kt @@ -36,11 +36,10 @@ import androidx.camera.lifecycle.ProcessCameraProvider import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat.checkSelfPermission import androidx.fragment.app.Fragment -import chip.setuppayload.SetupPayload -import chip.setuppayload.SetupPayloadParser -import chip.setuppayload.SetupPayloadParser.SetupPayloadException -import chip.setuppayload.SetupPayloadParser.InvalidEntryCodeFormatException -import chip.setuppayload.SetupPayloadParser.UnrecognizedQrCodeException +import chip.onboardingpayload.OnboardingPayload +import chip.onboardingpayload.OnboardingPayloadException +import chip.onboardingpayload.OnboardingPayloadParser +import chip.onboardingpayload.UnrecognizedQrCodeException import com.google.chip.chiptool.R import com.google.chip.chiptool.SelectActionFragment import com.google.chip.chiptool.databinding.BarcodeFragmentBinding @@ -182,14 +181,12 @@ class BarcodeFragment : Fragment() { } private fun handleInputQrCode(qrCode: String) { - lateinit var payload: SetupPayload - var isShortDiscriminator = false + lateinit var payload: OnboardingPayload try { - payload = SetupPayloadParser().parseQrCode(qrCode) - } catch (ex: SetupPayloadException) { + payload = OnboardingPayloadParser().parseQrCode(qrCode) + } catch (ex: OnboardingPayloadException) { try { - payload = SetupPayloadParser().parseManualEntryCode(qrCode) - isShortDiscriminator = true + payload = OnboardingPayloadParser().parseManualPairingCode(qrCode) } catch (ex: Exception) { Log.e(TAG, "Unrecognized Manual Pairing Code", ex) Toast.makeText(requireContext(), "Unrecognized Manual Pairing Code", Toast.LENGTH_SHORT).show() @@ -199,14 +196,14 @@ class BarcodeFragment : Fragment() { Toast.makeText(requireContext(), "Unrecognized QR Code", Toast.LENGTH_SHORT).show() } FragmentUtil.getHost(this@BarcodeFragment, Callback::class.java) - ?.onCHIPDeviceInfoReceived(CHIPDeviceInfo.fromSetupPayload(payload, isShortDiscriminator)) + ?.onCHIPDeviceInfoReceived(CHIPDeviceInfo.fromSetupPayload(payload)) } private fun handleScannedQrCode(barcode: Barcode) { Handler(Looper.getMainLooper()).post { - lateinit var payload: SetupPayload + lateinit var payload: OnboardingPayload try { - payload = SetupPayloadParser().parseQrCode(barcode.displayValue) + payload = barcode.displayValue?.let { OnboardingPayloadParser().parseQrCode(it) } ?: return@post } catch (ex: UnrecognizedQrCodeException) { Log.e(TAG, "Unrecognized QR Code", ex) Toast.makeText(requireContext(), "Unrecognized QR Code", Toast.LENGTH_SHORT).show() diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/CHIPDeviceInfo.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/CHIPDeviceInfo.kt index d4a76221365080..fc57a96c222ab5 100644 --- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/CHIPDeviceInfo.kt +++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/CHIPDeviceInfo.kt @@ -19,8 +19,8 @@ package com.google.chip.chiptool.setuppayloadscanner import android.os.Parcelable -import chip.setuppayload.DiscoveryCapability -import chip.setuppayload.SetupPayload +import chip.onboardingpayload.DiscoveryCapability +import chip.onboardingpayload.OnboardingPayload import kotlinx.parcelize.Parcelize /** Class to hold the CHIP device information. */ @@ -36,16 +36,15 @@ data class CHIPDeviceInfo( val discoveryCapabilities: Set = setOf(), val isShortDiscriminator: Boolean = false, val ipAddress: String? = null, - ) : Parcelable { companion object { - fun fromSetupPayload(setupPayload: SetupPayload, isShortDiscriminator: Boolean = false): CHIPDeviceInfo { + fun fromSetupPayload(setupPayload: OnboardingPayload): CHIPDeviceInfo { return CHIPDeviceInfo( setupPayload.version, setupPayload.vendorId, setupPayload.productId, - setupPayload.discriminator, + setupPayload.getLongDiscriminatorValue(), setupPayload.setupPinCode, setupPayload.commissioningFlow, setupPayload.optionalQRCodeInfo.mapValues { (_, info) -> @@ -57,7 +56,7 @@ data class CHIPDeviceInfo( ) }, setupPayload.discoveryCapabilities, - isShortDiscriminator + setupPayload.hasShortDiscriminator ) } } diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/QrCodeInfo.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/QrCodeInfo.kt index 5ad27868b95ea0..c9b2367ee998ba 100644 --- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/QrCodeInfo.kt +++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/QrCodeInfo.kt @@ -1,13 +1,13 @@ package com.google.chip.chiptool.setuppayloadscanner import android.os.Parcelable -import chip.setuppayload.OptionalQRCodeInfo.OptionalQRCodeInfoType +import chip.onboardingpayload.OptionalQRCodeInfo.OptionalQRCodeInfoType import kotlinx.parcelize.Parcelize @Parcelize data class QrCodeInfo( val tag: Int, val type: OptionalQRCodeInfoType, - val data: String, + val data: String?, val intDataValue: Int ) : Parcelable diff --git a/examples/android/CHIPTool/app/src/main/res/layout/multi_admin_client_fragment.xml b/examples/android/CHIPTool/app/src/main/res/layout/multi_admin_client_fragment.xml index 95e5458f8164b0..7066cf892626f7 100644 --- a/examples/android/CHIPTool/app/src/main/res/layout/multi_admin_client_fragment.xml +++ b/examples/android/CHIPTool/app/src/main/res/layout/multi_admin_client_fragment.xml @@ -80,12 +80,45 @@ app:layout_constraintEnd_toEndOf="parent" android:text="@string/revoke_btn_text" /> +