diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 490d7e79d741d0..f14a16f5e017b1 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -16,8 +16,9 @@ name: Builds
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
diff --git a/.github/workflows/chef.yaml b/.github/workflows/chef.yaml
index ca3f42e47c24e5..a1e5907cb91a70 100644
--- a/.github/workflows/chef.yaml
+++ b/.github/workflows/chef.yaml
@@ -16,8 +16,9 @@ name: Build Chef CI examples on all platforms
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/cirque.yaml b/.github/workflows/cirque.yaml
index 6fe17c3558c767..083b35062990e6 100644
--- a/.github/workflows/cirque.yaml
+++ b/.github/workflows/cirque.yaml
@@ -16,8 +16,9 @@ name: Cirque
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
diff --git a/.github/workflows/darwin-tests.yaml b/.github/workflows/darwin-tests.yaml
index 6178273668cba1..1ddc9e9fbc42a6 100644
--- a/.github/workflows/darwin-tests.yaml
+++ b/.github/workflows/darwin-tests.yaml
@@ -16,8 +16,9 @@ name: Darwin Tests
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
diff --git a/.github/workflows/darwin.yaml b/.github/workflows/darwin.yaml
index 4c25026840e5d1..bc4441a84f1c23 100644
--- a/.github/workflows/darwin.yaml
+++ b/.github/workflows/darwin.yaml
@@ -16,8 +16,9 @@ name: Darwin
on:
push:
- branches-ignore:
- - "dependabot/**"
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
diff --git a/.github/workflows/doxygen.yaml b/.github/workflows/doxygen.yaml
index e255ddce53977f..9dc5bbab1ac574 100644
--- a/.github/workflows/doxygen.yaml
+++ b/.github/workflows/doxygen.yaml
@@ -16,6 +16,9 @@ name: Doxygen
on:
push:
+ branches:
+ - master
+ - 'v*-branch'
paths:
- "**.do[xc]"
- "**.c[cs]?"
diff --git a/.github/workflows/example-tv-casting-darwin.yaml b/.github/workflows/example-tv-casting-darwin.yaml
index d8b7b7895e250e..1528d87c448e8b 100644
--- a/.github/workflows/example-tv-casting-darwin.yaml
+++ b/.github/workflows/example-tv-casting-darwin.yaml
@@ -16,8 +16,9 @@ name: TV Casting Example - Darwin
on:
push:
- branches-ignore:
- - "dependabot/**"
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
diff --git a/.github/workflows/examples-ameba.yaml b/.github/workflows/examples-ameba.yaml
index c2bb69cd6f2b4e..1c87787cf67ecc 100644
--- a/.github/workflows/examples-ameba.yaml
+++ b/.github/workflows/examples-ameba.yaml
@@ -16,8 +16,9 @@ name: Build example - Ameba
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-asr.yaml b/.github/workflows/examples-asr.yaml
index 531709a3024844..7597ef1783eea4 100644
--- a/.github/workflows/examples-asr.yaml
+++ b/.github/workflows/examples-asr.yaml
@@ -16,8 +16,9 @@ name: Build example - ASR
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-bouffalolab.yaml b/.github/workflows/examples-bouffalolab.yaml
index 3ff00c6c3eff1b..9a6989881e5e0c 100644
--- a/.github/workflows/examples-bouffalolab.yaml
+++ b/.github/workflows/examples-bouffalolab.yaml
@@ -16,8 +16,9 @@ name: Build example - BouffaloLab
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
diff --git a/.github/workflows/examples-cc13xx_26xx.yaml b/.github/workflows/examples-cc13xx_26xx.yaml
index 80184cb4b438cf..31988e66385236 100644
--- a/.github/workflows/examples-cc13xx_26xx.yaml
+++ b/.github/workflows/examples-cc13xx_26xx.yaml
@@ -16,8 +16,9 @@ name: Build example - TI CC13XX_26XX
on:
push:
- branches-ignore:
- - "dependabot/**"
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-cc32xx.yaml b/.github/workflows/examples-cc32xx.yaml
index 537621bcf34b9d..24edcb3fa92603 100644
--- a/.github/workflows/examples-cc32xx.yaml
+++ b/.github/workflows/examples-cc32xx.yaml
@@ -17,8 +17,9 @@ name: Build example - TI CC32XX
on:
workflow_dispatch:
push:
- branches-ignore:
- - "dependabot/**"
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-efr32.yaml b/.github/workflows/examples-efr32.yaml
index 498a250dc9e027..6d286355970cce 100644
--- a/.github/workflows/examples-efr32.yaml
+++ b/.github/workflows/examples-efr32.yaml
@@ -16,8 +16,9 @@ name: Build example - EFR32
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-esp32.yaml b/.github/workflows/examples-esp32.yaml
index dc1446a93fb833..a2dca96dc6dd24 100644
--- a/.github/workflows/examples-esp32.yaml
+++ b/.github/workflows/examples-esp32.yaml
@@ -16,8 +16,9 @@ name: Build example - ESP32
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-infineon.yaml b/.github/workflows/examples-infineon.yaml
index 9a3b4191c036a5..ada44f1557baaf 100644
--- a/.github/workflows/examples-infineon.yaml
+++ b/.github/workflows/examples-infineon.yaml
@@ -16,8 +16,9 @@ name: Build example - Infineon
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
diff --git a/.github/workflows/examples-linux-arm.yaml b/.github/workflows/examples-linux-arm.yaml
index f93e295011bd02..7000082f03e32e 100644
--- a/.github/workflows/examples-linux-arm.yaml
+++ b/.github/workflows/examples-linux-arm.yaml
@@ -16,8 +16,9 @@ name: Build example - Linux ARM
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
@@ -64,7 +65,7 @@ jobs:
--target linux-arm64-chip-tool-nodeps-ipv6only \
--target linux-arm64-lock-clang \
--target linux-arm64-minmdns-clang \
- --target linux-arm64-light-rpc-ipv6only-clang \
+ --target linux-arm64-light-data-model-enabled-rpc-ipv6only-clang \
--target linux-arm64-thermostat-no-ble-clang \
--target linux-arm64-lit-icd-no-ble-clang \
--target linux-arm64-fabric-admin-clang-rpc \
diff --git a/.github/workflows/examples-linux-imx.yaml b/.github/workflows/examples-linux-imx.yaml
index f964f07f1e0918..d2f1014eb576cf 100644
--- a/.github/workflows/examples-linux-imx.yaml
+++ b/.github/workflows/examples-linux-imx.yaml
@@ -16,8 +16,9 @@ name: Build example - i.MX Linux
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-linux-standalone.yaml b/.github/workflows/examples-linux-standalone.yaml
index ff3762c2118d4c..83b82369ba4878 100644
--- a/.github/workflows/examples-linux-standalone.yaml
+++ b/.github/workflows/examples-linux-standalone.yaml
@@ -16,8 +16,9 @@ name: Build example - Linux Standalone
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-linux-tv-casting-app.yaml b/.github/workflows/examples-linux-tv-casting-app.yaml
index 64000e45f45b48..e2617aeec7f42e 100644
--- a/.github/workflows/examples-linux-tv-casting-app.yaml
+++ b/.github/workflows/examples-linux-tv-casting-app.yaml
@@ -16,8 +16,9 @@ name: Test TV Casting Example
on:
push:
- branches-ignore:
- - "dependabot/**"
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-mw320.yaml b/.github/workflows/examples-mw320.yaml
index 45daa41dcef2d3..8f76321a0c0242 100644
--- a/.github/workflows/examples-mw320.yaml
+++ b/.github/workflows/examples-mw320.yaml
@@ -16,8 +16,9 @@ name: Build example - MW320
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-nrfconnect.yaml b/.github/workflows/examples-nrfconnect.yaml
index 19fdeca62dc1a8..d781087fc84760 100644
--- a/.github/workflows/examples-nrfconnect.yaml
+++ b/.github/workflows/examples-nrfconnect.yaml
@@ -16,8 +16,9 @@ name: Build example - nRF Connect SDK
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-nuttx.yaml b/.github/workflows/examples-nuttx.yaml
index 6006cea181d98c..f1f682e00898f6 100644
--- a/.github/workflows/examples-nuttx.yaml
+++ b/.github/workflows/examples-nuttx.yaml
@@ -16,6 +16,9 @@ name: Build example - NuttX
on:
push:
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
diff --git a/.github/workflows/examples-nxp.yaml b/.github/workflows/examples-nxp.yaml
index c03b9a118c39fd..6354718f25b700 100644
--- a/.github/workflows/examples-nxp.yaml
+++ b/.github/workflows/examples-nxp.yaml
@@ -16,8 +16,9 @@ name: Build example - NXP
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-qpg.yaml b/.github/workflows/examples-qpg.yaml
index e0cf4c6ecf8a4b..312c49329283cd 100644
--- a/.github/workflows/examples-qpg.yaml
+++ b/.github/workflows/examples-qpg.yaml
@@ -16,8 +16,9 @@ name: Build example - QPG
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-stm32.yaml b/.github/workflows/examples-stm32.yaml
index c0bc9af19a95bd..2e8f8576735bfe 100644
--- a/.github/workflows/examples-stm32.yaml
+++ b/.github/workflows/examples-stm32.yaml
@@ -16,8 +16,9 @@ name: Build example - stm32
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-telink.yaml b/.github/workflows/examples-telink.yaml
index 757f11254b530a..64b3d6bb7c93ce 100644
--- a/.github/workflows/examples-telink.yaml
+++ b/.github/workflows/examples-telink.yaml
@@ -16,8 +16,9 @@ name: Build example - Telink
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/examples-tizen.yaml b/.github/workflows/examples-tizen.yaml
index 8c6024ee1f57d9..f0e4dfb3a206dd 100644
--- a/.github/workflows/examples-tizen.yaml
+++ b/.github/workflows/examples-tizen.yaml
@@ -16,8 +16,9 @@ name: Build example - Tizen
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/full-android.yaml b/.github/workflows/full-android.yaml
index 54561c68e28144..c3871ad8815152 100644
--- a/.github/workflows/full-android.yaml
+++ b/.github/workflows/full-android.yaml
@@ -16,8 +16,9 @@ name: Full builds - Android
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
workflow_dispatch:
concurrency:
diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml
index ab3f49942329ce..ba0ade69c91b2c 100644
--- a/.github/workflows/gradle-wrapper-validation.yml
+++ b/.github/workflows/gradle-wrapper-validation.yml
@@ -1,8 +1,9 @@
name: "Validate Gradle Wrapper"
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
jobs:
diff --git a/.github/workflows/java-tests.yaml b/.github/workflows/java-tests.yaml
index cc6dbc90606446..abf2e75027b489 100644
--- a/.github/workflows/java-tests.yaml
+++ b/.github/workflows/java-tests.yaml
@@ -16,8 +16,9 @@ name: Java Tests
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index ddcfed3607af90..a914e5ae369b50 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -16,8 +16,9 @@ name: Lint Code Base
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
diff --git a/.github/workflows/minimal-build.yaml b/.github/workflows/minimal-build.yaml
index 5e364f32d671d9..dae8a2b8ce0a7f 100644
--- a/.github/workflows/minimal-build.yaml
+++ b/.github/workflows/minimal-build.yaml
@@ -16,8 +16,9 @@ name: Minimal Build (Linux / configure)
on:
push:
- branches-ignore:
- - "dependabot/**"
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/qemu.yaml b/.github/workflows/qemu.yaml
index f21903dd9fb542..b3115f2ff3113a 100644
--- a/.github/workflows/qemu.yaml
+++ b/.github/workflows/qemu.yaml
@@ -16,8 +16,9 @@ name: QEMU
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/restyled.yml b/.github/workflows/restyled.yml
new file mode 100644
index 00000000000000..9174483ecb7069
--- /dev/null
+++ b/.github/workflows/restyled.yml
@@ -0,0 +1,35 @@
+name: Restyled
+
+on:
+ pull_request:
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ restyled:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - uses: restyled-io/actions/setup@v4
+ - id: restyler
+ uses: restyled-io/actions/run@v4
+ with:
+ fail-on-differences: true
+
+ - if: |
+ !cancelled() &&
+ steps.restyler.outputs.success == 'true' &&
+ github.event.pull_request.head.repo.full_name == github.repository
+ uses: peter-evans/create-pull-request@v6
+ with:
+ base: ${{ steps.restyler.outputs.restyled-base }}
+ branch: ${{ steps.restyler.outputs.restyled-head }}
+ title: ${{ steps.restyler.outputs.restyled-title }}
+ body: ${{ steps.restyler.outputs.restyled-body }}
+ labels: "restyled"
+ reviewers: ${{ github.event.pull_request.user.login }}
+ delete-branch: true
diff --git a/.github/workflows/spell.yml b/.github/workflows/spell.yml
index f37a0e28711c6f..fa0fc222c8daa4 100644
--- a/.github/workflows/spell.yml
+++ b/.github/workflows/spell.yml
@@ -16,8 +16,9 @@ name: Run misspell
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
paths:
- "**.md"
- ".github/.wordlist.txt"
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index e0904bb5162998..c96c4ea023a59d 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -16,8 +16,9 @@ name: Tests
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
workflow_dispatch:
@@ -198,6 +199,7 @@ jobs:
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/water-heater-management-cluster.xml \
+ src/app/zap-templates/zcl/data-model/chip/webrtc-requestor-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/wifi-network-diagnostics-cluster.xml \
src/app/zap-templates/zcl/data-model/chip/wifi-network-management-cluster.xml \
diff --git a/.github/workflows/unit_integration_test.yaml b/.github/workflows/unit_integration_test.yaml
index e593630fa58951..b51dfaa8fc2fde 100644
--- a/.github/workflows/unit_integration_test.yaml
+++ b/.github/workflows/unit_integration_test.yaml
@@ -16,8 +16,9 @@ name: Unit / Integration Tests
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.github/workflows/zap_templates.yaml b/.github/workflows/zap_templates.yaml
index 45a3611691a535..717f8ca95628fa 100644
--- a/.github/workflows/zap_templates.yaml
+++ b/.github/workflows/zap_templates.yaml
@@ -16,8 +16,9 @@ name: ZAP
on:
push:
- branches-ignore:
- - 'dependabot/**'
+ branches:
+ - master
+ - 'v*-branch'
pull_request:
merge_group:
diff --git a/.pullapprove.yml b/.pullapprove.yml
index 83d7b70b34eb65..8a81d7da1e60f0 100644
--- a/.pullapprove.yml
+++ b/.pullapprove.yml
@@ -8,257 +8,257 @@ github_api_version: "shadow-cat-preview"
############################################################
overrides:
- - if: "'hotfix' in labels"
- status: success
- explanation: "Hotfix label added, bypassing reviews"
+ - if: "'hotfix' in labels"
+ status: success
+ explanation: "Hotfix label added, bypassing reviews"
- ############################################################
- # Draft PRs
- ############################################################
- - if: "draft"
- status: pending
- explanation: "PR is draft, pending review"
+ ############################################################
+ # Draft PRs
+ ############################################################
+ - if: "draft"
+ status: pending
+ explanation: "PR is draft, pending review"
- ############################################################
- # License Checks
- ############################################################
- - if: "'*license/cla*' not in statuses.successful"
- status: pending
- explanation: "CLA must be agreed to by all contributors"
+ ############################################################
+ # License Checks
+ ############################################################
+ - if: "'*license/cla*' not in statuses.successful"
+ status: pending
+ explanation: "CLA must be agreed to by all contributors"
- ############################################################
- # Conditions to Skip Review
- ############################################################
- - if: "base.ref != 'master'"
- status: success
- explanation: "Review not required unless merging to master"
+ ############################################################
+ # Conditions to Skip Review
+ ############################################################
+ - if: "base.ref != 'master'"
+ status: success
+ explanation: "Review not required unless merging to master"
- ############################################################
- # Required status checks
- ############################################################
- - if: "'*restyle*' not in statuses.successful"
- status: failure
- explanation: "Style must be inline before reviewing can be complete"
+ ############################################################
+ # Required status checks
+ ############################################################
+ - if: "'restyled' not in check_runs.successful"
+ status: failure
+ explanation: "Restyled workflow must be successful"
- ############################################################
- # Require Issues
- ############################################################
- # disabling until we have PRs up to date
- # - if: "'*issue*' not in statuses.successful"
- # status: failure
- # explanation: "An issue is required for all PRs"
+ ############################################################
+ # Require Issues
+ ############################################################
+ # disabling until we have PRs up to date
+ # - if: "'*issue*' not in statuses.successful"
+ # status: failure
+ # explanation: "An issue is required for all PRs"
- ############################################################
- # Fast tracking
- ############################################################
- - if: "'fast track' in labels"
- status: success
- explanation: "PR has been fast tracked, bypassing reviews"
+ ############################################################
+ # Fast tracking
+ ############################################################
+ - if: "'fast track' in labels"
+ status: success
+ explanation: "PR has been fast tracked, bypassing reviews"
############################################################
# Notifications
############################################################
notifications:
- ############################################################
- # New contributors
- ############################################################
- - when: pull_request.opened
- if: "author_association == 'FIRST_TIME_CONTRIBUTOR'"
- comment: |
- Hey @{{ author }}, thanks for the PR! The review will start once
- the tests and CI checks have passed. If they don't, please review
- the logs and try to fix the issues (ask for help if you can't
- figure it out). A reviewer will be assigned once the tests are
- passing and they'll walk you through getting the PR finished
- and merged.
+ ############################################################
+ # New contributors
+ ############################################################
+ - when: pull_request.opened
+ if: "author_association == 'FIRST_TIME_CONTRIBUTOR'"
+ comment: |
+ Hey @{{ author }}, thanks for the PR! The review will start once
+ the tests and CI checks have passed. If they don't, please review
+ the logs and try to fix the issues (ask for help if you can't
+ figure it out). A reviewer will be assigned once the tests are
+ passing and they'll walk you through getting the PR finished
+ and merged.
groups:
- ############################################################
- # Shared Reviewer Groups
- ############################################################
- shared-reviewers-amazon:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-amazon]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-apple:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-apple]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-bosch:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-bosch]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-comcast:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-comcast]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-dyson:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-dyson]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-espressif:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-espressif]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-google:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-google]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-grundfos:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-grundfos]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-irobot:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-irobot]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-lg:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-lg]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-logitech:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-logitech]
- reviews:
- request: 0 # Requested to be only on demand
- shared-reviewers-nordic:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-nordic]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-nxp:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-nxp]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-samsung:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-samsung]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-eve:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-eve]
- reviews:
- request: 0 # Do not auto-add
- # shared-reviewers-signify disabled for now, because the reviewers-signify
- # team is empty and pullapprove seems to mis-handle that badly and treats
- # _all_ reviewers as being in this group.
- #
- # See https://github.com/dropseed/pullapprove/issues/71
- #
- # shared-reviewers-signify:
- # type: optional
- # conditions:
- # - files.include('*')
- # reviewers:
- # teams: [reviewers-signify]
- # reviews:
- # request: 0 # Do not auto-add
- shared-reviewers-silabs:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-silabs]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-somfy:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-somfy]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-tcl:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-tcl]
- reviews:
- request: 0 # Do not auto-add
- shared-reviewers-qorvo:
- type: optional
- conditions:
- - files.include('*')
- reviewers:
- teams: [reviewers-qorvo]
- reviews:
- request: 0 # Do not auto-add
+ ############################################################
+ # Shared Reviewer Groups
+ ############################################################
+ shared-reviewers-amazon:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-amazon]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-apple:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-apple]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-bosch:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-bosch]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-comcast:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-comcast]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-dyson:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-dyson]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-espressif:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-espressif]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-google:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-google]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-grundfos:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-grundfos]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-irobot:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-irobot]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-lg:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-lg]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-logitech:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-logitech]
+ reviews:
+ request: 0 # Requested to be only on demand
+ shared-reviewers-nordic:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-nordic]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-nxp:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-nxp]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-samsung:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-samsung]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-eve:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-eve]
+ reviews:
+ request: 0 # Do not auto-add
+ # shared-reviewers-signify disabled for now, because the reviewers-signify
+ # team is empty and pullapprove seems to mis-handle that badly and treats
+ # _all_ reviewers as being in this group.
+ #
+ # See https://github.com/dropseed/pullapprove/issues/71
+ #
+ # shared-reviewers-signify:
+ # type: optional
+ # conditions:
+ # - files.include('*')
+ # reviewers:
+ # teams: [reviewers-signify]
+ # reviews:
+ # request: 0 # Do not auto-add
+ shared-reviewers-silabs:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-silabs]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-somfy:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-somfy]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-tcl:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-tcl]
+ reviews:
+ request: 0 # Do not auto-add
+ shared-reviewers-qorvo:
+ type: optional
+ conditions:
+ - files.include('*')
+ reviewers:
+ teams: [reviewers-qorvo]
+ reviews:
+ request: 0 # Do not auto-add
- ############################################################
- # Base Required Reviewers
- ############################################################
- required-reviewers:
- description: >
- [Required
- Reviewers](https://github.com/project-chip/connectedhomeip/blob/master/CONTRIBUTING.md#review-requirements)
- This is the main group of required reviews for general pull
- requests.
- type: required
- requirements:
- - len(groups.approved.include('shared-reviewers-*')) >= 2
- reviews:
- required: 0
- labels:
- approved: "review - approved"
- pending: "review - pending"
- rejected: "review - changed requested"
+ ############################################################
+ # Base Required Reviewers
+ ############################################################
+ required-reviewers:
+ description: >
+ [Required
+ Reviewers](https://github.com/project-chip/connectedhomeip/blob/master/CONTRIBUTING.md#review-requirements)
+ This is the main group of required reviews for general pull
+ requests.
+ type: required
+ requirements:
+ - len(groups.approved.include('shared-reviewers-*')) >= 2
+ reviews:
+ required: 0
+ labels:
+ approved: "review - approved"
+ pending: "review - pending"
+ rejected: "review - changed requested"
diff --git a/config/esp32/components/chip/CMakeLists.txt b/config/esp32/components/chip/CMakeLists.txt
index f7685cf760a7a3..fde62765dda808 100644
--- a/config/esp32/components/chip/CMakeLists.txt
+++ b/config/esp32/components/chip/CMakeLists.txt
@@ -143,9 +143,6 @@ endif()
if(CONFIG_ENABLE_ICD_SERVER)
chip_gn_arg_append("chip_enable_icd_server" "true")
- if(CONFIG_ICD_ENFORCE_SIT_SLOW_POLL_LIMIT)
- chip_gn_arg_append("icd_enforce_sit_slow_poll_limit" "true")
- endif()
if(CONFIG_ICD_REPORT_ON_ACTIVE_MODE)
chip_gn_arg_append("chip_icd_report_on_active_mode" "true")
endif()
diff --git a/config/esp32/components/chip/Kconfig b/config/esp32/components/chip/Kconfig
index 5c36284f072cd4..c61ac770a608ff 100644
--- a/config/esp32/components/chip/Kconfig
+++ b/config/esp32/components/chip/Kconfig
@@ -32,7 +32,7 @@ menu "CHIP Core"
default 8
help
The maximum number of simultaneously active CHIP exchange contexts.
-
+
An exchange context object is used to track the state of an ongoing CHIP message
exchange (conversation) with a peer, e.g. a cloud service, a mobile application, or
another device.
@@ -410,13 +410,6 @@ menu "CHIP Device Layer"
help
Enables or Disables ICD server
- config ICD_ENFORCE_SIT_SLOW_POLL_LIMIT
- bool "Enforce SIT Slow Polling Max value to 15 seconds"
- depends on ENABLE_ICD_SERVER
- default n
- help
- Set to true to enforce SIT Slow Polling Max value to 15seconds
-
config ICD_REPORT_ON_ACTIVE_MODE
bool "Emit a report on entering active mode"
depends on ENABLE_ICD_SERVER
diff --git a/config/nrfconnect/chip-module/CMakeLists.txt b/config/nrfconnect/chip-module/CMakeLists.txt
index 3896ed6be7d9ad..b3180fdc1b391f 100644
--- a/config/nrfconnect/chip-module/CMakeLists.txt
+++ b/config/nrfconnect/chip-module/CMakeLists.txt
@@ -156,7 +156,6 @@ if (CONFIG_CHIP_ENABLE_ICD_SUPPORT)
matter_add_gn_arg_bool ("chip_enable_icd_checkin" CONFIG_CHIP_ICD_CHECK_IN_SUPPORT)
matter_add_gn_arg_bool ("chip_enable_icd_user_active_mode_trigger" CONFIG_CHIP_ICD_UAT_SUPPORT)
matter_add_gn_arg_bool ("chip_enable_icd_dsls" CONFIG_CHIP_ICD_DSLS_SUPPORT)
- matter_add_gn_arg_bool ("icd_enforce_sit_slow_poll_limit" TRUE)
endif()
if (CONFIG_CHIP_FACTORY_DATA OR CONFIG_CHIP_FACTORY_DATA_CUSTOM_BACKEND)
diff --git a/data_model/1.4/clusters/DemandResponseLoadControl.xml b/data_model/1.4/clusters/DemandResponseLoadControl.xml
deleted file mode 100644
index 1acd1ea26c6088..00000000000000
--- a/data_model/1.4/clusters/DemandResponseLoadControl.xml
+++ /dev/null
@@ -1,453 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/data_model/1.4/clusters/EnergyCalendar.xml b/data_model/1.4/clusters/EnergyCalendar.xml
deleted file mode 100644
index 2ba93203618609..00000000000000
--- a/data_model/1.4/clusters/EnergyCalendar.xml
+++ /dev/null
@@ -1,287 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/data_model/1.4/clusters/Humidistat.xml b/data_model/1.4/clusters/Humidistat.xml
deleted file mode 100644
index 1af54698489d31..00000000000000
--- a/data_model/1.4/clusters/Humidistat.xml
+++ /dev/null
@@ -1,283 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/data_model/1.4/clusters/cluster_ids.json b/data_model/1.4/clusters/cluster_ids.json
index 9de2f243b377d6..687bbc32298a3c 100644
--- a/data_model/1.4/clusters/cluster_ids.json
+++ b/data_model/1.4/clusters/cluster_ids.json
@@ -64,11 +64,9 @@
"144": "Electrical Power Measurement",
"145": "Electrical Energy Measurement",
"148": "Water Heater Management",
- "150": "Demand Response Load Control",
"151": "Messages",
"152": "Device Energy Management",
"153": "Energy EVSE",
- "154": "Energy Calendar",
"155": "Energy Preference",
"156": "Power Topology",
"157": "Energy EVSE Mode",
@@ -81,7 +79,6 @@
"513": "Thermostat",
"514": "Fan Control",
"516": "Thermostat User Interface Configuration",
- "517": "Humidistat",
"768": "Color Control",
"769": "Ballast Configuration",
"1024": "Illuminance Measurement",
diff --git a/data_model/1.4/device_types/EnergyTariff.xml b/data_model/1.4/device_types/EnergyTariff.xml
deleted file mode 100644
index 887bfa420d8fd8..00000000000000
--- a/data_model/1.4/device_types/EnergyTariff.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/data_model/1.4/device_types/EnergyTariffCalendar.xml b/data_model/1.4/device_types/EnergyTariffCalendar.xml
deleted file mode 100644
index 70d74b7239f41c..00000000000000
--- a/data_model/1.4/device_types/EnergyTariffCalendar.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/data_model/1.4/device_types/HumidifierDehumidifier.xml b/data_model/1.4/device_types/HumidifierDehumidifier.xml
deleted file mode 100644
index 973919635fb4ae..00000000000000
--- a/data_model/1.4/device_types/HumidifierDehumidifier.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/getting_started/changing_examples.md b/docs/getting_started/changing_examples.md
new file mode 100644
index 00000000000000..611610ce43fb59
--- /dev/null
+++ b/docs/getting_started/changing_examples.md
@@ -0,0 +1,64 @@
+# Changing Examples
+
+The composition of most examples in the SDK is static and code generated.
+
+The tool used to describe and change the composition of an example is called
+ZAP. More information about ZAP and a walk-through of the tool can be found in
+the [ZAP introduction](./zap.md). The composition of the device is captured in a
+.zap file, which is readable by the ZAP tool. This is then compiled into a
+human-readable .matter file, which is used to build the static features of the
+example.
+
+To change the composition of a device example, you need to
+
+1. Change the zap file to implement your desired changes
+2. Run the code generation tool to generate the .matter file
+3. Re-build the example
+
+## Changing the zap file in an example
+
+Most examples in the SDK keep the .zap file in a sub-directory called
+example-name-common (ex. lighting-common). To load an existing .zap file into
+the ZAP tool, from the chip-root use
+
+```
+./scripts/tools/zap/run_zaptool.sh
+```
+
+For example, to make changes to the lighting app, use:
+
+```
+./scripts/tools/zap/run_zaptool.sh examples/lighting-app/lighting-common/lighting-app.zap
+```
+
+This will open the ZAP GUI tool, which can be used to change the endpoint
+composition, clusters, features, attributes, commands and events exposed by the
+device.
+
+Details of how to use the tool can be found in the [ZAP Introduction](./zap.md).
+
+## Running code generation
+
+To compile the .matter file for use in building, use:
+
+```
+./scripts/tools/zap/generate.py
+```
+
+For example, for changes to the lighting app, use:
+
+```
+./scripts/tools/zap/generate.py examples/lighting-app/lighting-common/lighting-app.zap
+```
+
+If there are changes to many .zap files, the following script can be used to
+recompile the .zap files for all the examples and the controller.
+
+```
+ ./scripts/tools/zap_regen_all.py
+```
+
+## Rebuilding the example
+
+After generating the .matter file, re-build the example. Instructions for
+building examples are given in [Building your first example](./first_example.md)
diff --git a/docs/getting_started/index.md b/docs/getting_started/index.md
index ea881141ff43ec..098f047ed75393 100644
--- a/docs/getting_started/index.md
+++ b/docs/getting_started/index.md
@@ -12,5 +12,6 @@ The following docs are a brief introduction to SDK development.
```
- [Running your first example](./first_example.md)
-- [SDK Basics](./SDKBasics.md)
-- [ZAP](./zap.md)
+- [Changing examples](./changing_examples.md)
+- [SDK Architecture Introduction](./SDKBasics.md)
+- [ZAP Introduction](./zap.md)
diff --git a/docs/guides/python_chip_controller_building.md b/docs/guides/python_chip_controller_building.md
index 8a7acc884ab2fa..62e60b819b7db2 100644
--- a/docs/guides/python_chip_controller_building.md
+++ b/docs/guides/python_chip_controller_building.md
@@ -77,7 +77,8 @@ To build and run the Python CHIP controller:
5. Build and install the Python CHIP controller:
```
- scripts/build_python.sh -m platform -i separate
+ scripts/build_python.sh -m platform -i out/python_env
+ source out/python_env/bin/activate
```
> Note: This builds the Python CHIP Controller along with the CHIP REPL as
diff --git a/docs/guides/ti/matter-users-guide/enabling_icd_on_ti_devices.md b/docs/guides/ti/matter-users-guide/enabling_icd_on_ti_devices.md
index 50495a601e3fad..b024b90b40dd86 100644
--- a/docs/guides/ti/matter-users-guide/enabling_icd_on_ti_devices.md
+++ b/docs/guides/ti/matter-users-guide/enabling_icd_on_ti_devices.md
@@ -24,9 +24,6 @@ Trigger Support, set the following parameter to true:
chip_enable_icd_lit = true
```
-TI examples have only been tested with the ICD Server configuration. To enable
-the client configuration, set `chip_enable_icd_client` to true.
-
Persistent subscriptions allow devices to attempt resuming existing
subscriptions following a device reset. To enable persistent subscriptions, set
the following parameter to true:
diff --git a/docs/testing/python.md b/docs/testing/python.md
index a186e9bf203377..00a9c3fc3131ae 100644
--- a/docs/testing/python.md
+++ b/docs/testing/python.md
@@ -594,7 +594,7 @@ Next build the python wheels and create / activate a venv (called `pyenv` here,
but any name may be used)
```
-./scripts/build_python.sh -i pyenv
+./scripts/build_python.sh -i out/python_env
source pyenv/bin/activate
```
diff --git a/docs/testing/yaml.md b/docs/testing/yaml.md
index 9f65b1fed426b5..e3736d6272f1ab 100644
--- a/docs/testing/yaml.md
+++ b/docs/testing/yaml.md
@@ -334,7 +334,7 @@ Next build the python wheels and create a venv (called `py` here, but any name
may be used)
```
-./scripts/build_python.sh -i py
+./scripts/build_python.sh -i out/python_env
source py/bin/activate
```
diff --git a/docs/zap_clusters.md b/docs/zap_clusters.md
index 1250a60b71302e..5803545d3e9533 100644
--- a/docs/zap_clusters.md
+++ b/docs/zap_clusters.md
@@ -130,6 +130,7 @@ Generally regenerate using one of:
| 1295 | 0x50F | ContentControl |
| 1296 | 0x510 | ContentAppObserver |
| 1363 | 0x553 | WebRTCTransportProvider |
+| 1364 | 0x554 | WebRTCTransportRequestor |
| 1366 | 0x556 | Chime |
| 1872 | 0x750 | EcosystemInformation |
| 1873 | 0x751 | CommissionerControl |
diff --git a/examples/air-purifier-app/air-purifier-common/air-purifier-app.matter b/examples/air-purifier-app/air-purifier-common/air-purifier-app.matter
index dbcd306f440fd4..95cd8bc2d0799e 100644
--- a/examples/air-purifier-app/air-purifier-common/air-purifier-app.matter
+++ b/examples/air-purifier-app/air-purifier-common/air-purifier-app.matter
@@ -739,6 +739,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.matter b/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.matter
index dd9a87d59d6b5d..b9da1aef2413f9 100644
--- a/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.matter
+++ b/examples/air-quality-sensor-app/air-quality-sensor-common/air-quality-sensor-app.matter
@@ -739,6 +739,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
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 2d5c20aee41fa6..45e58fffca24ea 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
@@ -1642,6 +1642,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
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 3fa32d226a49f3..630f3a6d2e98df 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
@@ -1557,6 +1557,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/bridge-app/bridge-common/bridge-app.matter b/examples/bridge-app/bridge-common/bridge-app.matter
index 89941b6f60156b..8274cbb34f2f39 100644
--- a/examples/bridge-app/bridge-common/bridge-app.matter
+++ b/examples/bridge-app/bridge-common/bridge-app.matter
@@ -1192,6 +1192,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
index b2a08e643c406b..283e591a563d8f 100644
--- a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
+++ b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter
@@ -1034,6 +1034,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_airpurifier_73a6fe2651.matter b/examples/chef/devices/rootnode_airpurifier_73a6fe2651.matter
index c6d30a8265ca65..6dc1faa51f4c03 100644
--- a/examples/chef/devices/rootnode_airpurifier_73a6fe2651.matter
+++ b/examples/chef/devices/rootnode_airpurifier_73a6fe2651.matter
@@ -811,6 +811,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter b/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter
index 0069c9881f7dc2..8271fefe262f09 100644
--- a/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter
+++ b/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter
@@ -662,6 +662,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter
index e810c5332aa422..cfdae69816e667 100644
--- a/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter
+++ b/examples/chef/devices/rootnode_airqualitysensor_e63187f6c9.matter
@@ -998,6 +998,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter
index 20a5e81798999f..0bf91385a5e179 100644
--- a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter
+++ b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter
@@ -936,6 +936,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
index 871fc21daa25bd..63b7de859704ae 100644
--- a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
+++ b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter
@@ -1013,6 +1013,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.matter b/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.matter
index 772daa2010ee0e..77375d8443e990 100644
--- a/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.matter
+++ b/examples/chef/devices/rootnode_contactsensor_27f76aeaf5.matter
@@ -998,6 +998,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
index a25cc32ae1b3a8..5265088575f8ca 100644
--- a/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
+++ b/examples/chef/devices/rootnode_contactsensor_lFAGG1bfRO.matter
@@ -1096,6 +1096,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
index 62df14dd5c68e9..183eb0c5938f3b 100644
--- a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
+++ b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter
@@ -1034,6 +1034,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter
index 788fdf8d74956d..f48076c4d2a808 100644
--- a/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter
+++ b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter
@@ -1034,6 +1034,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_dishwasher_cc105034fe.matter b/examples/chef/devices/rootnode_dishwasher_cc105034fe.matter
index fdbb4868a30b5c..8f49c108e20fab 100644
--- a/examples/chef/devices/rootnode_dishwasher_cc105034fe.matter
+++ b/examples/chef/devices/rootnode_dishwasher_cc105034fe.matter
@@ -700,6 +700,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
index 4655c61d4db227..c461e7324caf6d 100644
--- a/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
+++ b/examples/chef/devices/rootnode_doorlock_aNKYAreMXE.matter
@@ -998,6 +998,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
index 95ba0c27de344a..d9f033b0e0009b 100644
--- a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
+++ b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter
@@ -1034,6 +1034,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter b/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
index de277d25e754e2..d772e29c3c26fb 100644
--- a/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
+++ b/examples/chef/devices/rootnode_fan_7N2TobIlOX.matter
@@ -816,6 +816,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
index ce817d5365c236..466dbe2c419115 100644
--- a/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
+++ b/examples/chef/devices/rootnode_flowsensor_1zVxHedlaV.matter
@@ -837,6 +837,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_genericswitch_2dfff6e516.matter b/examples/chef/devices/rootnode_genericswitch_2dfff6e516.matter
index 88f1d2389d8ddf..ba63c3ee079d8e 100644
--- a/examples/chef/devices/rootnode_genericswitch_2dfff6e516.matter
+++ b/examples/chef/devices/rootnode_genericswitch_2dfff6e516.matter
@@ -844,6 +844,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_genericswitch_9866e35d0b.matter b/examples/chef/devices/rootnode_genericswitch_9866e35d0b.matter
index 18764919ac416f..60699fd679f7ba 100644
--- a/examples/chef/devices/rootnode_genericswitch_9866e35d0b.matter
+++ b/examples/chef/devices/rootnode_genericswitch_9866e35d0b.matter
@@ -844,6 +844,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
index 32e64fc401b2a8..36a655d47df5b6 100644
--- a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
+++ b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
@@ -1034,6 +1034,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
index 11390f7cc58134..e633b0f2bebc4c 100644
--- a/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
+++ b/examples/chef/devices/rootnode_humiditysensor_Xyj4gda6Hb.matter
@@ -837,6 +837,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_laundrydryer_01796fe396.matter b/examples/chef/devices/rootnode_laundrydryer_01796fe396.matter
index 4c5010e2789cb4..b917fa102e6228 100644
--- a/examples/chef/devices/rootnode_laundrydryer_01796fe396.matter
+++ b/examples/chef/devices/rootnode_laundrydryer_01796fe396.matter
@@ -700,6 +700,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.matter b/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.matter
index 4ab9ad00641026..e595c866c2a47b 100644
--- a/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.matter
+++ b/examples/chef/devices/rootnode_laundrywasher_fb10d238c8.matter
@@ -561,6 +561,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
index fdeb9a209c6a63..32528515cf121b 100644
--- a/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
+++ b/examples/chef/devices/rootnode_lightsensor_lZQycTFcJK.matter
@@ -837,6 +837,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
index bb47238f4c87da..04cf5fb646d7bb 100644
--- a/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
+++ b/examples/chef/devices/rootnode_occupancysensor_iHyVgifZuo.matter
@@ -837,6 +837,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
index f755ba75a571e0..f63c51eb699eb8 100644
--- a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
+++ b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter
@@ -1034,6 +1034,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_onofflight_samplemei.matter b/examples/chef/devices/rootnode_onofflight_samplemei.matter
index 3fa6833ee38158..5f8e70cc64ab97 100644
--- a/examples/chef/devices/rootnode_onofflight_samplemei.matter
+++ b/examples/chef/devices/rootnode_onofflight_samplemei.matter
@@ -1034,6 +1034,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
index 8eeb66e2e549d4..81fb81958f8f5d 100644
--- a/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
+++ b/examples/chef/devices/rootnode_onofflightswitch_FsPlMr090Q.matter
@@ -909,6 +909,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
index 7251ede5ed1693..94414ae3165662 100644
--- a/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
+++ b/examples/chef/devices/rootnode_onoffpluginunit_Wtf8ss5EBY.matter
@@ -909,6 +909,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
index 993bc43a5a6cc7..43e8de7b5f4ee1 100644
--- a/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
+++ b/examples/chef/devices/rootnode_pressuresensor_s0qC9wLH4k.matter
@@ -837,6 +837,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_pump_5f904818cc.matter b/examples/chef/devices/rootnode_pump_5f904818cc.matter
index aee0aa7b2e8c6c..8ea352ca7c785f 100644
--- a/examples/chef/devices/rootnode_pump_5f904818cc.matter
+++ b/examples/chef/devices/rootnode_pump_5f904818cc.matter
@@ -683,6 +683,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_pump_a811bb33a0.matter b/examples/chef/devices/rootnode_pump_a811bb33a0.matter
index 84d57e7d21ce30..5b2371526d9a59 100644
--- a/examples/chef/devices/rootnode_pump_a811bb33a0.matter
+++ b/examples/chef/devices/rootnode_pump_a811bb33a0.matter
@@ -683,6 +683,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.matter b/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.matter
index 00bf68f8596339..80faecb735c5ff 100644
--- a/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.matter
+++ b/examples/chef/devices/rootnode_refrigerator_temperaturecontrolledcabinet_temperaturecontrolledcabinet_ffdb696680.matter
@@ -561,6 +561,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter b/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter
index 1306114cc1e6d8..b4094e13d84761 100644
--- a/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter
+++ b/examples/chef/devices/rootnode_roboticvacuumcleaner_1807ff0c49.matter
@@ -921,6 +921,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter
index 4910c3b69946e3..3ebdc0a23132a1 100644
--- a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter
+++ b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter
@@ -734,6 +734,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.matter b/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.matter
index b685a6740f98d6..1f6e1c17b7828e 100644
--- a/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.matter
+++ b/examples/chef/devices/rootnode_smokecoalarm_686fe0dcb8.matter
@@ -921,6 +921,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
index c2b2056aae5fde..c5a1ccc522a4c3 100644
--- a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
+++ b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter
@@ -957,6 +957,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
index 64a24499913571..6199388887e069 100644
--- a/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
+++ b/examples/chef/devices/rootnode_temperaturesensor_Qy1zkNW7c3.matter
@@ -837,6 +837,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
index 8303eef5eece6a..79930324883042 100644
--- a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
+++ b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
@@ -898,6 +898,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.matter b/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.matter
index a2cf704eaa5b65..bd89a853121fcb 100644
--- a/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.matter
+++ b/examples/chef/devices/rootnode_waterleakdetector_0b067acfa3.matter
@@ -921,6 +921,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_watervalve_6bb39f1f67.matter b/examples/chef/devices/rootnode_watervalve_6bb39f1f67.matter
index 139d5dc6a2c3fa..cf3009d2913f9a 100644
--- a/examples/chef/devices/rootnode_watervalve_6bb39f1f67.matter
+++ b/examples/chef/devices/rootnode_watervalve_6bb39f1f67.matter
@@ -861,6 +861,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
index 62c95a2df6b13b..0f1d25c571179f 100644
--- a/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
+++ b/examples/chef/devices/rootnode_windowcovering_RLCxaGi9Yx.matter
@@ -837,6 +837,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/chip-tool/commands/pairing/OpenCommissioningWindowCommand.cpp b/examples/chip-tool/commands/pairing/OpenCommissioningWindowCommand.cpp
index bc80e568b2bd7f..8d04ca7b94290c 100644
--- a/examples/chip-tool/commands/pairing/OpenCommissioningWindowCommand.cpp
+++ b/examples/chip-tool/commands/pairing/OpenCommissioningWindowCommand.cpp
@@ -49,7 +49,7 @@ CHIP_ERROR OpenCommissioningWindowCommand::RunCommand()
}
void OpenCommissioningWindowCommand::OnOpenCommissioningWindowResponse(void * context, NodeId remoteId, CHIP_ERROR err,
- chip::SetupPayload payload)
+ SetupPayload payload)
{
LogErrorOnFailure(err);
diff --git a/examples/chip-tool/commands/pairing/PairingCommand.cpp b/examples/chip-tool/commands/pairing/PairingCommand.cpp
index b9034cc1285d49..7e762bd690c292 100644
--- a/examples/chip-tool/commands/pairing/PairingCommand.cpp
+++ b/examples/chip-tool/commands/pairing/PairingCommand.cpp
@@ -151,7 +151,7 @@ CommissioningParameters PairingCommand::GetCommissioningParameters()
if (!mICDSymmetricKey.HasValue())
{
- chip::Crypto::DRBG_get_bytes(mRandomGeneratedICDSymmetricKey, sizeof(mRandomGeneratedICDSymmetricKey));
+ Crypto::DRBG_get_bytes(mRandomGeneratedICDSymmetricKey, sizeof(mRandomGeneratedICDSymmetricKey));
mICDSymmetricKey.SetValue(ByteSpan(mRandomGeneratedICDSymmetricKey));
}
if (!mICDCheckInNodeId.HasValue())
@@ -289,7 +289,7 @@ CHIP_ERROR PairingCommand::PairWithMdnsOrBleByIndexWithCode(NodeId remoteId, uin
// There is no device with this index that has some resolution data. This could simply
// be because the device is a ble device. In this case let's fall back to looking for
// a device with this index and some RendezvousParameters.
- chip::SetupPayload payload;
+ SetupPayload payload;
bool isQRCode = strncmp(mOnboardingPayload, kQRCodePrefix, strlen(kQRCodePrefix)) == 0;
if (isQRCode)
{
@@ -329,21 +329,21 @@ CHIP_ERROR PairingCommand::PairWithMdns(NodeId remoteId)
Dnssd::DiscoveryFilter filter(mFilterType);
switch (mFilterType)
{
- case chip::Dnssd::DiscoveryFilterType::kNone:
+ case Dnssd::DiscoveryFilterType::kNone:
break;
- case chip::Dnssd::DiscoveryFilterType::kShortDiscriminator:
- case chip::Dnssd::DiscoveryFilterType::kLongDiscriminator:
- case chip::Dnssd::DiscoveryFilterType::kCompressedFabricId:
- case chip::Dnssd::DiscoveryFilterType::kVendorId:
- case chip::Dnssd::DiscoveryFilterType::kDeviceType:
+ case Dnssd::DiscoveryFilterType::kShortDiscriminator:
+ case Dnssd::DiscoveryFilterType::kLongDiscriminator:
+ case Dnssd::DiscoveryFilterType::kCompressedFabricId:
+ case Dnssd::DiscoveryFilterType::kVendorId:
+ case Dnssd::DiscoveryFilterType::kDeviceType:
filter.code = mDiscoveryFilterCode;
break;
- case chip::Dnssd::DiscoveryFilterType::kCommissioningMode:
+ case Dnssd::DiscoveryFilterType::kCommissioningMode:
break;
- case chip::Dnssd::DiscoveryFilterType::kCommissioner:
+ case Dnssd::DiscoveryFilterType::kCommissioner:
filter.code = 1;
break;
- case chip::Dnssd::DiscoveryFilterType::kInstanceName:
+ case Dnssd::DiscoveryFilterType::kInstanceName:
filter.code = 0;
filter.instanceName = mDiscoveryFilterInstanceName;
break;
@@ -463,13 +463,13 @@ void PairingCommand::OnReadCommissioningInfo(const Controller::ReadCommissioning
void PairingCommand::OnICDRegistrationComplete(ScopedNodeId nodeId, uint32_t icdCounter)
{
- char icdSymmetricKeyHex[chip::Crypto::kAES_CCM128_Key_Length * 2 + 1];
+ char icdSymmetricKeyHex[Crypto::kAES_CCM128_Key_Length * 2 + 1];
- chip::Encoding::BytesToHex(mICDSymmetricKey.Value().data(), mICDSymmetricKey.Value().size(), icdSymmetricKeyHex,
- sizeof(icdSymmetricKeyHex), chip::Encoding::HexFlags::kNullTerminate);
+ Encoding::BytesToHex(mICDSymmetricKey.Value().data(), mICDSymmetricKey.Value().size(), icdSymmetricKeyHex,
+ sizeof(icdSymmetricKeyHex), Encoding::HexFlags::kNullTerminate);
app::ICDClientInfo clientInfo;
- clientInfo.check_in_node = chip::ScopedNodeId(mICDCheckInNodeId.Value(), nodeId.GetFabricIndex());
+ clientInfo.check_in_node = ScopedNodeId(mICDCheckInNodeId.Value(), nodeId.GetFabricIndex());
clientInfo.peer_node = nodeId;
clientInfo.monitored_subject = mICDMonitoredSubject.Value();
clientInfo.start_icd_counter = icdCounter;
@@ -505,7 +505,7 @@ void PairingCommand::OnICDStayActiveComplete(ScopedNodeId deviceId, uint32_t pro
ChipLogValueX64(deviceId.GetNodeId()), promisedActiveDuration);
}
-void PairingCommand::OnDiscoveredDevice(const chip::Dnssd::CommissionNodeData & nodeData)
+void PairingCommand::OnDiscoveredDevice(const Dnssd::CommissionNodeData & nodeData)
{
// Ignore nodes with closed commissioning window
VerifyOrReturn(nodeData.commissioningMode != 0);
@@ -513,7 +513,7 @@ void PairingCommand::OnDiscoveredDevice(const chip::Dnssd::CommissionNodeData &
auto & resolutionData = nodeData;
const uint16_t port = resolutionData.port;
- char buf[chip::Inet::IPAddress::kMaxStringLength];
+ char buf[Inet::IPAddress::kMaxStringLength];
resolutionData.ipAddress[0].ToString(buf);
ChipLogProgress(chipTool, "Discovered Device: %s:%u", buf, port);
@@ -556,20 +556,19 @@ void PairingCommand::OnCurrentFabricRemove(void * context, NodeId nodeId, CHIP_E
command->SetCommandExitStatus(err);
}
-chip::Optional PairingCommand::FailSafeExpiryTimeoutSecs() const
+Optional PairingCommand::FailSafeExpiryTimeoutSecs() const
{
// We don't need to set additional failsafe timeout as we don't ask the final user if he wants to continue
- return chip::Optional();
+ return Optional();
}
-void PairingCommand::OnDeviceAttestationCompleted(chip::Controller::DeviceCommissioner * deviceCommissioner,
- chip::DeviceProxy * device,
- const chip::Credentials::DeviceAttestationVerifier::AttestationDeviceInfo & info,
- chip::Credentials::AttestationVerificationResult attestationResult)
+void PairingCommand::OnDeviceAttestationCompleted(Controller::DeviceCommissioner * deviceCommissioner, DeviceProxy * device,
+ const Credentials::DeviceAttestationVerifier::AttestationDeviceInfo & info,
+ Credentials::AttestationVerificationResult attestationResult)
{
// Bypass attestation verification, continue with success
auto err = deviceCommissioner->ContinueCommissioningAfterDeviceAttestation(
- device, chip::Credentials::AttestationVerificationResult::kSuccess);
+ device, Credentials::AttestationVerificationResult::kSuccess);
if (CHIP_NO_ERROR != err)
{
SetCommandExitStatus(err);
diff --git a/examples/chip-tool/commands/pairing/PairingCommand.h b/examples/chip-tool/commands/pairing/PairingCommand.h
index 9965b663ec111c..66c45d5dfe3143 100644
--- a/examples/chip-tool/commands/pairing/PairingCommand.h
+++ b/examples/chip-tool/commands/pairing/PairingCommand.h
@@ -244,7 +244,7 @@ class PairingCommand : public CHIPCommand,
const PairingNetworkType mNetworkType;
const chip::Dnssd::DiscoveryFilterType mFilterType;
Command::AddressWithInterface mRemoteAddr;
- NodeId mNodeId;
+ NodeId mNodeId = chip::kUndefinedNodeId;
chip::Optional mTimeout;
chip::Optional mDiscoverOnce;
chip::Optional mUseOnlyOnNetworkDiscovery;
@@ -266,7 +266,7 @@ class PairingCommand : public CHIPCommand,
TypedComplexArgument>
mComplex_DSTOffsets;
- uint16_t mRemotePort;
+ uint16_t mRemotePort = 0;
// mDiscriminator is only used for some situations, but in those situations
// it's mandatory. Track whether we're actually using it; the cases that do
// will emplace this optional.
@@ -275,15 +275,15 @@ class PairingCommand : public CHIPCommand,
// it's mandatory. Track whether we're actually using it; the cases that do
// will emplace this optional.
std::optional mSetupPINCode;
- uint16_t mIndex;
+ uint16_t mIndex = 0;
chip::ByteSpan mOperationalDataset;
chip::ByteSpan mSSID;
chip::ByteSpan mPassword;
- char * mOnboardingPayload;
- uint64_t mDiscoveryFilterCode;
- char * mDiscoveryFilterInstanceName;
+ char * mOnboardingPayload = nullptr;
+ uint64_t mDiscoveryFilterCode = 0;
+ char * mDiscoveryFilterInstanceName = nullptr;
- bool mDeviceIsICD;
+ bool mDeviceIsICD = false;
uint8_t mRandomGeneratedICDSymmetricKey[chip::Crypto::kAES_CCM128_Key_Length];
// For unpair
diff --git a/examples/common/pigweed/rpc_services/Attributes.h b/examples/common/pigweed/rpc_services/Attributes.h
index e246c5361bd281..3ff1200be2edeb 100644
--- a/examples/common/pigweed/rpc_services/Attributes.h
+++ b/examples/common/pigweed/rpc_services/Attributes.h
@@ -22,6 +22,7 @@
#include "pigweed/rpc_services/internal/StatusUtils.h"
#include
+#include
#include
#include
#include
@@ -32,6 +33,13 @@
#include
#include
+#if CHIP_CONFIG_USE_DATA_MODEL_INTERFACE
+#include
+#include
+#include
+#include
+#endif
+
namespace chip {
namespace rpc {
@@ -202,7 +210,37 @@ class Attributes : public pw_rpc::nanopb::Attributes::Service
writer.Init(tlvBuffer);
PW_TRY(ChipErrorToPwStatus(writer.StartContainer(TLV::AnonymousTag(), TLV::kTLVType_Structure, outer)));
PW_TRY(ChipErrorToPwStatus(attributeReports.Init(&writer, kReportContextTag)));
+
+#if CHIP_CONFIG_USE_DATA_MODEL_INTERFACE
+ // TODO: this assumes a singleton data model provider
+ app::DataModel::Provider * provider = app::InteractionModelEngine::GetInstance()->GetDataModelProvider();
+
+ app::DataModel::ReadAttributeRequest request;
+ request.path = path;
+ request.operationFlags.Set(app::DataModel::OperationFlags::kInternal);
+ request.subjectDescriptor = subjectDescriptor;
+
+ std::optional info = provider->GetClusterInfo(path);
+ if (!info.has_value())
+ {
+ return ::pw::Status::NotFound();
+ }
+
+ app::AttributeValueEncoder encoder(attributeReports, subjectDescriptor, path, info->dataVersion,
+ false /* isFabricFiltered */, nullptr /* attributeEncodingState */);
+ app::DataModel::ActionReturnStatus result = provider->ReadAttribute(request, encoder);
+
+ if (!result.IsSuccess())
+ {
+ app::DataModel::ActionReturnStatus::StringStorage storage;
+ ChipLogError(Support, "Failed to read data: %s", result.c_str(storage));
+ return ::pw::Status::Internal();
+ }
+
+#else
PW_TRY(ChipErrorToPwStatus(app::ReadSingleClusterData(subjectDescriptor, false, path, attributeReports, nullptr)));
+#endif
+
attributeReports.EndOfContainer();
PW_TRY(ChipErrorToPwStatus(writer.EndContainer(outer)));
PW_TRY(ChipErrorToPwStatus(writer.Finalize()));
diff --git a/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter b/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter
index 38c17071105c3f..55820ca5377f4f 100644
--- a/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter
+++ b/examples/contact-sensor-app/contact-sensor-common/contact-sensor-app.matter
@@ -816,6 +816,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/contact-sensor-app/nxp/k32w0/args.gni b/examples/contact-sensor-app/nxp/k32w0/args.gni
index 1709f1da735d5d..f4b68ae740c40c 100644
--- a/examples/contact-sensor-app/nxp/k32w0/args.gni
+++ b/examples/contact-sensor-app/nxp/k32w0/args.gni
@@ -28,7 +28,6 @@ chip_generate_link_map_file = true
chip_enable_icd_server = true
chip_enable_icd_lit = false
-icd_enforce_sit_slow_poll_limit = true
chip_persist_subscriptions = true
chip_subscription_timeout_resumption = true
diff --git a/examples/contact-sensor-app/nxp/k32w1/args.gni b/examples/contact-sensor-app/nxp/k32w1/args.gni
index 98372f4b8261e4..e5654bdbc707c6 100644
--- a/examples/contact-sensor-app/nxp/k32w1/args.gni
+++ b/examples/contact-sensor-app/nxp/k32w1/args.gni
@@ -32,7 +32,6 @@ chip_with_lwip = false
chip_enable_icd_server = true
chip_enable_icd_lit = false
chip_enable_icd_dsls = false
-icd_enforce_sit_slow_poll_limit = true
chip_persist_subscriptions = true
chip_subscription_timeout_resumption = true
diff --git a/examples/contact-sensor-app/nxp/mcxw71/args.gni b/examples/contact-sensor-app/nxp/mcxw71/args.gni
index 72634a2308d04b..6e6015933d6cf2 100644
--- a/examples/contact-sensor-app/nxp/mcxw71/args.gni
+++ b/examples/contact-sensor-app/nxp/mcxw71/args.gni
@@ -30,7 +30,6 @@ chip_with_lwip = false
chip_enable_icd_server = true
chip_enable_icd_lit = false
-icd_enforce_sit_slow_poll_limit = true
chip_persist_subscriptions = true
chip_subscription_timeout_resumption = true
diff --git a/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.matter b/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.matter
index aeb4a47927f771..a5e91d91f11783 100644
--- a/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.matter
+++ b/examples/contact-sensor-app/nxp/zap-lit/contact-sensor-app.matter
@@ -739,6 +739,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.matter b/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.matter
index bbf9333d9b9b27..36db43dcb6487c 100644
--- a/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.matter
+++ b/examples/contact-sensor-app/nxp/zap-sit/contact-sensor-app.matter
@@ -739,6 +739,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/darwin-framework-tool/BUILD.gn b/examples/darwin-framework-tool/BUILD.gn
index 665dccf4848df4..2c202475a70ea9 100644
--- a/examples/darwin-framework-tool/BUILD.gn
+++ b/examples/darwin-framework-tool/BUILD.gn
@@ -43,6 +43,9 @@ declare_args() {
# Disable generating compiler database by default
generate_compilation_database = false
+
+ # Enable automatic leak checks before the application exits
+ enable_leak_checking = false
}
sdk = "macosx"
@@ -219,6 +222,7 @@ executable("darwin-framework-tool") {
"commands/provider/OTASoftwareUpdateInteractive.mm",
"commands/storage/Commands.h",
"commands/storage/StorageManagementCommand.mm",
+ "debug/LeakChecker.mm",
"logging/logging.mm",
"main.mm",
]
@@ -280,6 +284,10 @@ executable("darwin-framework-tool") {
defines += [ "MTR_ENABLE_PROVISIONAL=1" ]
}
+ if (enable_leak_checking) {
+ defines += [ "DFT_ENABLE_LEAK_CHECKING=1" ]
+ }
+
public_configs = [ ":config" ]
output_dir = root_out_dir
diff --git a/examples/darwin-framework-tool/debug/LeakChecker.h b/examples/darwin-framework-tool/debug/LeakChecker.h
new file mode 100644
index 00000000000000..c83ed64910cbbc
--- /dev/null
+++ b/examples/darwin-framework-tool/debug/LeakChecker.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2024 Project CHIP Authors
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#pragma once
+
+/*
+ * This function performs a memory leak check if the build flag `enable_leak_checking` is set to true
+ * If leaks are detected, it overrides the provided exit code with `EXIT_FAILURE`.
+ *
+ * @param exitCode The initial exit code to return if no leaks are detected or if leak checking is disabled.
+ * @return `EXIT_FAILURE` if leaks are detected and leak checking is enabled; otherwise, the original `exitCode`.
+ */
+int ConditionalLeaksCheck(int exitCode);
diff --git a/examples/darwin-framework-tool/debug/LeakChecker.mm b/examples/darwin-framework-tool/debug/LeakChecker.mm
new file mode 100644
index 00000000000000..72a441420abc22
--- /dev/null
+++ b/examples/darwin-framework-tool/debug/LeakChecker.mm
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2024 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 "LeakChecker.h"
+
+#import
+#include // For getpid()
+
+@interface LeakChecker : NSObject
+- (BOOL)hasMemoryLeaks;
+@end
+
+@implementation LeakChecker
+
+- (BOOL)hasMemoryLeaks
+{
+ pid_t pid = getpid();
+ auto * pidString = [NSString stringWithFormat:@"%d", pid];
+
+ auto * task = [[NSTask alloc] init];
+ task.launchPath = @"/usr/bin/leaks";
+ task.arguments = @[ pidString ];
+
+ auto * pipe = [NSPipe pipe];
+ task.standardOutput = pipe;
+ task.standardError = pipe;
+
+ NSFileHandle * fileHandle = [pipe fileHandleForReading];
+ [task launch];
+ [task waitUntilExit];
+
+ int exitCode = [task terminationStatus];
+ if (exitCode) {
+ NSData * data = [fileHandle readDataToEndOfFile];
+ NSString * output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+ NSLog(@"%@", output);
+ return YES;
+ }
+
+ return NO;
+}
+
+@end
+
+int ConditionalLeaksCheck(int exitCode)
+{
+#ifdef DFT_ENABLE_LEAK_CHECKING
+ auto * leakChecker = [[LeakChecker alloc] init];
+ if ([leakChecker hasMemoryLeaks]) {
+ return EXIT_FAILURE;
+ }
+#endif // DFT_ENABLE_LEAK_CHECKING
+
+ return exitCode;
+}
diff --git a/examples/darwin-framework-tool/main.mm b/examples/darwin-framework-tool/main.mm
index 5f31cb6abf1cd1..ad31cfe32ee1cc 100644
--- a/examples/darwin-framework-tool/main.mm
+++ b/examples/darwin-framework-tool/main.mm
@@ -18,6 +18,7 @@
#import
+#import "debug/LeakChecker.h"
#import "logging/logging.h"
#include "commands/bdx/Commands.h"
@@ -35,6 +36,7 @@
int main(int argc, const char * argv[])
{
+ int exitCode = EXIT_SUCCESS;
@autoreleasepool {
dft::logging::Setup();
@@ -49,6 +51,7 @@ int main(int argc, const char * argv[])
registerCommandsStorage(commands);
registerCommandsConfiguration(commands);
registerClusters(commands);
- return commands.Run(argc, (char **) argv);
+ exitCode = commands.Run(argc, (char **) argv);
}
+ return ConditionalLeaksCheck(exitCode);
}
diff --git a/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter b/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter
index d71eb6e367e668..6ee107a38f063e 100644
--- a/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter
+++ b/examples/dishwasher-app/dishwasher-common/dishwasher-app.matter
@@ -709,6 +709,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/energy-management-app/energy-management-common/energy-management-app.matter b/examples/energy-management-app/energy-management-common/energy-management-app.matter
index bae77f5f8e0a07..a8a10075efec17 100644
--- a/examples/energy-management-app/energy-management-common/energy-management-app.matter
+++ b/examples/energy-management-app/energy-management-common/energy-management-app.matter
@@ -931,6 +931,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/fabric-admin/commands/fabric-sync/FabricSyncCommand.cpp b/examples/fabric-admin/commands/fabric-sync/FabricSyncCommand.cpp
index c8d9f3da96b323..879d28cd156956 100644
--- a/examples/fabric-admin/commands/fabric-sync/FabricSyncCommand.cpp
+++ b/examples/fabric-admin/commands/fabric-sync/FabricSyncCommand.cpp
@@ -30,15 +30,6 @@
using namespace ::chip;
-namespace {
-
-void CheckFabricBridgeSynchronizationSupport(intptr_t ignored)
-{
- DeviceMgr().ReadSupportedDeviceCategories();
-}
-
-} // namespace
-
void FabricSyncAddBridgeCommand::OnCommissioningComplete(NodeId deviceId, CHIP_ERROR err)
{
if (mBridgeNodeId != deviceId)
@@ -73,7 +64,7 @@ void FabricSyncAddBridgeCommand::OnCommissioningComplete(NodeId deviceId, CHIP_E
//
// Note: The Fabric-Admin MUST NOT send the RequestCommissioningApproval command
// if the remote Fabric-Bridge lacks Fabric Synchronization support.
- DeviceLayer::PlatformMgr().ScheduleWork(CheckFabricBridgeSynchronizationSupport, 0);
+ DeviceLayer::SystemLayer().ScheduleLambda([]() { DeviceMgr().ReadSupportedDeviceCategories(); });
}
}
else
diff --git a/examples/fabric-admin/device_manager/DeviceManager.cpp b/examples/fabric-admin/device_manager/DeviceManager.cpp
index 4f7b1c77551e80..8acb5636f4f648 100644
--- a/examples/fabric-admin/device_manager/DeviceManager.cpp
+++ b/examples/fabric-admin/device_manager/DeviceManager.cpp
@@ -114,7 +114,7 @@ void DeviceManager::RemoveSyncedDevice(NodeId nodeId)
ChipLogValueX64(device->GetNodeId()), device->GetEndpointId());
}
-void DeviceManager::OpenDeviceCommissioningWindow(NodeId nodeId, uint32_t commissioningTimeoutSec, uint32_t iterations,
+void DeviceManager::OpenDeviceCommissioningWindow(NodeId nodeId, uint32_t iterations, uint16_t commissioningTimeoutSec,
uint16_t discriminator, const ByteSpan & salt, const ByteSpan & verifier)
{
ChipLogProgress(NotSpecified, "Opening commissioning window for Node ID: " ChipLogFormatX64, ChipLogValueX64(nodeId));
@@ -422,7 +422,7 @@ void DeviceManager::HandleReverseOpenCommissioningWindow(TLV::TLVReader & data)
ChipLogProgress(NotSpecified, " PAKEPasscodeVerifier size: %lu", value.PAKEPasscodeVerifier.size());
ChipLogProgress(NotSpecified, " salt size: %lu", value.salt.size());
- OpenDeviceCommissioningWindow(mLocalBridgeNodeId, value.commissioningTimeout, value.iterations, value.discriminator,
+ OpenDeviceCommissioningWindow(mLocalBridgeNodeId, value.iterations, value.commissioningTimeout, value.discriminator,
ByteSpan(value.salt.data(), value.salt.size()),
ByteSpan(value.PAKEPasscodeVerifier.data(), value.PAKEPasscodeVerifier.size()));
}
diff --git a/examples/fabric-admin/device_manager/DeviceManager.h b/examples/fabric-admin/device_manager/DeviceManager.h
index 5e43e78e3a8aed..1514c417be4b4d 100644
--- a/examples/fabric-admin/device_manager/DeviceManager.h
+++ b/examples/fabric-admin/device_manager/DeviceManager.h
@@ -94,17 +94,17 @@ class DeviceManager : public PairingDelegate
* This function initiates the process to open the commissioning window for a device identified by the given node ID.
*
* @param nodeId The ID of the node that should open the commissioning window.
- * @param commissioningTimeoutSec The time in seconds before the commissioning window closes. This value determines
- * how long the commissioning window remains open for incoming connections.
* @param iterations The number of PBKDF (Password-Based Key Derivation Function) iterations to use
* for deriving the PAKE (Password Authenticated Key Exchange) verifier.
+ * @param commissioningTimeoutSec The time in seconds before the commissioning window closes. This value determines
+ * how long the commissioning window remains open for incoming connections.
* @param discriminator The device-specific discriminator, determined during commissioning, which helps
* to uniquely identify the device among others.
* @param salt The salt used in the cryptographic operations for commissioning.
* @param verifier The PAKE verifier used to authenticate the commissioning process.
*
*/
- void OpenDeviceCommissioningWindow(chip::NodeId nodeId, uint32_t commissioningTimeoutSec, uint32_t iterations,
+ void OpenDeviceCommissioningWindow(chip::NodeId nodeId, uint32_t iterations, uint16_t commissioningTimeoutSec,
uint16_t discriminator, const chip::ByteSpan & salt, const chip::ByteSpan & verifier);
/**
diff --git a/examples/fabric-admin/device_manager/PairingManager.cpp b/examples/fabric-admin/device_manager/PairingManager.cpp
index c46a0ca000897b..41b4c8744e16b3 100644
--- a/examples/fabric-admin/device_manager/PairingManager.cpp
+++ b/examples/fabric-admin/device_manager/PairingManager.cpp
@@ -131,98 +131,97 @@ CHIP_ERROR PairingManager::OpenCommissioningWindow(NodeId nodeId, EndpointId end
return CHIP_ERROR_INCORRECT_STATE;
}
- auto params = Platform::MakeUnique();
- params->nodeId = nodeId;
- params->endpointId = endpointId;
- params->commissioningWindowTimeout = commissioningTimeoutSec;
- params->iteration = iterations;
- params->discriminator = discriminator;
+ // Ensure salt and verifier sizes are valid
+ if (!salt.empty() && salt.size() > chip::Crypto::kSpake2p_Max_PBKDF_Salt_Length)
+ {
+ ChipLogError(NotSpecified, "Salt size exceeds buffer capacity");
+ return CHIP_ERROR_BUFFER_TOO_SMALL;
+ }
- if (!salt.empty())
+ if (!verifier.empty() && verifier.size() > chip::Crypto::kSpake2p_VerifierSerialized_Length)
{
- if (salt.size() > sizeof(params->saltBuffer))
- {
- ChipLogError(NotSpecified, "Salt size exceeds buffer capacity");
- return CHIP_ERROR_BUFFER_TOO_SMALL;
- }
+ ChipLogError(NotSpecified, "Verifier size exceeds buffer capacity");
+ return CHIP_ERROR_BUFFER_TOO_SMALL;
+ }
- memcpy(params->saltBuffer, salt.data(), salt.size());
- params->salt = ByteSpan(params->saltBuffer, salt.size());
+ if (!salt.empty())
+ {
+ memcpy(mSaltBuffer, salt.data(), salt.size());
+ mSalt = ByteSpan(mSaltBuffer, salt.size());
+ }
+ else
+ {
+ mSalt = ByteSpan();
}
if (!verifier.empty())
{
- if (verifier.size() > sizeof(params->verifierBuffer))
- {
- ChipLogError(NotSpecified, "Verifier size exceeds buffer capacity");
- return CHIP_ERROR_BUFFER_TOO_SMALL;
- }
-
- memcpy(params->verifierBuffer, verifier.data(), verifier.size());
- params->verifier = ByteSpan(params->verifierBuffer, verifier.size());
+ memcpy(mVerifierBuffer, verifier.data(), verifier.size());
+ mVerifier = ByteSpan(mVerifierBuffer, verifier.size());
}
-
- // Schedule work on the Matter thread
- return DeviceLayer::PlatformMgr().ScheduleWork(OnOpenCommissioningWindow, reinterpret_cast(params.release()));
-}
-
-void PairingManager::OnOpenCommissioningWindow(intptr_t context)
-{
- Platform::UniquePtr params(reinterpret_cast(context));
- PairingManager & self = PairingManager::Instance();
-
- if (self.mCommissioner == nullptr)
+ else
{
- ChipLogError(NotSpecified, "Commissioner is null, cannot open commissioning window");
- return;
+ mVerifier = ByteSpan();
}
- self.mWindowOpener = Platform::MakeUnique(self.mCommissioner);
+ return DeviceLayer::SystemLayer().ScheduleLambda([nodeId, endpointId, commissioningTimeoutSec, iterations, discriminator]() {
+ PairingManager & self = PairingManager::Instance();
- if (!params->verifier.empty())
- {
- if (params->salt.empty())
+ if (self.mCommissioner == nullptr)
{
- ChipLogError(NotSpecified, "Salt is required when verifier is set");
- self.mWindowOpener.reset();
+ ChipLogError(NotSpecified, "Commissioner is null, cannot open commissioning window");
return;
}
- CHIP_ERROR err =
- self.mWindowOpener->OpenCommissioningWindow(Controller::CommissioningWindowVerifierParams()
- .SetNodeId(params->nodeId)
- .SetEndpointId(params->endpointId)
- .SetTimeout(params->commissioningWindowTimeout)
- .SetIteration(params->iteration)
- .SetDiscriminator(params->discriminator)
- .SetVerifier(params->verifier)
- .SetSalt(params->salt)
- .SetCallback(&self.mOnOpenCommissioningWindowVerifierCallback));
- if (err != CHIP_NO_ERROR)
+ self.mWindowOpener = Platform::MakeUnique(self.mCommissioner);
+
+ if (!self.mVerifier.empty())
{
- ChipLogError(NotSpecified, "Failed to open commissioning window with verifier: %s", ErrorStr(err));
- self.mWindowOpener.reset();
+ if (self.mSalt.empty())
+ {
+ ChipLogError(NotSpecified, "Salt is required when verifier is set");
+ self.mWindowOpener.reset();
+ return;
+ }
+
+ // Open the commissioning window with verifier parameters
+ CHIP_ERROR err =
+ self.mWindowOpener->OpenCommissioningWindow(Controller::CommissioningWindowVerifierParams()
+ .SetNodeId(nodeId)
+ .SetEndpointId(endpointId)
+ .SetTimeout(commissioningTimeoutSec)
+ .SetIteration(iterations)
+ .SetDiscriminator(discriminator)
+ .SetVerifier(self.mVerifier)
+ .SetSalt(self.mSalt)
+ .SetCallback(&self.mOnOpenCommissioningWindowVerifierCallback));
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(NotSpecified, "Failed to open commissioning window with verifier: %s", ErrorStr(err));
+ self.mWindowOpener.reset();
+ }
}
- }
- else
- {
- SetupPayload ignored;
- CHIP_ERROR err = self.mWindowOpener->OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams()
- .SetNodeId(params->nodeId)
- .SetEndpointId(params->endpointId)
- .SetTimeout(params->commissioningWindowTimeout)
- .SetIteration(params->iteration)
- .SetDiscriminator(params->discriminator)
- .SetSetupPIN(NullOptional)
- .SetSalt(NullOptional)
- .SetCallback(&self.mOnOpenCommissioningWindowCallback),
- ignored);
- if (err != CHIP_NO_ERROR)
+ else
{
- ChipLogError(NotSpecified, "Failed to open commissioning window with passcode: %s", ErrorStr(err));
- self.mWindowOpener.reset();
+ SetupPayload ignored;
+ // Open the commissioning window with passcode parameters
+ CHIP_ERROR err = self.mWindowOpener->OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams()
+ .SetNodeId(nodeId)
+ .SetEndpointId(endpointId)
+ .SetTimeout(commissioningTimeoutSec)
+ .SetIteration(iterations)
+ .SetDiscriminator(discriminator)
+ .SetSetupPIN(NullOptional)
+ .SetSalt(NullOptional)
+ .SetCallback(&self.mOnOpenCommissioningWindowCallback),
+ ignored);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(NotSpecified, "Failed to open commissioning window with passcode: %s", ErrorStr(err));
+ self.mWindowOpener.reset();
+ }
}
- }
+ });
}
void PairingManager::OnOpenCommissioningWindowResponse(void * context, NodeId remoteId, CHIP_ERROR err, SetupPayload payload)
@@ -290,7 +289,7 @@ void PairingManager::OnCommissioningComplete(NodeId nodeId, CHIP_ERROR err)
if (err == CHIP_NO_ERROR)
{
// print to console
- fprintf(stderr, "New device with Node ID: " ChipLogFormatX64 "has been successfully added.\n", ChipLogValueX64(nodeId));
+ fprintf(stderr, "New device with Node ID: " ChipLogFormatX64 " has been successfully added.\n", ChipLogValueX64(nodeId));
// mCommissioner has a lifetime that is the entire life of the application itself
// so it is safe to provide to StartDeviceSynchronization.
@@ -580,34 +579,24 @@ CHIP_ERROR PairingManager::PairDeviceWithCode(NodeId nodeId, const char * payloa
return CHIP_ERROR_INVALID_STRING_LENGTH;
}
- auto params = Platform::MakeUnique();
- VerifyOrReturnError(params != nullptr, CHIP_ERROR_NO_MEMORY);
-
- params->nodeId = nodeId;
- Platform::CopyString(params->payloadBuffer, sizeof(params->payloadBuffer), payload);
+ Platform::CopyString(mOnboardingPayload, sizeof(mOnboardingPayload), payload);
- // Schedule work on the Matter thread
- return DeviceLayer::PlatformMgr().ScheduleWork(OnPairDeviceWithCode, reinterpret_cast(params.release()));
-}
-
-void PairingManager::OnPairDeviceWithCode(intptr_t context)
-{
- Platform::UniquePtr params(reinterpret_cast(context));
- PairingManager & self = PairingManager::Instance();
+ return DeviceLayer::SystemLayer().ScheduleLambda([nodeId]() {
+ PairingManager & self = PairingManager::Instance();
- self.InitPairingCommand();
+ self.InitPairingCommand();
- CommissioningParameters commissioningParams = self.GetCommissioningParameters();
- auto discoveryType = DiscoveryType::kDiscoveryNetworkOnly;
+ CommissioningParameters commissioningParams = self.GetCommissioningParameters();
+ auto discoveryType = DiscoveryType::kDiscoveryNetworkOnly;
- self.mNodeId = params->nodeId;
- self.mOnboardingPayload = params->payloadBuffer;
+ self.mNodeId = nodeId;
- CHIP_ERROR err = self.mCommissioner->PairDevice(params->nodeId, params->payloadBuffer, commissioningParams, discoveryType);
- if (err != CHIP_NO_ERROR)
- {
- ChipLogError(NotSpecified, "Failed to pair device with code, error: %s", ErrorStr(err));
- }
+ CHIP_ERROR err = self.mCommissioner->PairDevice(nodeId, self.mOnboardingPayload, commissioningParams, discoveryType);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(NotSpecified, "Failed to pair device with code, error: %s", ErrorStr(err));
+ }
+ });
}
CHIP_ERROR PairingManager::PairDevice(chip::NodeId nodeId, uint32_t setupPINCode, const char * deviceRemoteIp,
@@ -619,72 +608,50 @@ CHIP_ERROR PairingManager::PairDevice(chip::NodeId nodeId, uint32_t setupPINCode
return CHIP_ERROR_INVALID_STRING_LENGTH;
}
- auto params = Platform::MakeUnique();
- VerifyOrReturnError(params != nullptr, CHIP_ERROR_NO_MEMORY);
-
- params->nodeId = nodeId;
- params->setupPINCode = setupPINCode;
- params->deviceRemotePort = deviceRemotePort;
-
- Platform::CopyString(params->ipAddrBuffer, sizeof(params->ipAddrBuffer), deviceRemoteIp);
-
- // Schedule work on the Matter thread
- return DeviceLayer::PlatformMgr().ScheduleWork(OnPairDevice, reinterpret_cast(params.release()));
-}
+ Platform::CopyString(mRemoteIpAddr, sizeof(mRemoteIpAddr), deviceRemoteIp);
-void PairingManager::OnPairDevice(intptr_t context)
-{
- Platform::UniquePtr params(reinterpret_cast(context));
- PairingManager & self = PairingManager::Instance();
+ return DeviceLayer::SystemLayer().ScheduleLambda([nodeId, setupPINCode, deviceRemotePort]() {
+ PairingManager & self = PairingManager::Instance();
- self.InitPairingCommand();
- self.mSetupPINCode = params->setupPINCode;
+ self.InitPairingCommand();
+ self.mSetupPINCode = setupPINCode;
- Inet::IPAddress address;
- Inet::InterfaceId interfaceId;
+ Inet::IPAddress address;
+ Inet::InterfaceId interfaceId;
- if (!ParseAddressWithInterface(params->ipAddrBuffer, address, interfaceId))
- {
- ChipLogError(NotSpecified, "Invalid IP address: %s", params->ipAddrBuffer);
- return;
- }
+ if (!ParseAddressWithInterface(self.mRemoteIpAddr, address, interfaceId))
+ {
+ ChipLogError(NotSpecified, "Invalid IP address: %s", self.mRemoteIpAddr);
+ return;
+ }
- CHIP_ERROR err = self.Pair(params->nodeId, Transport::PeerAddress::UDP(address, params->deviceRemotePort, interfaceId));
- if (err != CHIP_NO_ERROR)
- {
- ChipLogError(NotSpecified, "Failed to pair device, error: %s", ErrorStr(err));
- }
+ CHIP_ERROR err = self.Pair(nodeId, Transport::PeerAddress::UDP(address, deviceRemotePort, interfaceId));
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(NotSpecified, "Failed to pair device, error: %s", ErrorStr(err));
+ }
+ });
}
CHIP_ERROR PairingManager::UnpairDevice(NodeId nodeId)
{
- auto params = Platform::MakeUnique();
- VerifyOrReturnError(params != nullptr, CHIP_ERROR_NO_MEMORY);
-
- params->nodeId = nodeId;
-
- // Schedule work on the Matter thread
- return DeviceLayer::PlatformMgr().ScheduleWork(OnUnpairDevice, reinterpret_cast(params.release()));
-}
-
-void PairingManager::OnUnpairDevice(intptr_t context)
-{
- Platform::UniquePtr params(reinterpret_cast(context));
- PairingManager & self = PairingManager::Instance();
+ return DeviceLayer::SystemLayer().ScheduleLambda([nodeId]() {
+ PairingManager & self = PairingManager::Instance();
- self.InitPairingCommand();
+ self.InitPairingCommand();
- self.mCurrentFabricRemover = Platform::MakeUnique(self.mCommissioner);
+ self.mCurrentFabricRemover = Platform::MakeUnique(self.mCommissioner);
- if (!self.mCurrentFabricRemover)
- {
- ChipLogError(NotSpecified, "Failed to unpair device, mCurrentFabricRemover is null");
- return;
- }
+ if (!self.mCurrentFabricRemover)
+ {
+ ChipLogError(NotSpecified, "Failed to unpair device, mCurrentFabricRemover is null");
+ return;
+ }
- CHIP_ERROR err = self.mCurrentFabricRemover->RemoveCurrentFabric(params->nodeId, &self.mCurrentFabricRemoveCallback);
- if (err != CHIP_NO_ERROR)
- {
- ChipLogError(NotSpecified, "Failed to unpair device, error: %s", ErrorStr(err));
- }
+ CHIP_ERROR err = self.mCurrentFabricRemover->RemoveCurrentFabric(nodeId, &self.mCurrentFabricRemoveCallback);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogError(NotSpecified, "Failed to unpair device, error: %s", ErrorStr(err));
+ }
+ });
}
diff --git a/examples/fabric-admin/device_manager/PairingManager.h b/examples/fabric-admin/device_manager/PairingManager.h
index 563d129079d3f1..50e64f9f0ca67f 100644
--- a/examples/fabric-admin/device_manager/PairingManager.h
+++ b/examples/fabric-admin/device_manager/PairingManager.h
@@ -140,39 +140,6 @@ class PairingManager : public chip::Controller::DevicePairingDelegate,
CHIP_ERROR UnpairDevice(chip::NodeId nodeId);
private:
- struct CommissioningWindowParams
- {
- chip::NodeId nodeId;
- chip::EndpointId endpointId;
- uint16_t commissioningWindowTimeout;
- uint32_t iteration;
- uint16_t discriminator;
- chip::Optional setupPIN;
- uint8_t verifierBuffer[chip::Crypto::kSpake2p_VerifierSerialized_Length];
- chip::ByteSpan verifier;
- uint8_t saltBuffer[chip::Crypto::kSpake2p_Max_PBKDF_Salt_Length];
- chip::ByteSpan salt;
- };
-
- struct PairDeviceWithCodeParams
- {
- chip::NodeId nodeId;
- char payloadBuffer[kMaxManualCodeLength + 1];
- };
-
- struct PairDeviceParams
- {
- chip::NodeId nodeId;
- uint32_t setupPINCode;
- uint16_t deviceRemotePort;
- char ipAddrBuffer[chip::Inet::IPAddress::kMaxStringLength];
- };
-
- struct UnpairDeviceParams
- {
- chip::NodeId nodeId;
- };
-
// Constructors
PairingManager();
PairingManager(const PairingManager &) = delete;
@@ -202,14 +169,10 @@ class PairingManager : public chip::Controller::DevicePairingDelegate,
const chip::Credentials::DeviceAttestationVerifier::AttestationDeviceInfo & info,
chip::Credentials::AttestationVerificationResult attestationResult) override;
- static void OnOpenCommissioningWindow(intptr_t context);
static void OnOpenCommissioningWindowResponse(void * context, chip::NodeId deviceId, CHIP_ERROR status,
chip::SetupPayload payload);
static void OnOpenCommissioningWindowVerifierResponse(void * context, chip::NodeId deviceId, CHIP_ERROR status);
static void OnCurrentFabricRemove(void * context, chip::NodeId remoteNodeId, CHIP_ERROR status);
- static void OnPairDeviceWithCode(intptr_t context);
- static void OnPairDevice(intptr_t context);
- static void OnUnpairDevice(intptr_t context);
// Private data members
chip::Controller::DeviceCommissioner * mCommissioner = nullptr;
@@ -219,12 +182,17 @@ class PairingManager : public chip::Controller::DevicePairingDelegate,
CommissioningDelegate * mCommissioningDelegate = nullptr;
PairingDelegate * mPairingDelegate = nullptr;
- chip::NodeId mNodeId = chip::kUndefinedNodeId;
- uint16_t mDiscriminator = 0;
- uint32_t mSetupPINCode = 0;
- const char * mOnboardingPayload = nullptr;
- bool mDeviceIsICD = false;
+ chip::NodeId mNodeId = chip::kUndefinedNodeId;
+ chip::ByteSpan mVerifier;
+ chip::ByteSpan mSalt;
+ uint16_t mDiscriminator = 0;
+ uint32_t mSetupPINCode = 0;
+ bool mDeviceIsICD = false;
uint8_t mRandomGeneratedICDSymmetricKey[chip::Crypto::kAES_CCM128_Key_Length];
+ uint8_t mVerifierBuffer[chip::Crypto::kSpake2p_VerifierSerialized_Length];
+ uint8_t mSaltBuffer[chip::Crypto::kSpake2p_Max_PBKDF_Salt_Length];
+ char mRemoteIpAddr[chip::Inet::IPAddress::kMaxStringLength];
+ char mOnboardingPayload[kMaxManualCodeLength + 1];
chip::Optional mICDRegistration;
chip::Optional mICDCheckInNodeId;
diff --git a/examples/fabric-admin/rpc/RpcServer.cpp b/examples/fabric-admin/rpc/RpcServer.cpp
index d68eb11786086e..8613d06c6f3d9f 100644
--- a/examples/fabric-admin/rpc/RpcServer.cpp
+++ b/examples/fabric-admin/rpc/RpcServer.cpp
@@ -101,9 +101,9 @@ class FabricAdmin final : public rpc::FabricAdmin, public IcdManager::Delegate
// TODO(#35875): OpenDeviceCommissioningWindow uses the same controller every time and doesn't currently accept
// FabricIndex. For now we are dropping fabric index from the scoped node id.
NodeId nodeId = request.id.node_id;
- uint32_t commissioningTimeoutSec = request.commissioning_timeout;
uint32_t iterations = request.iterations;
uint16_t discriminator = request.discriminator;
+ uint16_t commissioningTimeoutSec = static_cast(request.commissioning_timeout);
// Log the request details for debugging
ChipLogProgress(NotSpecified,
@@ -111,7 +111,7 @@ class FabricAdmin final : public rpc::FabricAdmin, public IcdManager::Delegate
static_cast(nodeId), commissioningTimeoutSec, iterations, discriminator);
// Open the device commissioning window using raw binary data for salt and verifier
- DeviceMgr().OpenDeviceCommissioningWindow(nodeId, commissioningTimeoutSec, iterations, discriminator,
+ DeviceMgr().OpenDeviceCommissioningWindow(nodeId, iterations, commissioningTimeoutSec, discriminator,
ByteSpan(request.salt.bytes, request.salt.size),
ByteSpan(request.verifier.bytes, request.verifier.size));
diff --git a/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.matter b/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.matter
index ed7b86037fa8d2..b261eba0bb3a4d 100644
--- a/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.matter
+++ b/examples/fabric-bridge-app/fabric-bridge-common/fabric-bridge-app.matter
@@ -710,6 +710,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -1697,7 +1698,7 @@ cluster GroupKeyManagement = 63 {
}
/** Supports the ability for clients to request the commissioning of themselves or other nodes onto a fabric which the cluster server can commission onto. */
-provisional cluster CommissionerControl = 1873 {
+cluster CommissionerControl = 1873 {
revision 1;
bitmap SupportedDeviceCategoryBitmap : bitmap32 {
diff --git a/examples/fabric-bridge-app/fabric-bridge-common/src/BridgedDevice.cpp b/examples/fabric-bridge-app/fabric-bridge-common/src/BridgedDevice.cpp
index 02bdfbdbcbf75f..7d588112997570 100644
--- a/examples/fabric-bridge-app/fabric-bridge-common/src/BridgedDevice.cpp
+++ b/examples/fabric-bridge-app/fabric-bridge-common/src/BridgedDevice.cpp
@@ -24,78 +24,31 @@
#include
#include
-namespace {
-
-struct ActiveChangeEventWorkData
-{
- chip::EndpointId mEndpointId;
- uint32_t mPromisedActiveDuration;
-};
-
-struct ReportAttributeChangedWorkData
-{
- chip::EndpointId mEndpointId;
- bool mWindowChanged = false;
- bool mFabricIndexChanged = false;
- bool mVendorChanged = false;
-};
-
-void ActiveChangeEventWork(intptr_t arg)
-{
- ActiveChangeEventWorkData * data = reinterpret_cast(arg);
-
- chip::app::Clusters::BridgedDeviceBasicInformation::Events::ActiveChanged::Type event{};
- event.promisedActiveDuration = data->mPromisedActiveDuration;
- chip::EventNumber eventNumber = 0;
-
- CHIP_ERROR err = chip::app::LogEvent(event, data->mEndpointId, eventNumber);
- if (err != CHIP_NO_ERROR)
- {
- ChipLogProgress(NotSpecified, "LogEvent for ActiveChanged failed %s", err.AsString());
- }
- chip::Platform::Delete(data);
-}
-
-void ReportAttributeChangedWork(intptr_t arg)
-{
- ReportAttributeChangedWorkData * data = reinterpret_cast(arg);
-
- if (data->mWindowChanged)
- {
- MatterReportingAttributeChangeCallback(data->mEndpointId, chip::app::Clusters::AdministratorCommissioning::Id,
- chip::app::Clusters::AdministratorCommissioning::Attributes::WindowStatus::Id);
- }
- if (data->mFabricIndexChanged)
- {
- MatterReportingAttributeChangeCallback(data->mEndpointId, chip::app::Clusters::AdministratorCommissioning::Id,
- chip::app::Clusters::AdministratorCommissioning::Attributes::AdminFabricIndex::Id);
- }
- if (data->mVendorChanged)
- {
- MatterReportingAttributeChangeCallback(data->mEndpointId, chip::app::Clusters::AdministratorCommissioning::Id,
- chip::app::Clusters::AdministratorCommissioning::Attributes::AdminVendorId::Id);
- }
- chip::Platform::Delete(data);
-}
-
-} // namespace
-
+using namespace chip;
using namespace chip::app::Clusters::Actions;
-BridgedDevice::BridgedDevice(chip::ScopedNodeId scopedNodeId)
+BridgedDevice::BridgedDevice(ScopedNodeId scopedNodeId)
{
mReachable = false;
mScopedNodeId = scopedNodeId;
- mEndpointId = chip::kInvalidEndpointId;
+ mEndpointId = kInvalidEndpointId;
}
void BridgedDevice::LogActiveChangeEvent(uint32_t promisedActiveDurationMs)
{
- ActiveChangeEventWorkData * workdata = chip::Platform::New();
- workdata->mEndpointId = mEndpointId;
- workdata->mPromisedActiveDuration = promisedActiveDurationMs;
-
- chip::DeviceLayer::PlatformMgr().ScheduleWork(ActiveChangeEventWork, reinterpret_cast(workdata));
+ EndpointId endpointId = mEndpointId;
+
+ DeviceLayer::SystemLayer().ScheduleLambda([endpointId, promisedActiveDurationMs]() {
+ app::Clusters::BridgedDeviceBasicInformation::Events::ActiveChanged::Type event{};
+ event.promisedActiveDuration = promisedActiveDurationMs;
+ EventNumber eventNumber = 0;
+
+ CHIP_ERROR err = app::LogEvent(event, endpointId, eventNumber);
+ if (err != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(NotSpecified, "LogEvent for ActiveChanged failed %s", err.AsString());
+ }
+ });
}
void BridgedDevice::SetReachable(bool reachable)
@@ -114,15 +67,29 @@ void BridgedDevice::SetReachable(bool reachable)
void BridgedDevice::SetAdminCommissioningAttributes(const AdminCommissioningAttributes & aAdminCommissioningAttributes)
{
- ReportAttributeChangedWorkData * workdata = chip::Platform::New();
-
- workdata->mEndpointId = mEndpointId;
- workdata->mWindowChanged =
+ EndpointId endpointId = mEndpointId;
+ bool windowChanged =
(aAdminCommissioningAttributes.commissioningWindowStatus != mAdminCommissioningAttributes.commissioningWindowStatus);
- workdata->mFabricIndexChanged =
- (aAdminCommissioningAttributes.openerFabricIndex != mAdminCommissioningAttributes.openerFabricIndex);
- workdata->mVendorChanged = (aAdminCommissioningAttributes.openerVendorId != mAdminCommissioningAttributes.openerVendorId);
+ bool fabricIndexChanged = (aAdminCommissioningAttributes.openerFabricIndex != mAdminCommissioningAttributes.openerFabricIndex);
+ bool vendorChanged = (aAdminCommissioningAttributes.openerVendorId != mAdminCommissioningAttributes.openerVendorId);
mAdminCommissioningAttributes = aAdminCommissioningAttributes;
- chip::DeviceLayer::PlatformMgr().ScheduleWork(ReportAttributeChangedWork, reinterpret_cast(workdata));
+
+ DeviceLayer::SystemLayer().ScheduleLambda([endpointId, windowChanged, fabricIndexChanged, vendorChanged]() {
+ if (windowChanged)
+ {
+ MatterReportingAttributeChangeCallback(endpointId, app::Clusters::AdministratorCommissioning::Id,
+ app::Clusters::AdministratorCommissioning::Attributes::WindowStatus::Id);
+ }
+ if (fabricIndexChanged)
+ {
+ MatterReportingAttributeChangeCallback(endpointId, app::Clusters::AdministratorCommissioning::Id,
+ app::Clusters::AdministratorCommissioning::Attributes::AdminFabricIndex::Id);
+ }
+ if (vendorChanged)
+ {
+ MatterReportingAttributeChangeCallback(endpointId, app::Clusters::AdministratorCommissioning::Id,
+ app::Clusters::AdministratorCommissioning::Attributes::AdminVendorId::Id);
+ }
+ });
}
diff --git a/examples/fabric-bridge-app/linux/main.cpp b/examples/fabric-bridge-app/linux/main.cpp
index 2a793637128f27..a101fd3d32a91a 100644
--- a/examples/fabric-bridge-app/linux/main.cpp
+++ b/examples/fabric-bridge-app/linux/main.cpp
@@ -16,10 +16,6 @@
* limitations under the License.
*/
-#include
-#include
-#include
-
#include
#include "BridgedAdministratorCommissioning.h"
@@ -55,8 +51,6 @@ using namespace chip::app::Clusters::BridgedDeviceBasicInformation;
namespace {
-constexpr uint16_t kPollIntervalMs = 100;
-
#if defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE
constexpr uint16_t kRetryIntervalS = 3;
#endif
@@ -87,10 +81,10 @@ bool HandleCustomOption(const char * aProgram, ArgParser::OptionSet * aOptions,
switch (aIdentifier)
{
case kOptionFabricAdminServerPortNumber:
- gFabricAdminServerPort = atoi(aValue);
+ gFabricAdminServerPort = static_cast(atoi(aValue));
break;
case kOptionLocalServerPortNumber:
- gLocalServerPort = atoi(aValue);
+ gLocalServerPort = static_cast(atoi(aValue));
break;
default:
ArgParser::PrintArgError("%s: INTERNAL ERROR: Unhandled option: %s\n", aProgram, aName);
@@ -103,33 +97,6 @@ bool HandleCustomOption(const char * aProgram, ArgParser::OptionSet * aOptions,
ArgParser::OptionSet sProgramCustomOptions = { HandleCustomOption, sProgramCustomOptionDefs, "GENERAL OPTIONS",
sProgramCustomOptionHelp };
-bool KeyboardHit()
-{
- int bytesWaiting;
- ioctl(0, FIONREAD, &bytesWaiting);
- return bytesWaiting > 0;
-}
-
-void BridgePollingThread()
-{
- while (true)
- {
- if (KeyboardHit())
- {
- int ch = getchar();
- if (ch == 'e')
- {
- ChipLogProgress(NotSpecified, "Exiting.....");
- exit(0);
- }
- continue;
- }
-
- // Sleep to avoid tight loop reading commands
- usleep(kPollIntervalMs * 1000);
- }
-}
-
#if defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE
void AttemptRpcClientConnect(System::Layer * systemLayer, void * appState)
{
@@ -292,10 +259,6 @@ void ApplicationInit()
AttemptRpcClientConnect(&DeviceLayer::SystemLayer(), nullptr);
#endif
- // Start a thread for bridge polling
- std::thread pollingThread(BridgePollingThread);
- pollingThread.detach();
-
BridgeDeviceMgr().Init();
VerifyOrDie(gBridgedAdministratorCommissioning.Init() == CHIP_NO_ERROR);
diff --git a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImExtendableInvokeCommand.kt b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImExtendableInvokeCommand.kt
index 0b1a2ab7467f5c..be1af1d62c0818 100644
--- a/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImExtendableInvokeCommand.kt
+++ b/examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImExtendableInvokeCommand.kt
@@ -75,6 +75,7 @@ class PairOnNetworkLongImExtendableInvokeCommand(
) {
setFailure("invoke failure with incorrect status")
}
+ responseCount++
}
if (clusterId == CLUSTER_ID_TEST && commandId == TEST_ADD_ARGUMENT_RSP_COMMAND) {
@@ -89,8 +90,8 @@ class PairOnNetworkLongImExtendableInvokeCommand(
if (status != null) {
setFailure("invoke failure with incorrect status")
}
+ responseCount++
}
- responseCount++
}
override fun onNoResponse(noInvokeResponseData: NoInvokeResponseData) {
@@ -126,7 +127,7 @@ class PairOnNetworkLongImExtendableInvokeCommand(
val element1: InvokeElement =
InvokeElement.newInstance(
- /* endpointId= */ 0,
+ /* endpointId= */ 1,
CLUSTER_ID_IDENTIFY,
IDENTIFY_COMMAND,
tlvWriter1.getEncoded(),
diff --git a/examples/laundry-washer-app/nxp/zap/laundry-washer-app.matter b/examples/laundry-washer-app/nxp/zap/laundry-washer-app.matter
index 8f30d53f6e8af2..39546259b0bd19 100644
--- a/examples/laundry-washer-app/nxp/zap/laundry-washer-app.matter
+++ b/examples/laundry-washer-app/nxp/zap/laundry-washer-app.matter
@@ -1194,6 +1194,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/light-switch-app/light-switch-common/light-switch-app.matter b/examples/light-switch-app/light-switch-common/light-switch-app.matter
index 947a24740fba32..07910e283f3a0a 100644
--- a/examples/light-switch-app/light-switch-common/light-switch-app.matter
+++ b/examples/light-switch-app/light-switch-common/light-switch-app.matter
@@ -959,6 +959,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -3222,7 +3223,7 @@ endpoint 2 {
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 2;
+ ram attribute featureMap default = 6;
ram attribute clusterRevision default = 2;
}
}
diff --git a/examples/light-switch-app/light-switch-common/light-switch-app.zap b/examples/light-switch-app/light-switch-common/light-switch-app.zap
index 89f718140f12e3..595b0d8f838a7d 100644
--- a/examples/light-switch-app/light-switch-common/light-switch-app.zap
+++ b/examples/light-switch-app/light-switch-common/light-switch-app.zap
@@ -5587,7 +5587,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "6",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
diff --git a/examples/light-switch-app/qpg/zap/switch.matter b/examples/light-switch-app/qpg/zap/switch.matter
index 0cbae08b3472ea..979ae18fa4234a 100644
--- a/examples/light-switch-app/qpg/zap/switch.matter
+++ b/examples/light-switch-app/qpg/zap/switch.matter
@@ -1343,6 +1343,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.matter b/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.matter
index c5ee2bb6d3d668..0979b305ca9e70 100644
--- a/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.matter
+++ b/examples/lighting-app-data-mode-no-unique-id/lighting-common/lighting-app.matter
@@ -1013,6 +1013,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter
index ac770a74de722e..8c4fa34560a7c6 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter
@@ -1013,6 +1013,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
index c8c3ebca3a0ed7..d528254100181b 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
@@ -1013,6 +1013,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
index 66ccb1f4fb9e79..6d26e8c2f8e4f3 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
@@ -1013,6 +1013,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lighting-app/esp32/main/CMakeLists.txt b/examples/lighting-app/esp32/main/CMakeLists.txt
index 8b2a2fdce397cb..d3dc3421cc105f 100644
--- a/examples/lighting-app/esp32/main/CMakeLists.txt
+++ b/examples/lighting-app/esp32/main/CMakeLists.txt
@@ -51,7 +51,6 @@ set(SRC_DIRS_LIST
"${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/time-format-localization-server"
"${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/level-control"
"${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/network-commissioning"
- "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/occupancy-sensor-server"
"${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/on-off-server"
"${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/operational-credentials-server"
"${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/ota-requestor"
diff --git a/examples/lighting-app/lighting-common/lighting-app.matter b/examples/lighting-app/lighting-common/lighting-app.matter
index 3ebe017c3d4988..f8e6d2e795b4d4 100644
--- a/examples/lighting-app/lighting-common/lighting-app.matter
+++ b/examples/lighting-app/lighting-common/lighting-app.matter
@@ -1013,6 +1013,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -2576,70 +2577,6 @@ cluster ColorControl = 768 {
command StepColorTemperature(StepColorTemperatureRequest): DefaultSuccess = 76;
}
-/** The server cluster provides an interface to occupancy sensing functionality based on one or more sensing modalities, including configuration and provision of notifications of occupancy status. */
-cluster OccupancySensing = 1030 {
- revision 5;
-
- enum OccupancySensorTypeEnum : enum8 {
- kPIR = 0;
- kUltrasonic = 1;
- kPIRAndUltrasonic = 2;
- kPhysicalContact = 3;
- }
-
- bitmap Feature : bitmap32 {
- kOther = 0x1;
- kPassiveInfrared = 0x2;
- kUltrasonic = 0x4;
- kPhysicalContact = 0x8;
- kActiveInfrared = 0x10;
- kRadar = 0x20;
- kRFSensing = 0x40;
- kVision = 0x80;
- }
-
- bitmap OccupancyBitmap : bitmap8 {
- kOccupied = 0x1;
- }
-
- bitmap OccupancySensorTypeBitmap : bitmap8 {
- kPIR = 0x1;
- kUltrasonic = 0x2;
- kPhysicalContact = 0x4;
- }
-
- struct HoldTimeLimitsStruct {
- int16u holdTimeMin = 0;
- int16u holdTimeMax = 1;
- int16u holdTimeDefault = 2;
- }
-
- info event OccupancyChanged = 0 {
- OccupancyBitmap occupancy = 0;
- }
-
- readonly attribute OccupancyBitmap occupancy = 0;
- readonly attribute OccupancySensorTypeEnum occupancySensorType = 1;
- readonly attribute OccupancySensorTypeBitmap occupancySensorTypeBitmap = 2;
- attribute access(write: manage) optional int16u holdTime = 3;
- readonly attribute optional HoldTimeLimitsStruct holdTimeLimits = 4;
- attribute access(write: manage) optional int16u PIROccupiedToUnoccupiedDelay = 16;
- attribute access(write: manage) optional int16u PIRUnoccupiedToOccupiedDelay = 17;
- attribute access(write: manage) optional int8u PIRUnoccupiedToOccupiedThreshold = 18;
- attribute access(write: manage) optional int16u ultrasonicOccupiedToUnoccupiedDelay = 32;
- attribute access(write: manage) optional int16u ultrasonicUnoccupiedToOccupiedDelay = 33;
- attribute access(write: manage) optional int8u ultrasonicUnoccupiedToOccupiedThreshold = 34;
- attribute access(write: manage) optional int16u physicalContactOccupiedToUnoccupiedDelay = 48;
- attribute access(write: manage) optional int16u physicalContactUnoccupiedToOccupiedDelay = 49;
- attribute access(write: manage) optional int8u physicalContactUnoccupiedToOccupiedThreshold = 50;
- 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;
-}
-
endpoint 0 {
device type ma_rootdevice = 22, version 1;
@@ -3127,14 +3064,6 @@ endpoint 1 {
handle command MoveColorTemperature;
handle command StepColorTemperature;
}
-
- server cluster OccupancySensing {
- ram attribute occupancy;
- ram attribute occupancySensorType;
- ram attribute occupancySensorTypeBitmap;
- callback attribute featureMap;
- ram attribute clusterRevision default = 5;
- }
}
diff --git a/examples/lighting-app/lighting-common/lighting-app.zap b/examples/lighting-app/lighting-common/lighting-app.zap
index b7928f3b96f163..b04b233712c293 100644
--- a/examples/lighting-app/lighting-common/lighting-app.zap
+++ b/examples/lighting-app/lighting-common/lighting-app.zap
@@ -19,18 +19,18 @@
"package": [
{
"pathRelativity": "relativeToZap",
- "path": "../../../src/app/zap-templates/zcl/zcl.json",
- "type": "zcl-properties",
+ "path": "../../../src/app/zap-templates/app-templates.json",
+ "type": "gen-templates-json",
"category": "matter",
- "version": 1,
- "description": "Matter SDK ZCL data"
+ "version": "chip-v1"
},
{
"pathRelativity": "relativeToZap",
- "path": "../../../src/app/zap-templates/app-templates.json",
- "type": "gen-templates-json",
+ "path": "../../../src/app/zap-templates/zcl/zcl.json",
+ "type": "zcl-properties",
"category": "matter",
- "version": "chip-v1"
+ "version": 1,
+ "description": "Matter SDK ZCL data"
}
],
"endpointTypes": [
@@ -5638,96 +5638,6 @@
"reportableChange": 0
}
]
- },
- {
- "name": "Occupancy Sensing",
- "code": 1030,
- "mfgCode": null,
- "define": "OCCUPANCY_SENSING_CLUSTER",
- "side": "server",
- "enabled": 1,
- "attributes": [
- {
- "name": "Occupancy",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "type": "OccupancyBitmap",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "OccupancySensorType",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "type": "OccupancySensorTypeEnum",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "OccupancySensorTypeBitmap",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "type": "OccupancySensorTypeBitmap",
- "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": "External",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": null,
- "reportable": 1,
- "minInterval": 1,
- "maxInterval": 65534,
- "reportableChange": 0
- },
- {
- "name": "ClusterRevision",
- "code": 65533,
- "mfgCode": null,
- "side": "server",
- "type": "int16u",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "5",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
}
]
}
diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.matter b/examples/lighting-app/nxp/zap/lighting-on-off.matter
index 99a3c51c4111a5..d76ebd5cd8a50d 100644
--- a/examples/lighting-app/nxp/zap/lighting-on-off.matter
+++ b/examples/lighting-app/nxp/zap/lighting-on-off.matter
@@ -1013,6 +1013,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lighting-app/qpg/zap/light.matter b/examples/lighting-app/qpg/zap/light.matter
index a352d37dbb0997..fc3de298b9d073 100644
--- a/examples/lighting-app/qpg/zap/light.matter
+++ b/examples/lighting-app/qpg/zap/light.matter
@@ -1013,6 +1013,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lighting-app/silabs/data_model/lighting-thread-app.matter b/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
index 52285ea3b462c1..ac3896a6d9cf03 100644
--- a/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
+++ b/examples/lighting-app/silabs/data_model/lighting-thread-app.matter
@@ -1013,6 +1013,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter b/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
index 6fb823728b6627..61be1cd04594e9 100644
--- a/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
+++ b/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter
@@ -1272,6 +1272,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter
index 2d3430c8d98c23..e67ae7524be12e 100644
--- a/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter
+++ b/examples/lit-icd-app/lit-icd-common/lit-icd-server-app.matter
@@ -765,6 +765,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lit-icd-app/silabs/build_for_wifi_args.gni b/examples/lit-icd-app/silabs/build_for_wifi_args.gni
index 56cd70b217e81e..6ef009e9064d75 100644
--- a/examples/lit-icd-app/silabs/build_for_wifi_args.gni
+++ b/examples/lit-icd-app/silabs/build_for_wifi_args.gni
@@ -29,7 +29,6 @@ sl_enable_test_event_trigger = true
chip_enable_icd_server = true
chip_subscription_timeout_resumption = false
sl_use_subscription_syncing = true
-icd_enforce_sit_slow_poll_limit = true
chip_enable_icd_lit = true
# ICD Matter Configuration flags
diff --git a/examples/lit-icd-app/silabs/openthread.gni b/examples/lit-icd-app/silabs/openthread.gni
index b12529c2cab39a..e84e7be8ed1292 100644
--- a/examples/lit-icd-app/silabs/openthread.gni
+++ b/examples/lit-icd-app/silabs/openthread.gni
@@ -32,7 +32,6 @@ sl_enable_test_event_trigger = true
chip_enable_icd_server = true
chip_subscription_timeout_resumption = false
sl_use_subscription_syncing = true
-icd_enforce_sit_slow_poll_limit = true
chip_icd_report_on_active_mode = true
chip_enable_icd_lit = true
diff --git a/examples/lock-app/lock-common/lock-app.matter b/examples/lock-app/lock-common/lock-app.matter
index 5e9c4080af73b5..94c2fcf3bb04fb 100644
--- a/examples/lock-app/lock-common/lock-app.matter
+++ b/examples/lock-app/lock-common/lock-app.matter
@@ -1024,6 +1024,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lock-app/nxp/k32w1/args.gni b/examples/lock-app/nxp/k32w1/args.gni
index e0c41d1e34f870..b7a2d790efb3e2 100644
--- a/examples/lock-app/nxp/k32w1/args.gni
+++ b/examples/lock-app/nxp/k32w1/args.gni
@@ -30,7 +30,6 @@ chip_with_lwip = false
chip_enable_icd_server = true
chip_enable_icd_lit = false
-icd_enforce_sit_slow_poll_limit = true
chip_persist_subscriptions = true
chip_subscription_timeout_resumption = true
diff --git a/examples/lock-app/nxp/mcxw71/args.gni b/examples/lock-app/nxp/mcxw71/args.gni
index 761b050b80cbec..1a0940c96aabdb 100644
--- a/examples/lock-app/nxp/mcxw71/args.gni
+++ b/examples/lock-app/nxp/mcxw71/args.gni
@@ -30,7 +30,6 @@ chip_with_lwip = false
chip_enable_icd_server = true
chip_enable_icd_lit = false
-icd_enforce_sit_slow_poll_limit = true
chip_persist_subscriptions = true
chip_subscription_timeout_resumption = true
diff --git a/examples/lock-app/nxp/zap/lock-app.matter b/examples/lock-app/nxp/zap/lock-app.matter
index c975e2b7c17d3c..fc3a8917b2a3a0 100644
--- a/examples/lock-app/nxp/zap/lock-app.matter
+++ b/examples/lock-app/nxp/zap/lock-app.matter
@@ -756,6 +756,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lock-app/qpg/zap/lock.matter b/examples/lock-app/qpg/zap/lock.matter
index 0c408680b1cf8c..53bf1d4f8d8499 100644
--- a/examples/lock-app/qpg/zap/lock.matter
+++ b/examples/lock-app/qpg/zap/lock.matter
@@ -816,6 +816,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/lock-app/silabs/data_model/lock-app.matter b/examples/lock-app/silabs/data_model/lock-app.matter
index 9902b87beb73ab..bf8c297e1c272f 100644
--- a/examples/lock-app/silabs/data_model/lock-app.matter
+++ b/examples/lock-app/silabs/data_model/lock-app.matter
@@ -1024,6 +1024,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/log-source-app/log-source-common/log-source-app.matter b/examples/log-source-app/log-source-common/log-source-app.matter
index 3da4e2a7ec49c4..e5f6ee100785f0 100644
--- a/examples/log-source-app/log-source-common/log-source-app.matter
+++ b/examples/log-source-app/log-source-common/log-source-app.matter
@@ -405,6 +405,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.matter b/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.matter
index f9ee0e90dd1411..f22729df8880f1 100644
--- a/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.matter
+++ b/examples/microwave-oven-app/microwave-oven-common/microwave-oven-app.matter
@@ -629,6 +629,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/network-manager-app/network-manager-common/network-manager-app.matter b/examples/network-manager-app/network-manager-common/network-manager-app.matter
index e3b0fb9de3bdda..5d53e157329f58 100644
--- a/examples/network-manager-app/network-manager-common/network-manager-app.matter
+++ b/examples/network-manager-app/network-manager-common/network-manager-app.matter
@@ -535,6 +535,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/ota-provider-app/ota-provider-common/ota-provider-app.matter b/examples/ota-provider-app/ota-provider-common/ota-provider-app.matter
index a8773f83d17965..7538f304f356d4 100644
--- a/examples/ota-provider-app/ota-provider-common/ota-provider-app.matter
+++ b/examples/ota-provider-app/ota-provider-common/ota-provider-app.matter
@@ -736,6 +736,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.matter b/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.matter
index 2ab9918446a349..b7514cf573c870 100644
--- a/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.matter
+++ b/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.matter
@@ -888,6 +888,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/placeholder/linux/apps/app1/config.matter b/examples/placeholder/linux/apps/app1/config.matter
index 79d17e5306c142..30f9ca883b0a9a 100644
--- a/examples/placeholder/linux/apps/app1/config.matter
+++ b/examples/placeholder/linux/apps/app1/config.matter
@@ -1672,6 +1672,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -1763,6 +1764,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/placeholder/linux/apps/app2/config.matter b/examples/placeholder/linux/apps/app2/config.matter
index 467aed8bacf396..d8ced986c7b0ce 100644
--- a/examples/placeholder/linux/apps/app2/config.matter
+++ b/examples/placeholder/linux/apps/app2/config.matter
@@ -1629,6 +1629,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -1720,6 +1721,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/pump-app/pump-common/pump-app.matter b/examples/pump-app/pump-common/pump-app.matter
index fc30273ac010bb..d4ac8e35a3c9b2 100644
--- a/examples/pump-app/pump-common/pump-app.matter
+++ b/examples/pump-app/pump-common/pump-app.matter
@@ -957,6 +957,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/pump-app/silabs/data_model/pump-thread-app.matter b/examples/pump-app/silabs/data_model/pump-thread-app.matter
index c45e6dcfb8a2b3..7d730d759c139a 100644
--- a/examples/pump-app/silabs/data_model/pump-thread-app.matter
+++ b/examples/pump-app/silabs/data_model/pump-thread-app.matter
@@ -957,6 +957,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/pump-app/silabs/data_model/pump-wifi-app.matter b/examples/pump-app/silabs/data_model/pump-wifi-app.matter
index c45e6dcfb8a2b3..7d730d759c139a 100644
--- a/examples/pump-app/silabs/data_model/pump-wifi-app.matter
+++ b/examples/pump-app/silabs/data_model/pump-wifi-app.matter
@@ -957,6 +957,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter b/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter
index 43d27b44e15fce..a7c2ebcd0fbbdf 100644
--- a/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter
+++ b/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter
@@ -832,6 +832,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/refrigerator-app/refrigerator-common/refrigerator-app.matter b/examples/refrigerator-app/refrigerator-common/refrigerator-app.matter
index 6a43e52c643058..f3149e01afe4c9 100644
--- a/examples/refrigerator-app/refrigerator-common/refrigerator-app.matter
+++ b/examples/refrigerator-app/refrigerator-common/refrigerator-app.matter
@@ -561,6 +561,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/rvc-app/rvc-common/rvc-app.matter b/examples/rvc-app/rvc-common/rvc-app.matter
index c6af761d33bf9f..4f981a8f173a82 100644
--- a/examples/rvc-app/rvc-common/rvc-app.matter
+++ b/examples/rvc-app/rvc-common/rvc-app.matter
@@ -585,6 +585,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/smoke-co-alarm-app/silabs/build_for_wifi_args.gni b/examples/smoke-co-alarm-app/silabs/build_for_wifi_args.gni
index 0619082413530d..e5097f8a1d82b7 100644
--- a/examples/smoke-co-alarm-app/silabs/build_for_wifi_args.gni
+++ b/examples/smoke-co-alarm-app/silabs/build_for_wifi_args.gni
@@ -28,7 +28,6 @@ sl_enable_test_event_trigger = true
chip_enable_icd_server = true
chip_subscription_timeout_resumption = false
sl_use_subscription_syncing = true
-icd_enforce_sit_slow_poll_limit = true
chip_enable_icd_lit = true
# ICD Matter Configuration flags
diff --git a/examples/smoke-co-alarm-app/silabs/openthread.gni b/examples/smoke-co-alarm-app/silabs/openthread.gni
index 845b2220b4570a..f2a7ab6ed78434 100644
--- a/examples/smoke-co-alarm-app/silabs/openthread.gni
+++ b/examples/smoke-co-alarm-app/silabs/openthread.gni
@@ -32,7 +32,6 @@ sl_enable_test_event_trigger = true
chip_enable_icd_server = true
chip_subscription_timeout_resumption = false
sl_use_subscription_syncing = true
-icd_enforce_sit_slow_poll_limit = true
chip_icd_report_on_active_mode = true
chip_enable_icd_lit = true
diff --git a/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.matter b/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.matter
index fbba1a8ab8826d..a593b61e3ac6d5 100644
--- a/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.matter
+++ b/examples/smoke-co-alarm-app/smoke-co-alarm-common/smoke-co-alarm-app.matter
@@ -1075,6 +1075,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter b/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter
index 925b3ee8687259..84acb6b3c45376 100644
--- a/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter
+++ b/examples/temperature-measurement-app/temperature-measurement-common/temperature-measurement.matter
@@ -715,6 +715,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/thermostat/nxp/zap/thermostat_matter_br.matter b/examples/thermostat/nxp/zap/thermostat_matter_br.matter
index 9b35e9d22b4573..72c23a4e22096a 100644
--- a/examples/thermostat/nxp/zap/thermostat_matter_br.matter
+++ b/examples/thermostat/nxp/zap/thermostat_matter_br.matter
@@ -866,6 +866,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/thermostat/nxp/zap/thermostat_matter_thread.matter b/examples/thermostat/nxp/zap/thermostat_matter_thread.matter
index f02c08a6a5f7b1..49856ff0108749 100644
--- a/examples/thermostat/nxp/zap/thermostat_matter_thread.matter
+++ b/examples/thermostat/nxp/zap/thermostat_matter_thread.matter
@@ -866,6 +866,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/thermostat/nxp/zap/thermostat_matter_wifi.matter b/examples/thermostat/nxp/zap/thermostat_matter_wifi.matter
index a583ab8f962f55..1aad4ca9b0dd8e 100644
--- a/examples/thermostat/nxp/zap/thermostat_matter_wifi.matter
+++ b/examples/thermostat/nxp/zap/thermostat_matter_wifi.matter
@@ -866,6 +866,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/thermostat/qpg/zap/thermostaticRadiatorValve.matter b/examples/thermostat/qpg/zap/thermostaticRadiatorValve.matter
index 1f7b2191bc8e47..86383cf90492b8 100644
--- a/examples/thermostat/qpg/zap/thermostaticRadiatorValve.matter
+++ b/examples/thermostat/qpg/zap/thermostaticRadiatorValve.matter
@@ -913,6 +913,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/thermostat/thermostat-common/thermostat.matter b/examples/thermostat/thermostat-common/thermostat.matter
index 08106665d9d1d2..1c062da0fecabc 100644
--- a/examples/thermostat/thermostat-common/thermostat.matter
+++ b/examples/thermostat/thermostat-common/thermostat.matter
@@ -974,6 +974,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/thread-br-app/thread-br-common/thread-br-app.matter b/examples/thread-br-app/thread-br-common/thread-br-app.matter
index ce073c319b8a56..63a6a567a3e291 100644
--- a/examples/thread-br-app/thread-br-common/thread-br-app.matter
+++ b/examples/thread-br-app/thread-br-common/thread-br-app.matter
@@ -535,6 +535,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/tv-app/tv-common/tv-app.matter b/examples/tv-app/tv-common/tv-app.matter
index 6ea0892facbb99..b3a06cd2d3533f 100644
--- a/examples/tv-app/tv-common/tv-app.matter
+++ b/examples/tv-app/tv-common/tv-app.matter
@@ -937,6 +937,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -1028,6 +1029,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/tv-casting-app/linux/simple-app-helper.cpp b/examples/tv-casting-app/linux/simple-app-helper.cpp
index 115fe9f7869fc9..4bdf660bd5bda9 100644
--- a/examples/tv-casting-app/linux/simple-app-helper.cpp
+++ b/examples/tv-casting-app/linux/simple-app-helper.cpp
@@ -450,6 +450,9 @@ CHIP_ERROR CommandHandler(int argc, char ** argv)
targetCastingPlayer->VerifyOrEstablishConnection(connectionCallbacks, matter::casting::core::kCommissioningWindowTimeoutSec,
idOptions);
+ ChipLogProgress(AppServer, "CommandHandler() request, VerifyOrEstablishConnection() called, calling StopDiscovery()");
+ // Stop discovery since we have discovered, and are now connecting to the desired CastingPlayer.
+ matter::casting::core::CastingPlayerDiscovery::GetInstance()->StopDiscovery();
return CHIP_NO_ERROR;
}
if (strcmp(argv[0], "setcommissionerpasscode") == 0)
diff --git a/examples/tv-casting-app/tv-casting-common/core/CastingPlayer.cpp b/examples/tv-casting-app/tv-casting-common/core/CastingPlayer.cpp
index 83fc6b4b563a9e..37d442f7142aa2 100644
--- a/examples/tv-casting-app/tv-casting-common/core/CastingPlayer.cpp
+++ b/examples/tv-casting-app/tv-casting-common/core/CastingPlayer.cpp
@@ -380,10 +380,10 @@ chip::Inet::IPAddress * CastingPlayer::GetIpAddressForUDCRequest()
void CastingPlayer::FindOrEstablishSession(void * clientContext, chip::OnDeviceConnected onDeviceConnected,
chip::OnDeviceConnectionFailure onDeviceConnectionFailure)
{
- ChipLogProgress(AppServer, "CastingPlayer.FindOrEstablishSession called on nodeId=0x" ChipLogFormatX64 " fabricIndex=%d",
+ ChipLogProgress(AppServer, "CastingPlayer::FindOrEstablishSession() called on nodeId=0x" ChipLogFormatX64 " fabricIndex=%d",
ChipLogValueX64(mAttributes.nodeId), mAttributes.fabricIndex);
VerifyOrReturn(mAttributes.nodeId != 0 && mAttributes.fabricIndex != 0,
- ChipLogError(AppServer, "CastingPlayer.FindOrEstablishSession called on invalid nodeId/fabricIndex"));
+ ChipLogError(AppServer, "CastingPlayer::FindOrEstablishSession() called on invalid nodeId/fabricIndex"));
ConnectionContext * connectionContext =
new ConnectionContext(clientContext, this, onDeviceConnected, onDeviceConnectionFailure);
diff --git a/examples/tv-casting-app/tv-casting-common/core/Endpoint.h b/examples/tv-casting-app/tv-casting-common/core/Endpoint.h
index 734f1e3d5ae140..85e67dbfe95ade 100644
--- a/examples/tv-casting-app/tv-casting-common/core/Endpoint.h
+++ b/examples/tv-casting-app/tv-casting-common/core/Endpoint.h
@@ -105,7 +105,6 @@ class Endpoint : public std::enable_shared_from_this
*/
std::vector GetServerList()
{
- ChipLogProgress(AppServer, "Endpoint::GetServerList() mClusters.size(): %d", static_cast(mClusters.size()));
std::vector serverList;
for (auto const & cluster : mClusters)
{
@@ -123,7 +122,6 @@ class Endpoint : public std::enable_shared_from_this
template
void RegisterCluster(const chip::ClusterId clusterId)
{
- ChipLogProgress(AppServer, "Endpoint::RegisterCluster() Registering clusterId %d for endpointId %d", clusterId, GetId());
static_assert(std::is_base_of::value, "T must be derived from BaseCluster");
auto cluster = std::make_shared(shared_from_this());
cluster->SetUp();
@@ -137,7 +135,6 @@ class Endpoint : public std::enable_shared_from_this
memory::Strong GetCluster()
{
static_assert(std::is_base_of::value, "T must be derived from BaseCluster");
- ChipLogProgress(AppServer, "Endpoint::GetCluster() mClusters.size(): %d", static_cast(mClusters.size()));
for (const auto & pair : mClusters)
{
auto cluster = std::dynamic_pointer_cast(pair.second);
@@ -151,8 +148,8 @@ class Endpoint : public std::enable_shared_from_this
void LogDetail() const
{
- ChipLogProgress(AppServer, "Endpoint::LogDetail() Endpoint ID: %d, Vendor ID: %d, Product ID: %d", mAttributes.mId,
- mAttributes.mVendorId, mAttributes.mProductId);
+ ChipLogProgress(AppServer, "Endpoint::LogDetail() Endpoint ID: %d, Vendor ID: %d, Product ID: %d, Clusters: %d",
+ mAttributes.mId, mAttributes.mVendorId, mAttributes.mProductId, static_cast(mClusters.size()));
}
};
diff --git a/examples/tv-casting-app/tv-casting-common/support/CastingStore.cpp b/examples/tv-casting-app/tv-casting-common/support/CastingStore.cpp
index 93bd00616dac6c..1ddf40a9b27abc 100644
--- a/examples/tv-casting-app/tv-casting-common/support/CastingStore.cpp
+++ b/examples/tv-casting-app/tv-casting-common/support/CastingStore.cpp
@@ -78,8 +78,9 @@ std::vector CastingStore::ReadAll()
size_t castingStoreDataSize = 0;
err = chip::DeviceLayer::PersistedStorage::KeyValueStoreMgr().Get(kCastingStoreDataKey, castingStoreData,
kCastingStoreDataMaxBytes, &castingStoreDataSize);
- VerifyOrReturnValue(err == CHIP_NO_ERROR, std::vector(),
- ChipLogError(AppServer, "KeyValueStoreMgr.Get failed %" CHIP_ERROR_FORMAT, err.Format()));
+ VerifyOrReturnValue(
+ err == CHIP_NO_ERROR, std::vector(),
+ ChipLogError(AppServer, "CastingStore::ReadAll() KeyValueStoreMgr.Get failed %" CHIP_ERROR_FORMAT, err.Format()));
ChipLogProgress(AppServer, "CastingStore::ReadAll() Read TLV(CastingStoreData) from KVS store with size: %lu bytes",
static_cast(castingStoreDataSize));
@@ -252,6 +253,9 @@ std::vector CastingStore::ReadAll()
if (endpointContainerTagNum == kCastingPlayerEndpointIdTag)
{
err = reader.Get(endpointAttributes.mId);
+ // Log which endpoints we cached.
+ ChipLogProgress(AppServer, "CastingStore::ReadAll() Endpoints container endpointAttributes.mId: %d",
+ endpointAttributes.mId);
VerifyOrReturnValue(err == CHIP_NO_ERROR, std::vector(),
ChipLogError(AppServer, "TLVReader.Get failed %" CHIP_ERROR_FORMAT, err.Format()));
continue;
@@ -475,7 +479,7 @@ CHIP_ERROR CastingStore::WriteAll(std::vector castingPlayer
for (auto & castingPlayer : castingPlayers)
{
- ChipLogProgress(AppServer, "CastingStore::WriteAll() writing castingPlayer:");
+ ChipLogProgress(AppServer, "CastingStore::WriteAll() writing CastingPlayer:");
chip::TLV::TLVType castingPlayerContainerType;
// CastingPlayer container starts
ReturnErrorOnFailure(
@@ -547,7 +551,8 @@ CHIP_ERROR CastingStore::WriteAll(std::vector castingPlayer
ReturnErrorOnFailure(tlvWriter.StartContainer(chip::TLV::ContextTag(kCastingPlayerEndpointServerListContainerTag),
chip::TLV::kTLVType_Structure, serverListContainerType));
std::vector serverList = endpoint->GetServerList();
- ChipLogProgress(AppServer, "CastingStore::WriteAll() writing CastingPlayer Endpoint ServerList:");
+ ChipLogProgress(AppServer, "CastingStore::WriteAll() writing CastingPlayer Endpoint ID: %d ServerList.size(): %d",
+ endpoint->GetId(), static_cast(serverList.size()));
for (chip::ClusterId clusterId : serverList)
{
ChipLogProgress(AppServer, "CastingStore::WriteAll() clusterId: %d", clusterId);
@@ -586,7 +591,7 @@ CHIP_ERROR CastingStore::DeleteAll()
CHIP_ERROR err = chip::DeviceLayer::PersistedStorage::KeyValueStoreMgr().Delete(kCastingStoreDataKey);
if (err == CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND) // no error, if the key-value pair was not stored
{
- ChipLogProgress(AppServer, "CastingStore::DeleteAll ignoring error %" CHIP_ERROR_FORMAT, err.Format());
+ ChipLogProgress(AppServer, "CastingStore::DeleteAll() ignoring error %" CHIP_ERROR_FORMAT, err.Format());
return CHIP_NO_ERROR;
}
return err;
@@ -594,7 +599,7 @@ CHIP_ERROR CastingStore::DeleteAll()
CHIP_ERROR CastingStore::Delete(core::CastingPlayer castingPlayer)
{
- ChipLogProgress(AppServer, "CastingStore::Delete");
+ ChipLogProgress(AppServer, "CastingStore::Delete()");
// Read cache of CastingPlayers
std::vector castingPlayers = ReadAll();
@@ -608,7 +613,7 @@ CHIP_ERROR CastingStore::Delete(core::CastingPlayer castingPlayer)
if (it != castingPlayers.end())
{
- ChipLogProgress(AppServer, "CastingStore::Delete deleting CastingPlayer %s from CastingStore cache", it->GetId());
+ ChipLogProgress(AppServer, "CastingStore::Delete() deleting CastingPlayer %s from CastingStore cache", it->GetId());
castingPlayers.erase(it);
return WriteAll(castingPlayers);
}
@@ -618,7 +623,7 @@ CHIP_ERROR CastingStore::Delete(core::CastingPlayer castingPlayer)
void CastingStore::OnFabricRemoved(const chip::FabricTable & fabricTable, chip::FabricIndex fabricIndex)
{
- ChipLogProgress(AppServer, "CastingStore::OnFabricRemoved");
+ ChipLogProgress(AppServer, "CastingStore::OnFabricRemoved()");
// Read cache of CastingPlayers
std::vector castingPlayers = ReadAll();
@@ -633,12 +638,15 @@ void CastingStore::OnFabricRemoved(const chip::FabricTable & fabricTable, chip::
if (it != castingPlayers.end())
{
- ChipLogProgress(AppServer, "CastingStore::OnFabricRemoved deleting CastingPlayer %s from CastingStore cache",
+ ChipLogProgress(AppServer, "CastingStore::OnFabricRemoved() deleting CastingPlayer %s from CastingStore cache",
it->GetId());
castingPlayers.erase(it);
WriteAll(castingPlayers);
}
}
+ CHIP_ERROR err = chip::Server::GetInstance().GetSessionResumptionStorage()->DeleteAll(fabricIndex);
+ ChipLogProgress(AppServer, "CastingStore::OnFabricRemoved() SessionResumptionStorage.DeleteAll(%d) status %" CHIP_ERROR_FORMAT,
+ fabricIndex, err.Format());
}
}; // namespace support
diff --git a/examples/tv-casting-app/tv-casting-common/support/ChipDeviceEventHandler.cpp b/examples/tv-casting-app/tv-casting-common/support/ChipDeviceEventHandler.cpp
index cf8ca82366a7bb..f027c8d1c477df 100644
--- a/examples/tv-casting-app/tv-casting-common/support/ChipDeviceEventHandler.cpp
+++ b/examples/tv-casting-app/tv-casting-common/support/ChipDeviceEventHandler.cpp
@@ -62,6 +62,7 @@ void ChipDeviceEventHandler::Handle(const chip::DeviceLayer::ChipDeviceEvent * e
CastingPlayer::GetTargetCastingPlayer()->SetNodeId(targetNodeId);
CastingPlayer::GetTargetCastingPlayer()->SetFabricIndex(targetFabricIndex);
+ ChipLogProgress(AppServer, "ChipDeviceEventHandler::Handle() calling FindOrEstablishSession()");
CastingPlayer::GetTargetCastingPlayer()->FindOrEstablishSession(
nullptr,
[](void * context, chip::Messaging::ExchangeManager & exchangeMgr, const chip::SessionHandle & sessionHandle) {
@@ -144,12 +145,12 @@ void ChipDeviceEventHandler::HandleBindingsChangedViaCluster(const chip::DeviceL
bool & runPostCommissioning, chip::NodeId & targetNodeId,
chip::FabricIndex & targetFabricIndex)
{
- ChipLogProgress(AppServer, "ChipDeviceEventHandler::HandleBindingsChangedViaCluster called");
+ ChipLogProgress(AppServer, "ChipDeviceEventHandler::HandleBindingsChangedViaCluster() called");
if (CastingPlayer::GetTargetCastingPlayer()->IsConnected())
{
// re-use existing nodeId and fabricIndex
- ChipLogProgress(AppServer, "ChipDeviceEventHandler::HandleBindingsChangedViaCluster already connected to video player");
+ ChipLogProgress(AppServer, "ChipDeviceEventHandler::HandleBindingsChangedViaCluster() already connected to video player");
runPostCommissioning = true;
targetNodeId = CastingPlayer::GetTargetCastingPlayer()->GetNodeId();
targetFabricIndex = CastingPlayer::GetTargetCastingPlayer()->GetFabricIndex();
@@ -159,7 +160,7 @@ void ChipDeviceEventHandler::HandleBindingsChangedViaCluster(const chip::DeviceL
else if (sUdcInProgress)
{
ChipLogProgress(AppServer,
- "ChipDeviceEventHandler::HandleBindingsChangedViaCluster UDC is in progress while handling "
+ "ChipDeviceEventHandler::HandleBindingsChangedViaCluster() UDC is in progress while handling "
"kBindingsChangedViaCluster with "
"fabricIndex: %d",
event->BindingsChanged.fabricIndex);
@@ -170,7 +171,7 @@ void ChipDeviceEventHandler::HandleBindingsChangedViaCluster(const chip::DeviceL
for (const auto & binding : chip::BindingTable::GetInstance())
{
ChipLogProgress(AppServer,
- "ChipDeviceEventHandler::HandleBindingsChangedViaCluster Read cached binding type=%d fabrixIndex=%d "
+ "ChipDeviceEventHandler::HandleBindingsChangedViaCluster() Read cached binding type=%d fabrixIndex=%d "
"nodeId=0x" ChipLogFormatX64
" groupId=%d local endpoint=%d remote endpoint=%d cluster=" ChipLogFormatMEI,
binding.type, binding.fabricIndex, ChipLogValueX64(binding.nodeId), binding.groupId, binding.local,
@@ -178,7 +179,7 @@ void ChipDeviceEventHandler::HandleBindingsChangedViaCluster(const chip::DeviceL
if (binding.type == MATTER_UNICAST_BINDING && event->BindingsChanged.fabricIndex == binding.fabricIndex)
{
ChipLogProgress(AppServer,
- "ChipDeviceEventHandler::HandleBindingsChangedViaCluster Matched accessingFabricIndex with "
+ "ChipDeviceEventHandler::HandleBindingsChangedViaCluster() Matched accessingFabricIndex with "
"nodeId=0x" ChipLogFormatX64,
ChipLogValueX64(binding.nodeId));
targetNodeId = binding.nodeId;
@@ -190,9 +191,10 @@ void ChipDeviceEventHandler::HandleBindingsChangedViaCluster(const chip::DeviceL
if (targetNodeId == 0 && runPostCommissioning == false)
{
- ChipLogError(AppServer,
- "ChipDeviceEventHandler::HandleBindingsChangedViaCluster accessingFabricIndex: %d did not match bindings",
- event->BindingsChanged.fabricIndex);
+ ChipLogError(
+ AppServer,
+ "ChipDeviceEventHandler::HandleBindingsChangedViaCluster() accessingFabricIndex: %d did not match bindings",
+ event->BindingsChanged.fabricIndex);
CastingPlayer::GetTargetCastingPlayer()->mOnCompleted(CHIP_ERROR_INCORRECT_STATE,
CastingPlayer::GetTargetCastingPlayer());
return;
@@ -204,7 +206,7 @@ void ChipDeviceEventHandler::HandleCommissioningComplete(const chip::DeviceLayer
bool & runPostCommissioning, chip::NodeId & targetNodeId,
chip::FabricIndex & targetFabricIndex)
{
- ChipLogProgress(AppServer, "ChipDeviceEventHandler::HandleCommissioningComplete called");
+ ChipLogProgress(AppServer, "ChipDeviceEventHandler::HandleCommissioningComplete() called");
sUdcInProgress = false;
targetNodeId = event->CommissioningComplete.nodeId;
targetFabricIndex = event->CommissioningComplete.fabricIndex;
diff --git a/examples/tv-casting-app/tv-casting-common/support/EndpointListLoader.cpp b/examples/tv-casting-app/tv-casting-common/support/EndpointListLoader.cpp
index 44e76f628b5a18..a54c4ddc59debf 100644
--- a/examples/tv-casting-app/tv-casting-common/support/EndpointListLoader.cpp
+++ b/examples/tv-casting-app/tv-casting-common/support/EndpointListLoader.cpp
@@ -51,9 +51,17 @@ void EndpointListLoader::Initialize(chip::Messaging::ExchangeManager * exchangeM
mExchangeMgr = exchangeMgr;
mSessionHandle = sessionHandle;
+ chip::NodeId targetCastingPlayerNodeId = CastingPlayer::GetTargetCastingPlayer()->GetNodeId();
+ chip::FabricIndex targetCastingPlayerFabricIndex = CastingPlayer::GetTargetCastingPlayer()->GetFabricIndex();
+ ChipLogProgress(AppServer,
+ "EndpointListLoader::Initialize() targetCastingPlayerNodeId: 0x" ChipLogFormatX64
+ ", targetCastingPlayerFabricIndex: %d",
+ ChipLogValueX64(targetCastingPlayerNodeId), targetCastingPlayerFabricIndex);
+
for (const auto & binding : chip::BindingTable::GetInstance())
{
- if (binding.type == MATTER_UNICAST_BINDING && CastingPlayer::GetTargetCastingPlayer()->GetNodeId() == binding.nodeId)
+ if (binding.type == MATTER_UNICAST_BINDING && targetCastingPlayerNodeId == binding.nodeId &&
+ targetCastingPlayerFabricIndex == binding.fabricIndex)
{
// check to see if we discovered a new endpoint in the bindings
chip::EndpointId endpointId = binding.remote;
@@ -66,6 +74,8 @@ void EndpointListLoader::Initialize(chip::Messaging::ExchangeManager * exchangeM
}
}
}
+ ChipLogProgress(AppServer, "EndpointListLoader::Initialize() mNewEndpointsToLoad++, mNewEndpointsToLoad: %lu",
+ mNewEndpointsToLoad);
mPendingAttributeReads = mNewEndpointsToLoad * kTotalDesiredAttributes;
mEndpointAttributesList = new EndpointAttributes[mNewEndpointsToLoad];
@@ -78,16 +88,24 @@ CHIP_ERROR EndpointListLoader::Load()
VerifyOrReturnError(CastingPlayer::GetTargetCastingPlayer() != nullptr, CHIP_ERROR_INCORRECT_STATE);
+ chip::NodeId targetCastingPlayerNodeId = CastingPlayer::GetTargetCastingPlayer()->GetNodeId();
+ chip::FabricIndex targetCastingPlayerFabricIndex = CastingPlayer::GetTargetCastingPlayer()->GetFabricIndex();
+ ChipLogProgress(AppServer,
+ "EndpointListLoader::Load() targetCastingPlayerNodeId: 0x" ChipLogFormatX64
+ ", targetCastingPlayerFabricIndex: %d",
+ ChipLogValueX64(targetCastingPlayerNodeId), targetCastingPlayerFabricIndex);
+
int endpointIndex = -1;
bool isLoadingRequired = false;
for (const auto & binding : chip::BindingTable::GetInstance())
{
ChipLogProgress(AppServer,
- "Binding type=%d fab=%d nodeId=0x" ChipLogFormatX64
+ "EndpointListLoader::Load() Binding type=%d fab=%d nodeId=0x" ChipLogFormatX64
" groupId=%d local endpoint=%d remote endpoint=%d cluster=" ChipLogFormatMEI,
binding.type, binding.fabricIndex, ChipLogValueX64(binding.nodeId), binding.groupId, binding.local,
binding.remote, ChipLogValueMEI(binding.clusterId.value_or(0)));
- if (binding.type == MATTER_UNICAST_BINDING && CastingPlayer::GetTargetCastingPlayer()->GetNodeId() == binding.nodeId)
+ if (binding.type == MATTER_UNICAST_BINDING && targetCastingPlayerNodeId == binding.nodeId &&
+ targetCastingPlayerFabricIndex == binding.fabricIndex)
{
// if we discovered a new Endpoint from the bindings, read its EndpointAttributes
chip::EndpointId endpointId = binding.remote;
@@ -98,7 +116,8 @@ CHIP_ERROR EndpointListLoader::Load()
}) == endpoints.end())
{
// Read attributes and mEndpointAttributesList for (endpointIndex + 1)
- ChipLogProgress(AppServer, "EndpointListLoader::Load Reading attributes for endpointId %d", endpointId);
+ ChipLogProgress(AppServer, "EndpointListLoader::Load() Reading attributes for endpointId: %d, on fabricIndex: %d",
+ endpointId, binding.fabricIndex);
isLoadingRequired = true;
mEndpointAttributesList[++endpointIndex].mId = endpointId;
ReadVendorId(&mEndpointAttributesList[endpointIndex]);
@@ -121,7 +140,7 @@ CHIP_ERROR EndpointListLoader::Load()
void EndpointListLoader::Complete()
{
- ChipLogProgress(AppServer, "EndpointListLoader::Complete called with mPendingAttributeReads %lu", mPendingAttributeReads);
+ ChipLogProgress(AppServer, "EndpointListLoader::Complete() called with mPendingAttributeReads: %lu", mPendingAttributeReads);
if (mPendingAttributeReads > 0)
{
mPendingAttributeReads--;
@@ -161,7 +180,7 @@ void EndpointListLoader::Complete()
// callback client OnCompleted
VerifyOrReturn(CastingPlayer::GetTargetCastingPlayer()->mOnCompleted,
- ChipLogError(AppServer, "EndpointListLoader::Complete mOnCompleted() not found"));
+ ChipLogError(AppServer, "EndpointListLoader::Complete() mOnCompleted() not found"));
CastingPlayer::GetTargetCastingPlayer()->mOnCompleted(CHIP_NO_ERROR, CastingPlayer::GetTargetCastingPlayer());
}
}
@@ -180,7 +199,8 @@ CHIP_ERROR EndpointListLoader::ReadVendorId(EndpointAttributes * endpointAttribu
},
[](void * context, CHIP_ERROR err) {
EndpointAttributes * _endpointAttributes = static_cast(context);
- ChipLogError(AppServer, "EndpointListLoader ReadAttribute(VendorID) failed for endpointID %d. Err: %" CHIP_ERROR_FORMAT,
+ ChipLogError(AppServer,
+ "EndpointListLoader::ReadAttribute(VendorID) failed for endpointID %d. Err: %" CHIP_ERROR_FORMAT,
_endpointAttributes->mId, err.Format());
EndpointListLoader::GetInstance()->Complete();
});
@@ -201,7 +221,7 @@ CHIP_ERROR EndpointListLoader::ReadProductId(EndpointAttributes * endpointAttrib
[](void * context, CHIP_ERROR err) {
EndpointAttributes * _endpointAttributes = static_cast(context);
ChipLogError(AppServer,
- "EndpointListLoader ReadAttribute(ProductID) failed for endpointID %d. Err: %" CHIP_ERROR_FORMAT,
+ "EndpointListLoader::ReadAttribute(ProductID) failed for endpointID %d. Err: %" CHIP_ERROR_FORMAT,
_endpointAttributes->mId, err.Format());
EndpointListLoader::GetInstance()->Complete();
});
@@ -227,7 +247,7 @@ CHIP_ERROR EndpointListLoader::ReadDeviceTypeList(EndpointAttributes * endpointA
[](void * context, CHIP_ERROR err) {
EndpointAttributes * _endpointAttributes = static_cast(context);
ChipLogError(AppServer,
- "EndpointListLoader ReadAttribute(DeviceTypeList) failed for endpointID %d. Err: %" CHIP_ERROR_FORMAT,
+ "EndpointListLoader::ReadAttribute(DeviceTypeList) failed for endpointID %d. Err: %" CHIP_ERROR_FORMAT,
_endpointAttributes->mId, err.Format());
EndpointListLoader::GetInstance()->Complete();
});
@@ -251,7 +271,9 @@ CHIP_ERROR EndpointListLoader::ReadServerList(std::vector * end
EndpointListLoader::GetInstance()->Complete();
},
[](void * context, CHIP_ERROR err) {
- ChipLogError(AppServer, "EndpointListLoader ReadAttribute(ServerList) failed. Err: %" CHIP_ERROR_FORMAT, err.Format());
+ ChipLogError(AppServer,
+ "EndpointListLoader::ReadServerList() ReadAttribute(ServerList) failed. Err: %" CHIP_ERROR_FORMAT,
+ err.Format());
EndpointListLoader::GetInstance()->Complete();
});
}
diff --git a/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter b/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter
index 6d8fb379e55fad..3dba518b755b89 100644
--- a/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter
+++ b/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter
@@ -1000,6 +1000,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter b/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter
index cbb366ad5434cf..22b2c8999a2cdc 100644
--- a/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter
+++ b/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter
@@ -1177,6 +1177,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/examples/water-leak-detector-app/linux/.gn b/examples/water-leak-detector-app/linux/.gn
new file mode 100644
index 00000000000000..3b11e2ba2e62ee
--- /dev/null
+++ b/examples/water-leak-detector-app/linux/.gn
@@ -0,0 +1,25 @@
+# Copyright (c) 2024 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 = {
+ import("//args.gni")
+}
diff --git a/examples/water-leak-detector-app/linux/BUILD.gn b/examples/water-leak-detector-app/linux/BUILD.gn
new file mode 100644
index 00000000000000..c5caf26d8e480a
--- /dev/null
+++ b/examples/water-leak-detector-app/linux/BUILD.gn
@@ -0,0 +1,64 @@
+# Copyright (c) 2024 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import("//build_overrides/chip.gni")
+
+import("${chip_root}/build/chip/tools.gni")
+import("${chip_root}/src/app/common_flags.gni")
+import("${chip_root}/third_party/imgui/imgui.gni")
+
+assert(chip_build_tools)
+
+config("includes") {
+ include_dirs = [
+ ".",
+ "include",
+ ]
+}
+
+executable("water-leak-detector-app") {
+ sources = [
+ "include/CHIPProjectAppConfig.h",
+ "main.cpp",
+ ]
+
+ deps = [
+ "${chip_root}/examples/platform/linux:app-main",
+ "${chip_root}/examples/water-leak-detector-app/water-leak-detector-common",
+ "${chip_root}/src/lib",
+ ]
+
+ if (chip_examples_enable_imgui_ui) {
+ deps += [
+ "${chip_root}/examples/common/imgui_ui",
+ "${chip_root}/examples/common/imgui_ui/windows:boolean_state",
+ "${chip_root}/examples/common/imgui_ui/windows:occupancy_sensing",
+ "${chip_root}/examples/common/imgui_ui/windows:qrcode",
+ ]
+ }
+
+ include_dirs = [ "include" ]
+
+ cflags = [ "-Wconversion" ]
+
+ output_dir = root_out_dir
+}
+
+group("linux") {
+ deps = [ ":water-leak-detector-app" ]
+}
+
+group("default") {
+ deps = [ ":linux" ]
+}
diff --git a/examples/water-leak-detector-app/linux/args.gni b/examples/water-leak-detector-app/linux/args.gni
new file mode 100644
index 00000000000000..5be50537ddb52d
--- /dev/null
+++ b/examples/water-leak-detector-app/linux/args.gni
@@ -0,0 +1,28 @@
+# Copyright (c) 2024 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.
+
+# CHIPProjectConfig.h
+
+import("//build_overrides/chip.gni")
+
+import("${chip_root}/config/standalone/args.gni")
+
+chip_device_project_config_include = ""
+chip_project_config_include = ""
+chip_system_project_config_include = ""
+
+chip_project_config_include_dirs =
+ [ "${chip_root}/examples/water-leak-detector-app/linux/include" ]
+chip_project_config_include_dirs += [ "${chip_root}/config/standalone" ]
+matter_enable_tracing_support = true
diff --git a/examples/water-leak-detector-app/linux/build_overrides b/examples/water-leak-detector-app/linux/build_overrides
new file mode 120000
index 00000000000000..e578e73312ebd1
--- /dev/null
+++ b/examples/water-leak-detector-app/linux/build_overrides
@@ -0,0 +1 @@
+../../build_overrides
\ No newline at end of file
diff --git a/examples/water-leak-detector-app/linux/include/CHIPProjectAppConfig.h b/examples/water-leak-detector-app/linux/include/CHIPProjectAppConfig.h
new file mode 100644
index 00000000000000..14ec70af42cc43
--- /dev/null
+++ b/examples/water-leak-detector-app/linux/include/CHIPProjectAppConfig.h
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright (c) 2024 Project CHIP Authors
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+// include the CHIPProjectConfig from config/standalone
+#include
+
+#define CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY 0
+
+// Bulbs do not typically use this - enabled so we can use shell to discover commissioners
+#define CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT 1
+
+#define CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY 1
+
+#define CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONABLE_DEVICE_TYPE 1
+
+#define CHIP_DEVICE_CONFIG_DEVICE_TYPE 0x0043 // Water Leak Detector
+
+#define CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONABLE_DEVICE_NAME 1
+
+#define CHIP_DEVICE_ENABLE_PORT_PARAMS 1
+
+#define CHIP_DEVICE_CONFIG_DEVICE_NAME "Water Leak Detector"
diff --git a/examples/water-leak-detector-app/linux/main.cpp b/examples/water-leak-detector-app/linux/main.cpp
new file mode 100644
index 00000000000000..02a91b82cec6ca
--- /dev/null
+++ b/examples/water-leak-detector-app/linux/main.cpp
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright (c) 2024 Project CHIP Authors
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+
+#if defined(CHIP_IMGUI_ENABLED) && CHIP_IMGUI_ENABLED
+#include
+#include
+#include
+#include
+#endif
+
+using namespace chip;
+using namespace chip::app;
+using namespace chip::app::Clusters;
+
+void ApplicationInit() {}
+
+void ApplicationShutdown() {}
+
+int main(int argc, char * argv[])
+{
+ VerifyOrDie(ChipLinuxAppInit(argc, argv) == 0);
+
+#if defined(CHIP_IMGUI_ENABLED) && CHIP_IMGUI_ENABLED
+ example::Ui::ImguiUi ui;
+
+ ui.AddWindow(std::make_unique());
+ ui.AddWindow(std::make_unique(chip::EndpointId(1), "Water Leak Detector"));
+
+ ChipLinuxAppMainLoop(&ui);
+#else
+ ChipLinuxAppMainLoop();
+#endif
+
+ return 0;
+}
diff --git a/examples/water-leak-detector-app/linux/third_party/connectedhomeip b/examples/water-leak-detector-app/linux/third_party/connectedhomeip
new file mode 120000
index 00000000000000..c866b86874994d
--- /dev/null
+++ b/examples/water-leak-detector-app/linux/third_party/connectedhomeip
@@ -0,0 +1 @@
+../../../..
\ No newline at end of file
diff --git a/examples/water-leak-detector-app/water-leak-detector-common/BUILD.gn b/examples/water-leak-detector-app/water-leak-detector-common/BUILD.gn
new file mode 100644
index 00000000000000..47031e0dbc5344
--- /dev/null
+++ b/examples/water-leak-detector-app/water-leak-detector-common/BUILD.gn
@@ -0,0 +1,21 @@
+# Copyright (c) 2024 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import("//build_overrides/chip.gni")
+import("${chip_root}/src/app/chip_data_model.gni")
+
+chip_data_model("water-leak-detector-common") {
+ zap_file = "water-leak-detector-app.zap"
+ is_server = true
+}
diff --git a/examples/water-leak-detector-app/water-leak-detector-common/water-leak-detector-app.matter b/examples/water-leak-detector-app/water-leak-detector-common/water-leak-detector-app.matter
new file mode 100644
index 00000000000000..f2cc365f2b6b0a
--- /dev/null
+++ b/examples/water-leak-detector-app/water-leak-detector-common/water-leak-detector-app.matter
@@ -0,0 +1,1962 @@
+// This IDL was generated automatically by ZAP.
+// It is for view/code review purposes only.
+
+enum AreaTypeTag : enum8 {
+ kAisle = 0;
+ kAttic = 1;
+ kBackDoor = 2;
+ kBackYard = 3;
+ kBalcony = 4;
+ kBallroom = 5;
+ kBathroom = 6;
+ kBedroom = 7;
+ kBorder = 8;
+ kBoxroom = 9;
+ kBreakfastRoom = 10;
+ kCarport = 11;
+ kCellar = 12;
+ kCloakroom = 13;
+ kCloset = 14;
+ kConservatory = 15;
+ kCorridor = 16;
+ kCraftRoom = 17;
+ kCupboard = 18;
+ kDeck = 19;
+ kDen = 20;
+ kDining = 21;
+ kDrawingRoom = 22;
+ kDressingRoom = 23;
+ kDriveway = 24;
+ kElevator = 25;
+ kEnsuite = 26;
+ kEntrance = 27;
+ kEntryway = 28;
+ kFamilyRoom = 29;
+ kFoyer = 30;
+ kFrontDoor = 31;
+ kFrontYard = 32;
+ kGameRoom = 33;
+ kGarage = 34;
+ kGarageDoor = 35;
+ kGarden = 36;
+ kGardenDoor = 37;
+ kGuestBathroom = 38;
+ kGuestBedroom = 39;
+ kGuestRestroom = 40;
+ kGuestRoom = 41;
+ kGym = 42;
+ kHallway = 43;
+ kHearthRoom = 44;
+ kKidsRoom = 45;
+ kKidsBedroom = 46;
+ kKitchen = 47;
+ kLarder = 48;
+ kLaundryRoom = 49;
+ kLawn = 50;
+ kLibrary = 51;
+ kLivingRoom = 52;
+ kLounge = 53;
+ kMediaTVRoom = 54;
+ kMudRoom = 55;
+ kMusicRoom = 56;
+ kNursery = 57;
+ kOffice = 58;
+ kOutdoorKitchen = 59;
+ kOutside = 60;
+ kPantry = 61;
+ kParkingLot = 62;
+ kParlor = 63;
+ kPatio = 64;
+ kPlayRoom = 65;
+ kPoolRoom = 66;
+ kPorch = 67;
+ kPrimaryBathroom = 68;
+ kPrimaryBedroom = 69;
+ kRamp = 70;
+ kReceptionRoom = 71;
+ kRecreationRoom = 72;
+ kRestroom = 73;
+ kRoof = 74;
+ kSauna = 75;
+ kScullery = 76;
+ kSewingRoom = 77;
+ kShed = 78;
+ kSideDoor = 79;
+ kSideYard = 80;
+ kSittingRoom = 81;
+ kSnug = 82;
+ kSpa = 83;
+ kStaircase = 84;
+ kSteamRoom = 85;
+ kStorageRoom = 86;
+ kStudio = 87;
+ kStudy = 88;
+ kSunRoom = 89;
+ kSwimmingPool = 90;
+ kTerrace = 91;
+ kUtilityRoom = 92;
+ kWard = 93;
+ kWorkshop = 94;
+}
+
+enum AtomicRequestTypeEnum : enum8 {
+ kBeginWrite = 0;
+ kCommitWrite = 1;
+ kRollbackWrite = 2;
+}
+
+enum FloorSurfaceTag : enum8 {
+ kCarpet = 0;
+ kCeramic = 1;
+ kConcrete = 2;
+ kCork = 3;
+ kDeepCarpet = 4;
+ kDirt = 5;
+ kEngineeredWood = 6;
+ kGlass = 7;
+ kGrass = 8;
+ kHardwood = 9;
+ kLaminate = 10;
+ kLinoleum = 11;
+ kMat = 12;
+ kMetal = 13;
+ kPlastic = 14;
+ kPolishedConcrete = 15;
+ kRubber = 16;
+ kRug = 17;
+ kSand = 18;
+ kStone = 19;
+ kTatami = 20;
+ kTerrazzo = 21;
+ kTile = 22;
+ kVinyl = 23;
+}
+
+enum LandmarkTag : enum8 {
+ kAirConditioner = 0;
+ kAirPurifier = 1;
+ kBackDoor = 2;
+ kBarStool = 3;
+ kBathMat = 4;
+ kBathtub = 5;
+ kBed = 6;
+ kBookshelf = 7;
+ kChair = 8;
+ kChristmasTree = 9;
+ kCoatRack = 10;
+ kCoffeeTable = 11;
+ kCookingRange = 12;
+ kCouch = 13;
+ kCountertop = 14;
+ kCradle = 15;
+ kCrib = 16;
+ kDesk = 17;
+ kDiningTable = 18;
+ kDishwasher = 19;
+ kDoor = 20;
+ kDresser = 21;
+ kLaundryDryer = 22;
+ kFan = 23;
+ kFireplace = 24;
+ kFreezer = 25;
+ kFrontDoor = 26;
+ kHighChair = 27;
+ kKitchenIsland = 28;
+ kLamp = 29;
+ kLitterBox = 30;
+ kMirror = 31;
+ kNightstand = 32;
+ kOven = 33;
+ kPetBed = 34;
+ kPetBowl = 35;
+ kPetCrate = 36;
+ kRefrigerator = 37;
+ kScratchingPost = 38;
+ kShoeRack = 39;
+ kShower = 40;
+ kSideDoor = 41;
+ kSink = 42;
+ kSofa = 43;
+ kStove = 44;
+ kTable = 45;
+ kToilet = 46;
+ kTrashCan = 47;
+ kLaundryWasher = 48;
+ kWindow = 49;
+ kWineCooler = 50;
+}
+
+enum PositionTag : enum8 {
+ kLeft = 0;
+ kRight = 1;
+ kTop = 2;
+ kBottom = 3;
+ kMiddle = 4;
+ kRow = 5;
+ kColumn = 6;
+}
+
+enum RelativePositionTag : enum8 {
+ kUnder = 0;
+ kNextTo = 1;
+ kAround = 2;
+ kOn = 3;
+ kAbove = 4;
+ kFrontOf = 5;
+ kBehind = 6;
+}
+
+enum TestGlobalEnum : enum8 {
+ kSomeValue = 0;
+ kSomeOtherValue = 1;
+ kFinalValue = 2;
+}
+
+enum ThreeLevelAutoEnum : enum8 {
+ kLow = 0;
+ kMedium = 1;
+ kHigh = 2;
+ kAutomatic = 3;
+}
+
+bitmap TestGlobalBitmap : bitmap32 {
+ kFirstBit = 0x1;
+ kSecondBit = 0x2;
+}
+
+struct TestGlobalStruct {
+ char_string<128> name = 0;
+ nullable TestGlobalBitmap myBitmap = 1;
+ optional nullable TestGlobalEnum myEnum = 2;
+}
+
+struct LocationDescriptorStruct {
+ char_string<128> locationName = 0;
+ nullable int16s floorNumber = 1;
+ nullable AreaTypeTag areaType = 2;
+}
+
+struct AtomicAttributeStatusStruct {
+ attrib_id attributeID = 0;
+ status statusCode = 1;
+}
+
+/** Attributes and commands for putting a device into Identification mode (e.g. flashing a light). */
+cluster Identify = 3 {
+ revision 4;
+
+ enum EffectIdentifierEnum : enum8 {
+ kBlink = 0;
+ kBreathe = 1;
+ kOkay = 2;
+ kChannelChange = 11;
+ kFinishEffect = 254;
+ kStopEffect = 255;
+ }
+
+ enum EffectVariantEnum : enum8 {
+ kDefault = 0;
+ }
+
+ enum IdentifyTypeEnum : enum8 {
+ kNone = 0;
+ kLightOutput = 1;
+ kVisibleIndicator = 2;
+ kAudibleBeep = 3;
+ kDisplay = 4;
+ kActuator = 5;
+ }
+
+ attribute int16u identifyTime = 0;
+ readonly attribute IdentifyTypeEnum identifyType = 1;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct IdentifyRequest {
+ int16u identifyTime = 0;
+ }
+
+ request struct TriggerEffectRequest {
+ EffectIdentifierEnum effectIdentifier = 0;
+ EffectVariantEnum effectVariant = 1;
+ }
+
+ /** Command description for Identify */
+ command access(invoke: manage) Identify(IdentifyRequest): DefaultSuccess = 0;
+ /** Command description for TriggerEffect */
+ command access(invoke: manage) TriggerEffect(TriggerEffectRequest): DefaultSuccess = 64;
+}
+
+/** Attributes and commands for group configuration and manipulation. */
+cluster Groups = 4 {
+ revision 4;
+
+ bitmap Feature : bitmap32 {
+ kGroupNames = 0x1;
+ }
+
+ bitmap NameSupportBitmap : bitmap8 {
+ kGroupNames = 0x80;
+ }
+
+ readonly attribute NameSupportBitmap nameSupport = 0;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct AddGroupRequest {
+ group_id groupID = 0;
+ char_string<16> groupName = 1;
+ }
+
+ response struct AddGroupResponse = 0 {
+ enum8 status = 0;
+ group_id groupID = 1;
+ }
+
+ request struct ViewGroupRequest {
+ group_id groupID = 0;
+ }
+
+ response struct ViewGroupResponse = 1 {
+ enum8 status = 0;
+ group_id groupID = 1;
+ char_string<16> groupName = 2;
+ }
+
+ request struct GetGroupMembershipRequest {
+ group_id groupList[] = 0;
+ }
+
+ response struct GetGroupMembershipResponse = 2 {
+ nullable int8u capacity = 0;
+ group_id groupList[] = 1;
+ }
+
+ request struct RemoveGroupRequest {
+ group_id groupID = 0;
+ }
+
+ response struct RemoveGroupResponse = 3 {
+ enum8 status = 0;
+ group_id groupID = 1;
+ }
+
+ request struct AddGroupIfIdentifyingRequest {
+ group_id groupID = 0;
+ char_string<16> groupName = 1;
+ }
+
+ /** Command description for AddGroup */
+ fabric command access(invoke: manage) AddGroup(AddGroupRequest): AddGroupResponse = 0;
+ /** Command description for ViewGroup */
+ fabric command ViewGroup(ViewGroupRequest): ViewGroupResponse = 1;
+ /** Command description for GetGroupMembership */
+ fabric command GetGroupMembership(GetGroupMembershipRequest): GetGroupMembershipResponse = 2;
+ /** Command description for RemoveGroup */
+ fabric command access(invoke: manage) RemoveGroup(RemoveGroupRequest): RemoveGroupResponse = 3;
+ /** Command description for RemoveAllGroups */
+ fabric command access(invoke: manage) RemoveAllGroups(): DefaultSuccess = 4;
+ /** Command description for AddGroupIfIdentifying */
+ fabric command access(invoke: manage) AddGroupIfIdentifying(AddGroupIfIdentifyingRequest): DefaultSuccess = 5;
+}
+
+/** The Descriptor Cluster is meant to replace the support from the Zigbee Device Object (ZDO) for describing a node, its endpoints and clusters. */
+cluster Descriptor = 29 {
+ revision 2;
+
+ bitmap Feature : bitmap32 {
+ kTagList = 0x1;
+ }
+
+ struct DeviceTypeStruct {
+ devtype_id deviceType = 0;
+ int16u revision = 1;
+ }
+
+ struct SemanticTagStruct {
+ nullable vendor_id mfgCode = 0;
+ enum8 namespaceID = 1;
+ enum8 tag = 2;
+ optional nullable char_string label = 3;
+ }
+
+ readonly attribute DeviceTypeStruct deviceTypeList[] = 0;
+ readonly attribute cluster_id serverList[] = 1;
+ readonly attribute cluster_id clientList[] = 2;
+ readonly attribute endpoint_no partsList[] = 3;
+ readonly attribute optional SemanticTagStruct tagList[] = 4;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+}
+
+/** The Access Control Cluster exposes a data model view of a
+ Node's Access Control List (ACL), which codifies the rules used to manage
+ and enforce Access Control for the Node's endpoints and their associated
+ cluster instances. */
+cluster AccessControl = 31 {
+ revision 2;
+
+ enum AccessControlEntryAuthModeEnum : enum8 {
+ kPASE = 1;
+ kCASE = 2;
+ kGroup = 3;
+ }
+
+ enum AccessControlEntryPrivilegeEnum : enum8 {
+ kView = 1;
+ kProxyView = 2;
+ kOperate = 3;
+ kManage = 4;
+ kAdminister = 5;
+ }
+
+ enum AccessRestrictionTypeEnum : enum8 {
+ kAttributeAccessForbidden = 0;
+ kAttributeWriteForbidden = 1;
+ kCommandForbidden = 2;
+ kEventForbidden = 3;
+ }
+
+ enum ChangeTypeEnum : enum8 {
+ kChanged = 0;
+ kAdded = 1;
+ kRemoved = 2;
+ }
+
+ bitmap Feature : bitmap32 {
+ kExtension = 0x1;
+ kManagedDevice = 0x2;
+ }
+
+ struct AccessRestrictionStruct {
+ AccessRestrictionTypeEnum type = 0;
+ nullable int32u id = 1;
+ }
+
+ struct CommissioningAccessRestrictionEntryStruct {
+ endpoint_no endpoint = 0;
+ cluster_id cluster = 1;
+ AccessRestrictionStruct restrictions[] = 2;
+ }
+
+ fabric_scoped struct AccessRestrictionEntryStruct {
+ fabric_sensitive endpoint_no endpoint = 0;
+ fabric_sensitive cluster_id cluster = 1;
+ fabric_sensitive AccessRestrictionStruct restrictions[] = 2;
+ fabric_idx fabricIndex = 254;
+ }
+
+ struct AccessControlTargetStruct {
+ nullable cluster_id cluster = 0;
+ nullable endpoint_no endpoint = 1;
+ nullable devtype_id deviceType = 2;
+ }
+
+ fabric_scoped struct AccessControlEntryStruct {
+ fabric_sensitive AccessControlEntryPrivilegeEnum privilege = 1;
+ fabric_sensitive AccessControlEntryAuthModeEnum authMode = 2;
+ nullable fabric_sensitive int64u subjects[] = 3;
+ nullable fabric_sensitive AccessControlTargetStruct targets[] = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_scoped struct AccessControlExtensionStruct {
+ fabric_sensitive octet_string<128> data = 1;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_sensitive info event access(read: administer) AccessControlEntryChanged = 0 {
+ nullable node_id adminNodeID = 1;
+ nullable int16u adminPasscodeID = 2;
+ ChangeTypeEnum changeType = 3;
+ nullable AccessControlEntryStruct latestValue = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_sensitive info event access(read: administer) AccessControlExtensionChanged = 1 {
+ nullable node_id adminNodeID = 1;
+ nullable int16u adminPasscodeID = 2;
+ ChangeTypeEnum changeType = 3;
+ nullable AccessControlExtensionStruct latestValue = 4;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_sensitive info event access(read: administer) FabricRestrictionReviewUpdate = 2 {
+ int64u token = 0;
+ optional long_char_string instruction = 1;
+ optional long_char_string ARLRequestFlowUrl = 2;
+ fabric_idx fabricIndex = 254;
+ }
+
+ attribute access(read: administer, write: administer) AccessControlEntryStruct acl[] = 0;
+ attribute access(read: administer, write: administer) optional AccessControlExtensionStruct extension[] = 1;
+ readonly attribute int16u subjectsPerAccessControlEntry = 2;
+ readonly attribute int16u targetsPerAccessControlEntry = 3;
+ readonly attribute int16u accessControlEntriesPerFabric = 4;
+ readonly attribute optional CommissioningAccessRestrictionEntryStruct commissioningARL[] = 5;
+ readonly attribute optional AccessRestrictionEntryStruct arl[] = 6;
+ 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 ReviewFabricRestrictionsRequest {
+ CommissioningAccessRestrictionEntryStruct arl[] = 0;
+ }
+
+ response struct ReviewFabricRestrictionsResponse = 1 {
+ int64u token = 0;
+ }
+
+ /** This command signals to the service associated with the device vendor that the fabric administrator would like a review of the current restrictions on the accessing fabric. */
+ fabric command access(invoke: administer) ReviewFabricRestrictions(ReviewFabricRestrictionsRequest): ReviewFabricRestrictionsResponse = 0;
+}
+
+/** This cluster provides attributes and events for determining basic information about Nodes, which supports both
+ Commissioning and operational determination of Node characteristics, such as Vendor ID, Product ID and serial number,
+ which apply to the whole Node. Also allows setting user device information such as location. */
+cluster BasicInformation = 40 {
+ revision 3;
+
+ enum ColorEnum : enum8 {
+ kBlack = 0;
+ kNavy = 1;
+ kGreen = 2;
+ kTeal = 3;
+ kMaroon = 4;
+ kPurple = 5;
+ kOlive = 6;
+ kGray = 7;
+ kBlue = 8;
+ kLime = 9;
+ kAqua = 10;
+ kRed = 11;
+ kFuchsia = 12;
+ kYellow = 13;
+ kWhite = 14;
+ kNickel = 15;
+ kChrome = 16;
+ kBrass = 17;
+ kCopper = 18;
+ kSilver = 19;
+ kGold = 20;
+ }
+
+ enum ProductFinishEnum : enum8 {
+ kOther = 0;
+ kMatte = 1;
+ kSatin = 2;
+ kPolished = 3;
+ kRugged = 4;
+ kFabric = 5;
+ }
+
+ struct CapabilityMinimaStruct {
+ int16u caseSessionsPerFabric = 0;
+ int16u subscriptionsPerFabric = 1;
+ }
+
+ struct ProductAppearanceStruct {
+ ProductFinishEnum finish = 0;
+ nullable ColorEnum primaryColor = 1;
+ }
+
+ critical event StartUp = 0 {
+ int32u softwareVersion = 0;
+ }
+
+ critical event ShutDown = 1 {
+ }
+
+ info event Leave = 2 {
+ fabric_idx fabricIndex = 0;
+ }
+
+ info event ReachableChanged = 3 {
+ boolean reachableNewValue = 0;
+ }
+
+ readonly attribute int16u dataModelRevision = 0;
+ readonly attribute char_string<32> vendorName = 1;
+ readonly attribute vendor_id vendorID = 2;
+ readonly attribute char_string<32> productName = 3;
+ readonly attribute int16u productID = 4;
+ attribute access(write: manage) char_string<32> nodeLabel = 5;
+ attribute access(write: administer) char_string<2> location = 6;
+ readonly attribute int16u hardwareVersion = 7;
+ readonly attribute char_string<64> hardwareVersionString = 8;
+ readonly attribute int32u softwareVersion = 9;
+ readonly attribute char_string<64> softwareVersionString = 10;
+ readonly attribute optional char_string<16> manufacturingDate = 11;
+ readonly attribute optional char_string<32> partNumber = 12;
+ readonly attribute optional long_char_string<256> productURL = 13;
+ readonly attribute optional char_string<64> productLabel = 14;
+ readonly attribute optional char_string<32> serialNumber = 15;
+ attribute access(write: manage) optional boolean localConfigDisabled = 16;
+ readonly attribute optional boolean reachable = 17;
+ readonly attribute char_string<32> uniqueID = 18;
+ readonly attribute CapabilityMinimaStruct capabilityMinima = 19;
+ readonly attribute optional ProductAppearanceStruct productAppearance = 20;
+ readonly attribute int32u specificationVersion = 21;
+ readonly attribute int16u maxPathsPerInvoke = 22;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ command MfgSpecificPing(): DefaultSuccess = 0;
+}
+
+/** Nodes should be expected to be deployed to any and all regions of the world. These global regions
+ may have differing common languages, units of measurements, and numerical formatting
+ standards. As such, Nodes that visually or audibly convey information need a mechanism by which
+ they can be configured to use a user’s preferred language, units, etc */
+cluster LocalizationConfiguration = 43 {
+ revision 1; // NOTE: Default/not specifically set
+
+ attribute access(write: manage) char_string<35> activeLocale = 0;
+ readonly attribute char_string supportedLocales[] = 1;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+}
+
+/** This cluster is used to describe the configuration and capabilities of a physical power source that provides power to the Node. */
+cluster PowerSource = 47 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum BatApprovedChemistryEnum : enum16 {
+ kUnspecified = 0;
+ kAlkaline = 1;
+ kLithiumCarbonFluoride = 2;
+ kLithiumChromiumOxide = 3;
+ kLithiumCopperOxide = 4;
+ kLithiumIronDisulfide = 5;
+ kLithiumManganeseDioxide = 6;
+ kLithiumThionylChloride = 7;
+ kMagnesium = 8;
+ kMercuryOxide = 9;
+ kNickelOxyhydride = 10;
+ kSilverOxide = 11;
+ kZincAir = 12;
+ kZincCarbon = 13;
+ kZincChloride = 14;
+ kZincManganeseDioxide = 15;
+ kLeadAcid = 16;
+ kLithiumCobaltOxide = 17;
+ kLithiumIon = 18;
+ kLithiumIonPolymer = 19;
+ kLithiumIronPhosphate = 20;
+ kLithiumSulfur = 21;
+ kLithiumTitanate = 22;
+ kNickelCadmium = 23;
+ kNickelHydrogen = 24;
+ kNickelIron = 25;
+ kNickelMetalHydride = 26;
+ kNickelZinc = 27;
+ kSilverZinc = 28;
+ kSodiumIon = 29;
+ kSodiumSulfur = 30;
+ kZincBromide = 31;
+ kZincCerium = 32;
+ }
+
+ enum BatChargeFaultEnum : enum8 {
+ kUnspecified = 0;
+ kAmbientTooHot = 1;
+ kAmbientTooCold = 2;
+ kBatteryTooHot = 3;
+ kBatteryTooCold = 4;
+ kBatteryAbsent = 5;
+ kBatteryOverVoltage = 6;
+ kBatteryUnderVoltage = 7;
+ kChargerOverVoltage = 8;
+ kChargerUnderVoltage = 9;
+ kSafetyTimeout = 10;
+ }
+
+ enum BatChargeLevelEnum : enum8 {
+ kOK = 0;
+ kWarning = 1;
+ kCritical = 2;
+ }
+
+ enum BatChargeStateEnum : enum8 {
+ kUnknown = 0;
+ kIsCharging = 1;
+ kIsAtFullCharge = 2;
+ kIsNotCharging = 3;
+ }
+
+ enum BatCommonDesignationEnum : enum16 {
+ kUnspecified = 0;
+ kAAA = 1;
+ kAA = 2;
+ kC = 3;
+ kD = 4;
+ k4v5 = 5;
+ k6v0 = 6;
+ k9v0 = 7;
+ k12AA = 8;
+ kAAAA = 9;
+ kA = 10;
+ kB = 11;
+ kF = 12;
+ kN = 13;
+ kNo6 = 14;
+ kSubC = 15;
+ kA23 = 16;
+ kA27 = 17;
+ kBA5800 = 18;
+ kDuplex = 19;
+ k4SR44 = 20;
+ k523 = 21;
+ k531 = 22;
+ k15v0 = 23;
+ k22v5 = 24;
+ k30v0 = 25;
+ k45v0 = 26;
+ k67v5 = 27;
+ kJ = 28;
+ kCR123A = 29;
+ kCR2 = 30;
+ k2CR5 = 31;
+ kCRP2 = 32;
+ kCRV3 = 33;
+ kSR41 = 34;
+ kSR43 = 35;
+ kSR44 = 36;
+ kSR45 = 37;
+ kSR48 = 38;
+ kSR54 = 39;
+ kSR55 = 40;
+ kSR57 = 41;
+ kSR58 = 42;
+ kSR59 = 43;
+ kSR60 = 44;
+ kSR63 = 45;
+ kSR64 = 46;
+ kSR65 = 47;
+ kSR66 = 48;
+ kSR67 = 49;
+ kSR68 = 50;
+ kSR69 = 51;
+ kSR516 = 52;
+ kSR731 = 53;
+ kSR712 = 54;
+ kLR932 = 55;
+ kA5 = 56;
+ kA10 = 57;
+ kA13 = 58;
+ kA312 = 59;
+ kA675 = 60;
+ kAC41E = 61;
+ k10180 = 62;
+ k10280 = 63;
+ k10440 = 64;
+ k14250 = 65;
+ k14430 = 66;
+ k14500 = 67;
+ k14650 = 68;
+ k15270 = 69;
+ k16340 = 70;
+ kRCR123A = 71;
+ k17500 = 72;
+ k17670 = 73;
+ k18350 = 74;
+ k18500 = 75;
+ k18650 = 76;
+ k19670 = 77;
+ k25500 = 78;
+ k26650 = 79;
+ k32600 = 80;
+ }
+
+ enum BatFaultEnum : enum8 {
+ kUnspecified = 0;
+ kOverTemp = 1;
+ kUnderTemp = 2;
+ }
+
+ enum BatReplaceabilityEnum : enum8 {
+ kUnspecified = 0;
+ kNotReplaceable = 1;
+ kUserReplaceable = 2;
+ kFactoryReplaceable = 3;
+ }
+
+ enum PowerSourceStatusEnum : enum8 {
+ kUnspecified = 0;
+ kActive = 1;
+ kStandby = 2;
+ kUnavailable = 3;
+ }
+
+ enum WiredCurrentTypeEnum : enum8 {
+ kAC = 0;
+ kDC = 1;
+ }
+
+ enum WiredFaultEnum : enum8 {
+ kUnspecified = 0;
+ kOverVoltage = 1;
+ kUnderVoltage = 2;
+ }
+
+ bitmap Feature : bitmap32 {
+ kWired = 0x1;
+ kBattery = 0x2;
+ kRechargeable = 0x4;
+ kReplaceable = 0x8;
+ }
+
+ struct BatChargeFaultChangeType {
+ BatChargeFaultEnum current[] = 0;
+ BatChargeFaultEnum previous[] = 1;
+ }
+
+ struct BatFaultChangeType {
+ BatFaultEnum current[] = 0;
+ BatFaultEnum previous[] = 1;
+ }
+
+ struct WiredFaultChangeType {
+ WiredFaultEnum current[] = 0;
+ WiredFaultEnum previous[] = 1;
+ }
+
+ info event WiredFaultChange = 0 {
+ WiredFaultEnum current[] = 0;
+ WiredFaultEnum previous[] = 1;
+ }
+
+ info event BatFaultChange = 1 {
+ BatFaultEnum current[] = 0;
+ BatFaultEnum previous[] = 1;
+ }
+
+ info event BatChargeFaultChange = 2 {
+ BatChargeFaultEnum current[] = 0;
+ BatChargeFaultEnum previous[] = 1;
+ }
+
+ readonly attribute PowerSourceStatusEnum status = 0;
+ readonly attribute int8u order = 1;
+ readonly attribute char_string<60> description = 2;
+ readonly attribute optional nullable int32u wiredAssessedInputVoltage = 3;
+ readonly attribute optional nullable int16u wiredAssessedInputFrequency = 4;
+ readonly attribute optional WiredCurrentTypeEnum wiredCurrentType = 5;
+ readonly attribute optional nullable int32u wiredAssessedCurrent = 6;
+ readonly attribute optional int32u wiredNominalVoltage = 7;
+ readonly attribute optional int32u wiredMaximumCurrent = 8;
+ readonly attribute optional boolean wiredPresent = 9;
+ readonly attribute optional WiredFaultEnum activeWiredFaults[] = 10;
+ readonly attribute optional nullable int32u batVoltage = 11;
+ readonly attribute optional nullable int8u batPercentRemaining = 12;
+ readonly attribute optional nullable int32u batTimeRemaining = 13;
+ readonly attribute optional BatChargeLevelEnum batChargeLevel = 14;
+ readonly attribute optional boolean batReplacementNeeded = 15;
+ readonly attribute optional BatReplaceabilityEnum batReplaceability = 16;
+ readonly attribute optional boolean batPresent = 17;
+ readonly attribute optional BatFaultEnum activeBatFaults[] = 18;
+ readonly attribute optional char_string<60> batReplacementDescription = 19;
+ readonly attribute optional BatCommonDesignationEnum batCommonDesignation = 20;
+ readonly attribute optional char_string<20> batANSIDesignation = 21;
+ readonly attribute optional char_string<20> batIECDesignation = 22;
+ readonly attribute optional BatApprovedChemistryEnum batApprovedChemistry = 23;
+ readonly attribute optional int32u batCapacity = 24;
+ readonly attribute optional int8u batQuantity = 25;
+ readonly attribute optional BatChargeStateEnum batChargeState = 26;
+ readonly attribute optional nullable int32u batTimeToFullCharge = 27;
+ readonly attribute optional boolean batFunctionalWhileCharging = 28;
+ readonly attribute optional nullable int32u batChargingCurrent = 29;
+ readonly attribute optional BatChargeFaultEnum activeBatChargeFaults[] = 30;
+ readonly attribute endpoint_no endpointList[] = 31;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+}
+
+/** This cluster is used to manage global aspects of the Commissioning flow. */
+cluster GeneralCommissioning = 48 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum CommissioningErrorEnum : enum8 {
+ kOK = 0;
+ kValueOutsideRange = 1;
+ kInvalidAuthentication = 2;
+ kNoFailSafe = 3;
+ kBusyWithOtherAdmin = 4;
+ kRequiredTCNotAccepted = 5;
+ kTCAcknowledgementsNotReceived = 6;
+ kTCMinVersionNotMet = 7;
+ }
+
+ enum RegulatoryLocationTypeEnum : enum8 {
+ kIndoor = 0;
+ kOutdoor = 1;
+ kIndoorOutdoor = 2;
+ }
+
+ bitmap Feature : bitmap32 {
+ kTermsAndConditions = 0x1;
+ }
+
+ struct BasicCommissioningInfo {
+ int16u failSafeExpiryLengthSeconds = 0;
+ int16u maxCumulativeFailsafeSeconds = 1;
+ }
+
+ attribute access(write: administer) int64u breadcrumb = 0;
+ readonly attribute BasicCommissioningInfo basicCommissioningInfo = 1;
+ readonly attribute RegulatoryLocationTypeEnum regulatoryConfig = 2;
+ readonly attribute RegulatoryLocationTypeEnum locationCapability = 3;
+ readonly attribute boolean supportsConcurrentConnection = 4;
+ provisional readonly attribute access(read: administer) optional int16u TCAcceptedVersion = 5;
+ provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
+ provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
+ provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 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;
+
+ request struct ArmFailSafeRequest {
+ int16u expiryLengthSeconds = 0;
+ int64u breadcrumb = 1;
+ }
+
+ response struct ArmFailSafeResponse = 1 {
+ CommissioningErrorEnum errorCode = 0;
+ char_string<128> debugText = 1;
+ }
+
+ request struct SetRegulatoryConfigRequest {
+ RegulatoryLocationTypeEnum newRegulatoryConfig = 0;
+ char_string<2> countryCode = 1;
+ int64u breadcrumb = 2;
+ }
+
+ response struct SetRegulatoryConfigResponse = 3 {
+ CommissioningErrorEnum errorCode = 0;
+ char_string debugText = 1;
+ }
+
+ response struct CommissioningCompleteResponse = 5 {
+ CommissioningErrorEnum errorCode = 0;
+ char_string debugText = 1;
+ }
+
+ request struct SetTCAcknowledgementsRequest {
+ int16u TCVersion = 0;
+ bitmap16 TCUserResponse = 1;
+ }
+
+ response struct SetTCAcknowledgementsResponse = 7 {
+ CommissioningErrorEnum errorCode = 0;
+ }
+
+ /** Arm the persistent fail-safe timer with an expiry time of now + ExpiryLengthSeconds using device clock */
+ command access(invoke: administer) ArmFailSafe(ArmFailSafeRequest): ArmFailSafeResponse = 0;
+ /** Set the regulatory configuration to be used during commissioning */
+ command access(invoke: administer) SetRegulatoryConfig(SetRegulatoryConfigRequest): SetRegulatoryConfigResponse = 2;
+ /** Signals the Server that the Client has successfully completed all steps of Commissioning/Recofiguration needed during fail-safe period. */
+ fabric command access(invoke: administer) CommissioningComplete(): CommissioningCompleteResponse = 4;
+ /** This command sets the user acknowledgements received in the Enhanced Setup Flow Terms and Conditions into the node. */
+ command access(invoke: administer) SetTCAcknowledgements(SetTCAcknowledgementsRequest): SetTCAcknowledgementsResponse = 6;
+}
+
+/** Functionality to configure, enable, disable network credentials and access on a Matter device. */
+cluster NetworkCommissioning = 49 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum NetworkCommissioningStatusEnum : enum8 {
+ kSuccess = 0;
+ kOutOfRange = 1;
+ kBoundsExceeded = 2;
+ kNetworkIDNotFound = 3;
+ kDuplicateNetworkID = 4;
+ kNetworkNotFound = 5;
+ kRegulatoryError = 6;
+ kAuthFailure = 7;
+ kUnsupportedSecurity = 8;
+ kOtherConnectionFailure = 9;
+ kIPV6Failed = 10;
+ kIPBindFailed = 11;
+ kUnknownError = 12;
+ }
+
+ enum WiFiBandEnum : enum8 {
+ k2G4 = 0;
+ k3G65 = 1;
+ k5G = 2;
+ k6G = 3;
+ k60G = 4;
+ k1G = 5;
+ }
+
+ bitmap Feature : bitmap32 {
+ kWiFiNetworkInterface = 0x1;
+ kThreadNetworkInterface = 0x2;
+ kEthernetNetworkInterface = 0x4;
+ kPerDeviceCredentials = 0x8;
+ }
+
+ bitmap ThreadCapabilitiesBitmap : bitmap16 {
+ kIsBorderRouterCapable = 0x1;
+ kIsRouterCapable = 0x2;
+ kIsSleepyEndDeviceCapable = 0x4;
+ kIsFullThreadDevice = 0x8;
+ kIsSynchronizedSleepyEndDeviceCapable = 0x10;
+ }
+
+ bitmap WiFiSecurityBitmap : bitmap8 {
+ kUnencrypted = 0x1;
+ kWEP = 0x2;
+ kWPAPersonal = 0x4;
+ kWPA2Personal = 0x8;
+ kWPA3Personal = 0x10;
+ kWPA3MatterPDC = 0x20;
+ }
+
+ struct NetworkInfoStruct {
+ octet_string<32> networkID = 0;
+ boolean connected = 1;
+ optional nullable octet_string<20> networkIdentifier = 2;
+ optional nullable octet_string<20> clientIdentifier = 3;
+ }
+
+ struct ThreadInterfaceScanResultStruct {
+ int16u panId = 0;
+ int64u extendedPanId = 1;
+ char_string<16> networkName = 2;
+ int16u channel = 3;
+ int8u version = 4;
+ octet_string<8> extendedAddress = 5;
+ int8s rssi = 6;
+ int8u lqi = 7;
+ }
+
+ struct WiFiInterfaceScanResultStruct {
+ WiFiSecurityBitmap security = 0;
+ octet_string<32> ssid = 1;
+ octet_string<6> bssid = 2;
+ int16u channel = 3;
+ WiFiBandEnum wiFiBand = 4;
+ int8s rssi = 5;
+ }
+
+ readonly attribute access(read: administer) int8u maxNetworks = 0;
+ readonly attribute access(read: administer) NetworkInfoStruct networks[] = 1;
+ readonly attribute optional int8u scanMaxTimeSeconds = 2;
+ readonly attribute optional int8u connectMaxTimeSeconds = 3;
+ attribute access(write: administer) boolean interfaceEnabled = 4;
+ readonly attribute access(read: administer) nullable NetworkCommissioningStatusEnum lastNetworkingStatus = 5;
+ readonly attribute access(read: administer) nullable octet_string<32> lastNetworkID = 6;
+ readonly attribute access(read: administer) nullable int32s lastConnectErrorValue = 7;
+ provisional readonly attribute optional WiFiBandEnum supportedWiFiBands[] = 8;
+ provisional readonly attribute optional ThreadCapabilitiesBitmap supportedThreadFeatures = 9;
+ provisional readonly attribute optional int16u threadVersion = 10;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct ScanNetworksRequest {
+ optional nullable octet_string<32> ssid = 0;
+ optional int64u breadcrumb = 1;
+ }
+
+ response struct ScanNetworksResponse = 1 {
+ NetworkCommissioningStatusEnum networkingStatus = 0;
+ optional char_string debugText = 1;
+ optional WiFiInterfaceScanResultStruct wiFiScanResults[] = 2;
+ optional ThreadInterfaceScanResultStruct threadScanResults[] = 3;
+ }
+
+ request struct AddOrUpdateWiFiNetworkRequest {
+ octet_string<32> ssid = 0;
+ octet_string<64> credentials = 1;
+ optional int64u breadcrumb = 2;
+ optional octet_string<140> networkIdentity = 3;
+ optional octet_string<20> clientIdentifier = 4;
+ optional octet_string<32> possessionNonce = 5;
+ }
+
+ request struct AddOrUpdateThreadNetworkRequest {
+ octet_string<254> operationalDataset = 0;
+ optional int64u breadcrumb = 1;
+ }
+
+ request struct RemoveNetworkRequest {
+ octet_string<32> networkID = 0;
+ optional int64u breadcrumb = 1;
+ }
+
+ response struct NetworkConfigResponse = 5 {
+ NetworkCommissioningStatusEnum networkingStatus = 0;
+ optional char_string<512> debugText = 1;
+ optional int8u networkIndex = 2;
+ optional octet_string<140> clientIdentity = 3;
+ optional octet_string<64> possessionSignature = 4;
+ }
+
+ request struct ConnectNetworkRequest {
+ octet_string<32> networkID = 0;
+ optional int64u breadcrumb = 1;
+ }
+
+ response struct ConnectNetworkResponse = 7 {
+ NetworkCommissioningStatusEnum networkingStatus = 0;
+ optional char_string debugText = 1;
+ nullable int32s errorValue = 2;
+ }
+
+ request struct ReorderNetworkRequest {
+ octet_string<32> networkID = 0;
+ int8u networkIndex = 1;
+ optional int64u breadcrumb = 2;
+ }
+
+ request struct QueryIdentityRequest {
+ octet_string<20> keyIdentifier = 0;
+ optional octet_string<32> possessionNonce = 1;
+ }
+
+ response struct QueryIdentityResponse = 10 {
+ octet_string<140> identity = 0;
+ optional octet_string<64> possessionSignature = 1;
+ }
+
+ /** Detemine the set of networks the device sees as available. */
+ command access(invoke: administer) ScanNetworks(ScanNetworksRequest): ScanNetworksResponse = 0;
+ /** Add or update the credentials for a given Wi-Fi network. */
+ command access(invoke: administer) AddOrUpdateWiFiNetwork(AddOrUpdateWiFiNetworkRequest): NetworkConfigResponse = 2;
+ /** Add or update the credentials for a given Thread network. */
+ command access(invoke: administer) AddOrUpdateThreadNetwork(AddOrUpdateThreadNetworkRequest): NetworkConfigResponse = 3;
+ /** Remove the definition of a given network (including its credentials). */
+ command access(invoke: administer) RemoveNetwork(RemoveNetworkRequest): NetworkConfigResponse = 4;
+ /** Connect to the specified network, using previously-defined credentials. */
+ command access(invoke: administer) ConnectNetwork(ConnectNetworkRequest): ConnectNetworkResponse = 6;
+ /** Modify the order in which networks will be presented in the Networks attribute. */
+ command access(invoke: administer) ReorderNetwork(ReorderNetworkRequest): NetworkConfigResponse = 8;
+ /** Retrieve details about and optionally proof of possession of a network client identity. */
+ command access(invoke: administer) QueryIdentity(QueryIdentityRequest): QueryIdentityResponse = 9;
+}
+
+/** The cluster provides commands for retrieving unstructured diagnostic logs from a Node that may be used to aid in diagnostics. */
+cluster DiagnosticLogs = 50 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum IntentEnum : enum8 {
+ kEndUserSupport = 0;
+ kNetworkDiag = 1;
+ kCrashLogs = 2;
+ }
+
+ enum StatusEnum : enum8 {
+ kSuccess = 0;
+ kExhausted = 1;
+ kNoLogs = 2;
+ kBusy = 3;
+ kDenied = 4;
+ }
+
+ enum TransferProtocolEnum : enum8 {
+ kResponsePayload = 0;
+ kBDX = 1;
+ }
+
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct RetrieveLogsRequestRequest {
+ IntentEnum intent = 0;
+ TransferProtocolEnum requestedProtocol = 1;
+ optional char_string<32> transferFileDesignator = 2;
+ }
+
+ response struct RetrieveLogsResponse = 1 {
+ StatusEnum status = 0;
+ long_octet_string logContent = 1;
+ optional epoch_us UTCTimeStamp = 2;
+ optional systime_us timeSinceBoot = 3;
+ }
+
+ /** Retrieving diagnostic logs from a Node */
+ command RetrieveLogsRequest(RetrieveLogsRequestRequest): RetrieveLogsResponse = 0;
+}
+
+/** The General Diagnostics Cluster, along with other diagnostics clusters, provide a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems. */
+cluster GeneralDiagnostics = 51 {
+ revision 2;
+
+ enum BootReasonEnum : enum8 {
+ kUnspecified = 0;
+ kPowerOnReboot = 1;
+ kBrownOutReset = 2;
+ kSoftwareWatchdogReset = 3;
+ kHardwareWatchdogReset = 4;
+ kSoftwareUpdateCompleted = 5;
+ kSoftwareReset = 6;
+ }
+
+ enum HardwareFaultEnum : enum8 {
+ kUnspecified = 0;
+ kRadio = 1;
+ kSensor = 2;
+ kResettableOverTemp = 3;
+ kNonResettableOverTemp = 4;
+ kPowerSource = 5;
+ kVisualDisplayFault = 6;
+ kAudioOutputFault = 7;
+ kUserInterfaceFault = 8;
+ kNonVolatileMemoryError = 9;
+ kTamperDetected = 10;
+ }
+
+ enum InterfaceTypeEnum : enum8 {
+ kUnspecified = 0;
+ kWiFi = 1;
+ kEthernet = 2;
+ kCellular = 3;
+ kThread = 4;
+ }
+
+ enum NetworkFaultEnum : enum8 {
+ kUnspecified = 0;
+ kHardwareFailure = 1;
+ kNetworkJammed = 2;
+ kConnectionFailed = 3;
+ }
+
+ enum RadioFaultEnum : enum8 {
+ kUnspecified = 0;
+ kWiFiFault = 1;
+ kCellularFault = 2;
+ kThreadFault = 3;
+ kNFCFault = 4;
+ kBLEFault = 5;
+ kEthernetFault = 6;
+ }
+
+ bitmap Feature : bitmap32 {
+ kDataModelTest = 0x1;
+ }
+
+ struct NetworkInterface {
+ char_string<32> name = 0;
+ boolean isOperational = 1;
+ nullable boolean offPremiseServicesReachableIPv4 = 2;
+ nullable boolean offPremiseServicesReachableIPv6 = 3;
+ octet_string<8> hardwareAddress = 4;
+ octet_string IPv4Addresses[] = 5;
+ octet_string IPv6Addresses[] = 6;
+ InterfaceTypeEnum type = 7;
+ }
+
+ critical event HardwareFaultChange = 0 {
+ HardwareFaultEnum current[] = 0;
+ HardwareFaultEnum previous[] = 1;
+ }
+
+ critical event RadioFaultChange = 1 {
+ RadioFaultEnum current[] = 0;
+ RadioFaultEnum previous[] = 1;
+ }
+
+ critical event NetworkFaultChange = 2 {
+ NetworkFaultEnum current[] = 0;
+ NetworkFaultEnum previous[] = 1;
+ }
+
+ critical event BootReason = 3 {
+ BootReasonEnum bootReason = 0;
+ }
+
+ readonly attribute NetworkInterface networkInterfaces[] = 0;
+ readonly attribute int16u rebootCount = 1;
+ readonly attribute optional int64u upTime = 2;
+ readonly attribute optional int32u totalOperationalHours = 3;
+ readonly attribute optional BootReasonEnum bootReason = 4;
+ readonly attribute optional HardwareFaultEnum activeHardwareFaults[] = 5;
+ readonly attribute optional RadioFaultEnum activeRadioFaults[] = 6;
+ readonly attribute optional NetworkFaultEnum activeNetworkFaults[] = 7;
+ readonly attribute boolean testEventTriggersEnabled = 8;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct TestEventTriggerRequest {
+ octet_string<16> enableKey = 0;
+ int64u eventTrigger = 1;
+ }
+
+ response struct TimeSnapshotResponse = 2 {
+ systime_ms systemTimeMs = 0;
+ nullable posix_ms posixTimeMs = 1;
+ }
+
+ request struct PayloadTestRequestRequest {
+ octet_string<16> enableKey = 0;
+ int8u value = 1;
+ int16u count = 2;
+ }
+
+ response struct PayloadTestResponse = 4 {
+ octet_string payload = 0;
+ }
+
+ /** Provide a means for certification tests to trigger some test-plan-specific events */
+ command access(invoke: manage) TestEventTrigger(TestEventTriggerRequest): DefaultSuccess = 0;
+ /** Take a snapshot of system time and epoch time. */
+ command TimeSnapshot(): TimeSnapshotResponse = 1;
+ /** Request a variable length payload response. */
+ command PayloadTestRequest(PayloadTestRequestRequest): PayloadTestResponse = 3;
+}
+
+/** Commands to trigger a Node to allow a new Administrator to commission it. */
+cluster AdministratorCommissioning = 60 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum CommissioningWindowStatusEnum : enum8 {
+ kWindowNotOpen = 0;
+ kEnhancedWindowOpen = 1;
+ kBasicWindowOpen = 2;
+ }
+
+ enum StatusCode : enum8 {
+ kBusy = 2;
+ kPAKEParameterError = 3;
+ kWindowNotOpen = 4;
+ }
+
+ bitmap Feature : bitmap32 {
+ kBasic = 0x1;
+ }
+
+ readonly attribute CommissioningWindowStatusEnum windowStatus = 0;
+ readonly attribute nullable fabric_idx adminFabricIndex = 1;
+ readonly attribute nullable vendor_id adminVendorId = 2;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct OpenCommissioningWindowRequest {
+ int16u commissioningTimeout = 0;
+ octet_string PAKEPasscodeVerifier = 1;
+ int16u discriminator = 2;
+ int32u iterations = 3;
+ octet_string<32> salt = 4;
+ }
+
+ request struct OpenBasicCommissioningWindowRequest {
+ int16u commissioningTimeout = 0;
+ }
+
+ /** This command is used by a current Administrator to instruct a Node to go into commissioning mode using enhanced commissioning method. */
+ timed command access(invoke: administer) OpenCommissioningWindow(OpenCommissioningWindowRequest): DefaultSuccess = 0;
+ /** This command is used by a current Administrator to instruct a Node to go into commissioning mode using basic commissioning method, if the node supports it. */
+ timed command access(invoke: administer) OpenBasicCommissioningWindow(OpenBasicCommissioningWindowRequest): DefaultSuccess = 1;
+ /** This command is used by a current Administrator to instruct a Node to revoke any active Open Commissioning Window or Open Basic Commissioning Window command. */
+ timed command access(invoke: administer) RevokeCommissioning(): DefaultSuccess = 2;
+}
+
+/** This cluster is used to add or remove Operational Credentials on a Commissionee or Node, as well as manage the associated Fabrics. */
+cluster OperationalCredentials = 62 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum CertificateChainTypeEnum : enum8 {
+ kDACCertificate = 1;
+ kPAICertificate = 2;
+ }
+
+ enum NodeOperationalCertStatusEnum : enum8 {
+ kOK = 0;
+ kInvalidPublicKey = 1;
+ kInvalidNodeOpId = 2;
+ kInvalidNOC = 3;
+ kMissingCsr = 4;
+ kTableFull = 5;
+ kInvalidAdminSubject = 6;
+ kFabricConflict = 9;
+ kLabelConflict = 10;
+ kInvalidFabricIndex = 11;
+ }
+
+ fabric_scoped struct FabricDescriptorStruct {
+ octet_string<65> rootPublicKey = 1;
+ vendor_id vendorID = 2;
+ fabric_id fabricID = 3;
+ node_id nodeID = 4;
+ char_string<32> label = 5;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_scoped struct NOCStruct {
+ fabric_sensitive octet_string noc = 1;
+ nullable fabric_sensitive octet_string icac = 2;
+ fabric_idx fabricIndex = 254;
+ }
+
+ readonly attribute access(read: administer) NOCStruct NOCs[] = 0;
+ readonly attribute FabricDescriptorStruct fabrics[] = 1;
+ readonly attribute int8u supportedFabrics = 2;
+ readonly attribute int8u commissionedFabrics = 3;
+ readonly attribute octet_string trustedRootCertificates[] = 4;
+ readonly attribute int8u currentFabricIndex = 5;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct AttestationRequestRequest {
+ octet_string<32> attestationNonce = 0;
+ }
+
+ response struct AttestationResponse = 1 {
+ octet_string<900> attestationElements = 0;
+ octet_string<64> attestationSignature = 1;
+ }
+
+ request struct CertificateChainRequestRequest {
+ CertificateChainTypeEnum certificateType = 0;
+ }
+
+ response struct CertificateChainResponse = 3 {
+ octet_string<600> certificate = 0;
+ }
+
+ request struct CSRRequestRequest {
+ octet_string<32> CSRNonce = 0;
+ optional boolean isForUpdateNOC = 1;
+ }
+
+ response struct CSRResponse = 5 {
+ octet_string NOCSRElements = 0;
+ octet_string attestationSignature = 1;
+ }
+
+ request struct AddNOCRequest {
+ octet_string<400> NOCValue = 0;
+ optional octet_string<400> ICACValue = 1;
+ octet_string<16> IPKValue = 2;
+ int64u caseAdminSubject = 3;
+ vendor_id adminVendorId = 4;
+ }
+
+ request struct UpdateNOCRequest {
+ octet_string NOCValue = 0;
+ optional octet_string ICACValue = 1;
+ }
+
+ response struct NOCResponse = 8 {
+ NodeOperationalCertStatusEnum statusCode = 0;
+ optional fabric_idx fabricIndex = 1;
+ optional char_string<128> debugText = 2;
+ }
+
+ request struct UpdateFabricLabelRequest {
+ char_string<32> label = 0;
+ }
+
+ request struct RemoveFabricRequest {
+ fabric_idx fabricIndex = 0;
+ }
+
+ request struct AddTrustedRootCertificateRequest {
+ octet_string rootCACertificate = 0;
+ }
+
+ /** Sender is requesting attestation information from the receiver. */
+ command access(invoke: administer) AttestationRequest(AttestationRequestRequest): AttestationResponse = 0;
+ /** Sender is requesting a device attestation certificate from the receiver. */
+ command access(invoke: administer) CertificateChainRequest(CertificateChainRequestRequest): CertificateChainResponse = 2;
+ /** Sender is requesting a certificate signing request (CSR) from the receiver. */
+ command access(invoke: administer) CSRRequest(CSRRequestRequest): CSRResponse = 4;
+ /** Sender is requesting to add the new node operational certificates. */
+ command access(invoke: administer) AddNOC(AddNOCRequest): NOCResponse = 6;
+ /** Sender is requesting to update the node operational certificates. */
+ fabric command access(invoke: administer) UpdateNOC(UpdateNOCRequest): NOCResponse = 7;
+ /** This command SHALL be used by an Administrative Node to set the user-visible Label field for a given Fabric, as reflected by entries in the Fabrics attribute. */
+ fabric command access(invoke: administer) UpdateFabricLabel(UpdateFabricLabelRequest): NOCResponse = 9;
+ /** This command is used by Administrative Nodes to remove a given fabric index and delete all associated fabric-scoped data. */
+ command access(invoke: administer) RemoveFabric(RemoveFabricRequest): NOCResponse = 10;
+ /** This command SHALL add a Trusted Root CA Certificate, provided as its CHIP Certificate representation. */
+ command access(invoke: administer) AddTrustedRootCertificate(AddTrustedRootCertificateRequest): DefaultSuccess = 11;
+}
+
+/** The Group Key Management Cluster is the mechanism by which group keys are managed. */
+cluster GroupKeyManagement = 63 {
+ revision 1; // NOTE: Default/not specifically set
+
+ enum GroupKeySecurityPolicyEnum : enum8 {
+ kTrustFirst = 0;
+ kCacheAndSync = 1;
+ }
+
+ bitmap Feature : bitmap32 {
+ kCacheAndSync = 0x1;
+ }
+
+ fabric_scoped struct GroupInfoMapStruct {
+ group_id groupId = 1;
+ endpoint_no endpoints[] = 2;
+ optional char_string<16> groupName = 3;
+ fabric_idx fabricIndex = 254;
+ }
+
+ fabric_scoped struct GroupKeyMapStruct {
+ group_id groupId = 1;
+ int16u groupKeySetID = 2;
+ fabric_idx fabricIndex = 254;
+ }
+
+ struct GroupKeySetStruct {
+ int16u groupKeySetID = 0;
+ GroupKeySecurityPolicyEnum groupKeySecurityPolicy = 1;
+ nullable octet_string<16> epochKey0 = 2;
+ nullable epoch_us epochStartTime0 = 3;
+ nullable octet_string<16> epochKey1 = 4;
+ nullable epoch_us epochStartTime1 = 5;
+ nullable octet_string<16> epochKey2 = 6;
+ nullable epoch_us epochStartTime2 = 7;
+ }
+
+ attribute access(write: manage) GroupKeyMapStruct groupKeyMap[] = 0;
+ readonly attribute GroupInfoMapStruct groupTable[] = 1;
+ readonly attribute int16u maxGroupsPerFabric = 2;
+ readonly attribute int16u maxGroupKeysPerFabric = 3;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct KeySetWriteRequest {
+ GroupKeySetStruct groupKeySet = 0;
+ }
+
+ request struct KeySetReadRequest {
+ int16u groupKeySetID = 0;
+ }
+
+ response struct KeySetReadResponse = 2 {
+ GroupKeySetStruct groupKeySet = 0;
+ }
+
+ request struct KeySetRemoveRequest {
+ int16u groupKeySetID = 0;
+ }
+
+ response struct KeySetReadAllIndicesResponse = 5 {
+ int16u groupKeySetIDs[] = 0;
+ }
+
+ /** Write a new set of keys for the given key set id. */
+ fabric command access(invoke: administer) KeySetWrite(KeySetWriteRequest): DefaultSuccess = 0;
+ /** Read the keys for a given key set id. */
+ fabric command access(invoke: administer) KeySetRead(KeySetReadRequest): KeySetReadResponse = 1;
+ /** Revoke a Root Key from a Group */
+ fabric command access(invoke: administer) KeySetRemove(KeySetRemoveRequest): DefaultSuccess = 3;
+ /** Return the list of Group Key Sets associated with the accessing fabric */
+ fabric command access(invoke: administer) KeySetReadAllIndices(): KeySetReadAllIndicesResponse = 4;
+}
+
+/** This cluster provides an interface to a boolean state called StateValue. */
+cluster BooleanState = 69 {
+ revision 1;
+
+ info event StateChange = 0 {
+ boolean stateValue = 0;
+ }
+
+ readonly attribute boolean stateValue = 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;
+}
+
+/** This cluster is used to configure a boolean sensor. */
+cluster BooleanStateConfiguration = 128 {
+ revision 1;
+
+ bitmap AlarmModeBitmap : bitmap8 {
+ kVisual = 0x1;
+ kAudible = 0x2;
+ }
+
+ bitmap Feature : bitmap32 {
+ kVisual = 0x1;
+ kAudible = 0x2;
+ kAlarmSuppress = 0x4;
+ kSensitivityLevel = 0x8;
+ }
+
+ bitmap SensorFaultBitmap : bitmap16 {
+ kGeneralFault = 0x1;
+ }
+
+ info event AlarmsStateChanged = 0 {
+ AlarmModeBitmap alarmsActive = 0;
+ optional AlarmModeBitmap alarmsSuppressed = 1;
+ }
+
+ info event SensorFault = 1 {
+ SensorFaultBitmap sensorFault = 0;
+ }
+
+ attribute optional int8u currentSensitivityLevel = 0;
+ readonly attribute optional int8u supportedSensitivityLevels = 1;
+ readonly attribute optional int8u defaultSensitivityLevel = 2;
+ readonly attribute optional AlarmModeBitmap alarmsActive = 3;
+ readonly attribute optional AlarmModeBitmap alarmsSuppressed = 4;
+ readonly attribute optional AlarmModeBitmap alarmsEnabled = 5;
+ readonly attribute optional AlarmModeBitmap alarmsSupported = 6;
+ readonly attribute optional SensorFaultBitmap sensorFault = 7;
+ 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 SuppressAlarmRequest {
+ AlarmModeBitmap alarmsToSuppress = 0;
+ }
+
+ request struct EnableDisableAlarmRequest {
+ AlarmModeBitmap alarmsToEnableDisable = 0;
+ }
+
+ /** This command is used to suppress the specified alarm mode. */
+ command SuppressAlarm(SuppressAlarmRequest): DefaultSuccess = 0;
+ /** This command is used to enable or disable the specified alarm mode. */
+ command EnableDisableAlarm(EnableDisableAlarmRequest): DefaultSuccess = 1;
+}
+
+endpoint 0 {
+ device type ma_rootdevice = 22, version 1;
+
+
+ server cluster Descriptor {
+ callback attribute deviceTypeList;
+ callback attribute serverList;
+ callback attribute clientList;
+ callback attribute partsList;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
+ }
+
+ server cluster AccessControl {
+ emits event AccessControlEntryChanged;
+ emits event AccessControlExtensionChanged;
+ callback attribute acl;
+ callback attribute extension;
+ callback attribute subjectsPerAccessControlEntry;
+ callback attribute targetsPerAccessControlEntry;
+ callback attribute accessControlEntriesPerFabric;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ callback attribute clusterRevision;
+ }
+
+ server cluster BasicInformation {
+ emits event StartUp;
+ emits event ShutDown;
+ emits event Leave;
+ callback attribute dataModelRevision;
+ callback attribute vendorName;
+ callback attribute vendorID;
+ callback attribute productName;
+ callback attribute productID;
+ persist attribute nodeLabel;
+ callback attribute location;
+ callback attribute hardwareVersion;
+ callback attribute hardwareVersionString;
+ callback attribute softwareVersion;
+ callback attribute softwareVersionString;
+ callback attribute manufacturingDate;
+ callback attribute partNumber;
+ callback attribute productURL;
+ callback attribute productLabel;
+ callback attribute serialNumber;
+ persist attribute localConfigDisabled default = 0;
+ callback attribute uniqueID;
+ callback attribute capabilityMinima;
+ callback attribute specificationVersion;
+ callback attribute maxPathsPerInvoke;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 2;
+ }
+
+ server cluster LocalizationConfiguration {
+ ram attribute activeLocale;
+ callback attribute supportedLocales;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+ }
+
+ server cluster GeneralCommissioning {
+ ram attribute breadcrumb default = 0x0000000000000000;
+ callback attribute basicCommissioningInfo;
+ callback attribute regulatoryConfig;
+ callback attribute locationCapability;
+ callback attribute supportsConcurrentConnection;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 0x0001;
+
+ handle command ArmFailSafe;
+ handle command ArmFailSafeResponse;
+ handle command SetRegulatoryConfig;
+ handle command SetRegulatoryConfigResponse;
+ handle command CommissioningComplete;
+ handle command CommissioningCompleteResponse;
+ }
+
+ server cluster NetworkCommissioning {
+ ram attribute maxNetworks;
+ callback attribute networks;
+ ram attribute scanMaxTimeSeconds;
+ ram attribute connectMaxTimeSeconds;
+ ram attribute interfaceEnabled;
+ ram attribute lastNetworkingStatus;
+ ram attribute lastNetworkID;
+ ram attribute lastConnectErrorValue;
+ ram attribute featureMap default = 1;
+ ram attribute clusterRevision default = 0x0001;
+
+ handle command ScanNetworks;
+ handle command ScanNetworksResponse;
+ handle command AddOrUpdateWiFiNetwork;
+ handle command AddOrUpdateThreadNetwork;
+ handle command RemoveNetwork;
+ handle command NetworkConfigResponse;
+ handle command ConnectNetwork;
+ handle command ConnectNetworkResponse;
+ handle command ReorderNetwork;
+ }
+
+ server cluster DiagnosticLogs {
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+
+ handle command RetrieveLogsRequest;
+ handle command RetrieveLogsResponse;
+ }
+
+ server cluster GeneralDiagnostics {
+ emits event BootReason;
+ callback attribute networkInterfaces;
+ callback attribute rebootCount;
+ callback attribute upTime;
+ callback attribute totalOperationalHours;
+ callback attribute bootReason;
+ callback attribute activeHardwareFaults;
+ callback attribute activeRadioFaults;
+ callback attribute activeNetworkFaults;
+ callback attribute testEventTriggersEnabled default = false;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
+
+ handle command TestEventTrigger;
+ handle command TimeSnapshot;
+ handle command TimeSnapshotResponse;
+ }
+
+ server cluster AdministratorCommissioning {
+ callback attribute windowStatus;
+ callback attribute adminFabricIndex;
+ callback attribute adminVendorId;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 0x0001;
+
+ handle command OpenCommissioningWindow;
+ handle command OpenBasicCommissioningWindow;
+ handle command RevokeCommissioning;
+ }
+
+ server cluster OperationalCredentials {
+ callback attribute NOCs;
+ callback attribute fabrics;
+ callback attribute supportedFabrics;
+ callback attribute commissionedFabrics;
+ callback attribute trustedRootCertificates;
+ callback attribute currentFabricIndex;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 0x0001;
+
+ handle command AttestationRequest;
+ handle command AttestationResponse;
+ handle command CertificateChainRequest;
+ handle command CertificateChainResponse;
+ handle command CSRRequest;
+ handle command CSRResponse;
+ handle command AddNOC;
+ handle command UpdateNOC;
+ handle command NOCResponse;
+ handle command UpdateFabricLabel;
+ handle command RemoveFabric;
+ handle command AddTrustedRootCertificate;
+ }
+
+ server cluster GroupKeyManagement {
+ callback attribute groupKeyMap;
+ callback attribute groupTable;
+ callback attribute maxGroupsPerFabric;
+ callback attribute maxGroupKeysPerFabric;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
+
+ handle command KeySetWrite;
+ handle command KeySetRead;
+ handle command KeySetReadResponse;
+ handle command KeySetRemove;
+ handle command KeySetReadAllIndices;
+ handle command KeySetReadAllIndicesResponse;
+ }
+}
+endpoint 1 {
+ device type ma_powersource = 17, version 1;
+ device type ma_water_leak_detector = 67, version 1;
+
+
+ server cluster Identify {
+ ram attribute identifyTime default = 0x0;
+ ram attribute identifyType default = 0x0;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 2;
+
+ handle command Identify;
+ handle command TriggerEffect;
+ }
+
+ server cluster Groups {
+ ram attribute nameSupport;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 3;
+
+ handle command AddGroup;
+ handle command AddGroupResponse;
+ handle command ViewGroup;
+ handle command ViewGroupResponse;
+ handle command GetGroupMembership;
+ handle command GetGroupMembershipResponse;
+ handle command RemoveGroup;
+ handle command RemoveGroupResponse;
+ handle command RemoveAllGroups;
+ handle command AddGroupIfIdentifying;
+ }
+
+ server cluster Descriptor {
+ callback attribute deviceTypeList;
+ callback attribute serverList;
+ callback attribute clientList;
+ callback attribute partsList;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
+ callback attribute featureMap;
+ callback attribute clusterRevision;
+ }
+
+ server cluster PowerSource {
+ ram attribute status default = 1;
+ ram attribute order default = 1;
+ ram attribute description default = "Primary Battery";
+ ram attribute batVoltage default = 4100;
+ ram attribute batPercentRemaining default = 95;
+ ram attribute batTimeRemaining default = 518400;
+ ram attribute batChargeLevel default = 0;
+ ram attribute batReplacementNeeded default = 0;
+ ram attribute batReplaceability default = 1;
+ ram attribute batPresent default = 1;
+ ram attribute batCapacity default = 350;
+ ram attribute batChargeState default = 4;
+ ram attribute batFunctionalWhileCharging default = 1;
+ callback attribute endpointList;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+ }
+
+ server cluster BooleanState {
+ ram attribute stateValue;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+ }
+
+ server cluster BooleanStateConfiguration {
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
+ ram attribute featureMap default = 0;
+ ram attribute clusterRevision default = 1;
+ }
+}
+
+
diff --git a/examples/water-leak-detector-app/water-leak-detector-common/water-leak-detector-app.zap b/examples/water-leak-detector-app/water-leak-detector-common/water-leak-detector-app.zap
new file mode 100644
index 00000000000000..1dc7adb63ade21
--- /dev/null
+++ b/examples/water-leak-detector-app/water-leak-detector-common/water-leak-detector-app.zap
@@ -0,0 +1,3214 @@
+{
+ "fileFormat": 2,
+ "featureLevel": 103,
+ "creator": "zap",
+ "keyValuePairs": [
+ {
+ "key": "commandDiscovery",
+ "value": "1"
+ },
+ {
+ "key": "defaultResponsePolicy",
+ "value": "always"
+ },
+ {
+ "key": "manufacturerCodes",
+ "value": "0x1002"
+ }
+ ],
+ "package": [
+ {
+ "pathRelativity": "relativeToZap",
+ "path": "../../../src/app/zap-templates/zcl/zcl.json",
+ "type": "zcl-properties",
+ "category": "matter",
+ "version": 1,
+ "description": "Matter SDK ZCL data"
+ },
+ {
+ "pathRelativity": "relativeToZap",
+ "path": "../../../src/app/zap-templates/app-templates.json",
+ "type": "gen-templates-json",
+ "category": "matter",
+ "version": "chip-v1"
+ }
+ ],
+ "endpointTypes": [
+ {
+ "id": 1,
+ "name": "MA-rootdevice",
+ "deviceTypeRef": {
+ "code": 22,
+ "profileId": 259,
+ "label": "MA-rootdevice",
+ "name": "MA-rootdevice"
+ },
+ "deviceTypes": [
+ {
+ "code": 22,
+ "profileId": 259,
+ "label": "MA-rootdevice",
+ "name": "MA-rootdevice"
+ }
+ ],
+ "deviceVersions": [
+ 1
+ ],
+ "deviceIdentifiers": [
+ 22
+ ],
+ "deviceTypeName": "MA-rootdevice",
+ "deviceTypeCode": 22,
+ "deviceTypeProfileId": 259,
+ "clusters": [
+ {
+ "name": "Descriptor",
+ "code": 29,
+ "mfgCode": null,
+ "define": "DESCRIPTOR_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "DeviceTypeList",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ServerList",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClientList",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "PartsList",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Access Control",
+ "code": 31,
+ "mfgCode": null,
+ "define": "ACCESS_CONTROL_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "ACL",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "Extension",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "SubjectsPerAccessControlEntry",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "TargetsPerAccessControlEntry",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AccessControlEntriesPerFabric",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "AccessControlEntryChanged",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ },
+ {
+ "name": "AccessControlExtensionChanged",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
+ },
+ {
+ "name": "Basic Information",
+ "code": 40,
+ "mfgCode": null,
+ "define": "BASIC_INFORMATION_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "DataModelRevision",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "VendorName",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "VendorID",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "vendor_id",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ProductName",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ProductID",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "NodeLabel",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "Location",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "HardwareVersion",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "HardwareVersionString",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SoftwareVersion",
+ "code": 9,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SoftwareVersionString",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ManufacturingDate",
+ "code": 11,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "PartNumber",
+ "code": 12,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ProductURL",
+ "code": 13,
+ "mfgCode": null,
+ "side": "server",
+ "type": "long_char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ProductLabel",
+ "code": 14,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SerialNumber",
+ "code": 15,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "LocalConfigDisabled",
+ "code": 16,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "UniqueID",
+ "code": 18,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "CapabilityMinima",
+ "code": 19,
+ "mfgCode": null,
+ "side": "server",
+ "type": "CapabilityMinimaStruct",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "SpecificationVersion",
+ "code": 21,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxPathsPerInvoke",
+ "code": 22,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "StartUp",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ },
+ {
+ "name": "ShutDown",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ },
+ {
+ "name": "Leave",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
+ },
+ {
+ "name": "Localization Configuration",
+ "code": 43,
+ "mfgCode": null,
+ "define": "LOCALIZATION_CONFIGURATION_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "ActiveLocale",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "SupportedLocales",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "General Commissioning",
+ "code": 48,
+ "mfgCode": null,
+ "define": "GENERAL_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ArmFailSafe",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ArmFailSafeResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "SetRegulatoryConfig",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "SetRegulatoryConfigResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "CommissioningComplete",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "CommissioningCompleteResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "Breadcrumb",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int64u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000000000000000",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "BasicCommissioningInfo",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "BasicCommissioningInfo",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RegulatoryConfig",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "RegulatoryLocationTypeEnum",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "LocationCapability",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "RegulatoryLocationTypeEnum",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "SupportsConcurrentConnection",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ScanNetworks",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ScanNetworksResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddOrUpdateWiFiNetwork",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddOrUpdateThreadNetwork",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveNetwork",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkConfigResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ConnectNetwork",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ConnectNetworkResponse",
+ "code": 7,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ReorderNetwork",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "MaxNetworks",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "Networks",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ScanMaxTimeSeconds",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ConnectMaxTimeSeconds",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "InterfaceEnabled",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "LastNetworkingStatus",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "NetworkCommissioningStatusEnum",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "LastNetworkID",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "type": "octet_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "LastConnectErrorValue",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32s",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Diagnostic Logs",
+ "code": 50,
+ "mfgCode": null,
+ "define": "DIAGNOSTIC_LOGS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "RetrieveLogsRequest",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RetrieveLogsResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "General Diagnostics",
+ "code": 51,
+ "mfgCode": null,
+ "define": "GENERAL_DIAGNOSTICS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "TestEventTrigger",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "TimeSnapshot",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "TimeSnapshotResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "NetworkInterfaces",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "RebootCount",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "UpTime",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int64u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "TotalOperationalHours",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "BootReason",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "BootReasonEnum",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ActiveHardwareFaults",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ActiveRadioFaults",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ActiveNetworkFaults",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "TestEventTriggersEnabled",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "false",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
+ "events": [
+ {
+ "name": "BootReason",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1
+ }
+ ]
+ },
+ {
+ "name": "Administrator Commissioning",
+ "code": 60,
+ "mfgCode": null,
+ "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "OpenCommissioningWindow",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "OpenBasicCommissioningWindow",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RevokeCommissioning",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "WindowStatus",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "CommissioningWindowStatusEnum",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AdminFabricIndex",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "fabric_idx",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AdminVendorId",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "vendor_id",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Operational Credentials",
+ "code": 62,
+ "mfgCode": null,
+ "define": "OPERATIONAL_CREDENTIALS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AttestationRequest",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AttestationResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "CertificateChainRequest",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "CertificateChainResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "CSRRequest",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "CSRResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddNOC",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "UpdateNOC",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NOCResponse",
+ "code": 8,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "UpdateFabricLabel",
+ "code": 9,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveFabric",
+ "code": 10,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddTrustedRootCertificate",
+ "code": 11,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "NOCs",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "Fabrics",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SupportedFabrics",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "CommissionedFabrics",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "TrustedRootCertificates",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "CurrentFabricIndex",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Group Key Management",
+ "code": 63,
+ "mfgCode": null,
+ "define": "GROUP_KEY_MANAGEMENT_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "KeySetWrite",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "KeySetRead",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "KeySetReadResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "KeySetRemove",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "KeySetReadAllIndices",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "KeySetReadAllIndicesResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "GroupKeyMap",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GroupTable",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxGroupsPerFabric",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "MaxGroupKeysPerFabric",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": 2,
+ "name": "Anonymous Endpoint Type",
+ "deviceTypeRef": {
+ "code": 67,
+ "profileId": 259,
+ "label": "MA-water-leak-detector",
+ "name": "MA-water-leak-detector"
+ },
+ "deviceTypes": [
+ {
+ "code": 67,
+ "profileId": 259,
+ "label": "MA-water-leak-detector",
+ "name": "MA-water-leak-detector"
+ },
+ {
+ "code": 17,
+ "profileId": 259,
+ "label": "MA-powersource",
+ "name": "MA-powersource"
+ }
+ ],
+ "deviceVersions": [
+ 1,
+ 1
+ ],
+ "deviceIdentifiers": [
+ 67,
+ 17
+ ],
+ "deviceTypeName": "MA-water-leak-detector",
+ "deviceTypeCode": 67,
+ "deviceTypeProfileId": 259,
+ "clusters": [
+ {
+ "name": "Identify",
+ "code": 3,
+ "mfgCode": null,
+ "define": "IDENTIFY_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "Identify",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "TriggerEffect",
+ "code": 64,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "IdentifyTime",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "IdentifyType",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "IdentifyTypeEnum",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "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": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Groups",
+ "code": 4,
+ "mfgCode": null,
+ "define": "GROUPS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddGroup",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddGroupResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ViewGroup",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ViewGroupResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetGroupMembership",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetGroupMembershipResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveGroup",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveGroupResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveAllGroups",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddGroupIfIdentifying",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "NameSupport",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "NameSupportBitmap",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "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": "3",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Descriptor",
+ "code": 29,
+ "mfgCode": null,
+ "define": "DESCRIPTOR_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "DeviceTypeList",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ServerList",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClientList",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "PartsList",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Power Source",
+ "code": 47,
+ "mfgCode": null,
+ "define": "POWER_SOURCE_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "Status",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "PowerSourceStatusEnum",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "Order",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "Description",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "Primary Battery",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "BatVoltage",
+ "code": 11,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "4100",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "BatPercentRemaining",
+ "code": 12,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "95",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "BatTimeRemaining",
+ "code": 13,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "518400",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "BatChargeLevel",
+ "code": 14,
+ "mfgCode": null,
+ "side": "server",
+ "type": "BatChargeLevelEnum",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "BatReplacementNeeded",
+ "code": 15,
+ "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": "BatReplaceability",
+ "code": 16,
+ "mfgCode": null,
+ "side": "server",
+ "type": "BatReplaceabilityEnum",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "BatPresent",
+ "code": 17,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "BatCapacity",
+ "code": 24,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "350",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "BatChargeState",
+ "code": 26,
+ "mfgCode": null,
+ "side": "server",
+ "type": "BatChargeStateEnum",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "4",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "BatFunctionalWhileCharging",
+ "code": 28,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EndpointList",
+ "code": 31,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Boolean State",
+ "code": 69,
+ "mfgCode": null,
+ "define": "BOOLEAN_STATE_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "StateValue",
+ "code": 0,
+ "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": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Boolean State Configuration",
+ "code": 128,
+ "mfgCode": null,
+ "define": "BOOLEAN_STATE_CONFIGURATION_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "FeatureMap",
+ "code": 65532,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap32",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "endpoints": [
+ {
+ "endpointTypeName": "MA-rootdevice",
+ "endpointTypeIndex": 0,
+ "profileId": 259,
+ "endpointId": 0,
+ "networkId": 0,
+ "parentEndpointIdentifier": null
+ },
+ {
+ "endpointTypeName": "Anonymous Endpoint Type",
+ "endpointTypeIndex": 1,
+ "profileId": 259,
+ "endpointId": 1,
+ "networkId": 0,
+ "parentEndpointIdentifier": 0
+ }
+ ]
+}
diff --git a/examples/window-app/common/window-app.matter b/examples/window-app/common/window-app.matter
index 50a47d27c7b5bc..c7eee099b9c950 100644
--- a/examples/window-app/common/window-app.matter
+++ b/examples/window-app/common/window-app.matter
@@ -1101,6 +1101,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
diff --git a/scripts/build/build/targets.py b/scripts/build/build/targets.py
index 8d1b30234cec87..0539af8bf6a1ba 100755
--- a/scripts/build/build/targets.py
+++ b/scripts/build/build/targets.py
@@ -146,6 +146,7 @@ def BuildHostTarget():
TargetPart('air-quality-sensor', app=HostApp.AIR_QUALITY_SENSOR),
TargetPart('network-manager', app=HostApp.NETWORK_MANAGER),
TargetPart('energy-management', app=HostApp.ENERGY_MANAGEMENT),
+ TargetPart('water-leak-detector', app=HostApp.WATER_LEAK_DETECTOR),
]
if (HostBoard.NATIVE.PlatformName() == 'darwin'):
diff --git a/scripts/build/builders/host.py b/scripts/build/builders/host.py
index 624bd9ad748cd4..a07064795a1c54 100644
--- a/scripts/build/builders/host.py
+++ b/scripts/build/builders/host.py
@@ -84,6 +84,7 @@ class HostApp(Enum):
AIR_QUALITY_SENSOR = auto()
NETWORK_MANAGER = auto()
ENERGY_MANAGEMENT = auto()
+ WATER_LEAK_DETECTOR = auto()
def ExamplePath(self):
if self == HostApp.ALL_CLUSTERS:
@@ -154,6 +155,8 @@ def ExamplePath(self):
return 'network-manager-app/linux'
elif self == HostApp.ENERGY_MANAGEMENT:
return 'energy-management-app/linux'
+ elif self == HostApp.WATER_LEAK_DETECTOR:
+ return 'water-leak-detector/linux'
else:
raise Exception('Unknown app type: %r' % self)
@@ -266,6 +269,9 @@ def OutputNames(self):
elif self == HostApp.ENERGY_MANAGEMENT:
yield 'chip-energy-management-app'
yield 'chip-energy-management-app.map'
+ elif self == HostApp.WATER_LEAK_DETECTOR:
+ yield 'water-leak-detector-app'
+ yield 'water-leak-detector-app.map'
else:
raise Exception('Unknown app type: %r' % self)
diff --git a/scripts/build/testdata/all_targets_linux_x64.txt b/scripts/build/testdata/all_targets_linux_x64.txt
index 93e375c857a83f..51d507072bacfd 100644
--- a/scripts/build/testdata/all_targets_linux_x64.txt
+++ b/scripts/build/testdata/all_targets_linux_x64.txt
@@ -9,7 +9,7 @@ efr32-{brd2704b,brd4316a,brd4317a,brd4318a,brd4319a,brd4186a,brd4187a,brd2601b,b
esp32-{m5stack,c3devkit,devkitc,qemu}-{all-clusters,all-clusters-minimal,energy-management,ota-provider,ota-requestor,shell,light,lock,bridge,temperature-measurement,ota-requestor,tests}[-rpc][-ipv6only][-tracing][-data-model-disabled][-data-model-enabled]
genio-lighting-app
linux-fake-tests[-mbedtls][-boringssl][-asan][-tsan][-ubsan][-libfuzzer][-ossfuzz][-pw-fuzztest][-coverage][-dmalloc][-clang]
-linux-{x64,arm64}-{rpc-console,all-clusters,all-clusters-minimal,chip-tool,thermostat,java-matter-controller,kotlin-matter-controller,minmdns,light,light-data-model-no-unique-id,lock,shell,ota-provider,ota-requestor,simulated-app1,simulated-app2,python-bindings,tv-app,tv-casting-app,bridge,fabric-admin,fabric-bridge,tests,chip-cert,address-resolve-tool,contact-sensor,dishwasher,microwave-oven,refrigerator,rvc,air-purifier,lit-icd,air-quality-sensor,network-manager,energy-management}[-nodeps][-nlfaultinject][-platform-mdns][-minmdns-verbose][-libnl][-same-event-loop][-no-interactive][-ipv6only][-no-ble][-no-wifi][-no-thread][-no-shell][-mbedtls][-boringssl][-asan][-tsan][-ubsan][-libfuzzer][-ossfuzz][-pw-fuzztest][-coverage][-dmalloc][-clang][-test][-rpc][-with-ui][-evse-test-event][-enable-dnssd-tests][-disable-dnssd-tests][-chip-casting-simplified][-data-model-check][-data-model-disabled][-data-model-enabled][-check-failure-die]
+linux-{x64,arm64}-{rpc-console,all-clusters,all-clusters-minimal,chip-tool,thermostat,java-matter-controller,kotlin-matter-controller,minmdns,light,light-data-model-no-unique-id,lock,shell,ota-provider,ota-requestor,simulated-app1,simulated-app2,python-bindings,tv-app,tv-casting-app,bridge,fabric-admin,fabric-bridge,tests,chip-cert,address-resolve-tool,contact-sensor,dishwasher,microwave-oven,refrigerator,rvc,air-purifier,lit-icd,air-quality-sensor,network-manager,energy-management,water-leak-detector}[-nodeps][-nlfaultinject][-platform-mdns][-minmdns-verbose][-libnl][-same-event-loop][-no-interactive][-ipv6only][-no-ble][-no-wifi][-no-thread][-no-shell][-mbedtls][-boringssl][-asan][-tsan][-ubsan][-libfuzzer][-ossfuzz][-pw-fuzztest][-coverage][-dmalloc][-clang][-test][-rpc][-with-ui][-evse-test-event][-enable-dnssd-tests][-disable-dnssd-tests][-chip-casting-simplified][-data-model-check][-data-model-disabled][-data-model-enabled][-check-failure-die]
linux-x64-efr32-test-runner[-clang]
imx-{chip-tool,lighting-app,thermostat,all-clusters-app,all-clusters-minimal-app,ota-provider-app}[-release]
infineon-psoc6-{lock,light,all-clusters,all-clusters-minimal}[-ota][-updateimage][-trustm]
diff --git a/scripts/rules.matterlint b/scripts/rules.matterlint
index 1573cc7065764e..b7ce7ef97541de 100644
--- a/scripts/rules.matterlint
+++ b/scripts/rules.matterlint
@@ -108,6 +108,7 @@ load "../src/app/zap-templates/zcl/data-model/chip/wake-on-lan-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/washer-controls-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/water-heater-management-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/water-heater-mode-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/webrtc-requestor-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/webrtc-provider-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/wifi-network-diagnostics-cluster.xml";
load "../src/app/zap-templates/zcl/data-model/chip/wifi-network-management-cluster.xml";
diff --git a/scripts/tests/run_python_test.py b/scripts/tests/run_python_test.py
index d7d3c6955af94b..0c40f9ac30f10b 100755
--- a/scripts/tests/run_python_test.py
+++ b/scripts/tests/run_python_test.py
@@ -71,9 +71,9 @@ def process_test_script_output(line, is_stderr):
@click.command()
@click.option("--app", type=click.Path(exists=True), default=None,
help='Path to local application to use, omit to use external apps.')
-@click.option("--factoryreset", is_flag=True,
+@click.option("--factory-reset/--no-factory-reset", default=None,
help='Remove app config and repl configs (/tmp/chip* and /tmp/repl*) before running the tests.')
-@click.option("--factoryreset-app-only", is_flag=True,
+@click.option("--factory-reset-app-only/--no-factory-reset-app-only", default=None,
help='Remove app config and repl configs (/tmp/chip* and /tmp/repl*) before running the tests, but not the controller config')
@click.option("--app-args", type=str, default='',
help='The extra arguments passed to the device. Can use placeholders like {SCRIPT_BASE_NAME}')
@@ -90,9 +90,10 @@ def process_test_script_output(line, is_stderr):
help='Script arguments, can use placeholders like {SCRIPT_BASE_NAME}.')
@click.option("--script-gdb", is_flag=True,
help='Run script through gdb')
-@click.option("--quiet", is_flag=True, help="Do not print output from passing tests. Use this flag in CI to keep github log sizes manageable.")
+@click.option("--quiet/--no-quiet", default=None,
+ help="Do not print output from passing tests. Use this flag in CI to keep GitHub log size manageable.")
@click.option("--load-from-env", default=None, help="YAML file that contains values for environment variables.")
-def main(app: str, factoryreset: bool, factoryreset_app_only: bool, app_args: str,
+def main(app: str, factory_reset: bool, factory_reset_app_only: bool, app_args: str,
app_ready_pattern: str, script: str, script_args: str, script_gdb: bool, quiet: bool, load_from_env):
if load_from_env:
reader = MetadataReader(load_from_env)
@@ -106,18 +107,23 @@ def main(app: str, factoryreset: bool, factoryreset_app_only: bool, app_args: st
app_args=app_args,
app_ready_pattern=app_ready_pattern,
script_args=script_args,
- factory_reset=factoryreset,
- factory_reset_app_only=factoryreset_app_only,
script_gdb=script_gdb,
- quiet=quiet
)
]
if not runs:
- raise Exception(
- "No valid runs were found. Make sure you add runs to your file, see https://github.com/project-chip/connectedhomeip/blob/master/docs/testing/python.md document for reference/example.")
+ raise click.ClickException(
+ "No valid runs were found. Make sure you add runs to your file, see "
+ "https://github.com/project-chip/connectedhomeip/blob/master/docs/testing/python.md document for reference/example.")
- coloredlogs.install(level='INFO')
+ # Override runs Metadata with the command line arguments
+ for run in runs:
+ if factory_reset is not None:
+ run.factory_reset = factory_reset
+ if factory_reset_app_only is not None:
+ run.factory_reset_app_only = factory_reset_app_only
+ if quiet is not None:
+ run.quiet = quiet
for run in runs:
logging.info("Executing %s %s", run.py_script_path.split('/')[-1], run.run)
@@ -215,4 +221,5 @@ def main_impl(app: str, factory_reset: bool, factory_reset_app_only: bool, app_a
if __name__ == '__main__':
+ coloredlogs.install(level='INFO')
main(auto_envvar_prefix='CHIP')
diff --git a/scripts/tools/file_size_from_nm.py b/scripts/tools/file_size_from_nm.py
new file mode 100755
index 00000000000000..a5d53b26dced19
--- /dev/null
+++ b/scripts/tools/file_size_from_nm.py
@@ -0,0 +1,432 @@
+#!/usr/bin/env -S python3 -B
+#
+# Copyright (c) 2024 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.
+#
+
+# Displays a treemap code size as read by `nm` over a binary
+#
+# Example call:
+#
+# scripts/tools/file_size_from_nm.py \
+# --max-depth 5 \
+# out/nrf-nrf52840dk-light-data-model-enabled/nrfconnect/zephyr/zephyr.elf
+#
+
+# Requires:
+# click
+# cxxfilt
+# coloredlogs
+# pandas
+# plotly
+
+import logging
+import subprocess
+from dataclasses import dataclass
+from enum import Enum, auto
+from pathlib import Path
+from typing import Optional
+
+import click
+import coloredlogs
+import cxxfilt
+import plotly.express as px
+import plotly.graph_objects as go
+
+# Supported log levels, mapping string values required for argument
+# parsing into logging constants
+__LOG_LEVELS__ = {
+ "debug": logging.DEBUG,
+ "info": logging.INFO,
+ "warn": logging.WARN,
+ "fatal": logging.FATAL,
+}
+
+
+class ChartStyle(Enum):
+ TREE_MAP = auto()
+ SUNBURST = auto()
+
+
+__CHART_STYLES__ = {
+ "treemap": ChartStyle.TREE_MAP,
+ "sunburst": ChartStyle.SUNBURST,
+}
+
+
+@dataclass
+class Symbol:
+ name: str
+ symbol_type: str
+ offset: int
+ size: int
+
+
+def tree_display_name(name: str) -> list[str]:
+ """
+ Convert the given name from NM into a tree path.
+
+ It splits the name by C++ namespaces, however it also specifically handles
+ 'emberAf' prefixes to make them common and uses 'vtable for' information
+ """
+
+ name = cxxfilt.demangle(name)
+
+ if name.startswith("non-virtual thunk to "):
+ name = name[21:]
+ if name.startswith("vtable for "):
+ name = name[11:]
+
+ # These are C-style methods really, we have no top-level namespaces named
+ # like this but still want to see these differently
+ for special_prefix in {"emberAf", "Matter"}:
+ if name.startswith(special_prefix):
+ return [special_prefix, name]
+
+ # If the first element contains a space, it is either within `<>` for templates or it means it is a
+ # separator of the type. Try to find the type separator
+ #
+ # Logic:
+ # - try to find the first space OUTSIDE <> and before '('
+ space_pos = 0
+ indent = 0
+ type_prefix = ""
+ while space_pos < len(name):
+ c = name[space_pos]
+ if c == "<":
+ indent += 1
+ elif c == ">":
+ indent -= 1
+ elif c == " " and indent == 0:
+ # FOUND A SPACE, move it to the last
+ type_prefix = name[:space_pos] + " "
+ space_pos += 1
+ name = name[space_pos:]
+ break
+ elif c == "(" and indent == 0:
+ # a bracket not within templates means we are done!
+ break
+ space_pos += 1
+
+ # completely skip any arguments ... i.e. anything after (
+ brace_pos = 0
+ indent = 0
+ type_suffix = ""
+ while brace_pos < len(name):
+ c = name[brace_pos]
+ if c == "<":
+ indent += 1
+ elif c == ">":
+ indent -= 1
+ elif c == "(" and indent == 0:
+ # FOUND A SPACE, move it to the last
+ type_suffix = name[brace_pos:]
+ name = name[:brace_pos]
+ break
+ brace_pos += 1
+
+ # name may be split by namespace and looks like foo::bar::baz
+ # HOWEVER for templates we want to split foo::Bar::Baz into
+ # [foo, Bar::Baz]
+ #
+ # General way things look like:
+ # TYPE FUNC # notice the space
+ # CONSTRUCTOR()
+ result = []
+ while "::" in name:
+ ns_idx = name.find("::")
+ less_idx = name.find("<")
+ if less_idx >= 0 and ns_idx > less_idx:
+ # at this point, we have to find the matched `>` for this, assuming there ARE
+ # nested `>` entries, including multiple of them
+ pos = less_idx + 1
+ indent = 1
+ while indent > 0:
+ if name[pos] == ">":
+ indent -= 1
+ elif name[pos] == "<":
+ indent += 1
+ pos += 1
+ if pos == len(name):
+ break
+ result.append(name[:pos])
+ name = name[pos:]
+ if name.startswith("::"):
+ name = name[2:]
+ else:
+ result.append(name[:ns_idx])
+ ns_idx += 2
+ name = name[ns_idx:]
+ result.append(type_prefix + name + type_suffix)
+
+ if len(result) == 1:
+ if result[0].startswith("ot"): # Show openthread methods a bit grouped
+ result = ["ot"] + result
+ return ["C"] + result
+
+ return result
+
+
+# TO run the test, install pytest and do
+# pytest file_size_from_nm.py
+def test_tree_display_name():
+ assert tree_display_name("fooBar") == ["C", "fooBar"]
+ assert tree_display_name("emberAfTest") == ["emberAf", "emberAfTest"]
+ assert tree_display_name("MatterSomeCall") == ["Matter", "MatterSomeCall"]
+ assert tree_display_name("chip::Some::Constructor()") == [
+ "chip",
+ "Some",
+ "Constructor()",
+ ]
+
+ assert tree_display_name("chip::Some::Constructor(int arg1, int arg2)") == [
+ "chip",
+ "Some",
+ "Constructor(int arg1, int arg2)",
+ ]
+
+ assert tree_display_name(
+ "chip::Some::Constructor(int arg1, int arg2)"
+ ) == [
+ "chip",
+ "Some",
+ "Constructor(int arg1, int arg2)",
+ ]
+
+ assert tree_display_name("void my::function::call()") == [
+ "my",
+ "function",
+ "void call()",
+ ]
+ assert tree_display_name("chip::ChipError my::function::call()") == [
+ "my",
+ "function",
+ "chip::ChipError call()",
+ ]
+ assert tree_display_name("chip::test::baz my::function::call()") == [
+ "my",
+ "function",
+ "chip::test::baz call()",
+ ]
+ assert tree_display_name(
+ "chip::test::baz my::function::call()"
+ ) == [
+ "my",
+ "function",
+ "chip::test::baz call()",
+ ]
+ assert tree_display_name(
+ "chip::app::CommandIsFabricScoped(unsigned int, unsigned int)"
+ ) == ["chip", "app", "CommandIsFabricScoped(unsigned int, unsigned int)"]
+ assert tree_display_name("chip::app::AdvertiseAsOperational()") == [
+ "chip",
+ "app",
+ "AdvertiseAsOperational()",
+ ]
+
+ assert tree_display_name(
+ "void foo::bar::method(my::arg name, other::arg::type)"
+ ) == ["foo", "bar", "void method(my::arg name, other::arg::type)"]
+
+
+def build_treemap(
+ name: str,
+ symbols: list[Symbol],
+ style: ChartStyle,
+ max_depth: int,
+ zoom: Optional[str],
+ strip: Optional[str],
+):
+ # A treemap is based on parents (with title)
+
+ # Naming rules:
+ # namespaces/prefixes are "::(::)"
+ # Actual names will be parented by their suffixes
+
+ root = f"FILE: {name}"
+ if zoom:
+ root = root + f" (FILTER: {zoom})"
+ data: dict[str, list] = dict(name=[root], parent=[""], size=[0], hover=[""])
+
+ known_parents: set[str] = set()
+ total_sizes: dict = {}
+
+ for symbol in symbols:
+ tree_name = tree_display_name(symbol.name)
+
+ if zoom is not None:
+ partial = ""
+ # try to filter out the tree name. If it contains the zoom item, keep it, otherwise discard
+ while tree_name and partial != zoom:
+ partial += "::" + tree_name[0]
+ tree_name = tree_name[1:]
+ if not tree_name:
+ continue
+
+ if strip is not None:
+ partial = ""
+ for part_name in tree_name:
+ partial = "::" + part_name
+ if partial == strip:
+ break
+ if partial == strip:
+ continue
+
+ partial = ""
+ for name in tree_name[:-1]:
+ next_value = partial + "::" + name
+ if next_value not in known_parents:
+ known_parents.add(next_value)
+ data["name"].append(next_value)
+ data["parent"].append(partial if partial else root)
+ data["size"].append(0)
+ data["hover"].append(next_value)
+ total_sizes[next_value] = total_sizes.get(next_value, 0) + symbol.size
+ partial = next_value
+
+ # the name MUST be added
+ data["name"].append(cxxfilt.demangle(symbol.name))
+ data["parent"].append(partial if partial else root)
+ data["size"].append(symbol.size)
+ data["hover"].append(f"{symbol.name} of type {symbol.symbol_type}")
+
+ for idx, label in enumerate(data["name"]):
+ if data["size"][idx] == 0:
+ data["hover"][idx] = f"{label}: {total_sizes.get(label, 0)}"
+
+ if style == ChartStyle.TREE_MAP:
+ fig = go.Figure(
+ go.Treemap(
+ labels=data["name"],
+ parents=data["parent"],
+ values=data["size"],
+ textinfo="label+value+percent parent",
+ hovertext=data["hover"],
+ maxdepth=max_depth,
+ )
+ )
+ else:
+ fig = px.sunburst(
+ data,
+ names="name",
+ parents="parent",
+ values="size",
+ maxdepth=max_depth,
+ )
+
+ fig.update_traces(root_color="lightgray")
+ fig.show()
+
+
+@click.command()
+@click.option(
+ "--log-level",
+ default="INFO",
+ show_default=True,
+ type=click.Choice(list(__LOG_LEVELS__.keys()), case_sensitive=False),
+ help="Determines the verbosity of script output.",
+)
+@click.option(
+ "--display-type",
+ default="TREEMAP",
+ show_default=True,
+ type=click.Choice(list(__CHART_STYLES__.keys()), case_sensitive=False),
+ help="Style of the chart",
+)
+@click.option(
+ "--max-depth",
+ default=4,
+ show_default=True,
+ type=int,
+ help="Display depth by default",
+)
+@click.option(
+ "--zoom",
+ default=None,
+ help="Zoom in the graph to ONLY the specified path as root (e.g. ::chip::app)",
+)
+@click.option(
+ "--strip",
+ default=None,
+ help="Strip out a tree subset (e.g. ::C)",
+)
+@click.argument("elf-file", type=Path)
+def main(
+ log_level,
+ elf_file: Path,
+ display_type: str,
+ max_depth: int,
+ zoom: Optional[str],
+ strip: Optional[str],
+):
+ log_fmt = "%(asctime)s %(levelname)-7s %(message)s"
+ coloredlogs.install(level=__LOG_LEVELS__[log_level], fmt=log_fmt)
+
+ items = subprocess.check_output(
+ [
+ "nm",
+ "--print-size",
+ "--size-sort", # Filters out empty entries
+ "--radix=d",
+ elf_file.absolute().as_posix(),
+ ]
+ ).decode("utf8")
+
+ symbols = []
+
+ # OUTPUT FORMAT:
+ #
+ for line in items.split("\n"):
+ if not line.strip():
+ continue
+ offset, size, t, name = line.split(" ")
+
+ size = int(size, 10)
+ offset = int(offset, 10)
+
+ if t in {
+ # Text section
+ "t",
+ "T",
+ # Weak defines
+ "w",
+ "W",
+ # Initialized data
+ "d",
+ "D",
+ # Readonly
+ "r",
+ "R",
+ # Weak object
+ "v",
+ "V",
+ }:
+ logging.debug("Found %s of size %d", name, size)
+ symbols.append(Symbol(name=name, symbol_type=t, offset=offset, size=size))
+ elif t in {
+ # BSS - 0-initialized, not code
+ "b",
+ "B",
+ }:
+ pass
+ else:
+ logging.error("SKIPPING SECTION %s", t)
+
+ build_treemap(
+ elf_file.name, symbols, __CHART_STYLES__[display_type], max_depth, zoom, strip
+ )
+
+
+if __name__ == "__main__":
+ main(auto_envvar_prefix="CHIP")
diff --git a/src/app/WriteHandler.cpp b/src/app/WriteHandler.cpp
index 5050cbbee2fcb5..d2fde339304f8f 100644
--- a/src/app/WriteHandler.cpp
+++ b/src/app/WriteHandler.cpp
@@ -24,6 +24,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -32,6 +33,7 @@
#include
#include
#include
+#include
#include
#include
@@ -41,8 +43,7 @@ namespace chip {
namespace app {
using namespace Protocols::InteractionModel;
-using Status = Protocols::InteractionModel::Status;
-constexpr uint8_t kListAttributeType = 0x48;
+using Status = Protocols::InteractionModel::Status;
CHIP_ERROR WriteHandler::Init(DataModel::Provider * apProvider, WriteHandlerDelegate * apWriteHandlerDelegate)
{
@@ -79,6 +80,30 @@ void WriteHandler::Close()
MoveToState(State::Uninitialized);
}
+std::optional WriteHandler::IsListAttributePath(const ConcreteAttributePath & path)
+{
+#if CHIP_CONFIG_USE_DATA_MODEL_INTERFACE
+ VerifyOrReturnValue(mDataModelProvider != nullptr, std::nullopt,
+ ChipLogError(DataManagement, "Null data model while checking attribute properties."));
+
+ auto info = mDataModelProvider->GetAttributeInfo(path);
+ if (!info.has_value())
+ {
+ return std::nullopt;
+ }
+
+ return info->flags.Has(DataModel::AttributeQualityFlags::kListAttribute);
+#else
+ constexpr uint8_t kListAttributeType = 0x48;
+ const auto attributeMetadata = GetAttributeMetadata(path);
+ if (attributeMetadata == nullptr)
+ {
+ return std::nullopt;
+ }
+ return (attributeMetadata->attributeType == kListAttributeType);
+#endif
+}
+
Status WriteHandler::HandleWriteRequestMessage(Messaging::ExchangeContext * apExchangeContext,
System::PacketBufferHandle && aPayload, bool aIsTimedWrite)
{
@@ -317,10 +342,7 @@ CHIP_ERROR WriteHandler::ProcessAttributeDataIBs(TLV::TLVReader & aAttributeData
err = element.GetData(&dataReader);
SuccessOrExit(err);
- const auto attributeMetadata = GetAttributeMetadata(dataAttributePath);
- bool currentAttributeIsList = (attributeMetadata != nullptr && attributeMetadata->attributeType == kListAttributeType);
-
- if (!dataAttributePath.IsListOperation() && currentAttributeIsList)
+ if (!dataAttributePath.IsListOperation() && IsListAttributePath(dataAttributePath).value_or(false))
{
dataAttributePath.mListOp = ConcreteDataAttributePath::ListOperation::ReplaceAll;
}
@@ -446,7 +468,7 @@ CHIP_ERROR WriteHandler::ProcessGroupAttributeDataIBs(TLV::TLVReader & aAttribut
mProcessingAttributePath, mStateFlags.Has(StateBits::kProcessingAttributeIsList), dataAttributePath);
bool shouldReportListWriteBegin = false; // This will be set below.
- const EmberAfAttributeMetadata * attributeMetadata = nullptr;
+ std::optional isListAttribute = std::nullopt;
while (iterator->Next(mapping))
{
@@ -460,11 +482,11 @@ CHIP_ERROR WriteHandler::ProcessGroupAttributeDataIBs(TLV::TLVReader & aAttribut
// Try to get the metadata from for the attribute from one of the expanded endpoints (it doesn't really matter which
// endpoint we pick, as long as it's valid) and update the path info according to it and recheck if we need to report
// list write begin.
- if (attributeMetadata == nullptr)
+ if (!isListAttribute.has_value())
{
- attributeMetadata = GetAttributeMetadata(dataAttributePath);
- bool currentAttributeIsList =
- (attributeMetadata != nullptr && attributeMetadata->attributeType == kListAttributeType);
+ isListAttribute = IsListAttributePath(dataAttributePath);
+ bool currentAttributeIsList = isListAttribute.value_or(false);
+
if (!dataAttributePath.IsListOperation() && currentAttributeIsList)
{
dataAttributePath.mListOp = ConcreteDataAttributePath::ListOperation::ReplaceAll;
diff --git a/src/app/WriteHandler.h b/src/app/WriteHandler.h
index fe63e028b8dfee..33c068b8cd02ea 100644
--- a/src/app/WriteHandler.h
+++ b/src/app/WriteHandler.h
@@ -189,6 +189,12 @@ class WriteHandler : public Messaging::ExchangeDelegate
CHIP_ERROR WriteClusterData(const Access::SubjectDescriptor & aSubject, const ConcreteDataAttributePath & aPath,
TLV::TLVReader & aData);
+ /// Checks whether the given path corresponds to a list attribute
+ /// Return values:
+ /// true/false: valid attribute path, known if list or not
+ /// std::nulloptr - path not available/valid, unknown if attribute is a list or not
+ std::optional IsListAttributePath(const ConcreteAttributePath & path);
+
Messaging::ExchangeHolder mExchangeCtx;
WriteResponseMessage::Builder mWriteResponseBuilder;
Optional mProcessingAttributePath;
diff --git a/src/app/chip_data_model.cmake b/src/app/chip_data_model.cmake
index e2d05adb01e4a1..11db6d4ec6c97b 100644
--- a/src/app/chip_data_model.cmake
+++ b/src/app/chip_data_model.cmake
@@ -70,12 +70,17 @@ endfunction()
#
function(chip_configure_data_model APP_TARGET)
set(SCOPE PRIVATE)
- cmake_parse_arguments(ARG "" "SCOPE;ZAP_FILE;IDL" "EXTERNAL_CLUSTERS" ${ARGN})
+ set(ADD_EMBER_INTERFACE_FILES TRUE)
+ cmake_parse_arguments(ARG "SKIP_EMBER_INTERFACE" "SCOPE;ZAP_FILE;IDL" "EXTERNAL_CLUSTERS" ${ARGN})
if(ARG_SCOPE)
set(SCOPE ${ARG_SCOPE})
endif()
+ if(ARG_SKIP_EMBER_INTERFACE)
+ set(ADD_EMBER_INTERFACE_FILES FALSE)
+ endif()
+
# CMAKE data model auto-includes the server side implementation
target_sources(${APP_TARGET} ${SCOPE}
${CHIP_APP_BASE_DIR}/server/AclStorage.cpp
@@ -159,7 +164,6 @@ function(chip_configure_data_model APP_TARGET)
${CHIP_APP_BASE_DIR}/util/attribute-table.cpp
${CHIP_APP_BASE_DIR}/util/binding-table.cpp
${CHIP_APP_BASE_DIR}/util/DataModelHandler.cpp
- ${CHIP_APP_BASE_DIR}/util/ember-compatibility-functions.cpp
${CHIP_APP_BASE_DIR}/util/ember-global-attribute-access-interface.cpp
${CHIP_APP_BASE_DIR}/util/ember-io-storage.cpp
${CHIP_APP_BASE_DIR}/util/generic-callback-stubs.cpp
@@ -169,4 +173,10 @@ function(chip_configure_data_model APP_TARGET)
${APP_GEN_FILES}
${APP_TEMPLATES_GEN_FILES}
)
+
+ if(ADD_EMBER_INTERFACE_FILES)
+ target_sources(${APP_TARGET} ${SCOPE}
+ ${CHIP_APP_BASE_DIR}/util/ember-compatibility-functions.cpp
+ )
+ endif()
endfunction()
diff --git a/src/app/chip_data_model.gni b/src/app/chip_data_model.gni
index 42b221c1a98836..cc998948d835e7 100644
--- a/src/app/chip_data_model.gni
+++ b/src/app/chip_data_model.gni
@@ -209,11 +209,15 @@ template("chip_data_model") {
"${_app_root}/util/DataModelHandler.cpp",
"${_app_root}/util/attribute-storage.cpp",
"${_app_root}/util/attribute-table.cpp",
- "${_app_root}/util/ember-compatibility-functions.cpp",
"${_app_root}/util/ember-global-attribute-access-interface.cpp",
"${_app_root}/util/ember-io-storage.cpp",
"${_app_root}/util/util.cpp",
]
+
+ if (chip_use_data_model_interface != "enabled") {
+ # This applies to "check" or "disabled" (i.e. use ember-only or use ember for double-checking)
+ sources += [ "${_app_root}/util/ember-compatibility-functions.cpp" ]
+ }
}
if (defined(invoker.zap_file)) {
diff --git a/src/app/codegen-data-model-provider/CodegenDataModelProvider.cpp b/src/app/codegen-data-model-provider/CodegenDataModelProvider.cpp
index 972e0565131dd6..7f7b7e14b8b752 100644
--- a/src/app/codegen-data-model-provider/CodegenDataModelProvider.cpp
+++ b/src/app/codegen-data-model-provider/CodegenDataModelProvider.cpp
@@ -318,7 +318,7 @@ bool operator==(const DataModel::DeviceTypeEntry & a, const EmberAfDeviceType &
/// - index == types.size() // i.e. not found or there is no next
///
/// hintWherePreviousMayBe represents a search hint where previous may exist.
-unsigned FindNextDeviceTypeIndex(Span types, const DataModel::DeviceTypeEntry previous,
+unsigned FindNextDeviceTypeIndex(Span types, const DataModel::DeviceTypeEntry & previous,
unsigned hintWherePreviousMayBe)
{
if (hintWherePreviousMayBe < types.size())
diff --git a/src/app/icd/icd.gni b/src/app/icd/icd.gni
index ed3fd0518f5858..b7fef896f53b3c 100644
--- a/src/app/icd/icd.gni
+++ b/src/app/icd/icd.gni
@@ -14,23 +14,15 @@
declare_args() {
# Matter SDK Configuration flag to enable ICD server functionality
- # TODO - Add Specifics when the design is refined
chip_enable_icd_server = false
chip_enable_icd_lit = false
- # Matter SDK Configuration flag to enable ICD client functionality
- # TODO - Add Specifics when the design is refined
- chip_enable_icd_client = false
-
# Matter SDK Configuration flag to make the ICD manager emit a report on entering active mode
chip_icd_report_on_active_mode = false
icd_max_notification_subscribers = 1
- # Set to true to enforce SIT Slow Polling Max value to 15seconds (spec 9.16.1.5)
- icd_enforce_sit_slow_poll_limit = false
-
# Set to true if device supports dynamic switching from SIT to LIT operating modes (DSLS)
chip_enable_icd_dsls = false
}
diff --git a/src/app/icd/server/BUILD.gn b/src/app/icd/server/BUILD.gn
index e1967c23f52f90..bef9a0730abdc7 100644
--- a/src/app/icd/server/BUILD.gn
+++ b/src/app/icd/server/BUILD.gn
@@ -39,7 +39,6 @@ buildconfig_header("icd-server-buildconfig") {
"CHIP_CONFIG_ENABLE_ICD_DSLS=${chip_enable_icd_dsls}",
"ICD_REPORT_ON_ENTER_ACTIVE_MODE=${chip_icd_report_on_active_mode}",
"ICD_MAX_NOTIFICATION_SUBSCRIBERS=${icd_max_notification_subscribers}",
- "ICD_ENFORCE_SIT_SLOW_POLL_LIMIT=${icd_enforce_sit_slow_poll_limit}",
]
visibility = [ ":icd-server-config" ]
diff --git a/src/app/icd/server/ICDConfigurationData.cpp b/src/app/icd/server/ICDConfigurationData.cpp
index cfd2325671ea0f..44d78bfadf4e2f 100644
--- a/src/app/icd/server/ICDConfigurationData.cpp
+++ b/src/app/icd/server/ICDConfigurationData.cpp
@@ -16,7 +16,6 @@
*/
#include "ICDConfigurationData.h"
-#include
#include
namespace chip {
@@ -25,15 +24,16 @@ ICDConfigurationData ICDConfigurationData::instance;
System::Clock::Milliseconds32 ICDConfigurationData::GetSlowPollingInterval()
{
-#if ICD_ENFORCE_SIT_SLOW_POLL_LIMIT
- // When in SIT mode, the slow poll interval SHOULDN'T be greater than the SIT mode polling threshold, per spec.
+#if CHIP_CONFIG_ENABLE_ICD_LIT
+ // When in SIT mode, the slow poll interval SHALL NOT be greater than the SIT mode polling threshold, per spec.
// This is important for ICD device configured for LIT operation but currently operating as a SIT
// due to a lack of client registration
if (mICDMode == ICDMode::SIT && mSlowPollingInterval > kSITPollingThreshold)
{
return kSITPollingThreshold;
}
-#endif
+#endif // CHIP_CONFIG_ENABLE_ICD_LIT
+
return mSlowPollingInterval;
}
diff --git a/src/app/icd/server/ICDConfigurationData.h b/src/app/icd/server/ICDConfigurationData.h
index 0d6e17e55efca2..4d2597ef260355 100644
--- a/src/app/icd/server/ICDConfigurationData.h
+++ b/src/app/icd/server/ICDConfigurationData.h
@@ -17,6 +17,7 @@
#pragma once
+#include
#include
#include
#include
@@ -77,14 +78,11 @@ class ICDConfigurationData
System::Clock::Seconds32 GetMaximumCheckInBackoff() { return mMaximumCheckInBackOff; }
/**
- * If ICD_ENFORCE_SIT_SLOW_POLL_LIMIT is set to 0, function will always return the configured Slow Polling interval
- * (CHIP_DEVICE_CONFIG_ICD_SLOW_POLL_INTERVAL).
- *
- * If ICD_ENFORCE_SIT_SLOW_POLL_LIMIT is set to 1, the returned value will depend on the devices operating mode.
+ * The returned value will depend on the devices operating mode.
* If ICDMode == SIT && the configured slow poll interval is superior to the maximum threshold (15s), the function will return
- * the threshold (15s). If ICDMode == SIT but the configured slow poll interval is equal or inferior to the threshold, the
- * function will the return the configured slow poll interval. If ICDMode == LIT, the function will return the configured slow
- * poll interval.
+ * the threshold kSITPollingThreshold (<= 15s). If ICDMode == SIT but the configured slow poll interval is equal or inferior to
+ * the threshold, the function will the return the configured slow poll interval. If ICDMode == LIT, the function will return
+ * the configured slow poll interval.
*
* @return System::Clock::Milliseconds32
*/
@@ -158,12 +156,18 @@ class ICDConfigurationData
"Spec requires the MaximumCheckInBackOff to be equal or superior to the IdleModeDuration");
System::Clock::Seconds32 mMaximumCheckInBackOff = System::Clock::Seconds32(CHIP_CONFIG_ICD_MAXIMUM_CHECK_IN_BACKOFF_SEC);
- // SIT ICDs should have a SlowPollingThreshold shorter than or equal to 15s (spec 9.16.1.5)
- static_assert((CHIP_DEVICE_CONFIG_ICD_SIT_SLOW_POLL_LIMIT).count() <= 15000,
+ // SIT ICDs SHALL have a SlowPollingThreshold shorter than or equal to 15s (spec 9.16.1.5)
+ static constexpr System::Clock::Milliseconds32 kSitIcdSlowPollMaximum = System::Clock::Milliseconds32(15000);
+ static_assert((CHIP_DEVICE_CONFIG_ICD_SIT_SLOW_POLL_LIMIT).count() <= kSitIcdSlowPollMaximum.count(),
"Spec requires the maximum slow poll interval for the SIT device to be smaller or equal than 15 s.");
static constexpr System::Clock::Milliseconds32 kSITPollingThreshold = CHIP_DEVICE_CONFIG_ICD_SIT_SLOW_POLL_LIMIT;
- System::Clock::Milliseconds32 mSlowPollingInterval = CHIP_DEVICE_CONFIG_ICD_SLOW_POLL_INTERVAL;
- System::Clock::Milliseconds32 mFastPollingInterval = CHIP_DEVICE_CONFIG_ICD_FAST_POLL_INTERVAL;
+
+#if CHIP_CONFIG_ENABLE_ICD_LIT == 0
+ static_assert((CHIP_DEVICE_CONFIG_ICD_SLOW_POLL_INTERVAL <= kSitIcdSlowPollMaximum),
+ "LIT support is required for slow polling intervals superior to 15 seconds");
+#endif
+ System::Clock::Milliseconds32 mSlowPollingInterval = CHIP_DEVICE_CONFIG_ICD_SLOW_POLL_INTERVAL;
+ System::Clock::Milliseconds32 mFastPollingInterval = CHIP_DEVICE_CONFIG_ICD_FAST_POLL_INTERVAL;
ICDMode mICDMode = ICDMode::SIT;
};
diff --git a/src/app/icd/server/ICDManager.cpp b/src/app/icd/server/ICDManager.cpp
index 3e89af1e1613a5..ba349b22b972a5 100644
--- a/src/app/icd/server/ICDManager.cpp
+++ b/src/app/icd/server/ICDManager.cpp
@@ -80,9 +80,6 @@ void ICDManager::Init()
VerifyOrDieWithMsg(ICDConfigurationData::GetInstance().GetMinLitActiveModeThreshold() <=
ICDConfigurationData::GetInstance().GetActiveModeThreshold(),
AppServer, "The minimum ActiveModeThreshold value for a LIT ICD is 5 seconds.");
- // Disabling check until LIT support is compelte
- // VerifyOrDieWithMsg((GetSlowPollingInterval() <= GetSITPollingThreshold()) , AppServer,
- // "LIT support is required for slow polling intervals superior to 15 seconds");
}
#endif // CHIP_CONFIG_ENABLE_ICD_LIT
diff --git a/src/app/reporting/ReportScheduler.h b/src/app/reporting/ReportScheduler.h
index f0e6ce3ff82f27..d6425e34818c9a 100644
--- a/src/app/reporting/ReportScheduler.h
+++ b/src/app/reporting/ReportScheduler.h
@@ -150,6 +150,7 @@ class ReportScheduler : public ReadHandler::Observer, public ICDStateObserver
IsEngineRunScheduled()));
}
+ bool CanStartReporting() const { return mReadHandler->CanStartReporting(); }
bool IsChunkedReport() const { return mReadHandler->IsChunkedReport(); }
bool IsEngineRunScheduled() const { return mFlags.Has(ReadHandlerNodeFlags::EngineRunScheduled); }
void SetEngineRunScheduled(bool aEngineRunScheduled)
diff --git a/src/app/reporting/SynchronizedReportSchedulerImpl.cpp b/src/app/reporting/SynchronizedReportSchedulerImpl.cpp
index a402f32b9b10ad..6d04e2b57d2134 100644
--- a/src/app/reporting/SynchronizedReportSchedulerImpl.cpp
+++ b/src/app/reporting/SynchronizedReportSchedulerImpl.cpp
@@ -183,7 +183,7 @@ void SynchronizedReportSchedulerImpl::TimerFired()
VerifyOrReturn(mNodesPool.Allocated());
mNodesPool.ForEachActiveObject([now, &firedEarly](ReadHandlerNode * node) {
- if (node->GetMinTimestamp() <= now)
+ if (node->GetMinTimestamp() <= now && node->CanStartReporting())
{
// Since this handler can now report whenever it wants to, mark it as allowed to report if any other handler is
// reporting using the CanBeSynced flag.
diff --git a/src/app/server/Server.cpp b/src/app/server/Server.cpp
index 426e3c686572c0..e4db190c507608 100644
--- a/src/app/server/Server.cpp
+++ b/src/app/server/Server.cpp
@@ -19,8 +19,10 @@
#include
+#include
#include
#include
+#include
#include
#include
#include
@@ -81,6 +83,33 @@ using chip::Transport::TcpListenParameters;
namespace {
+#if CHIP_CONFIG_USE_DATA_MODEL_INTERFACE
+class DeviceTypeResolver : public chip::Access::AccessControl::DeviceTypeResolver
+{
+public:
+ bool IsDeviceTypeOnEndpoint(chip::DeviceTypeId deviceType, chip::EndpointId endpoint) override
+ {
+ chip::app::DataModel::Provider * model = chip::app::InteractionModelEngine::GetInstance()->GetDataModelProvider();
+
+ for (auto type = model->FirstDeviceType(endpoint); type.has_value(); type = model->NextDeviceType(endpoint, *type))
+ {
+ if (type->deviceTypeId == deviceType)
+ {
+#if CHIP_CONFIG_USE_EMBER_DATA_MODEL
+ VerifyOrDie(chip::app::IsDeviceTypeOnEndpoint(deviceType, endpoint));
+#endif // CHIP_CONFIG_USE_EMBER_DATA_MODEL
+ return true;
+ }
+ }
+#if CHIP_CONFIG_USE_EMBER_DATA_MODEL
+ VerifyOrDie(!chip::app::IsDeviceTypeOnEndpoint(deviceType, endpoint));
+#endif // CHIP_CONFIG_USE_EMBER_DATA_MODEL
+ return false;
+ }
+} sDeviceTypeResolver;
+#else // CHIP_CONFIG_USE_DATA_MODEL_INTERFACE
+
+// Ember implementation of the device type resolver
class DeviceTypeResolver : public chip::Access::AccessControl::DeviceTypeResolver
{
public:
@@ -89,6 +118,7 @@ class DeviceTypeResolver : public chip::Access::AccessControl::DeviceTypeResolve
return chip::app::IsDeviceTypeOnEndpoint(deviceType, endpoint);
}
} sDeviceTypeResolver;
+#endif
} // namespace
diff --git a/src/app/tests/suites/certification/PICS.yaml b/src/app/tests/suites/certification/PICS.yaml
index 32ea708bd871fe..e2111925952c02 100644
--- a/src/app/tests/suites/certification/PICS.yaml
+++ b/src/app/tests/suites/certification/PICS.yaml
@@ -339,6 +339,13 @@ PICS:
"Does commissionee provide a Firmware Information field in the
AttestationResponse?"
id: MCORE.DA.ATTESTELEMENT_FW_INFO
+
+ #
+ # Fabric Synchronization
+ #
+ - label: "Does the device implement Fabric Synchronization capabilities?"
+ id: MCORE.FS
+
#
#IDM
#
diff --git a/src/app/tests/suites/certification/ci-pics-values b/src/app/tests/suites/certification/ci-pics-values
index 892961a965bae4..1f4f1f66e906c3 100644
--- a/src/app/tests/suites/certification/ci-pics-values
+++ b/src/app/tests/suites/certification/ci-pics-values
@@ -922,6 +922,9 @@ MCORE.BDX.Sender=0
MCORE.BDX.SynchronousReceiver=0
MCORE.BDX.SynchronousSender=0
+# Fabric Synchronization
+MCORE.FS=1
+
# General Diagnostics Cluster
DGGEN.S=1
diff --git a/src/app/util/attribute-table.cpp b/src/app/util/attribute-table.cpp
index 0d68701b6389b4..40e690b1defb12 100644
--- a/src/app/util/attribute-table.cpp
+++ b/src/app/util/attribute-table.cpp
@@ -342,8 +342,8 @@ Status emAfWriteAttribute(const ConcreteAttributePath & path, const EmberAfWrite
// if we dont support that attribute
if (metadata == nullptr)
{
- ChipLogProgress(Zcl, "%p ep %x clus " ChipLogFormatMEI " attr " ChipLogFormatMEI " not supported",
- "WRITE ERR: ", path.mEndpointId, ChipLogValueMEI(path.mClusterId), ChipLogValueMEI(path.mAttributeId));
+ ChipLogProgress(Zcl, "WRITE ERR: ep %x clus " ChipLogFormatMEI " attr " ChipLogFormatMEI " not supported", path.mEndpointId,
+ ChipLogValueMEI(path.mClusterId), ChipLogValueMEI(path.mAttributeId));
return status;
}
@@ -352,13 +352,13 @@ Status emAfWriteAttribute(const ConcreteAttributePath & path, const EmberAfWrite
{
if (input.dataType != metadata->attributeType)
{
- ChipLogProgress(Zcl, "%p invalid data type", "WRITE ERR: ");
+ ChipLogProgress(Zcl, "WRITE ERR: invalid data type");
return Status::InvalidDataType;
}
if (metadata->IsReadOnly())
{
- ChipLogProgress(Zcl, "%p attr not writable", "WRITE ERR: ");
+ ChipLogProgress(Zcl, "WRITE ERR: attr not writable");
return Status::UnsupportedWrite;
}
}
diff --git a/src/app/zap-templates/zcl/data-model/chip/bridged-device-basic-information.xml b/src/app/zap-templates/zcl/data-model/chip/bridged-device-basic-information.xml
index bc1d61e64309b5..39a2e2c258ac5f 100644
--- a/src/app/zap-templates/zcl/data-model/chip/bridged-device-basic-information.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/bridged-device-basic-information.xml
@@ -95,7 +95,7 @@ limitations under the License.
UniqueID
ProductAppearance
-
+
The server SHALL attempt to keep the devices specified active for StayActiveDuration milliseconds when they are next active.
diff --git a/src/app/zap-templates/zcl/data-model/chip/chime-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/chime-cluster.xml
index 42a538e7a065a9..379caa47ce6469 100644
--- a/src/app/zap-templates/zcl/data-model/chip/chime-cluster.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/chime-cluster.xml
@@ -18,7 +18,7 @@ limitations under the License.
XML generated by Alchemy; DO NOT EDIT.
Source: src/app_clusters/Chime.adoc
Parameters: in-progress
-Git: 0.9-fall2024-225-g1da0e33be
+Git: 0.9-fall2024-301-g4e2f0c1c4
-->
@@ -29,7 +29,7 @@ Git: 0.9-fall2024-225-g1da0e33be
-
+
Chime
0x0556
CHIME_CLUSTER
diff --git a/src/app/zap-templates/zcl/data-model/chip/commissioner-control-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/commissioner-control-cluster.xml
index abfd85dde2cd93..dcfb1dfa7096b8 100644
--- a/src/app/zap-templates/zcl/data-model/chip/commissioner-control-cluster.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/commissioner-control-cluster.xml
@@ -21,7 +21,7 @@ limitations under the License.
-
+
General
Commissioner Control
0x0751
diff --git a/src/app/zap-templates/zcl/data-model/chip/ecosystem-information-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/ecosystem-information-cluster.xml
index cf84a7e229aed6..73ae522365f410 100644
--- a/src/app/zap-templates/zcl/data-model/chip/ecosystem-information-cluster.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/ecosystem-information-cluster.xml
@@ -16,7 +16,7 @@ limitations under the License.
-->
-
+
diff --git a/src/app/zap-templates/zcl/data-model/chip/general-commissioning-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/general-commissioning-cluster.xml
index da813b60fef2e4..167f7d13e322af 100644
--- a/src/app/zap-templates/zcl/data-model/chip/general-commissioning-cluster.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/general-commissioning-cluster.xml
@@ -77,6 +77,10 @@ limitations under the License.
TCAcknowledgementsRequired
+
+ TCUpdateDeadline
+
+
Arm the persistent fail-safe timer with an expiry time of now + ExpiryLengthSeconds using device clock
diff --git a/src/app/zap-templates/zcl/data-model/chip/webrtc-requestor-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/webrtc-requestor-cluster.xml
new file mode 100644
index 00000000000000..557ebf8e7b3cba
--- /dev/null
+++ b/src/app/zap-templates/zcl/data-model/chip/webrtc-requestor-cluster.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+ Cameras
+ WebRTC Transport Requestor
+ 0x0554
+ WEBRTC_TRANSPORT_REQUESTOR_CLUSTER
+ The WebRTC transport requestor cluster provides a way for stream consumers (e.g. Matter Stream Viewer) to establish a WebRTC connection with a stream provider.
+ true
+ true
+
+ CurrentSessions
+
+ This command provides the stream requestor with WebRTC session details. It is sent following the receipt of a SolicitOffer command or a re-Offer initiated by the Provider.
+
+
+
+
+
+
+
+ This command provides the stream requestor with the WebRTC session details (i.e. Session ID and SDP answer). It is the next command in the Offer/Answer flow to the ProvideOffer command.
+
+
+
+
+
+ This command provides an ICE candidate to the stream requestor in a WebRTC session.
+
+
+
+
+
+ This command notifies the stream requestor that the provider has ended the WebRTC session.
+
+
+
+
+
+
diff --git a/src/app/zap-templates/zcl/zcl-with-test-extensions.json b/src/app/zap-templates/zcl/zcl-with-test-extensions.json
index e4c9a18e6c817b..61d46b64537a51 100644
--- a/src/app/zap-templates/zcl/zcl-with-test-extensions.json
+++ b/src/app/zap-templates/zcl/zcl-with-test-extensions.json
@@ -132,6 +132,7 @@
"water-heater-management-cluster.xml",
"water-heater-mode-cluster.xml",
"webrtc-provider-cluster.xml",
+ "webrtc-requestor-cluster.xml",
"wifi-network-diagnostics-cluster.xml",
"wifi-network-management-cluster.xml",
"window-covering.xml",
diff --git a/src/app/zap-templates/zcl/zcl.json b/src/app/zap-templates/zcl/zcl.json
index b306dba2239540..f4e04ef1f2c830 100644
--- a/src/app/zap-templates/zcl/zcl.json
+++ b/src/app/zap-templates/zcl/zcl.json
@@ -126,6 +126,7 @@
"water-heater-management-cluster.xml",
"water-heater-mode-cluster.xml",
"webrtc-provider-cluster.xml",
+ "webrtc-requestor-cluster.xml",
"wifi-network-diagnostics-cluster.xml",
"wifi-network-management-cluster.xml",
"window-covering.xml",
diff --git a/src/app/zap_cluster_list.json b/src/app/zap_cluster_list.json
index c240008e1c31c9..aab95321afc639 100644
--- a/src/app/zap_cluster_list.json
+++ b/src/app/zap_cluster_list.json
@@ -132,6 +132,7 @@
"WATER_HEATER_MANAGEMENT_CLUSTER": [],
"WATER_HEATER_MODE_CLUSTER": [],
"WEB_RTC_PROVIDER_CLUSTER": [],
+ "WEBRTC_REQUESTOR_CLUSTER": [],
"WIFI_NETWORK_DIAGNOSTICS_CLUSTER": [],
"WINDOW_COVERING_CLUSTER": []
},
@@ -312,6 +313,7 @@
"LAUNDRY_WASHER_CONTROLS_CLUSTER": ["laundry-washer-controls-server"],
"LAUNDRY_DRYER_CONTROLS_CLUSTER": ["laundry-dryer-controls-server"],
"WEB_RTC_PROVIDER_CLUSTER": [],
+ "WEBRTC_REQUESTOR_CLUSTER": [],
"WIFI_NETWORK_DIAGNOSTICS_CLUSTER": ["wifi-network-diagnostics-server"],
"WIFI_NETWORK_MANAGEMENT_CLUSTER": ["wifi-network-management-server"],
"WINDOW_COVERING_CLUSTER": ["window-covering-server"],
diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter
index 7f5d7fda8698e3..07b98b17953af9 100644
--- a/src/controller/data_model/controller-clusters.matter
+++ b/src/controller/data_model/controller-clusters.matter
@@ -1582,6 +1582,7 @@ cluster GeneralCommissioning = 48 {
provisional readonly attribute access(read: administer) optional int16u TCMinRequiredVersion = 6;
provisional readonly attribute access(read: administer) optional bitmap16 TCAcknowledgements = 7;
provisional readonly attribute access(read: administer) optional boolean TCAcknowledgementsRequired = 8;
+ provisional readonly attribute access(read: administer) optional int32u TCUpdateDeadline = 9;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute event_id eventList[] = 65530;
@@ -9530,6 +9531,93 @@ provisional cluster WebRTCTransportProvider = 1363 {
command EndSession(EndSessionRequest): DefaultSuccess = 7;
}
+/** The WebRTC transport requestor cluster provides a way for stream consumers (e.g. Matter Stream Viewer) to establish a WebRTC connection with a stream provider. */
+cluster WebRTCTransportRequestor = 1364 {
+ revision 1;
+
+ enum StreamTypeEnum : enum8 {
+ kInternal = 0;
+ kRecording = 1;
+ kAnalysis = 2;
+ kLiveView = 3;
+ }
+
+ enum WebRTCEndReasonEnum : enum8 {
+ kIceFailed = 0;
+ kIceTimeout = 1;
+ kUserHangup = 2;
+ kUserBusy = 3;
+ kReplaced = 4;
+ kNoUserMedia = 5;
+ kInviteTimeout = 6;
+ kAnsweredElsewhere = 7;
+ kOutOfResources = 8;
+ kMediaTimeout = 9;
+ kLowPower = 10;
+ kUnknownReason = 11;
+ }
+
+ bitmap WebRTCMetadataOptions : bitmap8 {
+ kDataTLV = 0x1;
+ }
+
+ struct ICEServerStruct {
+ char_string urls[] = 1;
+ optional char_string username = 2;
+ optional char_string credential = 3;
+ optional int16u caid = 4;
+ }
+
+ struct WebRTCSessionStruct {
+ int16u id = 1;
+ node_id peerNodeID = 2;
+ fabric_idx peerFabricIndex = 3;
+ StreamTypeEnum streamType = 4;
+ nullable int16u videoStreamID = 5;
+ nullable int16u audioStreamID = 6;
+ WebRTCMetadataOptions metadataOptions = 7;
+ }
+
+ readonly attribute WebRTCSessionStruct currentSessions[] = 0;
+ readonly attribute command_id generatedCommandList[] = 65528;
+ readonly attribute command_id acceptedCommandList[] = 65529;
+ readonly attribute event_id eventList[] = 65530;
+ readonly attribute attrib_id attributeList[] = 65531;
+ readonly attribute bitmap32 featureMap = 65532;
+ readonly attribute int16u clusterRevision = 65533;
+
+ request struct OfferRequest {
+ int16u webRTCSessionID = 0;
+ char_string sdp = 1;
+ optional ICEServerStruct ICEServers[] = 2;
+ optional char_string ICETransportPolicy = 3;
+ }
+
+ request struct AnswerRequest {
+ int16u webRTCSessionID = 0;
+ char_string sdp = 1;
+ }
+
+ request struct ICECandidateRequest {
+ int16u webRTCSessionID = 0;
+ char_string ICECandidate = 1;
+ }
+
+ request struct EndRequest {
+ int16u webRTCSessionID = 0;
+ WebRTCEndReasonEnum reason = 1;
+ }
+
+ /** This command provides the stream requestor with WebRTC session details. It is sent following the receipt of a SolicitOffer command or a re-Offer initiated by the Provider. */
+ command Offer(OfferRequest): DefaultSuccess = 1;
+ /** This command provides the stream requestor with the WebRTC session details (i.e. Session ID and SDP answer). It is the next command in the Offer/Answer flow to the ProvideOffer command. */
+ command Answer(AnswerRequest): DefaultSuccess = 2;
+ /** This command provides an ICE candidate to the stream requestor in a WebRTC session. */
+ command ICECandidate(ICECandidateRequest): DefaultSuccess = 3;
+ /** This command notifies the stream requestor that the provider has ended the WebRTC session. */
+ command End(EndRequest): DefaultSuccess = 4;
+}
+
/** This cluster provides facilities to configure and play Chime sounds, such as those used in a doorbell. */
provisional cluster Chime = 1366 {
revision 1;
@@ -9590,7 +9678,7 @@ provisional cluster EcosystemInformation = 1872 {
}
/** Supports the ability for clients to request the commissioning of themselves or other nodes onto a fabric which the cluster server can commission onto. */
-provisional cluster CommissionerControl = 1873 {
+cluster CommissionerControl = 1873 {
revision 1;
bitmap SupportedDeviceCategoryBitmap : bitmap32 {
diff --git a/src/controller/java/AndroidCallbacks-ForTestJNI.cpp b/src/controller/java/AndroidCallbacks-ForTestJNI.cpp
index 568e0ee8474c9a..1657aef819183c 100644
--- a/src/controller/java/AndroidCallbacks-ForTestJNI.cpp
+++ b/src/controller/java/AndroidCallbacks-ForTestJNI.cpp
@@ -43,7 +43,7 @@ JNI_METHOD(void, GetConnectedDeviceCallbackForTestJni, onDeviceConnected)
}
JNI_METHOD(void, GetConnectedDeviceCallbackForTestJni, onDeviceConnectionFailure)
-(JNIEnv * env, jobject self, jlong callbackHandle, jint errorCode)
+(JNIEnv * env, jobject self, jlong callbackHandle, jlong errorCode)
{
GetConnectedDeviceCallback * connectedDeviceCallback = reinterpret_cast(callbackHandle);
VerifyOrReturn(connectedDeviceCallback != nullptr, ChipLogError(Controller, "GetConnectedDeviceCallbackJni handle is nullptr"));
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java
index 88e4e0fb901447..4104a75abb3fa5 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java
@@ -7987,6 +7987,7 @@ public static class GeneralCommissioningCluster extends BaseChipCluster {
private static final long TC_MIN_REQUIRED_VERSION_ATTRIBUTE_ID = 6L;
private static final long TC_ACKNOWLEDGEMENTS_ATTRIBUTE_ID = 7L;
private static final long TC_ACKNOWLEDGEMENTS_REQUIRED_ATTRIBUTE_ID = 8L;
+ private static final long TC_UPDATE_DEADLINE_ATTRIBUTE_ID = 9L;
private static final long GENERATED_COMMAND_LIST_ATTRIBUTE_ID = 65528L;
private static final long ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID = 65529L;
private static final long EVENT_LIST_ATTRIBUTE_ID = 65530L;
@@ -8436,6 +8437,32 @@ public void onSuccess(byte[] tlv) {
}, TC_ACKNOWLEDGEMENTS_REQUIRED_ATTRIBUTE_ID, minInterval, maxInterval);
}
+ public void readTCUpdateDeadlineAttribute(
+ LongAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, TC_UPDATE_DEADLINE_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ Long value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, TC_UPDATE_DEADLINE_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeTCUpdateDeadlineAttribute(
+ LongAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, TC_UPDATE_DEADLINE_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ Long value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, TC_UPDATE_DEADLINE_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
public void readGeneratedCommandListAttribute(
GeneratedCommandListAttributeCallback callback) {
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, GENERATED_COMMAND_LIST_ATTRIBUTE_ID);
@@ -59938,6 +59965,334 @@ public void onSuccess(byte[] tlv) {
}
}
+ public static class WebRTCTransportRequestorCluster extends BaseChipCluster {
+ public static final long CLUSTER_ID = 1364L;
+
+ private static final long CURRENT_SESSIONS_ATTRIBUTE_ID = 0L;
+ private static final long GENERATED_COMMAND_LIST_ATTRIBUTE_ID = 65528L;
+ private static final long ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID = 65529L;
+ private static final long EVENT_LIST_ATTRIBUTE_ID = 65530L;
+ private static final long ATTRIBUTE_LIST_ATTRIBUTE_ID = 65531L;
+ private static final long FEATURE_MAP_ATTRIBUTE_ID = 65532L;
+ private static final long CLUSTER_REVISION_ATTRIBUTE_ID = 65533L;
+
+ public WebRTCTransportRequestorCluster(long devicePtr, int endpointId) {
+ super(devicePtr, endpointId, CLUSTER_ID);
+ }
+
+ @Override
+ @Deprecated
+ public long initWithDevice(long devicePtr, int endpointId) {
+ return 0L;
+ }
+
+ public void offer(DefaultClusterCallback callback, Integer webRTCSessionID, String sdp, Optional> ICEServers, Optional ICETransportPolicy) {
+ offer(callback, webRTCSessionID, sdp, ICEServers, ICETransportPolicy, 0);
+ }
+
+ public void offer(DefaultClusterCallback callback, Integer webRTCSessionID, String sdp, Optional> ICEServers, Optional ICETransportPolicy, int timedInvokeTimeoutMs) {
+ final long commandId = 1L;
+
+ ArrayList elements = new ArrayList<>();
+ final long webRTCSessionIDFieldID = 0L;
+ BaseTLVType webRTCSessionIDtlvValue = new UIntType(webRTCSessionID);
+ elements.add(new StructElement(webRTCSessionIDFieldID, webRTCSessionIDtlvValue));
+
+ final long sdpFieldID = 1L;
+ BaseTLVType sdptlvValue = new StringType(sdp);
+ elements.add(new StructElement(sdpFieldID, sdptlvValue));
+
+ final long ICEServersFieldID = 2L;
+ BaseTLVType ICEServerstlvValue = ICEServers.map((nonOptionalICEServers) -> ArrayType.generateArrayType(nonOptionalICEServers, (elementnonOptionalICEServers) -> elementnonOptionalICEServers.encodeTlv())).orElse(new EmptyType());
+ elements.add(new StructElement(ICEServersFieldID, ICEServerstlvValue));
+
+ final long ICETransportPolicyFieldID = 3L;
+ BaseTLVType ICETransportPolicytlvValue = ICETransportPolicy.map((nonOptionalICETransportPolicy) -> new StringType(nonOptionalICETransportPolicy)).orElse(new EmptyType());
+ elements.add(new StructElement(ICETransportPolicyFieldID, ICETransportPolicytlvValue));
+
+ StructType commandArgs = new StructType(elements);
+ invoke(new InvokeCallbackImpl(callback) {
+ @Override
+ public void onResponse(StructType invokeStructValue) {
+ callback.onSuccess();
+ }}, commandId, commandArgs, timedInvokeTimeoutMs);
+ }
+
+ public void answer(DefaultClusterCallback callback, Integer webRTCSessionID, String sdp) {
+ answer(callback, webRTCSessionID, sdp, 0);
+ }
+
+ public void answer(DefaultClusterCallback callback, Integer webRTCSessionID, String sdp, int timedInvokeTimeoutMs) {
+ final long commandId = 2L;
+
+ ArrayList elements = new ArrayList<>();
+ final long webRTCSessionIDFieldID = 0L;
+ BaseTLVType webRTCSessionIDtlvValue = new UIntType(webRTCSessionID);
+ elements.add(new StructElement(webRTCSessionIDFieldID, webRTCSessionIDtlvValue));
+
+ final long sdpFieldID = 1L;
+ BaseTLVType sdptlvValue = new StringType(sdp);
+ elements.add(new StructElement(sdpFieldID, sdptlvValue));
+
+ StructType commandArgs = new StructType(elements);
+ invoke(new InvokeCallbackImpl(callback) {
+ @Override
+ public void onResponse(StructType invokeStructValue) {
+ callback.onSuccess();
+ }}, commandId, commandArgs, timedInvokeTimeoutMs);
+ }
+
+ public void ICECandidate(DefaultClusterCallback callback, Integer webRTCSessionID, String ICECandidate) {
+ ICECandidate(callback, webRTCSessionID, ICECandidate, 0);
+ }
+
+ public void ICECandidate(DefaultClusterCallback callback, Integer webRTCSessionID, String ICECandidate, int timedInvokeTimeoutMs) {
+ final long commandId = 3L;
+
+ ArrayList elements = new ArrayList<>();
+ final long webRTCSessionIDFieldID = 0L;
+ BaseTLVType webRTCSessionIDtlvValue = new UIntType(webRTCSessionID);
+ elements.add(new StructElement(webRTCSessionIDFieldID, webRTCSessionIDtlvValue));
+
+ final long ICECandidateFieldID = 1L;
+ BaseTLVType ICECandidatetlvValue = new StringType(ICECandidate);
+ elements.add(new StructElement(ICECandidateFieldID, ICECandidatetlvValue));
+
+ StructType commandArgs = new StructType(elements);
+ invoke(new InvokeCallbackImpl(callback) {
+ @Override
+ public void onResponse(StructType invokeStructValue) {
+ callback.onSuccess();
+ }}, commandId, commandArgs, timedInvokeTimeoutMs);
+ }
+
+ public void end(DefaultClusterCallback callback, Integer webRTCSessionID, Integer reason) {
+ end(callback, webRTCSessionID, reason, 0);
+ }
+
+ public void end(DefaultClusterCallback callback, Integer webRTCSessionID, Integer reason, int timedInvokeTimeoutMs) {
+ final long commandId = 4L;
+
+ ArrayList elements = new ArrayList<>();
+ final long webRTCSessionIDFieldID = 0L;
+ BaseTLVType webRTCSessionIDtlvValue = new UIntType(webRTCSessionID);
+ elements.add(new StructElement(webRTCSessionIDFieldID, webRTCSessionIDtlvValue));
+
+ final long reasonFieldID = 1L;
+ BaseTLVType reasontlvValue = new UIntType(reason);
+ elements.add(new StructElement(reasonFieldID, reasontlvValue));
+
+ StructType commandArgs = new StructType(elements);
+ invoke(new InvokeCallbackImpl(callback) {
+ @Override
+ public void onResponse(StructType invokeStructValue) {
+ callback.onSuccess();
+ }}, commandId, commandArgs, timedInvokeTimeoutMs);
+ }
+
+ public interface CurrentSessionsAttributeCallback extends BaseAttributeCallback {
+ void onSuccess(List value);
+ }
+
+ public interface GeneratedCommandListAttributeCallback extends BaseAttributeCallback {
+ void onSuccess(List value);
+ }
+
+ public interface AcceptedCommandListAttributeCallback extends BaseAttributeCallback {
+ void onSuccess(List value);
+ }
+
+ public interface EventListAttributeCallback extends BaseAttributeCallback {
+ void onSuccess(List value);
+ }
+
+ public interface AttributeListAttributeCallback extends BaseAttributeCallback {
+ void onSuccess(List value);
+ }
+
+ public void readCurrentSessionsAttribute(
+ CurrentSessionsAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, CURRENT_SESSIONS_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, CURRENT_SESSIONS_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeCurrentSessionsAttribute(
+ CurrentSessionsAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, CURRENT_SESSIONS_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, CURRENT_SESSIONS_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readGeneratedCommandListAttribute(
+ GeneratedCommandListAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, GENERATED_COMMAND_LIST_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, GENERATED_COMMAND_LIST_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeGeneratedCommandListAttribute(
+ GeneratedCommandListAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, GENERATED_COMMAND_LIST_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, GENERATED_COMMAND_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readAcceptedCommandListAttribute(
+ AcceptedCommandListAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeAcceptedCommandListAttribute(
+ AcceptedCommandListAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readEventListAttribute(
+ EventListAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, EVENT_LIST_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, EVENT_LIST_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeEventListAttribute(
+ EventListAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, EVENT_LIST_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, EVENT_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readAttributeListAttribute(
+ AttributeListAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ATTRIBUTE_LIST_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, ATTRIBUTE_LIST_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeAttributeListAttribute(
+ AttributeListAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ATTRIBUTE_LIST_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ List value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, ATTRIBUTE_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readFeatureMapAttribute(
+ LongAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, FEATURE_MAP_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ Long value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, FEATURE_MAP_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeFeatureMapAttribute(
+ LongAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, FEATURE_MAP_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ Long value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, FEATURE_MAP_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+
+ public void readClusterRevisionAttribute(
+ IntegerAttributeCallback callback) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, CLUSTER_REVISION_ATTRIBUTE_ID);
+
+ readAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ Integer value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, CLUSTER_REVISION_ATTRIBUTE_ID, true);
+ }
+
+ public void subscribeClusterRevisionAttribute(
+ IntegerAttributeCallback callback, int minInterval, int maxInterval) {
+ ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, CLUSTER_REVISION_ATTRIBUTE_ID);
+
+ subscribeAttribute(new ReportCallbackImpl(callback, path) {
+ @Override
+ public void onSuccess(byte[] tlv) {
+ Integer value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
+ callback.onSuccess(value);
+ }
+ }, CLUSTER_REVISION_ATTRIBUTE_ID, minInterval, maxInterval);
+ }
+ }
+
public static class ChimeCluster extends BaseChipCluster {
public static final long CLUSTER_ID = 1366L;
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java b/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java
index 4c04d0ec0eb056..88684160d1ed81 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java
@@ -12951,6 +12951,233 @@ public String toString() {
return output.toString();
}
}
+public static class WebRTCTransportRequestorClusterICEServerStruct {
+ public ArrayList urls;
+ public Optional username;
+ public Optional credential;
+ public Optional caid;
+ private static final long URLS_ID = 1L;
+ private static final long USERNAME_ID = 2L;
+ private static final long CREDENTIAL_ID = 3L;
+ private static final long CAID_ID = 4L;
+
+ public WebRTCTransportRequestorClusterICEServerStruct(
+ ArrayList urls,
+ Optional username,
+ Optional credential,
+ Optional caid
+ ) {
+ this.urls = urls;
+ this.username = username;
+ this.credential = credential;
+ this.caid = caid;
+ }
+
+ public StructType encodeTlv() {
+ ArrayList values = new ArrayList<>();
+ values.add(new StructElement(URLS_ID, ArrayType.generateArrayType(urls, (elementurls) -> new StringType(elementurls))));
+ values.add(new StructElement(USERNAME_ID, username.map((nonOptionalusername) -> new StringType(nonOptionalusername)).orElse(new EmptyType())));
+ values.add(new StructElement(CREDENTIAL_ID, credential.map((nonOptionalcredential) -> new StringType(nonOptionalcredential)).orElse(new EmptyType())));
+ values.add(new StructElement(CAID_ID, caid.map((nonOptionalcaid) -> new UIntType(nonOptionalcaid)).orElse(new EmptyType())));
+
+ return new StructType(values);
+ }
+
+ public static WebRTCTransportRequestorClusterICEServerStruct decodeTlv(BaseTLVType tlvValue) {
+ if (tlvValue == null || tlvValue.type() != TLVType.Struct) {
+ return null;
+ }
+ ArrayList urls = null;
+ Optional username = Optional.empty();
+ Optional credential = Optional.empty();
+ Optional caid = Optional.empty();
+ for (StructElement element: ((StructType)tlvValue).value()) {
+ if (element.contextTagNum() == URLS_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.Array) {
+ ArrayType castingValue = element.value(ArrayType.class);
+ urls = castingValue.map((elementcastingValue) -> elementcastingValue.value(String.class));
+ }
+ } else if (element.contextTagNum() == USERNAME_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.String) {
+ StringType castingValue = element.value(StringType.class);
+ username = Optional.of(castingValue.value(String.class));
+ }
+ } else if (element.contextTagNum() == CREDENTIAL_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.String) {
+ StringType castingValue = element.value(StringType.class);
+ credential = Optional.of(castingValue.value(String.class));
+ }
+ } else if (element.contextTagNum() == CAID_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ caid = Optional.of(castingValue.value(Integer.class));
+ }
+ }
+ }
+ return new WebRTCTransportRequestorClusterICEServerStruct(
+ urls,
+ username,
+ credential,
+ caid
+ );
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder output = new StringBuilder();
+ output.append("WebRTCTransportRequestorClusterICEServerStruct {\n");
+ output.append("\turls: ");
+ output.append(urls);
+ output.append("\n");
+ output.append("\tusername: ");
+ output.append(username);
+ output.append("\n");
+ output.append("\tcredential: ");
+ output.append(credential);
+ output.append("\n");
+ output.append("\tcaid: ");
+ output.append(caid);
+ output.append("\n");
+ output.append("}\n");
+ return output.toString();
+ }
+}
+public static class WebRTCTransportRequestorClusterWebRTCSessionStruct {
+ public Integer id;
+ public Long peerNodeID;
+ public Integer peerFabricIndex;
+ public Integer streamType;
+ public @Nullable Integer videoStreamID;
+ public @Nullable Integer audioStreamID;
+ public Integer metadataOptions;
+ private static final long ID_ID = 1L;
+ private static final long PEER_NODE_ID_ID = 2L;
+ private static final long PEER_FABRIC_INDEX_ID = 3L;
+ private static final long STREAM_TYPE_ID = 4L;
+ private static final long VIDEO_STREAM_ID_ID = 5L;
+ private static final long AUDIO_STREAM_ID_ID = 6L;
+ private static final long METADATA_OPTIONS_ID = 7L;
+
+ public WebRTCTransportRequestorClusterWebRTCSessionStruct(
+ Integer id,
+ Long peerNodeID,
+ Integer peerFabricIndex,
+ Integer streamType,
+ @Nullable Integer videoStreamID,
+ @Nullable Integer audioStreamID,
+ Integer metadataOptions
+ ) {
+ this.id = id;
+ this.peerNodeID = peerNodeID;
+ this.peerFabricIndex = peerFabricIndex;
+ this.streamType = streamType;
+ this.videoStreamID = videoStreamID;
+ this.audioStreamID = audioStreamID;
+ this.metadataOptions = metadataOptions;
+ }
+
+ public StructType encodeTlv() {
+ ArrayList values = new ArrayList<>();
+ values.add(new StructElement(ID_ID, new UIntType(id)));
+ values.add(new StructElement(PEER_NODE_ID_ID, new UIntType(peerNodeID)));
+ values.add(new StructElement(PEER_FABRIC_INDEX_ID, new UIntType(peerFabricIndex)));
+ values.add(new StructElement(STREAM_TYPE_ID, new UIntType(streamType)));
+ values.add(new StructElement(VIDEO_STREAM_ID_ID, videoStreamID != null ? new UIntType(videoStreamID) : new NullType()));
+ values.add(new StructElement(AUDIO_STREAM_ID_ID, audioStreamID != null ? new UIntType(audioStreamID) : new NullType()));
+ values.add(new StructElement(METADATA_OPTIONS_ID, new UIntType(metadataOptions)));
+
+ return new StructType(values);
+ }
+
+ public static WebRTCTransportRequestorClusterWebRTCSessionStruct decodeTlv(BaseTLVType tlvValue) {
+ if (tlvValue == null || tlvValue.type() != TLVType.Struct) {
+ return null;
+ }
+ Integer id = null;
+ Long peerNodeID = null;
+ Integer peerFabricIndex = null;
+ Integer streamType = null;
+ @Nullable Integer videoStreamID = null;
+ @Nullable Integer audioStreamID = null;
+ Integer metadataOptions = null;
+ for (StructElement element: ((StructType)tlvValue).value()) {
+ if (element.contextTagNum() == ID_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ id = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == PEER_NODE_ID_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ peerNodeID = castingValue.value(Long.class);
+ }
+ } else if (element.contextTagNum() == PEER_FABRIC_INDEX_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ peerFabricIndex = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == STREAM_TYPE_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ streamType = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == VIDEO_STREAM_ID_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ videoStreamID = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == AUDIO_STREAM_ID_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ audioStreamID = castingValue.value(Integer.class);
+ }
+ } else if (element.contextTagNum() == METADATA_OPTIONS_ID) {
+ if (element.value(BaseTLVType.class).type() == TLVType.UInt) {
+ UIntType castingValue = element.value(UIntType.class);
+ metadataOptions = castingValue.value(Integer.class);
+ }
+ }
+ }
+ return new WebRTCTransportRequestorClusterWebRTCSessionStruct(
+ id,
+ peerNodeID,
+ peerFabricIndex,
+ streamType,
+ videoStreamID,
+ audioStreamID,
+ metadataOptions
+ );
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder output = new StringBuilder();
+ output.append("WebRTCTransportRequestorClusterWebRTCSessionStruct {\n");
+ output.append("\tid: ");
+ output.append(id);
+ output.append("\n");
+ output.append("\tpeerNodeID: ");
+ output.append(peerNodeID);
+ output.append("\n");
+ output.append("\tpeerFabricIndex: ");
+ output.append(peerFabricIndex);
+ output.append("\n");
+ output.append("\tstreamType: ");
+ output.append(streamType);
+ output.append("\n");
+ output.append("\tvideoStreamID: ");
+ output.append(videoStreamID);
+ output.append("\n");
+ output.append("\taudioStreamID: ");
+ output.append(audioStreamID);
+ output.append("\n");
+ output.append("\tmetadataOptions: ");
+ output.append(metadataOptions);
+ output.append("\n");
+ output.append("}\n");
+ return output.toString();
+ }
+}
public static class ChimeClusterChimeSoundStruct {
public Integer chimeID;
public String name;
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
index af30b0eb3453ca..28a415a3008fc1 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java
@@ -382,6 +382,9 @@ public static BaseCluster getCluster(long clusterId) {
if (clusterId == WebRTCTransportProvider.ID) {
return new WebRTCTransportProvider();
}
+ if (clusterId == WebRTCTransportRequestor.ID) {
+ return new WebRTCTransportRequestor();
+ }
if (clusterId == Chime.ID) {
return new Chime();
}
@@ -2872,6 +2875,7 @@ public enum Attribute {
TCMinRequiredVersion(6L),
TCAcknowledgements(7L),
TCAcknowledgementsRequired(8L),
+ TCUpdateDeadline(9L),
GeneratedCommandList(65528L),
AcceptedCommandList(65529L),
EventList(65530L),
@@ -17075,6 +17079,179 @@ public long getCommandID(String name) throws IllegalArgumentException {
return Command.valueOf(name).getID();
}
}
+ public static class WebRTCTransportRequestor implements BaseCluster {
+ public static final long ID = 1364L;
+ public long getID() {
+ return ID;
+ }
+
+ public enum Attribute {
+ CurrentSessions(0L),
+ GeneratedCommandList(65528L),
+ AcceptedCommandList(65529L),
+ EventList(65530L),
+ AttributeList(65531L),
+ FeatureMap(65532L),
+ ClusterRevision(65533L),;
+ private final long id;
+ Attribute(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Attribute value(long id) throws NoSuchFieldError {
+ for (Attribute attribute : Attribute.values()) {
+ if (attribute.getID() == id) {
+ return attribute;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }
+
+ public enum Event {;
+ private final long id;
+ Event(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Event value(long id) throws NoSuchFieldError {
+ for (Event event : Event.values()) {
+ if (event.getID() == id) {
+ return event;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }
+
+ public enum Command {
+ Offer(1L),
+ Answer(2L),
+ ICECandidate(3L),
+ End(4L),;
+ private final long id;
+ Command(long id) {
+ this.id = id;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public static Command value(long id) throws NoSuchFieldError {
+ for (Command command : Command.values()) {
+ if (command.getID() == id) {
+ return command;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }public enum OfferCommandField {WebRTCSessionID(0),Sdp(1),ICEServers(2),ICETransportPolicy(3),;
+ private final int id;
+ OfferCommandField(int id) {
+ this.id = id;
+ }
+
+ public int getID() {
+ return id;
+ }
+ public static OfferCommandField value(int id) throws NoSuchFieldError {
+ for (OfferCommandField field : OfferCommandField.values()) {
+ if (field.getID() == id) {
+ return field;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }public enum AnswerCommandField {WebRTCSessionID(0),Sdp(1),;
+ private final int id;
+ AnswerCommandField(int id) {
+ this.id = id;
+ }
+
+ public int getID() {
+ return id;
+ }
+ public static AnswerCommandField value(int id) throws NoSuchFieldError {
+ for (AnswerCommandField field : AnswerCommandField.values()) {
+ if (field.getID() == id) {
+ return field;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }public enum ICECandidateCommandField {WebRTCSessionID(0),ICECandidate(1),;
+ private final int id;
+ ICECandidateCommandField(int id) {
+ this.id = id;
+ }
+
+ public int getID() {
+ return id;
+ }
+ public static ICECandidateCommandField value(int id) throws NoSuchFieldError {
+ for (ICECandidateCommandField field : ICECandidateCommandField.values()) {
+ if (field.getID() == id) {
+ return field;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }public enum EndCommandField {WebRTCSessionID(0),Reason(1),;
+ private final int id;
+ EndCommandField(int id) {
+ this.id = id;
+ }
+
+ public int getID() {
+ return id;
+ }
+ public static EndCommandField value(int id) throws NoSuchFieldError {
+ for (EndCommandField field : EndCommandField.values()) {
+ if (field.getID() == id) {
+ return field;
+ }
+ }
+ throw new NoSuchFieldError();
+ }
+ }@Override
+ public String getAttributeName(long id) throws NoSuchFieldError {
+ return Attribute.value(id).toString();
+ }
+
+ @Override
+ public String getEventName(long id) throws NoSuchFieldError {
+ return Event.value(id).toString();
+ }
+
+ @Override
+ public String getCommandName(long id) throws NoSuchFieldError {
+ return Command.value(id).toString();
+ }
+
+ @Override
+ public long getAttributeID(String name) throws IllegalArgumentException {
+ return Attribute.valueOf(name).getID();
+ }
+
+ @Override
+ public long getEventID(String name) throws IllegalArgumentException {
+ return Event.valueOf(name).getID();
+ }
+
+ @Override
+ public long getCommandID(String name) throws IllegalArgumentException {
+ return Command.valueOf(name).getID();
+ }
+ }
public static class Chime implements BaseCluster {
public static final long ID = 1366L;
public long getID() {
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java
index 295ada1c577b89..27dda463b3b0f3 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java
@@ -20153,6 +20153,111 @@ public void onError(Exception ex) {
}
}
+ public static class DelegatedWebRTCTransportRequestorClusterCurrentSessionsAttributeCallback implements ChipClusters.WebRTCTransportRequestorCluster.CurrentSessionsAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+
+ public static class DelegatedWebRTCTransportRequestorClusterGeneratedCommandListAttributeCallback implements ChipClusters.WebRTCTransportRequestorCluster.GeneratedCommandListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+
+ public static class DelegatedWebRTCTransportRequestorClusterAcceptedCommandListAttributeCallback implements ChipClusters.WebRTCTransportRequestorCluster.AcceptedCommandListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+
+ public static class DelegatedWebRTCTransportRequestorClusterEventListAttributeCallback implements ChipClusters.WebRTCTransportRequestorCluster.EventListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+
+ public static class DelegatedWebRTCTransportRequestorClusterAttributeListAttributeCallback implements ChipClusters.WebRTCTransportRequestorCluster.AttributeListAttributeCallback, DelegatedClusterCallback {
+ private ClusterCommandCallback callback;
+ @Override
+ public void setCallbackDelegate(ClusterCommandCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onSuccess(List valueList) {
+ Map responseValues = new LinkedHashMap<>();
+ CommandResponseInfo commandResponseInfo = new CommandResponseInfo("valueList", "List");
+ responseValues.put(commandResponseInfo, valueList);
+ callback.onSuccess(responseValues);
+ }
+
+ @Override
+ public void onError(Exception ex) {
+ callback.onFailure(ex);
+ }
+ }
+
public static class DelegatedChimeClusterInstalledChimeSoundsAttributeCallback implements ChipClusters.ChimeCluster.InstalledChimeSoundsAttributeCallback, DelegatedClusterCallback {
private ClusterCommandCallback callback;
@Override
@@ -22598,6 +22703,10 @@ public Map initializeClusterMap() {
(ptr, endpointId) -> new ChipClusters.WebRTCTransportProviderCluster(ptr, endpointId), new HashMap<>());
clusterMap.put("webRTCTransportProvider", webRTCTransportProviderClusterInfo);
+ ClusterInfo webRTCTransportRequestorClusterInfo = new ClusterInfo(
+ (ptr, endpointId) -> new ChipClusters.WebRTCTransportRequestorCluster(ptr, endpointId), new HashMap<>());
+ clusterMap.put("webRTCTransportRequestor", webRTCTransportRequestorClusterInfo);
+
ClusterInfo chimeClusterInfo = new ClusterInfo(
(ptr, endpointId) -> new ChipClusters.ChimeCluster(ptr, endpointId), new HashMap<>());
clusterMap.put("chime", chimeClusterInfo);
@@ -22744,6 +22853,7 @@ public void combineCommand(Map destination, Map> getCommandMap() {
commandMap.put("webRTCTransportProvider", webRTCTransportProviderClusterInteractionInfoMap);
+ Map webRTCTransportRequestorClusterInteractionInfoMap = new LinkedHashMap<>();
+
+ Map webRTCTransportRequestorofferCommandParams = new LinkedHashMap();
+
+ CommandParameterInfo webRTCTransportRequestorofferwebRTCSessionIDCommandParameterInfo = new CommandParameterInfo("webRTCSessionID", Integer.class, Integer.class);
+ webRTCTransportRequestorofferCommandParams.put("webRTCSessionID",webRTCTransportRequestorofferwebRTCSessionIDCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportRequestoroffersdpCommandParameterInfo = new CommandParameterInfo("sdp", String.class, String.class);
+ webRTCTransportRequestorofferCommandParams.put("sdp",webRTCTransportRequestoroffersdpCommandParameterInfo);
+
+
+ CommandParameterInfo webRTCTransportRequestorofferICETransportPolicyCommandParameterInfo = new CommandParameterInfo("ICETransportPolicy", Optional.class, String.class);
+ webRTCTransportRequestorofferCommandParams.put("ICETransportPolicy",webRTCTransportRequestorofferICETransportPolicyCommandParameterInfo);
+ InteractionInfo webRTCTransportRequestorofferInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportRequestorCluster) cluster)
+ .offer((DefaultClusterCallback) callback
+ , (Integer)
+ commandArguments.get("webRTCSessionID")
+ , (String)
+ commandArguments.get("sdp")
+ , (Optional>)
+ commandArguments.get("ICEServers")
+ , (Optional)
+ commandArguments.get("ICETransportPolicy")
+ );
+ },
+ () -> new DelegatedDefaultClusterCallback(),
+ webRTCTransportRequestorofferCommandParams
+ );
+ webRTCTransportRequestorClusterInteractionInfoMap.put("offer", webRTCTransportRequestorofferInteractionInfo);
+
+ Map webRTCTransportRequestoranswerCommandParams = new LinkedHashMap();
+
+ CommandParameterInfo webRTCTransportRequestoranswerwebRTCSessionIDCommandParameterInfo = new CommandParameterInfo("webRTCSessionID", Integer.class, Integer.class);
+ webRTCTransportRequestoranswerCommandParams.put("webRTCSessionID",webRTCTransportRequestoranswerwebRTCSessionIDCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportRequestoranswersdpCommandParameterInfo = new CommandParameterInfo("sdp", String.class, String.class);
+ webRTCTransportRequestoranswerCommandParams.put("sdp",webRTCTransportRequestoranswersdpCommandParameterInfo);
+ InteractionInfo webRTCTransportRequestoranswerInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportRequestorCluster) cluster)
+ .answer((DefaultClusterCallback) callback
+ , (Integer)
+ commandArguments.get("webRTCSessionID")
+ , (String)
+ commandArguments.get("sdp")
+ );
+ },
+ () -> new DelegatedDefaultClusterCallback(),
+ webRTCTransportRequestoranswerCommandParams
+ );
+ webRTCTransportRequestorClusterInteractionInfoMap.put("answer", webRTCTransportRequestoranswerInteractionInfo);
+
+ Map webRTCTransportRequestorICECandidateCommandParams = new LinkedHashMap();
+
+ CommandParameterInfo webRTCTransportRequestorICECandidatewebRTCSessionIDCommandParameterInfo = new CommandParameterInfo("webRTCSessionID", Integer.class, Integer.class);
+ webRTCTransportRequestorICECandidateCommandParams.put("webRTCSessionID",webRTCTransportRequestorICECandidatewebRTCSessionIDCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportRequestorICECandidateICECandidateCommandParameterInfo = new CommandParameterInfo("ICECandidate", String.class, String.class);
+ webRTCTransportRequestorICECandidateCommandParams.put("ICECandidate",webRTCTransportRequestorICECandidateICECandidateCommandParameterInfo);
+ InteractionInfo webRTCTransportRequestorICECandidateInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportRequestorCluster) cluster)
+ .ICECandidate((DefaultClusterCallback) callback
+ , (Integer)
+ commandArguments.get("webRTCSessionID")
+ , (String)
+ commandArguments.get("ICECandidate")
+ );
+ },
+ () -> new DelegatedDefaultClusterCallback(),
+ webRTCTransportRequestorICECandidateCommandParams
+ );
+ webRTCTransportRequestorClusterInteractionInfoMap.put("ICECandidate", webRTCTransportRequestorICECandidateInteractionInfo);
+
+ Map webRTCTransportRequestorendCommandParams = new LinkedHashMap();
+
+ CommandParameterInfo webRTCTransportRequestorendwebRTCSessionIDCommandParameterInfo = new CommandParameterInfo("webRTCSessionID", Integer.class, Integer.class);
+ webRTCTransportRequestorendCommandParams.put("webRTCSessionID",webRTCTransportRequestorendwebRTCSessionIDCommandParameterInfo);
+
+ CommandParameterInfo webRTCTransportRequestorendreasonCommandParameterInfo = new CommandParameterInfo("reason", Integer.class, Integer.class);
+ webRTCTransportRequestorendCommandParams.put("reason",webRTCTransportRequestorendreasonCommandParameterInfo);
+ InteractionInfo webRTCTransportRequestorendInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportRequestorCluster) cluster)
+ .end((DefaultClusterCallback) callback
+ , (Integer)
+ commandArguments.get("webRTCSessionID")
+ , (Integer)
+ commandArguments.get("reason")
+ );
+ },
+ () -> new DelegatedDefaultClusterCallback(),
+ webRTCTransportRequestorendCommandParams
+ );
+ webRTCTransportRequestorClusterInteractionInfoMap.put("end", webRTCTransportRequestorendInteractionInfo);
+
+ commandMap.put("webRTCTransportRequestor", webRTCTransportRequestorClusterInteractionInfoMap);
+
Map chimeClusterInteractionInfoMap = new LinkedHashMap<>();
Map chimeplayChimeSoundCommandParams = new LinkedHashMap();
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
index 05036e0391bb0f..41df5ac5c85aff 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterReadMapping.java
@@ -2426,6 +2426,17 @@ private static Map readGeneralCommissioningInteractionI
readGeneralCommissioningTCAcknowledgementsRequiredCommandParams
);
result.put("readTCAcknowledgementsRequiredAttribute", readGeneralCommissioningTCAcknowledgementsRequiredAttributeInteractionInfo);
+ Map readGeneralCommissioningTCUpdateDeadlineCommandParams = new LinkedHashMap();
+ InteractionInfo readGeneralCommissioningTCUpdateDeadlineAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.GeneralCommissioningCluster) cluster).readTCUpdateDeadlineAttribute(
+ (ChipClusters.LongAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedLongAttributeCallback(),
+ readGeneralCommissioningTCUpdateDeadlineCommandParams
+ );
+ result.put("readTCUpdateDeadlineAttribute", readGeneralCommissioningTCUpdateDeadlineAttributeInteractionInfo);
Map readGeneralCommissioningGeneratedCommandListCommandParams = new LinkedHashMap();
InteractionInfo readGeneralCommissioningGeneratedCommandListAttributeInteractionInfo = new InteractionInfo(
(cluster, callback, commandArguments) -> {
@@ -18317,6 +18328,87 @@ private static Map readWebRTCTransportProviderInteracti
return result;
}
+ private static Map readWebRTCTransportRequestorInteractionInfo() {
+ Map result = new LinkedHashMap<>();Map readWebRTCTransportRequestorCurrentSessionsCommandParams = new LinkedHashMap();
+ InteractionInfo readWebRTCTransportRequestorCurrentSessionsAttributeInteractionInfo = new InteractionInfo(
+ (cluster, callback, commandArguments) -> {
+ ((ChipClusters.WebRTCTransportRequestorCluster) cluster).readCurrentSessionsAttribute(
+ (ChipClusters.WebRTCTransportRequestorCluster.CurrentSessionsAttributeCallback) callback
+ );
+ },
+ () -> new ClusterInfoMapping.DelegatedWebRTCTransportRequestorClusterCurrentSessionsAttributeCallback(),
+ readWebRTCTransportRequestorCurrentSessionsCommandParams
+ );
+ result.put("readCurrentSessionsAttribute", readWebRTCTransportRequestorCurrentSessionsAttributeInteractionInfo);
+ Map readWebRTCTransportRequestorGeneratedCommandListCommandParams = new LinkedHashMap